From 0c4091cd045e34fcba29c39fff44fc1e5cc8608b Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 26 Feb 2026 09:32:57 +0900 Subject: [PATCH] [FREETYPE][NTGDI] Update FreeType from 2.10.0 to 2.10.4 (#8671) Modernize modules. JIRA issue: CORE-17390 - Update FreeType to 2.10.4. - Delete ChangeLog. - Delete sdk/lib/3rdparty/freetype/src/gxvalid (useless for us). - Delete sdk/lib/3rdparty/freetype/src/otvalid (useless for us). - Keep ReactOS hacks on FreeType. - Adapt ntgdi/freetype.c to new FreeType. --- sdk/lib/3rdparty/freetype/CMakeLists.txt | 20 +- sdk/lib/3rdparty/freetype/ChangeLog | 4879 ----------------- sdk/lib/3rdparty/freetype/README | 31 +- sdk/lib/3rdparty/freetype/TechNote.txt | 18 +- .../{src/base => builds/windows}/ftdebug.c | 36 +- .../include/freetype/config/ftconfig.h | 532 +- .../include/freetype/config/ftheader.h | 64 +- .../include/freetype/config/ftmodule.h | 2 - .../include/freetype/config/ftoption.h | 32 +- .../include/freetype/config/ftstdlib.h | 2 +- .../include/freetype/config/integer-types.h | 245 + .../include/freetype/config/mac-support.h | 49 + .../include/freetype/config/public-macros.h | 120 + .../freetype/include/freetype/freetype.h | 95 +- .../freetype/include/freetype/ftadvanc.h | 6 +- .../freetype/include/freetype/ftbbox.h | 5 +- .../freetype/include/freetype/ftbdf.h | 5 +- .../freetype/include/freetype/ftbitmap.h | 7 +- .../freetype/include/freetype/ftbzip2.h | 24 +- .../freetype/include/freetype/ftcache.h | 5 +- .../freetype/include/freetype/ftcid.h | 5 +- .../freetype/include/freetype/ftcolor.h | 20 +- .../freetype/include/freetype/ftdriver.h | 11 +- .../freetype/include/freetype/fterrdef.h | 2 +- .../freetype/include/freetype/fterrors.h | 27 +- .../freetype/include/freetype/ftfntfmt.h | 5 +- .../freetype/include/freetype/ftgasp.h | 5 +- .../freetype/include/freetype/ftglyph.h | 7 +- .../freetype/include/freetype/ftgxval.h | 5 +- .../freetype/include/freetype/ftgzip.h | 24 +- .../freetype/include/freetype/ftimage.h | 55 +- .../freetype/include/freetype/ftincrem.h | 7 +- .../freetype/include/freetype/ftlcdfil.h | 34 +- .../freetype/include/freetype/ftlist.h | 5 +- .../freetype/include/freetype/ftlzw.h | 24 +- .../freetype/include/freetype/ftmac.h | 3 +- .../3rdparty/freetype/include/freetype/ftmm.h | 5 +- .../freetype/include/freetype/ftmodapi.h | 11 +- .../freetype/include/freetype/ftmoderr.h | 4 +- .../freetype/include/freetype/ftotval.h | 5 +- .../freetype/include/freetype/ftoutln.h | 21 +- .../freetype/include/freetype/ftparams.h | 5 +- .../freetype/include/freetype/ftpfr.h | 5 +- .../freetype/include/freetype/ftrender.h | 7 +- .../freetype/include/freetype/ftsizes.h | 5 +- .../freetype/include/freetype/ftsnames.h | 7 +- .../freetype/include/freetype/ftstroke.h | 43 +- .../freetype/include/freetype/ftsynth.h | 5 +- .../freetype/include/freetype/ftsystem.h | 3 +- .../freetype/include/freetype/fttrigon.h | 4 +- .../freetype/include/freetype/fttypes.h | 6 +- .../freetype/include/freetype/ftwinfnt.h | 7 +- .../include/freetype/internal/autohint.h | 8 +- .../include/freetype/internal/cffotypes.h | 13 +- .../include/freetype/internal/cfftypes.h | 15 +- .../freetype/internal/compiler-macros.h | 307 ++ .../include/freetype/internal/ftcalc.h | 11 +- .../include/freetype/internal/ftdebug.h | 9 +- .../include/freetype/internal/ftdrv.h | 6 +- .../include/freetype/internal/ftgloadr.h | 7 +- .../include/freetype/internal/fthash.h | 3 +- .../include/freetype/internal/ftmemory.h | 23 +- .../include/freetype/internal/ftobjs.h | 39 +- .../include/freetype/internal/ftpsprop.h | 5 +- .../include/freetype/internal/ftrfork.h | 5 +- .../include/freetype/internal/ftserv.h | 30 +- .../include/freetype/internal/ftstream.h | 17 +- .../include/freetype/internal/fttrace.h | 4 +- .../include/freetype/internal/ftvalid.h | 5 +- .../include/freetype/internal/internal.h | 66 - .../include/freetype/internal/psaux.h | 25 +- .../include/freetype/internal/pshints.h | 7 +- .../freetype/internal/services/svbdf.h | 6 +- .../freetype/internal/services/svcfftl.h | 6 +- .../freetype/internal/services/svcid.h | 4 +- .../freetype/internal/services/svfntfmt.h | 4 +- .../freetype/internal/services/svgldict.h | 8 +- .../freetype/internal/services/svgxval.h | 6 +- .../freetype/internal/services/svkern.h | 6 +- .../freetype/internal/services/svmetric.h | 4 +- .../include/freetype/internal/services/svmm.h | 4 +- .../freetype/internal/services/svotval.h | 6 +- .../freetype/internal/services/svpfr.h | 7 +- .../freetype/internal/services/svpostnm.h | 4 +- .../freetype/internal/services/svprop.h | 2 +- .../freetype/internal/services/svpscmap.h | 4 +- .../freetype/internal/services/svpsinfo.h | 6 +- .../freetype/internal/services/svsfnt.h | 6 +- .../freetype/internal/services/svttcmap.h | 6 +- .../freetype/internal/services/svtteng.h | 6 +- .../freetype/internal/services/svttglyf.h | 6 +- .../freetype/internal/services/svwinfnt.h | 6 +- .../freetype/include/freetype/internal/sfnt.h | 8 +- .../include/freetype/internal/t1types.h | 17 +- .../include/freetype/internal/tttypes.h | 94 +- .../include/freetype/internal/wofftypes.h | 312 ++ .../freetype/include/freetype/t1tables.h | 5 +- .../freetype/include/freetype/ttnameid.h | 3 +- .../freetype/include/freetype/tttables.h | 5 +- .../freetype/include/freetype/tttags.h | 6 +- sdk/lib/3rdparty/freetype/include/ft2build.h | 10 +- .../3rdparty/freetype/src/autofit/afangles.c | 2 +- .../3rdparty/freetype/src/autofit/afblue.c | 72 +- .../3rdparty/freetype/src/autofit/afblue.cin | 2 +- .../3rdparty/freetype/src/autofit/afblue.dat | 89 +- .../3rdparty/freetype/src/autofit/afblue.h | 161 +- .../3rdparty/freetype/src/autofit/afblue.hin | 2 +- sdk/lib/3rdparty/freetype/src/autofit/afcjk.c | 30 +- sdk/lib/3rdparty/freetype/src/autofit/afcjk.h | 2 +- .../3rdparty/freetype/src/autofit/afcover.h | 2 +- .../3rdparty/freetype/src/autofit/afdummy.c | 2 +- .../3rdparty/freetype/src/autofit/afdummy.h | 2 +- .../3rdparty/freetype/src/autofit/aferrors.h | 6 +- .../3rdparty/freetype/src/autofit/afglobal.c | 17 +- .../3rdparty/freetype/src/autofit/afglobal.h | 2 +- .../3rdparty/freetype/src/autofit/afhints.c | 6 +- .../3rdparty/freetype/src/autofit/afhints.h | 2 +- .../3rdparty/freetype/src/autofit/afindic.c | 2 +- .../3rdparty/freetype/src/autofit/afindic.h | 2 +- .../3rdparty/freetype/src/autofit/aflatin.c | 121 +- .../3rdparty/freetype/src/autofit/aflatin.h | 2 +- .../3rdparty/freetype/src/autofit/aflatin2.c | 5 +- .../3rdparty/freetype/src/autofit/aflatin2.h | 2 +- .../3rdparty/freetype/src/autofit/afloader.c | 4 +- .../3rdparty/freetype/src/autofit/afloader.h | 2 +- .../3rdparty/freetype/src/autofit/afmodule.c | 16 +- .../3rdparty/freetype/src/autofit/afmodule.h | 8 +- .../3rdparty/freetype/src/autofit/afranges.c | 41 +- .../3rdparty/freetype/src/autofit/afranges.h | 2 +- .../3rdparty/freetype/src/autofit/afscript.h | 20 +- .../3rdparty/freetype/src/autofit/afshaper.c | 7 +- .../3rdparty/freetype/src/autofit/afshaper.h | 5 +- .../3rdparty/freetype/src/autofit/afstyles.h | 23 +- .../3rdparty/freetype/src/autofit/aftypes.h | 11 +- .../3rdparty/freetype/src/autofit/afwarp.c | 2 +- .../3rdparty/freetype/src/autofit/afwarp.h | 2 +- .../3rdparty/freetype/src/autofit/afwrtsys.h | 2 +- .../3rdparty/freetype/src/autofit/autofit.c | 3 +- sdk/lib/3rdparty/freetype/src/base/ftadvanc.c | 9 +- sdk/lib/3rdparty/freetype/src/base/ftbase.c | 3 +- sdk/lib/3rdparty/freetype/src/base/ftbase.h | 9 +- sdk/lib/3rdparty/freetype/src/base/ftbbox.c | 35 +- sdk/lib/3rdparty/freetype/src/base/ftbdf.c | 9 +- sdk/lib/3rdparty/freetype/src/base/ftbitmap.c | 31 +- sdk/lib/3rdparty/freetype/src/base/ftcalc.c | 13 +- sdk/lib/3rdparty/freetype/src/base/ftcid.c | 9 +- sdk/lib/3rdparty/freetype/src/base/ftcolor.c | 11 +- sdk/lib/3rdparty/freetype/src/base/ftdbgmem.c | 18 +- sdk/lib/3rdparty/freetype/src/base/fterrors.c | 8 +- sdk/lib/3rdparty/freetype/src/base/ftfntfmt.c | 9 +- sdk/lib/3rdparty/freetype/src/base/ftfstype.c | 11 +- sdk/lib/3rdparty/freetype/src/base/ftgasp.c | 7 +- sdk/lib/3rdparty/freetype/src/base/ftgloadr.c | 32 +- sdk/lib/3rdparty/freetype/src/base/ftglyph.c | 15 +- sdk/lib/3rdparty/freetype/src/base/ftgxval.c | 9 +- sdk/lib/3rdparty/freetype/src/base/fthash.c | 5 +- sdk/lib/3rdparty/freetype/src/base/ftinit.c | 11 +- sdk/lib/3rdparty/freetype/src/base/ftlcdfil.c | 27 +- sdk/lib/3rdparty/freetype/src/base/ftmac.c | 9 +- sdk/lib/3rdparty/freetype/src/base/ftmm.c | 13 +- sdk/lib/3rdparty/freetype/src/base/ftobjs.c | 118 +- sdk/lib/3rdparty/freetype/src/base/ftotval.c | 11 +- sdk/lib/3rdparty/freetype/src/base/ftoutln.c | 35 +- sdk/lib/3rdparty/freetype/src/base/ftpatent.c | 15 +- sdk/lib/3rdparty/freetype/src/base/ftpfr.c | 9 +- sdk/lib/3rdparty/freetype/src/base/ftpsprop.c | 17 +- sdk/lib/3rdparty/freetype/src/base/ftrfork.c | 15 +- sdk/lib/3rdparty/freetype/src/base/ftsnames.c | 11 +- sdk/lib/3rdparty/freetype/src/base/ftstream.c | 9 +- sdk/lib/3rdparty/freetype/src/base/ftstroke.c | 288 +- sdk/lib/3rdparty/freetype/src/base/ftsynth.c | 15 +- sdk/lib/3rdparty/freetype/src/base/ftsystem.c | 12 +- sdk/lib/3rdparty/freetype/src/base/fttrigon.c | 9 +- sdk/lib/3rdparty/freetype/src/base/fttype1.c | 11 +- sdk/lib/3rdparty/freetype/src/base/ftutil.c | 11 +- sdk/lib/3rdparty/freetype/src/base/ftwinfnt.c | 11 +- sdk/lib/3rdparty/freetype/src/bdf/bdf.c | 1 - sdk/lib/3rdparty/freetype/src/bdf/bdf.h | 13 +- sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.c | 74 +- sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.h | 3 +- sdk/lib/3rdparty/freetype/src/bdf/bdferror.h | 4 +- sdk/lib/3rdparty/freetype/src/bdf/bdflib.c | 228 +- sdk/lib/3rdparty/freetype/src/bzip2/ftbzip2.c | 15 +- sdk/lib/3rdparty/freetype/src/cache/ftcache.c | 3 +- .../3rdparty/freetype/src/cache/ftcbasic.c | 17 +- .../3rdparty/freetype/src/cache/ftccache.c | 7 +- .../3rdparty/freetype/src/cache/ftccache.h | 4 +- .../3rdparty/freetype/src/cache/ftccback.h | 7 +- sdk/lib/3rdparty/freetype/src/cache/ftccmap.c | 13 +- .../3rdparty/freetype/src/cache/ftcerror.h | 6 +- .../3rdparty/freetype/src/cache/ftcglyph.c | 9 +- .../3rdparty/freetype/src/cache/ftcglyph.h | 3 +- .../3rdparty/freetype/src/cache/ftcimage.c | 9 +- .../3rdparty/freetype/src/cache/ftcimage.h | 5 +- .../3rdparty/freetype/src/cache/ftcmanag.c | 11 +- .../3rdparty/freetype/src/cache/ftcmanag.h | 5 +- sdk/lib/3rdparty/freetype/src/cache/ftcmru.c | 9 +- sdk/lib/3rdparty/freetype/src/cache/ftcmru.h | 6 +- .../3rdparty/freetype/src/cache/ftcsbits.c | 11 +- .../3rdparty/freetype/src/cache/ftcsbits.h | 5 +- sdk/lib/3rdparty/freetype/src/cff/cff.c | 3 +- sdk/lib/3rdparty/freetype/src/cff/cffcmap.c | 5 +- sdk/lib/3rdparty/freetype/src/cff/cffcmap.h | 8 +- sdk/lib/3rdparty/freetype/src/cff/cffdrivr.c | 43 +- sdk/lib/3rdparty/freetype/src/cff/cffdrivr.h | 5 +- sdk/lib/3rdparty/freetype/src/cff/cfferrs.h | 6 +- sdk/lib/3rdparty/freetype/src/cff/cffgload.c | 27 +- sdk/lib/3rdparty/freetype/src/cff/cffgload.h | 7 +- sdk/lib/3rdparty/freetype/src/cff/cffload.c | 62 +- sdk/lib/3rdparty/freetype/src/cff/cffload.h | 7 +- sdk/lib/3rdparty/freetype/src/cff/cffobjs.c | 109 +- sdk/lib/3rdparty/freetype/src/cff/cffobjs.h | 3 +- sdk/lib/3rdparty/freetype/src/cff/cffparse.c | 176 +- sdk/lib/3rdparty/freetype/src/cff/cffparse.h | 20 +- sdk/lib/3rdparty/freetype/src/cff/cfftoken.h | 2 +- sdk/lib/3rdparty/freetype/src/cid/ciderrs.h | 6 +- sdk/lib/3rdparty/freetype/src/cid/cidgload.c | 17 +- sdk/lib/3rdparty/freetype/src/cid/cidgload.h | 3 +- sdk/lib/3rdparty/freetype/src/cid/cidload.c | 20 +- sdk/lib/3rdparty/freetype/src/cid/cidload.h | 5 +- sdk/lib/3rdparty/freetype/src/cid/cidobjs.c | 18 +- sdk/lib/3rdparty/freetype/src/cid/cidobjs.h | 6 +- sdk/lib/3rdparty/freetype/src/cid/cidparse.c | 9 +- sdk/lib/3rdparty/freetype/src/cid/cidparse.h | 9 +- sdk/lib/3rdparty/freetype/src/cid/cidriver.c | 21 +- sdk/lib/3rdparty/freetype/src/cid/cidriver.h | 5 +- sdk/lib/3rdparty/freetype/src/cid/cidtoken.h | 2 +- sdk/lib/3rdparty/freetype/src/cid/type1cid.c | 3 +- sdk/lib/3rdparty/freetype/src/gxvalid/README | 532 -- .../3rdparty/freetype/src/gxvalid/gxvalid.c | 47 - .../3rdparty/freetype/src/gxvalid/gxvalid.h | 108 - .../3rdparty/freetype/src/gxvalid/gxvbsln.c | 334 -- .../3rdparty/freetype/src/gxvalid/gxvcommn.c | 1746 ------ .../3rdparty/freetype/src/gxvalid/gxvcommn.h | 582 -- .../3rdparty/freetype/src/gxvalid/gxverror.h | 51 - .../3rdparty/freetype/src/gxvalid/gxvfeat.c | 339 -- .../3rdparty/freetype/src/gxvalid/gxvfeat.h | 173 - .../3rdparty/freetype/src/gxvalid/gxvfgen.c | 483 -- .../3rdparty/freetype/src/gxvalid/gxvjust.c | 721 --- .../3rdparty/freetype/src/gxvalid/gxvkern.c | 920 ---- .../3rdparty/freetype/src/gxvalid/gxvlcar.c | 224 - .../3rdparty/freetype/src/gxvalid/gxvmod.c | 285 - .../3rdparty/freetype/src/gxvalid/gxvmod.h | 47 - .../3rdparty/freetype/src/gxvalid/gxvmort.c | 301 - .../3rdparty/freetype/src/gxvalid/gxvmort.h | 94 - .../3rdparty/freetype/src/gxvalid/gxvmort0.c | 152 - .../3rdparty/freetype/src/gxvalid/gxvmort1.c | 260 - .../3rdparty/freetype/src/gxvalid/gxvmort2.c | 312 -- .../3rdparty/freetype/src/gxvalid/gxvmort4.c | 126 - .../3rdparty/freetype/src/gxvalid/gxvmort5.c | 234 - .../3rdparty/freetype/src/gxvalid/gxvmorx.c | 199 - .../3rdparty/freetype/src/gxvalid/gxvmorx.h | 68 - .../3rdparty/freetype/src/gxvalid/gxvmorx0.c | 112 - .../3rdparty/freetype/src/gxvalid/gxvmorx1.c | 278 - .../3rdparty/freetype/src/gxvalid/gxvmorx2.c | 331 -- .../3rdparty/freetype/src/gxvalid/gxvmorx4.c | 56 - .../3rdparty/freetype/src/gxvalid/gxvmorx5.c | 226 - .../3rdparty/freetype/src/gxvalid/gxvopbd.c | 218 - .../3rdparty/freetype/src/gxvalid/gxvprop.c | 330 -- .../3rdparty/freetype/src/gxvalid/gxvtrak.c | 288 - sdk/lib/3rdparty/freetype/src/gzip/ftgzip.c | 25 +- sdk/lib/3rdparty/freetype/src/gzip/infblock.c | 5 + sdk/lib/3rdparty/freetype/src/gzip/infcodes.c | 4 + sdk/lib/3rdparty/freetype/src/gzip/inflate.c | 10 + sdk/lib/3rdparty/freetype/src/gzip/infutil.h | 2 +- sdk/lib/3rdparty/freetype/src/lzw/ftlzw.c | 15 +- sdk/lib/3rdparty/freetype/src/lzw/ftzopen.c | 8 +- sdk/lib/3rdparty/freetype/src/lzw/ftzopen.h | 8 +- .../3rdparty/freetype/src/otvalid/otvalid.c | 32 - .../3rdparty/freetype/src/otvalid/otvalid.h | 78 - .../3rdparty/freetype/src/otvalid/otvbase.c | 345 -- .../3rdparty/freetype/src/otvalid/otvcommn.c | 1096 ---- .../3rdparty/freetype/src/otvalid/otvcommn.h | 467 -- .../3rdparty/freetype/src/otvalid/otverror.h | 42 - .../3rdparty/freetype/src/otvalid/otvgdef.c | 303 - .../3rdparty/freetype/src/otvalid/otvgpos.c | 1051 ---- .../3rdparty/freetype/src/otvalid/otvgsub.c | 617 --- .../3rdparty/freetype/src/otvalid/otvjstf.c | 259 - .../3rdparty/freetype/src/otvalid/otvmath.c | 453 -- .../3rdparty/freetype/src/otvalid/otvmod.c | 282 - sdk/lib/3rdparty/freetype/src/pcf/pcf.c | 1 - sdk/lib/3rdparty/freetype/src/pcf/pcf.h | 8 +- sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.c | 46 +- sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.h | 3 +- sdk/lib/3rdparty/freetype/src/pcf/pcferror.h | 4 +- sdk/lib/3rdparty/freetype/src/pcf/pcfread.c | 207 +- sdk/lib/3rdparty/freetype/src/pcf/pcfread.h | 1 - sdk/lib/3rdparty/freetype/src/pcf/pcfutil.c | 1 - sdk/lib/3rdparty/freetype/src/pcf/pcfutil.h | 2 +- sdk/lib/3rdparty/freetype/src/pfr/pfr.c | 3 +- sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.c | 5 +- sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.h | 5 +- sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.c | 11 +- sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.h | 5 +- sdk/lib/3rdparty/freetype/src/pfr/pfrerror.h | 6 +- sdk/lib/3rdparty/freetype/src/pfr/pfrgload.c | 8 +- sdk/lib/3rdparty/freetype/src/pfr/pfrgload.h | 2 +- sdk/lib/3rdparty/freetype/src/pfr/pfrload.c | 6 +- sdk/lib/3rdparty/freetype/src/pfr/pfrload.h | 4 +- sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.c | 12 +- sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.h | 2 +- sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.c | 8 +- sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.h | 2 +- sdk/lib/3rdparty/freetype/src/pfr/pfrtypes.h | 5 +- .../3rdparty/freetype/src/psaux/afmparse.c | 12 +- .../3rdparty/freetype/src/psaux/afmparse.h | 5 +- .../3rdparty/freetype/src/psaux/cffdecode.c | 16 +- .../3rdparty/freetype/src/psaux/cffdecode.h | 5 +- sdk/lib/3rdparty/freetype/src/psaux/psarrst.c | 2 +- sdk/lib/3rdparty/freetype/src/psaux/psaux.c | 3 +- .../3rdparty/freetype/src/psaux/psauxerr.h | 6 +- .../3rdparty/freetype/src/psaux/psauxmod.c | 11 +- .../3rdparty/freetype/src/psaux/psauxmod.h | 21 +- sdk/lib/3rdparty/freetype/src/psaux/psblues.c | 2 +- sdk/lib/3rdparty/freetype/src/psaux/psconv.c | 7 +- sdk/lib/3rdparty/freetype/src/psaux/psconv.h | 5 +- sdk/lib/3rdparty/freetype/src/psaux/pserror.h | 5 +- sdk/lib/3rdparty/freetype/src/psaux/psfixed.h | 3 +- sdk/lib/3rdparty/freetype/src/psaux/psfont.c | 9 +- sdk/lib/3rdparty/freetype/src/psaux/psfont.h | 2 +- sdk/lib/3rdparty/freetype/src/psaux/psft.c | 16 +- sdk/lib/3rdparty/freetype/src/psaux/psft.h | 6 +- sdk/lib/3rdparty/freetype/src/psaux/pshints.c | 4 +- sdk/lib/3rdparty/freetype/src/psaux/psintrp.c | 28 +- sdk/lib/3rdparty/freetype/src/psaux/psobjs.c | 27 +- sdk/lib/3rdparty/freetype/src/psaux/psobjs.h | 15 +- sdk/lib/3rdparty/freetype/src/psaux/psread.c | 2 +- sdk/lib/3rdparty/freetype/src/psaux/psstack.c | 14 +- sdk/lib/3rdparty/freetype/src/psaux/psstack.h | 1 + sdk/lib/3rdparty/freetype/src/psaux/pstypes.h | 3 +- sdk/lib/3rdparty/freetype/src/psaux/t1cmap.c | 4 +- sdk/lib/3rdparty/freetype/src/psaux/t1cmap.h | 7 +- .../3rdparty/freetype/src/psaux/t1decode.c | 215 +- .../3rdparty/freetype/src/psaux/t1decode.h | 7 +- .../3rdparty/freetype/src/pshinter/pshalgo.c | 9 +- .../3rdparty/freetype/src/pshinter/pshalgo.h | 2 +- .../3rdparty/freetype/src/pshinter/pshglob.c | 9 +- .../3rdparty/freetype/src/pshinter/pshglob.h | 6 +- .../3rdparty/freetype/src/pshinter/pshinter.c | 3 +- .../3rdparty/freetype/src/pshinter/pshmod.c | 6 +- .../3rdparty/freetype/src/pshinter/pshmod.h | 5 +- .../3rdparty/freetype/src/pshinter/pshnterr.h | 6 +- .../3rdparty/freetype/src/pshinter/pshrec.c | 13 +- .../3rdparty/freetype/src/pshinter/pshrec.h | 5 +- .../3rdparty/freetype/src/psnames/psmodule.c | 9 +- .../3rdparty/freetype/src/psnames/psmodule.h | 5 +- .../3rdparty/freetype/src/psnames/psnamerr.h | 6 +- .../3rdparty/freetype/src/psnames/psnames.c | 3 +- .../3rdparty/freetype/src/psnames/pstables.h | 2 +- sdk/lib/3rdparty/freetype/src/raster/ftmisc.h | 2 +- .../3rdparty/freetype/src/raster/ftraster.c | 199 +- .../3rdparty/freetype/src/raster/ftraster.h | 5 +- .../3rdparty/freetype/src/raster/ftrend1.c | 9 +- .../3rdparty/freetype/src/raster/ftrend1.h | 5 +- sdk/lib/3rdparty/freetype/src/raster/raster.c | 3 +- .../3rdparty/freetype/src/raster/rasterrs.h | 6 +- sdk/lib/3rdparty/freetype/src/sfnt/pngshim.c | 31 +- sdk/lib/3rdparty/freetype/src/sfnt/pngshim.h | 3 +- sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.c | 45 +- sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.h | 5 +- sdk/lib/3rdparty/freetype/src/sfnt/sferrors.h | 6 +- sdk/lib/3rdparty/freetype/src/sfnt/sfnt.c | 6 +- sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.c | 460 +- sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.h | 9 +- sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.c | 437 ++ .../src/{otvalid/otvmod.h => sfnt/sfwoff.h} | 21 +- sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.c | 2337 ++++++++ sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.h | 75 + sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.c | 9 +- sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.h | 5 +- sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.c | 47 +- sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.h | 14 +- sdk/lib/3rdparty/freetype/src/sfnt/ttcmapc.h | 2 +- sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.c | 17 +- sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.h | 3 +- sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.c | 23 +- sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.h | 3 +- sdk/lib/3rdparty/freetype/src/sfnt/ttkern.c | 9 +- sdk/lib/3rdparty/freetype/src/sfnt/ttkern.h | 7 +- sdk/lib/3rdparty/freetype/src/sfnt/ttload.c | 27 +- sdk/lib/3rdparty/freetype/src/sfnt/ttload.h | 7 +- sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.c | 17 +- sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.h | 7 +- sdk/lib/3rdparty/freetype/src/sfnt/ttpost.c | 13 +- sdk/lib/3rdparty/freetype/src/sfnt/ttpost.h | 4 +- sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.c | 14 +- sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.h | 3 +- .../3rdparty/freetype/src/sfnt/woff2tags.c | 109 + .../{otvalid/otvgpos.h => sfnt/woff2tags.h} | 23 +- .../3rdparty/freetype/src/smooth/ftgrays.c | 316 +- .../3rdparty/freetype/src/smooth/ftgrays.h | 4 +- .../3rdparty/freetype/src/smooth/ftsmerrs.h | 6 +- .../3rdparty/freetype/src/smooth/ftsmooth.c | 712 +-- .../3rdparty/freetype/src/smooth/ftsmooth.h | 9 +- sdk/lib/3rdparty/freetype/src/smooth/smooth.c | 3 +- .../3rdparty/freetype/src/truetype/truetype.c | 3 +- .../3rdparty/freetype/src/truetype/ttdriver.c | 25 +- .../3rdparty/freetype/src/truetype/ttdriver.h | 5 +- .../3rdparty/freetype/src/truetype/tterrors.h | 6 +- .../3rdparty/freetype/src/truetype/ttgload.c | 206 +- .../3rdparty/freetype/src/truetype/ttgload.h | 3 +- .../3rdparty/freetype/src/truetype/ttgxvar.c | 243 +- .../3rdparty/freetype/src/truetype/ttgxvar.h | 4 +- .../3rdparty/freetype/src/truetype/ttinterp.c | 906 ++- .../3rdparty/freetype/src/truetype/ttinterp.h | 5 +- .../3rdparty/freetype/src/truetype/ttobjs.c | 58 +- .../3rdparty/freetype/src/truetype/ttobjs.h | 7 +- .../3rdparty/freetype/src/truetype/ttpload.c | 35 +- .../3rdparty/freetype/src/truetype/ttpload.h | 5 +- .../3rdparty/freetype/src/truetype/ttsubpix.c | 17 +- .../3rdparty/freetype/src/truetype/ttsubpix.h | 3 +- sdk/lib/3rdparty/freetype/src/type1/t1afm.c | 9 +- sdk/lib/3rdparty/freetype/src/type1/t1afm.h | 5 +- .../3rdparty/freetype/src/type1/t1driver.c | 33 +- .../3rdparty/freetype/src/type1/t1driver.h | 5 +- .../3rdparty/freetype/src/type1/t1errors.h | 6 +- sdk/lib/3rdparty/freetype/src/type1/t1gload.c | 19 +- sdk/lib/3rdparty/freetype/src/type1/t1gload.h | 3 +- sdk/lib/3rdparty/freetype/src/type1/t1load.c | 91 +- sdk/lib/3rdparty/freetype/src/type1/t1load.h | 9 +- sdk/lib/3rdparty/freetype/src/type1/t1objs.c | 21 +- sdk/lib/3rdparty/freetype/src/type1/t1objs.h | 6 +- sdk/lib/3rdparty/freetype/src/type1/t1parse.c | 9 +- sdk/lib/3rdparty/freetype/src/type1/t1parse.h | 7 +- .../3rdparty/freetype/src/type1/t1tokens.h | 2 +- sdk/lib/3rdparty/freetype/src/type1/type1.c | 3 +- .../3rdparty/freetype/src/type42/t42drivr.c | 16 +- .../3rdparty/freetype/src/type42/t42drivr.h | 5 +- .../3rdparty/freetype/src/type42/t42error.h | 6 +- .../3rdparty/freetype/src/type42/t42objs.c | 29 +- .../3rdparty/freetype/src/type42/t42objs.h | 17 +- .../3rdparty/freetype/src/type42/t42parse.c | 23 +- .../3rdparty/freetype/src/type42/t42parse.h | 4 +- .../3rdparty/freetype/src/type42/t42types.h | 11 +- sdk/lib/3rdparty/freetype/src/type42/type42.c | 3 +- .../3rdparty/freetype/src/winfonts/fnterrs.h | 6 +- .../3rdparty/freetype/src/winfonts/winfnt.c | 23 +- .../3rdparty/freetype/src/winfonts/winfnt.h | 7 +- win32ss/gdi/ntgdi/freetype.c | 8 +- 439 files changed, 8612 insertions(+), 24957 deletions(-) delete mode 100644 sdk/lib/3rdparty/freetype/ChangeLog rename sdk/lib/3rdparty/freetype/{src/base => builds/windows}/ftdebug.c (91%) create mode 100644 sdk/lib/3rdparty/freetype/include/freetype/config/integer-types.h create mode 100644 sdk/lib/3rdparty/freetype/include/freetype/config/mac-support.h create mode 100644 sdk/lib/3rdparty/freetype/include/freetype/config/public-macros.h create mode 100644 sdk/lib/3rdparty/freetype/include/freetype/internal/compiler-macros.h delete mode 100644 sdk/lib/3rdparty/freetype/include/freetype/internal/internal.h create mode 100644 sdk/lib/3rdparty/freetype/include/freetype/internal/wofftypes.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/README delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvbsln.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxverror.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvfgen.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvjust.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvkern.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvlcar.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort0.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort1.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort2.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort4.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort5.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.h delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx0.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx1.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx2.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx4.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx5.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvopbd.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvprop.c delete mode 100644 sdk/lib/3rdparty/freetype/src/gxvalid/gxvtrak.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvalid.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvalid.h delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvbase.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.h delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otverror.h delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvgdef.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvgpos.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvgsub.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvjstf.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvmath.c delete mode 100644 sdk/lib/3rdparty/freetype/src/otvalid/otvmod.c create mode 100644 sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.c rename sdk/lib/3rdparty/freetype/src/{otvalid/otvmod.h => sfnt/sfwoff.h} (61%) create mode 100644 sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.c create mode 100644 sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.h create mode 100644 sdk/lib/3rdparty/freetype/src/sfnt/woff2tags.c rename sdk/lib/3rdparty/freetype/src/{otvalid/otvgpos.h => sfnt/woff2tags.h} (54%) diff --git a/sdk/lib/3rdparty/freetype/CMakeLists.txt b/sdk/lib/3rdparty/freetype/CMakeLists.txt index d30f1e180ed..f9fe7bfb58b 100644 --- a/sdk/lib/3rdparty/freetype/CMakeLists.txt +++ b/sdk/lib/3rdparty/freetype/CMakeLists.txt @@ -1,17 +1,11 @@ -add_definitions( - -DFT2_BUILD_LIBRARY) - -include_directories(include) - -list(APPEND SOURCE +set(SOURCES src/autofit/autofit.c src/base/ftbase.c src/base/ftbbox.c src/base/ftbdf.c src/base/ftbitmap.c src/base/ftcid.c - src/base/ftdebug.c src/base/ftfstype.c src/base/ftgasp.c src/base/ftglyph.c @@ -23,7 +17,6 @@ list(APPEND SOURCE src/base/ftpfr.c src/base/ftstroke.c src/base/ftsynth.c - src/base/ftsystem.c src/base/fttype1.c src/base/ftwinfnt.c src/bdf/bdf.c @@ -44,9 +37,16 @@ list(APPEND SOURCE src/truetype/truetype.c src/type1/type1.c src/type42/type42.c - src/winfonts/winfnt.c) + src/winfonts/winfnt.c -add_library(freetype ${SOURCE}) + src/base/ftsystem.c + builds/windows/ftdebug.c +) + +add_library(freetype STATIC ${SOURCES}) +target_compile_definitions(freetype PRIVATE FT2_BUILD_LIBRARY) +target_compile_definitions(freetype PRIVATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS) +target_include_directories(freetype PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND (ARCH STREQUAL "amd64" OR ARCH STREQUAL "arm64")) # error C4312: 'type cast': conversion from 'unsigned long' to 'void *' of greater size diff --git a/sdk/lib/3rdparty/freetype/ChangeLog b/sdk/lib/3rdparty/freetype/ChangeLog deleted file mode 100644 index 670e8480550..00000000000 --- a/sdk/lib/3rdparty/freetype/ChangeLog +++ /dev/null @@ -1,4879 +0,0 @@ -2019-03-15 Werner Lemberg - - * 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, - 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.1/2.10.0/, s/291/2100/. - - * include/freetype/freetype.h (FREETYPE_MINOR): Set to 10. - (FREETYPE_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. - - * 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. - - * src/cff/cffparse.c (destrict_c2s_item): Guard function with - CFF_CONFIG_OPTION_OLD_ENGINE macro. - -2019-03-07 Andrei Alexeyev <0x416b617269@gmail.com> - Werner Lemberg - - Fix invalid function pointer casts. - - This change should allow Freetype to work on WASM/Emscripten without - needing `-s EMULATE_FUNCTION_POINTER_CASTS=1'. - - * src/autofit/afdummy.c (af_dummy_hints_apply): Fix signature. - - * src/cid/cidload.c (cid_parse_font_matrix, parse_fd_array, - parse_expansion_factor, parse_font_name): Return `void', not - `FT_Error'. - - * include/freetype/internal/ftobjs.h (FT_CMap_CharVarIsDefaultFunc): - Fix signature. - -2019-03-05 Werner Lemberg - - [base] Handle numeric overflow (#55827). - - * src/base/ftglyph.c (FT_Glyph_Get_CBox): Use `FT_PIX_CEIL_LONG'. - -2019-03-05 Sebastian Rasmussen - - [psaux] Fix use of uninitialized memory (#55832). - - * 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. - -2019-02-23 Werner Lemberg - - * src/base/ftbitmap.c (FT_Bitmap_Blend): No fractional offsets. - - The function only provided a framework without an actual - implementation, which this commit removes. - -2019-02-23 Werner Lemberg - - * src/tools/update-copyright-year: Insert `(C)'. - -2019-02-21 Armin Hasitzka - - [truetype] Mask numeric overflows. - - * src/truetype/ttinterp.c (Move_CVT, Move_CVT_Stretched, Ins_MIRP): - Mask numeric overflows. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11681 - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11734 - -2019-02-21 Armin Hasitzka - - [psaux] Mask numeric overflow. - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings): Mask numeric - overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13041 - -2019-02-16 Wink Saville - - * src/autofit/afwarp.h (af_warper_compute): Fix declaration. - -2019-02-02 Nikolaus Waxweiler - - [truetype] Apply MVAR hasc, hdsc and hlgp metrics to current FT_Face metrics. - - 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. - - * src/truetype/ttgxvar.c (tt_apply_mvar): Implement. - -2019-02-02 Nikolaus Waxweiler - - [sfnt] Use typo metrics if OS/2 fsSelection USE_TYPO_METRICS bit is set. - - 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. - - * src/sfnt/sfobjs.c (sfnt_load_face): Implement. - -2019-01-18 John Tytgat - - [sfnt] Handle TT fonts having two PostScript font names (#55471). - - * src/sfnt/sfdriver.c (sfnt_get_name_id): Prefer English over any - other language found for PostScript font names. - -2019-01-08 Chris Liddell - - [psaux] Fix closepath (#55414). - - 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. - - * src/psauc/psinterp.c (cf2_interpT2CharString) : - Switch to calling `cf2_glyphpath_closeOpenPath'. - -2018-12-29 Werner Lemberg - - * src/autofit/aflatin2.c: Some fixes from `aflatin.c' (#55310). - -2018-12-25 Werner Lemberg - - * src/psaux/cffdecode.c (cff_operaor_seac): Fix numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11915 - -2018-12-12 Werner Lemberg - - [gxvalid] Fix compiler warnings. - - * src/gxvalid/gxvjust.c (gxv_just_check_max_gid), - src/gxvalid/gxvmort.c (gxv_mort_coverage_validate): Use `FT_UNUSED'. - -2018-12-11 Werner Lemberg - - * src/truetype/ttgload.c (TT_Hint_Glyph): Remove useless test. - - `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. - -2018-12-04 Werner Lemberg - - [bdf] Ignore data after `ENDFONT'. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10798 - - * src/bdf/bdflib.c (_bdf_parse_end): New function. - (_bdf_parse_glyphs): Switch to `_bdf_parse_end' after `ENDFONT' has - been encountered. - -2018-12-02 Alexei Podtelezhnikov - - * builds/windows/visualc/freetype.dsp: Dust off. - -2018-11-27 Alexei Podtelezhnikov - - * builds/windows/vc2010/freetype.vcxproj: Simplify. - -2018-11-27 Chris Liddell - - [type1,cff] Add FT_{Set,Get}_MM_WeightVector API calls. - - For multiple master fonts, common usage (in Postscript) is to modify - the WeightVector of an existing font instance, this addition - supports that use. - - * include/freetype/ftmm.h, src/base/ftmm.c (FT_Set_MM_WeightVector, - FT_Get_MM_WeightVector): New API functions. - - * 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. - - * src/cffcffdrivr.c (cff_set_mm_weightvector, - cff_get_mm_weightvector): New functions. - (cff_service_multi_masters): Register them. - - * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated. - This driver doesn't use the new interface. - - * 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. - -2018-11-27 Ben Wagner - - [cff] Fix compiler warning (#55105). - - * src/cff/cffparse.c (cff_parser_run): Guard label only used if - CFF_CONFIG_OPTION_OLD_ENGINE is active. - -2018-11-27 Ben Wagner - - [truetype] Fix numeric overflow (#55103). - - * src/truetype/ttgload.c (compute_glyph_metrics): Use `SUB_LONG'. - -2018-11-25 Alexei Podtelezhnikov - - [builds] Belated DLL support with vc2002-vc2008. - - The solution and project files should be automatically upgraded for - the approriate Visual C++ version. - - * 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. - -2018-11-22 Armin Hasitzka - - * src/cff/cffparse.c: Please the compiler. - -2018-11-22 Armin Hasitzka - - [cff] Fix memory overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9869 - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10869 - - * src/cff/cffparse.c (destruct_t2s_item, cff_parser_run): Store - evaluated T2 charstrings in separately allocated memory. - -2018-11-18 Alexei Podtelezhnikov - - * builds/windows/{visualc,vc2005,vc2008}/freetype.vcproj: Fix it. - -2018-11-10 Alexei Podtelezhnikov - - [smooth] Placeholder only for library-enabled LCD filtering. - - * src/smooth/ftsmooth.c (ft_smooth_init): Add disabled - `FT_Library_SetLcdFilter' call. - -2018-11-09 Young Xiao - - [psaux] Add safety guard (#54985). - - * src/psaux/psobjs.c (cff_builder_close_contour): Do it. - -2018-11-08 Alexei Podtelezhnikov - - * builds/unix/configure.raw: Require `windows.h' for windres. - -2018-11-08 Alexei Podtelezhnikov - - [ftstroke] Fix unpredictable failures (#54986). - - * src/base/ftstroke.c (ft_sroke_border_lineto): Fix lineto check. - -2018-11-08 Alexei Podtelezhnikov - - [ftstroke] Fix unpredictable failures (#54976). - - * src/base/ftstroke.c (ft_sroke_border_close): Set the start tags. - -2018-11-07 Ben Wagner - - [truetype] Fix VF check from 2018-09-12 (#54973). - - * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Use correct - offsets for estimates. - -2018-11-06 Werner Lemberg - - [pshinter] Fix numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11242 - - * src/pshinter/pshrec.c (ps_dimension_add_t1stem): Implement it. - -2018-11-06 Werner Lemberg - - [psaux] Fix timeout in old CFF engine. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11260 - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Fix potential endless - loop. - -2018-11-04 Alexei Podtelezhnikov - - * src/truetype/ttgxvar.c: Use enum definitions. - -2018-11-03 Alexei Podtelezhnikov - - * src/truetype/ttgxvar.c (ft_var_apply_tuple): Adjust condition. - -2018-11-03 Alexei Podtelezhnikov - - * src/truetype/ttgxvar.c (ft_var_apply_tuple): Tracing tweaks. - -2018-11-03 Alexei Podtelezhnikov - - Revert due to specs: [truetype] Speed up variation IUP. - -2018-11-02 Alexei Podtelezhnikov - - * src/truetype/ttgxvar.c (ft_var_get_item_delta): Fixed logic. - - Reported and tested by Behdad. - -2018-11-02 Shailesh Mistry - - [autofit] Prevent SEGV. - - See - - https://bugs.ghostscript.com/show_bug.cgi?id=697545 - - for more details on how the bug was found. - - * src/autofit/afloader.c (af_loader_load_glyph): Propagate error - code. - -2018-10-31 Alexei Podtelezhnikov - - [truetype] Speed up variation IUP. - - * src/truetype/ttgxvar.c (tt_delta_interpolate): Separate trivial - snapping to the same position from true interpolation. - -2018-10-31 Alexei Podtelezhnikov - - * src/type1/t1load.c (t1_set_mm_blend): Optimized. - -2018-10-31 Alexei Podtelezhnikov - - * src/truetype/ttgxvar.c (ft_var_get_item_delta): Optimized. - -2018-10-29 Werner Lemberg - - [base] Fix numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11080 - - * src/base/ftoutln.c (FT_Outline_Get_Orientation): Use `MUL_LONG'. - -2018-10-29 Werner Lemberg - - [cff] Fix numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10988 - - * src/cff/cffparse.c (cff_parser_run) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Use `NEG_LONG'. - -2018-10-27 Alexei Podtelezhnikov - - [sfnt] Make `head' timestamps unsigned. - - It's been more than 2^31 seconds since 1904. - - * include/freetype/tttables.h (TT_Header): Change field types. - * src/sfnt/ttload.c (tt_face_load_generic_header): Updated. - -2018-10-27 Alexei Podtelezhnikov - - Revert: Align FreeType with standard C memory management. - -2018-10-27 Werner Lemberg - - [psaux] Fix numeric overflow. - - Triggered by - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11157 - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Fix integer overflow. - -2018-10-20 Werner Lemberg - - Avoid endless loop while tracing (#54858). - - * src/type1/t1load.c (parse_buildchar): Guard tracing stuff with - FT_DEBUG_LEVEL_TRACE. - -2018-10-17 David Demelier - - * CMakeLists.txt: Specify `RUNTIME DESTINATION'. - - This is needed for DLL builds. - -2018-10-07 Werner Lemberg - - A missing Unicode cmap is not a fatal error. - - This is a follow-up to the previous commit. - - * 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. - -2018-10-07 Werner Lemberg - - Fix handling of FT_CONFIG_OPTION_ADOBE_GLYPH_LIST (#54794). - - * 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. - -2018-10-03 Werner Lemberg - - [ftgrays] Fix typo in stand-alone mode (#54771). - - * src/smooth/ftgrays.c (FT_THROW) [STANDALONE_ && - FT_DEBUG_LEVEL_TRACE]: Fix call to `FT_ERR_CAT'. - -2018-10-02 Werner Lemberg - - [psaux] Fix segfault. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10768 - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Check - argument. - -2018-10-02 Werner Lemberg - - [psaux] Fix numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10740 - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Use NEG_INT. - -2018-10-02 Werner Lemberg - - [pshinter] Handle numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10550 - - * src/pshinter/pshglob.c (psh_blues_snap_stem): Mask numeric - overflow. - -2018-09-27 Alexei Podtelezhnikov - - Align FreeType with standard C memory management. - - * 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. - - * 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. - - * src/base/ftdbgmem.c (ft_mem_debug_alloc, ft_mem_debug_realloc): Use - FT_Offset, aka size_t, for the size arguments. - -2018-09-25 Werner Lemberg - - Fix handling of `FT_Bool'. - - Before this commit we had code like - - (FT_Bool)( globals->glyph_styles[gindex] & 0x8000) - - Since `FT_Bool' is defined to be an `unsigned char', the code - evaluated to something like - - (unsigned char)( 0x8532 & 0x8000) - - which in turn expanded to - - (unsigned char)( 0x8000) - - and finally yielded 0x00 – i.e., false – not as expected. - - Problem reported and analyzed by Tony Smith . - - * include/freetype/fttypes.h (FT_BOOL): Add a comparison against - zero so that we always have a Boolean expression. - - */*: Replace castings to `FT_Bool' with calls to `FT_BOOL' where - possible. - -2018-09-23 Alexei Podtelezhnikov - - [bdf] Speed up charmap access. - - This makes FT_Get_Char_Index and FT_Get_Next_Char 4-5 times faster. - - * src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Help binary search - with continuous prediction. - -2018-09-22 Alexei Podtelezhnikov - - * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Another tweak. - - This one should be clearer. When the rounded monochrome bbox collapses - we add a pixel that covers most if not all original cbox. - -2018-09-21 Alexei Podtelezhnikov - - * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Further tweak. - -2018-09-21 Ben Wagner - - Improve auto-hinter handling of bitmap fonts (#54681). - - 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. - - * src/base/ftobjs.c (FT_Load_Glyph): Directly check whether we have - scalable outlines. - -2018-09-21 Werner Lemberg - - [raster] Fix disappearing vertical lines (#54589). - - * src/raster/ftraster.c (Vertical_Sweep_Span): Handle special case - where both left and right outline exactly pass pixel centers. - -2018-09-20 Alexei Podtelezhnikov - - * src/base/ftobjs.c (ft_glyphslot_preset_bimap): Tiny rounding tweak. - - This adds pixels in case a contour goes through the center - and they need to be turned on in the b/w rasterizer. - -2018-09-20 Alexei Podtelezhnikov - - [pcf] Replace charmap implementation. - - 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/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. - -2018-09-20 Werner Lemberg - - [base] Remove unused function `FT_GlyphLoader_CopyPoints'. - - * include/freetype/internal/ftgloadr.h, src/base/ftgloadr.c - (FT_GlyphLoader_CopyPoints): Do it. - -2018-09-19 Alexei Podtelezhnikov - - [pcf] Prepare to replace charmap implementation. - - * src/pcf/pcf.h (PCF_FaceRec): Updated to include... - (PCF_EncRec): ... this new structure to store charmap geometry. - - * src/pcf/pcfread.c (pcf_get_encodings): Store charmap geometry. - -2018-09-18 Alexei Podtelezhnikov - - Remove unused fields. - - * src/pcf.h (PCF_FaceRec): Remove `charmap' and `charmap_handle'. - * src/bdfdrvr.h (BDF_FaceRec): Ditto. - * src/winfonts/winfnt.h (FNT_FaceRec): Ditto. - -2018-09-17 Werner Lemberg - - [pshinter] Handle numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10396 - - * src/pshinter/pshglob.c: Include FT_INTERNAL_CALC_H. - (psh_blues_snap_stem): Mask numeric overflow. - -2018-09-13 Werner Lemberg - - [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 - - * src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Fix last commit. - -2018-09-13 Werner Lemberg - - * src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Check `result'. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10316 - -2018-09-12 John Tytgat - - [sfnt] Better PS name handling (#54629). - - * 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. - -2018-09-12 Werner Lemberg - - [truetype] Improve VF check. - - Triggered by - - 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 - - * src/truetype/ttgxvar.c (ft_var_load_gvar): Check `glyphoffsets'. - -2018-09-10 Armin Hasitzka - - * src/pshinter/pshrec.c (t2_hints_stems): Mask numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10215 - -2018-09-09 Ben Wagner - - * builds/freetype.mk (refdoc-venv): Ensure python version (#54631). - -2018-09-07 Werner Lemberg - - [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 - - Synchronize `ftdebug.c' files. - - * builds/amiga/src/base/ftdebug.c, builds/wince/ftdebug.c, - builds/windows/ftdebug.c: Synchronize with `src/base/ftdebug.c'. - -2018-09-05 Nikhil Ramakrishnan - - Add documentation guidelines file. - - * docs/DOCGUIDE: New file. - -2018-09-04 Werner Lemberg - - * devel/ftoption.h: Synchronize with master `ftoption.h'. - -2018-09-03 Nikhil Ramakrishnan - - [docwriter] Don't break code snippets accross lines. - - Reported as - - 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 - - */*: s/PSNames/psnames/. - - Only tracing messages are affected. - -2018-09-03 Werner Lemberg - - [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 - - Remove `FT_Outline_{New,Done}_Internal'. - - These public API functions(!) were always undocumented and have - escaped all clean-up efforts until now. - - * include/freetype/ftoutln.h (FT_Outline_New_Internal, - FT_Outline_Done_Internal): Removed. - - * src/base/ftoutln.h (FT_Outline_New_Internal, - FT_Outline_Done_Internal): Merge into... - (FT_Outline_New, FT_Outline_Done): ... these functions. - - * docs/README: Updated. - -2018-08-30 Alexei Podtelezhnikov - - * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Check glyph format. - -2018-08-31 Armin Hasitzka - - [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 - - * src/base/ftdebug.c (FT_Throw): Restore missing `FT_UNUSED' calls. - -2018-08-31 Werner Lemberg - - * src/base/ftdebug.c (FT_Throw): Reduce chattiness. - -2018-08-31 Werner Lemberg - - * src/autofit/afhints.c (af_glyph_hints_reload): Add initialization. - -2018-08-30 Alexei Podtelezhnikov - - 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 - - * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Correct mono. - -2018-08-30 Armin Hasitzka - - [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 - - [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 - - [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. - (af_glyph_hints_dump_points): Trace `before' and `after' edges. - (af_glyph_hints_align_strong_points) [FT_DEBUG_AUTOFIT]: Set - `before' and `after' information. - -2018-08-30 Alexei Podtelezhnikov - - [base] Overflow-resistant bitmap presetting. - - * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Implement it. - -2018-08-29 Armin Hasitzka - - Fix numeric overflows. - - * src/pshint/pshalgo.c (psh_hint_align, psh_hint_align_light, - psh_hint_table_find_strong_points): Fix numeric overflows. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10083 - -2018-08-29 Werner Lemberg - - [cff] Fix handling of `roll' op in old engine. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10080 - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Use modulo for loop count, as - documented in the specification. - -2018-08-26 Werner Lemberg - - * src/truetype/ttobjs.c (tt_size_read_bytecode): Trace CVT values. - -2018-08-26 Nikhil Ramakrishnan - - * configure: Copy assets required by docwriter. - - Copy directory `docs/reference/markdown' when FreeType is compiled in a - different directory. - - Fixes `make refdoc' if builddir != srcdir. - - Reported as - - https://lists.nongnu.org/archive/html/freetype-devel/2018-08/msg00083.html - -2018-08-26 Werner Lemberg - - * src/pshint/pshalgo.c (psh_hint_overlap): Fix numeric overflow. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10057 - -2018-08-26 Werner Lemberg - - Minor tracing adjustments. - - * src/base/ftstream.c (FT_Stream_EnterFrame, FT_Stream_ExitFrame): - Trace. - - * src/truetype/ttgload.c (TT_Access_Glyph_Frame): Remove tracing. - -2018-08-26 Werner Lemberg - - [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 - - 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 - - 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 - - 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=10028 - -2018-08-22 Werner Lemberg - - [truetype] Improve legibility of `glyf' parsing. - - * 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. - -2018-08-21 Werner Lemberg - - * src/sfnt/ttcpal.c (tt_face_load_cpal): Add missing safety check. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9981 - -2018-08-18 Werner Lemberg - - [psaux] Avoid slow PS font parsing in case of error. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9955 - - * src/psaux/psobjs.c (ps_parser_to_bytes): Set `parser->cursor' even - in case of error to avoid potential re-scanning. - -2018-08-18 Werner Lemberg - - [cff] Fix heap buffer overflow in old engine. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9967 - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - [CFF_CONFIG_OPTION_OLD_ENGINE]: `num_designs' must be - non-zero. - -2018-08-16 Young Xiao - - * builds/mac/ftmac.c (parse_fond): Fix buffer overrun. - - Reported as bug #54515, duplicate of #43540. - -2018-08-16 Werner Lemberg - - * builds/*/ftsystem.c (FT_COMPONENT): Updated also. - -2018-08-15 Alexei Podtelezhnikov - - [bdf] Don't track duplicate encodings. - - There is no harm except some umbiguity in broken fonts with duplicate - encodings. - - * src/bdf/bdflib.c (_bdf_parse_glyphs): Remove duplicate tracking. - (_bdf_parse_t): Remove large `have' bitfield. - -2018-08-15 Werner Lemberg - - Don't use `trace_' prefix for FT_COMPONENT arguments. - - * include/freetype/internal/ftdebug.h (FT_TRACE_COMP, - FT_TRACE_COMP_): New auxiliary macros to add `trace_' prefix. - (FT_TRACE): Use `FT_TRACE_COMP'. - - */* (FT_COMPONENT): Updated. - -2018-08-14 Werner Lemberg - - Use formatting string in FT_TRACEX calls for non-simple arguments. - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - : - Do it. - - * src/psaux/pshints.c (cf2_hintmap_build): Ditto. - - * src/psaux/psintrp.c (cf2_interpT2CharString) : Ditto. - - * src/truetype/ttinterp.c (TT_RunIns): Ditto. - -2018-08-14 Alexei Podtelezhnikov - - [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 - - [cff] Fix another segv in old engine. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9872 - - * src/psaux/cffdecode.c (cff_decoder_parse_charstrings) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Disallow invalid T1 opcodes in - dictionaries. - -2018-08-14 Werner Lemberg - - [cff] Fix missing error handling. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9865 - - * src/psaux/cffparse.c (cff_parser_run) - [CFF_CONFIG_OPTION_OLD_ENGINE]: Don't ignore return value of - `parse_charstrings_old'. - -2018-08-14 Alexei Podtelezhnikov - - [bdf] Remove unused overflow storage. - - * 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 - - [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_CONFIG_OPTION_OLD_ENGINE]: Use top dict's - `random' field directly if parsing dictionaries. - -2018-08-13 Alexei Podtelezhnikov - - [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 - - * 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 - - * 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 - - * src/sfnt/ttsbit.c (tt_sbit_decoder_load_compound): Follow specs. - -2018-08-10 Ben Wagner - - * src/sfnt/sfobjs.c (sfnt_done_face): Fix memory leak (#54435). - -2018-08-10 Werner Lemberg - - * src/base/ftobjs.c (FT_Render_Glyph_Internal): Improve tracing. - -2018-08-10 Werner Lemberg - - Fix clang warnings. - - * src/base/ftdebug.c (ft_trace_level_enabled, - ft_trace_level_disabled): Add `static' keyword. - -2018-08-09 Alexei Podtelezhnikov - - [raster, smooth] Reinstate bitmap size limits. - - This again moves outline and bitmap size checks one level up. - - * 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. - - * 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. - -2018-08-08 Alexei Podtelezhnikov - - [pcf] Revert massive unsigning. - -2018-08-08 Werner Lemberg - - [smooth] Improve tracing. - - * src/smooth/ftgrays.c (gray_convert_glyph_inner): Only use tracing - if called the first time. - (gray_convert_glyph): Updated. - -2018-08-08 Werner Lemberg - - Add internal functions `FT_Trace_Disable' and `FT_Trace_Enable'. - - It sometimes makes sense to suppress tracing informations, for - example, if it outputs identical messages again and again. - - * include/freetype/internal/ftdebug.h: Make `ft_trace_levels' a - pointer. - (FT_Trace_Disable, FT_Trace_Enable): New declarations. - - * 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. - -2018-08-08 Werner Lemberg - - Debugging improvements. - - * 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'. - -2018-08-08 Alexei Podtelezhnikov - - [pcf] Massive unsigning (part 2). - - Treat all size related properties as unsigned values. - - * 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. - -2018-08-08 Alexei Podtelezhnikov - - [pcf] Massive unsigning (part 1). - - 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/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. - -2018-08-07 Alexei Podtelezhnikov - - * src/pcf/pcfread.c (pcf_get_bitmaps): Unsign `offsets' and - `bitmapSizes'. - -2018-08-06 Werner Lemberg - - * devel/ftoption.h: Synchronize with main `ftoption.h'. - -2018-08-06 Alexei Podtelezhnikov - - [pcf] Use unsigned types. - - * 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. - -2018-08-05 Werner Lemberg - - * src/truetype/ttgload.c (compute_glyph_metrics): Fix overflow. - - Reported as - - https://bugs.chromium.org/p/chromium/issues/detail?id=777151 - -2018-08-04 Werner Lemberg - - * src/truetype/ttinterp.c (opcode_name): Fix typos. - -2018-08-04 Werner Lemberg - - Fix clang warnings. - - * src/base/ftoutln.c (FT_Outline_EmboldenXY): Fix type of - `orientation'. - - * src/gxvalid/gxvcommn.c (gx_lookup_value_read): Fix signature. - - * src/pcf/pcfread.c (pcf_get_encodings): Fix type of some variables. - Add cast. - - * src/type1/t1load.c (parse_weight_vector): Fix cast. - -2018-07-31 Werner Lemberg - - * src/cid/cidtoken.h: Handle `XUID' keyword. - -2018-07-31 Werner Lemberg - - [cid] Trace PostScript dictionaries. - - * 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'. - -2018-07-30 Werner Lemberg - - [cff] Fix typo. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9409 - - * src/cff/cffdrivr.c (cff_get_cid_from_glyph_index): Fix boundary - check. - -2018-07-29 Werner Lemberg - - * src/pcf/pcfread.c (pcf_get_encodings): Another thinko. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9608 - -2018-07-28 Alexei Podtelezhnikov - - [smooth] Fix Harmony memory management. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9501 - - * src/smooth/ftgrays.c (ft_smooth_render_generic): Restore buffer - after each rendering in case of failure. - -2018-07-28 Werner Lemberg - - [type1] Avoid segfaults with `FT_Get_PS_Font_Value'. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9610 - - * src/type1/t1driver.c (t1_ps_get_font_value): Protect against NULL. - -2018-07-27 Werner Lemberg - - [truetype] Make `TT_Set_MM_Blend' idempotent (#54388). - - * 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. - -2018-07-27 Werner Lemberg - - [psaux, type1]: More tracing improvements. - - * src/psaux/psintrp.c (cf2_interpT2CharString): Trace skipped - outline commands. - - * src/psaux/t1decode.c (t1_decoder_parse_charstring): Fix - missing case. - (t1_decoder_parse_metrics): Make tracing output more compact. - - * src/type1/t1gload.c (T1_Compute_Max_Advance): Be less verbose. - (T1_Get_Advances): Add tracing. - -2018-07-25 Werner Lemberg - - [psaux, type1] Trace PostScript dictionaries and other things. - - The tracing of /Encoding, /Subrs, and /Charstrings is rudimentary - right now. - - * src/psaux/psobjs.c (ps_parser_load_field, - ps_parser_load_field_table): Add tracing calls. - - * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Make tracing - output more compact. - - * src/type1/t1gload.c (T1_Compute_Max_Advance, T1_Get_Advances): Add - tracing messages. - - * 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. - - * src/type1/t1objs.c (T1_Face_Init): Add tracing call. - - * src/sfnt/sfobjs.c (sfnt_init_face): Make tracing message more - verbose. - -2018-07-25 Werner Lemberg - - Fix minor ASAN run-time warnings. - - * 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. - -2018-07-24 Alexei Podtelezhnikov - - [build] Fortify dllexport/dllimport attributes (#53969,#54330). - - 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. - - * CMakeLists.txt [WIN32], builds/windows/vc2010/freetype.vcxproj: - Define DLL_EXPORT manually. - - * 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/. - -2018-07-24 Werner Lemberg - - [type1] Check relationship between number of axes and designs. - - For Multiple Masters fonts we don't support intermediate designs; - this implies that - - number_of_designs == 2 ^^ number_of_axes - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9557 - - * src/type1/t1load.c (T1_Open_Face): Ensure above constraint. - (T1_Get_MM_Var): Remove now redundant test. - -2018-07-24 Hin-Tak Leung - - [truetype] Match ttdebug's naming of instruction mnemonics. - - * src/truetype/ttinterp.c: The form used in ttdebug, - "MDRP[G,B,W,?]", etc., is slightly more readable than - "MDRP[00,01,02,03]". - -2018-07-24 Werner Lemberg - - * src/pcf/pcfread.c (pcf_get_encodings): Thinko. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9561 - -2018-07-22 Werner Lemberg - - * src/pcf/pcfread.c (pcf_get_encodings): Check index of defaultChar. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9527 - -2018-07-22 Werner Lemberg - - * src/pcf/pcfread.c (pcf_load_font): Fix number of glyphs. - - This is an oversight of the module change 2018-07-21. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9524 - -2018-07-22 Werner Lemberg - - [cid] Sanitize `BlueShift' and `BlueFuzz'. - - This code is taken from the type1 module. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9510 - - * src/cid/cidload.c (parse_fd_array): Set some private dict default - values. - (cid_face_open): Do the sanitizing. - Fix some tracing messages. - -2018-07-21 Werner Lemberg - - [pcf] Fix handling of the undefined glyph. - - This change makes the driver use the `defaultChar' property of PCF - files. - - * src/pcf/pcf.h (PCF_FaceRec): Change type of `defaultChar' to - unsigned. - - * 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. - - * 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. - -2018-07-20 Armin Hasitzka - - Move the legacy fuzz target to the `freetype-testing' repository. - - It can now be found at - - https://github.com/freetype/freetype2-testing/tree/master/fuzzing/src/legacy - - * src/tools/ftfuzzer: Remove this folder and its contents from the - repository. - -2018-07-20 Werner Lemberg - - [cff] Avoid left-shift of negative numbers (#54322). - - * src/cff/cffgload.c (cff_slot_load): Use multiplication. - -2018-07-17 Werner Lemberg - - 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 - - * src/pcf/pcfread.c (pcf_get_encodings): Trace `defaultChar'. - -2018-07-16 Armin Hasitzka - - * 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 - - * 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 - - * src/base/ftoutln.c (FT_Outline_Get_Orientation): Init `cbox'. - - Taken from patch #9667, written by Steve Langasek - . - - This fixes a build failure (most probably a bug in gcc) on ppc64el - when building with -O3. - -2018-07-05 Werner Lemberg - - 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 - - Adjust table size comparisons (#54242). - - * src/sfnt/ttcpal.c (tt_face_load_cpal): Implement it. - -2018-07-05 Werner Lemberg - - 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 - - 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 - - * src/psnames/psmodule.c (ps_unicodes_init): Fix alloc debugging. - -2018-07-02 Werner Lemberg - - s/palette_types/palette_flags/. - - Suggested by Behdad. - -2018-07-02 Werner Lemberg - - 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 - - * src/base/ftobjs.c (FT_Get_Color_Glyph_Layer): Guard SFNT function. - - Reported by Behdad. - -2018-06-28 Alexei Podtelezhnikov - - * src/base/fttrigon.c (FT_Tan): Improve accuracy. - (FT_Vector_Rotate): Simplify. - -2018-06-28 Alexei Podtelezhnikov - - * src/base/ftobjs.c (FT_Set_Charmap): Robustify. - -2018-06-25 Werner Lemberg - - [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 - - * 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 - - [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 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 - - 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 - - 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 - - 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 - - [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 - - 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 - - [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 - - [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. - -2018-06-17 Werner Lemberg - - [base] Add tracing for `FT_Bitmap_Blend'. - - * include/freetype/internal/fttrace.h (trace_bitmap): New - enumeration. - - * src/base/ftbitmap.c (FT_COMPONENT): Define. - (FT_Bitmap_Blend): Add `FT_TRACE5' calls. - -2018-06-17 Werner Lemberg - - s/trace_bitmap/trace_checksum/. - - * include/freetype/internal/fttrace.h: s/bitmap/checksum/. - - * src/base/ftobjs.c (FT_COMPONENT): s/trace_bitmap/trace_checksum/. - Adjust code. - -2018-06-16 Werner Lemberg - - [sfnt] Fix color glyph layer loading. - - * 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. - -2018-06-16 Werner Lemberg - - [sfnt] Fix color palette loading. - - 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 - - * src/base/ftbitmap.c (FT_Bitmap_Blend): Avoid integer overflow. - -2018-06-16 Werner Lemberg - - 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 - - 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'. - - * src/base/ftobjs.c (ft_glyph_slot_done): Updated. - (FT_Render_Glyph_Internal): Use `FT_Get_Color_Glyph_Layer'. - (FT_Get_GlyphLayers): Removed. - - * src/sfnt/sfdriver.c (sfnt_interface): Updated. - - * src/sfnt/ttcolr.c (tt_face_load_colr_layers): Removed. - * src/sfnt/ttcolr.h: Updated. - - * src/truetype/ttgload.c (TT_Load_Glyph): Updated. - -2018-06-14 Werner Lemberg - - Provide iterative API to access `COLR' data. - - This solution doesn't store any data in an `FT_GlyphSlot' object. - - * include/freetype/freetype.h (FT_LayerIterator): New structure. - (FT_Get_Color_Glyph_Layer): New function. - - * include/freetype/internal/sfnt.h (TT_Get_Colr_Layer_Func): New - function type. - (SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): Add it. - - * 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 - - 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 - - [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. - -2018-06-13 Werner Lemberg - - [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 - - [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 - - 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 - - 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. - -2018-06-12 Werner Lemberg - - 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/sfnt/sfdriver.c (sfnt_interface), src/sfnt/sfobjs.c - (sfnt_done_face): Updated. - -2018-06-12 Werner Lemberg - - Finish CPAL/COLR support (1/4). - - * include/freetype/internal/tttypes.h (TT_FaceRec): New fields - `palette_index', `palette', `have_foreground_color' and - `foreground_color'. - -2018-06-12 Werner Lemberg - - [sfnt] Minor. - - * 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. - -2018-06-11 Alexei Podtelezhnikov - - [raster] Clean up. - - * src/raster/ftraster.c (black_TWorker, SCALED, Set_High_Precision): - Clean up after 5-level gray removal (8dc8635874). - (Vertical_Sweep_Span): Be brief. - -2018-06-10 Werner Lemberg - - [sfnt] Fix compiler warnings. - - * src/sfnt/ttcolr.c (tt_face_load_colr, tt_face_load_colr_layers, - tt_face_colr_blend_layer): Add `NULL' initializers. - -2018-06-10 Werner Lemberg - - s/FT_Palette/FT_Palette_Data/, s/palette/palette_data/. - - * include/freetype/ftcolor.h, include/freetype/internal/tttypes.h, - src/base/ftcolor.c, src/sfnt/sfobjs.c, src/sfnt/ttcolr.c: Updated. - -2018-06-10 Nikolaus Waxweiler - - CMakeLists: also accept IOS_PLATFORM=SIMULATOR64 - - 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. - - * CMakeLists.txt: Accept IOS_PLATFORM=SIMULATOR64 - -2018-06-10 Werner Lemberg - - Implement `FT_Palette_Get'. - - * src/base/ftcolor.c: New file. - - * src/base/Jamefile (_sources), src/base/rules.mk (BASE_SRC), - src/base/ftbase.c: Add `ftcolor.c'. - -2018-06-10 Werner Lemberg - - * src/sfnt/ttcolr.c (tt_face_load_colr): Improve overflow checks. - -2018-06-09 Alexei Podtelezhnikov - - [raster] Deal with pitch sign earlier. - - * 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. - -2018-06-09 Werner Lemberg - - [sfnt] Read `CPAL' version 1 tables. - - * include/freetype/internal.tttypes.h: Include FT_COLOR_H. - (TT_FaceRec): Add `palette' field. - - * 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/sfnt/sfobjs.c (sfnt_done_face): Free glyph color palette data. - -2018-06-07 Alexei Podtelezhnikov - - [base] API for Harmony LCD rendering. - - This introduces `FT_Library_SetLcdGeometry' for setting up arbitrary - LCD subpixel geometry including non-striped patterns. - - * 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. - -2018-06-06 Werner Lemberg - - ftcolor.h: Redesign API. - - 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. - -2018-06-06 Parth Wazurkar - - [bdf, pcf] Remove deprecated FT_FACE_FLAG_FAST_GLYPHS flag. - - * src/bdf/bdfdrivr.c (BDF_Face_Init): Remove deprecated - FT_FACE_FLAG_FAST_GLYPHS flag. - - * src/pcf/pcfread.c (pcf_load_font): Remove deprecated - FT_FACE_FLAG_FAST_GLYPHS flag. - -2018-06-06 Werner Lemberg - - [smooth, raster] Limit bitmap size (#54019). - - * 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. - -2018-06-03 Armin Hasitzka - - * src/smooth/ftgrays.c (gray_convert_glyph): Remove unused variables. - -2018-06-03 Werner Lemberg - - * src/tools/glnames.py (main): Emit header in `light' comment style. - -2018-06-02 Alexei Podtelezhnikov - - [smooth] Attempt to mitigate bug #54019. - - The robust rendering of estra large glyphs came with unbearable cost. - The old way of bisecting should fail but fail faster. - - * src/smooth/ftgrays.c (gray_convert_glyph): Switch back to bisecting - in y-direction. - -2018-06-02 Werner Lemberg - - * src/truetype/ttinterp.c (Ins_MIRP): Use SUB_LONG; avoid FT_ABS. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8706 - -2018-06-02 Werner Lemberg - - * src/autofit/afwarp.h: Use AF_CONFIG_OPTION_USE_WARPER (#54033). - -2018-05-31 Werner Lemberg - - * src/raster/ftraster.c (black_TWorker_): Remove `gTarget' field. - - This is no longer used. - -2018-05-31 Werner Lemberg - - [sfnt] Get colors from `CPAL' table in right order (#54015). - - * src/sfnt/ttcolr.c (tt_face_find_color): Fix it. - -2018-05-30 Werner Lemberg - - ftcolor.h: Improve API design, fix typos (#54011, #54014). - - * 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/. - -2018-05-30 Armin Hasitzka - - Beautify a3cfed5e87232c933bdc64f43e8ebebcfd18b41b. - - * src/autofit/afloader.c (af_loader_load_glyph): Move the - initialisationand declaration of variables into the if-block. - -2018-05-30 Armin Hasitzka - - Fix pointer underflow. - - The declaration of `edge2' can be reached with `edge1 == NULL' and - `axis->edges == 0' which results in undefined behaviour. - - * src/autofit/afloader.c (af_loader_load_glyph): Initialise `edge2' - after checking `axis->num_edges > 1'. `edge1 != NULL' can be assumed. - -2018-05-30 Werner Lemberg - - Various minor color fixes. - - * include/freetype/config/ftheader.h (FT_COLOR_H): New macro. - - * include/freetype/internal/ftobjs.h (FT_Colr_Internal): Change - type of `load_flags' to `FT_Int32'. - - * 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/base/ftobjs.c (FT_Render_Glyph_Internal): Change type of - `load_flags' to `FT_Int32'. - - * 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. - - * src/sfnt/ttcolr.h: Updated. - -2018-05-25 Nikhil Ramakrishnan - - [docmaker] Fix missing `Defined in (...)' under Windows/Cygwin. - - This platform uses backslashes for paths, which docmaker didn't - understand correctly. - - * src/tools/docmaker/tohtml.py (HtmlFormatter::blockEnter): Use - `os.path.normpath' to normalize the path for the platform being - used. - -2018-05-24 Alexei Podtelezhnikov - - [smooth] Formalize Harmony LCD rendering. - - 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. - - * 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. - - * src/smooth/ftsmooth.c [!FT_CONFIG_OPTION_SUBPIXEL_RENDERING] - (ft_smooth_init): Initialize `lcd_geometry'. - (ft_smooth_render_generic): Formalize outline shifts. - -2018-05-22 Werner Lemberg - - [truetype] Reject elements of composites with invalid glyph indices. - - Reported as - - https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8413 - - * src/truetype/ttgload.c (TT_Load_Composite_Glyph): Implement it. - -2018-05-22 Werner Lemberg - - * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Trace # of points. - -2018-05-20 Werner Lemberg - - * include/freetype/ftcolor.h: New file. - - This is an interface to the `CPAL' OpenType table. No - implementation yet. - -2018-05-18 Alexei Podtelezhnikov - - * include/freetype/internal/ftcalc.h (FT_MSB): Verified `_MSC_VER'. - - Actually `_BitScanReverse' is available since VS2005. - -2018-05-18 Werner Lemberg - - * 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 . - -2018-05-17 Werner Lemberg - - s/inline/__inline/ for MSVC. - - Reported by John Emmas . - - * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Do it. - -2018-05-16 Werner Lemberg - - 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 - - [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 - - [psaux] Fix compiler warning (#53915). - - * src/psaux/psft.c (cf2_freeT1SeacComponent): Do it. - -2018-05-15 Werner Lemberg - - [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 - - [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 - - * src/base/ftobjs.c (FT_Load_Glyph): Fix signature of `pixel_modes'. - -2018-05-14 Werner Lemberg - - 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 - - * src/base/ftobjs.c (FT_Load_Glyph): Improve tracing. - -2018-05-13 Shao Yu Zhang - Werner Lemberg - - [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 - - Use MS VC++'s _BitScanReverse to calculate MSB (patch #9636). - - * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Implement - it. - -2018-05-10 Alan Coopersmith - - Fix DLL compilation on Solaris. - - 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: - - cc: Warning: Option -fvisibility=hidden passed to ld, - if ld is invoked, ignored otherwise - - AC_LINK_IFELSE does the compile and then tries to link the result, - at which point the Solaris linker will issue an error: - - ld: fatal: option '-fvisibility=hidden' is incompatible with - building a dynamic executable - - 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'. - - 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. - - Tested on Solaris 11.4 beta with compiler versions: - - 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 - - and verified the libfreetype.so.6 generated by each of those - compilers exported the same set of symbols. - - * builds/unix/configure.raw: Implement it. - -2018-05-08 Werner Lemberg - - [autofit] Avoid potential SEGV if running out of memory. - - Problem reported by Shailesh Mistry . - - * 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. - - * 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'. - -2018-05-07 Nikolaus Waxweiler - - [cmake] Allow using project as subfolder in other project. - - * CMakeLists.txt: Test for CMake build directory being different - from source directory. Provide other parts of the build system - access the full include directory. - -2018-05-07 Werner Lemberg - - [build] Suppress configure's `nothing to be done' message. - - 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'. - - * 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. - -2018-05-04 suzuki toshiya - - Support symbol visibility features of Sun / Oracle C compilers. - - 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. - - * 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. - -2018-05-02 Nikolaus Waxweiler - - Unbreak CMake Windows installation - - * CMakeLists.txt: Generate ftconfig.h on non-UNIX. - -2018-05-02 Werner Lemberg - - Remove FT_CONFIG_OPTION_PIC and related code. - - */* [FT_CONFIG_OPTION_PIC]: Remove all code guarded by this - preprocessor symbol. - - */*: Replace `XXX_GET' macros (which could be either a function in - PIC mode or an array in non-PIC mode) with `xxx' arrays. - - * 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. - -2018-05-01 Werner Lemberg - - * 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 - - 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 - - [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 - - * src/base/ftoutln.c (FT_Outline_Decompose): Improve error tracing. - -2018-04-22 Alexei Podtelezhnikov - - [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 - - 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 - - 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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - * 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 - - [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 - - [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 - - [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 - - * 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 - - * 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 . - -2018-03-30 Werner Lemberg - - [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 - - [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 - - [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 - - 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 - - * src/sfnt/ttcmap.c (tt_cmap2_validate): Fix potential numeric - overflow. - -2018-03-13 Werner Lemberg - - 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 - - * CMakeLists.txt (BASE_SRCS): Update to changes from 2018-03-05. - -2018-03-09 Chun-wei Fan - - * 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 - - 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 - - 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 - - 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 - - * src/truetype/ttinterp.c (TT_RunIns): Fix tracing arguments. - -2018-02-23 Werner Lemberg - - * builds/unix/configure.raw: Need HarfBuzz 1.3.0 or newer. - - Problem reported by Alan Coopersmith . - -2018-02-17 Werner Lemberg - - [sfnt] Prefer `CBDT'/`CBLC' over `glyf' table (#53154). - -2018-02-06 Werner Lemberg - - [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 - - [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 - - [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 - - * 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 - - * src/truetype/ttgxvar.c (tt_set_mm_blend): Minor. - -2018-01-27 Werner Lemberg - - [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 - - [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 - - [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 - - [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 - - [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 - - * src/base/ftver.rc: Fix mingw-w64 compilation. - -2018-01-18 Alexei Podtelezhnikov - - [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 - - [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 - - [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 - - [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 - - * CMakeLists.txt [win32]: Suppress warnings for POSIX functions. - -2018-01-10 Ewald Hew - - [psaux] Correctly handle Flex features (#52846). - - * src/psaux/psintrp.c (cf2_interpT2CharString) : Do not move if doing Flex. - -2018-01-09 Alexei Podtelezhnikov - - * builds/windows/vc2010/freetype.sln: Synchronize with the project. - -2018-01-08 Werner Lemberg - - * 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 - - 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 - - [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 - - 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 - - [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 - - * 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 - - 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 - - * include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF) - [_MSC_VER]: Limit Visual C++ attributes. - -2018-01-03 Werner Lemberg - - [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 - - * 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 - - Synchronize other Windows project files. - - * builds/windows/*: Add missing files. - -2017-12-31 Werner Lemberg - - 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 - - * builds/vms/ftconfig.h: Synchronize with unix `ftconfig.in' file. - -2017-12-28 Werner Lemberg - - * builds/unix/ftconfig.in: Synchronize with main `ftconfig.h' file. - - Reported by Nikolaus. - -2017-12-27 Werner Lemberg - - 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 - - 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 - - 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 - - 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 - - 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 - - [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 - - [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 - - * src/*/*: Only use `ft_' and `FT_' variants of stdc library stuff. - -2017-12-18 Werner Lemberg - - * src/truetype/ttgxvar.c (tt_face_vary_cvt): Add size guard (#52688). - -2017-12-18 Werner Lemberg - - [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 - - [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 - - [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 - - 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 - - * builds/windows/vc2010/freetype.vcxproj: AfterBuild copy. - * objs/.gitignore: Ignore almost everything. - -2017-12-11 Werner Lemberg - - Fix compiler warning (#52640). - - * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Remove unused - variable. - -2017-12-08 Azzuro - - * builds/windows/vc2010/freetype.vcxproj: Adjust output directory. - - This allows builds with different configurations in parallel. - -2017-12-08 Werner Lemberg - - 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 - - [docmaker] Fix code section parsing. - - Stuff like - - { - - } - - confused the parser, which incorrectly treated `' 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 - - 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 - - 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 - - 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 - - Fix `make setup dos' (#52622). - - * builds/detect.mk (dos_setup): Properly escape literal `>' - character. - -2017-12-07 Werner Lemberg - - 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 - - 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 - - * 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 - - * builds/symbian/bld.inf: Updated. - -2017-12-06 Werner Lemberg - - 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 - - Improve tracing messages by using singular and plural forms. - - * src/*/*.c: Implement it. - -2017-12-04 Werner Lemberg - - [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 - - [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 - - [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) - - 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 - - [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 - - 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 - - * 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 - - [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 - - * include/freetype/ftrender.h: Fix `FT_Renderer_RenderFunc' type. - -2017-11-14 Nikolaus Waxweiler - - 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 - - * CMakeLists.txt: Add `DISABLE_FORCE_DEBUG_PREFIX' option. - -2017-11-06 Alexei Podtelezhnikov - - * src/base/ftobjs.c (FT_Load_Glyph): Relocate condition. - -2017-11-06 Alexei Podtelezhnikov - - * src/smooth/ftgrays.c (gray_set_cell): Fix uninitialized variables. - -2017-11-03 Ewald Hew - - [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) : - Ensure we are on the top level charstring before rewinding. - -2017-11-03 suzuki toshiya - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - * builds/windows/ftdebug.c (FT_Message): Print to stderr. - * builds/wince/ftdebug.c (FT_Message): Ditto. - -2017-10-14 Behdad Esfahbod - - [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 - - [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 - - 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 - - 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 - - * 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 - - * 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 - - [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 - - [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 - - 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 - - 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 - - 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 - - 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 - - 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 - - [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 - - * 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 - - 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 - - [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 - - 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 - - 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 - - [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 - - [truetype] Really, really fix #52082. - - * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional. - -2017-09-28 Werner Lemberg - - * 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 - - * 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 - - 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 - - [psaux] Fix compiler warning. - - * src/psaux/pshints.c (cf2_hintmap_dump): Add switch for tracing - code. - -2017-09-27 Werner Lemberg - - * src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning. - -2017-09-25 Werner Lemberg - - [psaux] Fix compiler warnings. - - * src/psaux/psft.c (cf2_initLocalRegionBuffer): Remove redundant - test. - - * src/psaux/psintrp.c (cf2_interpT2CharString) - : Add casts. - - * src/psaux/psobjs.c (ps_decoder_init): Add cast. - -2017-09-25 Ewald Hew - - [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 - - [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 - - [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. - : Add section to build hintmap and rewind. - -2017-09-25 Ewald Hew - - [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 - - [psaux] Minor fixes. - - * src/psaux/psintrp.c (cf2_interpT2CharString): Fix check for pop - results. - s/font->decoder/decoder/ where necessary. - : Use - offset parameter in `cf2_doStems' instead of doing correction for - left-sidebearing. - -2017-09-25 Ewald Hew - - [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 - - [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 - - [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 - - [type1] Switch to Adobe engine. - - * src/type1/t1objs.c (T1_Driver_Init): Set default to Adobe engine. - -2017-09-25 Ewald Hew - - [psaux] Extend Adobe interpreter (seac). - - This concludes the changes needed to add Type 1 support. - - * src/psaux/psintrp.c: Update includes. - (cf2_interpT2CharString) : 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 - - [psaux] Extend Adobe interpreter (flex in callothersubr). - - * src/psaux/psintrp.c (cf2_interpT2CharString) - : Fix Flex feature handling (OtherSubrs 0, 1, - 2). - : Do not actually move the `glyphPath' while doing - flex. This is to avoid closing the current contour. - -2017-09-25 Ewald Hew - - [psaux] Extend Adobe interpreter (callothersubr). - - * src/psaux/psintrp.c (cf2_interpT2CharString) - : 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 - - [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. - : Ensure that the stack is not cleared after getting - `OtherSubr' results. - Fix stack access. - -2017-09-25 Ewald Hew - - [psaux] Extend Adobe interpreter (callsubr). - - * src/psaux/psintrp.c (cf2_interpT2CharString) : - Type 1 mode. - - * src/psaux/psft.c (cf2_initLocalRegionBuffer): Add Type 1 mode. - -2017-09-25 Ewald Hew - - [psaux] Extend Adobe interpreter (div, four-byte numbers). - - * src/psaux/psintrp.c (cf2_interpT2CharString) : Add - Type 1 mode. Type 1 requires large integers to be followed by - `div'; cf. `Adobe Type 1 Font Format', section 6.2. - : 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 - - [psaux] Extend Adobe interpreter (hints). - - * src/psaux/psintrp.c (cf2_interpT2CharString) : Add correction for left sidebearing in Type 1 mode. - Allow adding hints mid-charstring. - : 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 - - [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. - : `hsbw' or `sbw' - must be the first operation in a Type 1 charstring. - : Fix data access and add correction for - left sidebearing. - -2017-09-25 Ewald Hew - - [psaux] Extend Adobe interpreter (setcurrentpoint). - - * src/psaux/psintrp.c (cf2_interpT2CharString) - : Fix stack access. - -2017-09-25 Ewald Hew - - [psaux] Extend Adobe interpreter (closepath). - - * src/psaux/psintrp.c (cf2_interpT2CharString) : - Use the right builder function. We can use the `haveWidth' boolean - already present, instead of implementing `parse_state'. - -2017-09-25 Ewald Hew - - [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 - - [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 - - [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 - - [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 - - 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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - 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 - - [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 - - [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 - - [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 - - [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 - - [build] Windows-style DLL versioning. - - * build/windows/ftver.rc: New VERSIONINFO resource. - * build/windows/vc2010/freetype.vcxproj: Further improvements. - -2017-09-23 Ben Wagner - - [truetype] Really fix #52082. - - * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional. - -2017-09-23 Werner Lemberg - - [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 - - [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 - - [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 - - [build] Simplify Visual C++ 2010 project. - - * build/windows/vc2010/freetype.vcxproj: Remove fake singlethreaded - configurations and tweak. - -2017-09-21 Werner Lemberg - - [truetype] Integer overflow (#52082). - - * src/truetype/ttinterp.c (Ins_MDRP): Avoid FT_ABS. - -2017-09-21 Werner Lemberg - - [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 - - [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 - - [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 - - [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 - - [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 - - [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 - - [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/sdk/lib/3rdparty/freetype/README b/sdk/lib/3rdparty/freetype/README index 3391a573f5d..e4c8cf1c575 100644 --- a/sdk/lib/3rdparty/freetype/README +++ b/sdk/lib/3rdparty/freetype/README @@ -1,4 +1,4 @@ - FreeType 2.10.0 + FreeType 2.10.4 =============== Homepage: https://www.freetype.org @@ -16,17 +16,20 @@ the file `docs/LICENSE.TXT' for the available licenses. 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 + use the file `index.html' as the top entry point. [Please note that + currently the search function for locally installed documentation + doesn't work due to cross-site scripting issues.] + + Additional documentation is available as a separate package from our + sites. Go to https://download.savannah.gnu.org/releases/freetype/ and download one of the following files. - freetype-doc-2.10.0.tar.bz2 - freetype-doc-2.10.0.tar.gz - ftdoc2100.zip + freetype-doc-2.10.4.tar.xz + freetype-doc-2.10.4.tar.gz + ftdoc2104.zip To view the documentation online, go to @@ -64,6 +67,18 @@ a terse message that only says `it doesn't work'. + Patches + ======= + + Please submit patches to the `freetype-devel@nongnu.org' mailing + list -- and thank you in advance for your work on improving + FreeType! + + Details on the process can be found here: + + https://www.freetype.org/developer.html#patches + + Enjoy! @@ -71,7 +86,7 @@ ---------------------------------------------------------------------- -Copyright (C) 2006-2019 by +Copyright (C) 2006-2020 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/TechNote.txt b/sdk/lib/3rdparty/freetype/TechNote.txt index 1a5e8118ffa..2574b4e8cd7 100644 --- a/sdk/lib/3rdparty/freetype/TechNote.txt +++ b/sdk/lib/3rdparty/freetype/TechNote.txt @@ -1,4 +1,20 @@ -# Technical notes on ReactOS FreeType 2.10.0 +# Technical notes on ReactOS FreeType + +## Overview + +ReactOS FreeType is a slightly hacked version of FreeType. See also the original FreeType: + +- https://freetype.org/ +- https://sourceforge.net/projects/freetype/files/freetype2/ + +## ReactOS FreeType 2.10.4 + +- Now woff/woff2 formats are supported (not handled yet). +- Reduced memory leaks. +- rm -fr sdk/lib/3rdparty/freetype/src/gxvalid +- rm -fr sdk/lib/3rdparty/freetype/src/otvalid + +## ReactOS FreeType 2.10.0 - FreeType in ReactOS is a static library. ftfd.dll (win32ss/drivers/font/ftfd) actually uses FreeType. - As usual for 3rd party libraries, the parts that differ are wrapped by #ifdef __REACTOS__ ... #endif. diff --git a/sdk/lib/3rdparty/freetype/src/base/ftdebug.c b/sdk/lib/3rdparty/freetype/builds/windows/ftdebug.c similarity index 91% rename from sdk/lib/3rdparty/freetype/src/base/ftdebug.c rename to sdk/lib/3rdparty/freetype/builds/windows/ftdebug.c index 15dd7c72cd3..c44531b6044 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftdebug.c +++ b/sdk/lib/3rdparty/freetype/builds/windows/ftdebug.c @@ -2,9 +2,9 @@ * * ftdebug.c * - * Debugging and logging component (body). + * Debugging and logging component for Win32 (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -41,13 +41,20 @@ */ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_DEBUG_H +#include +#include #ifdef FT_DEBUG_LEVEL_ERROR +#include +#include +#include + +#ifndef __REACTOS__ +#include +#endif + /* documentation is in ftdebug.h */ #ifndef __REACTOS__ /* win32ss/drivers/font/ftfd/rosglue.c defines this */ @@ -55,16 +62,19 @@ FT_Message( const char* fmt, ... ) { - va_list ap; + static char buf[8192]; + va_list ap; va_start( ap, fmt ); vfprintf( stderr, fmt, ap ); + /* send the string to the debugger as well */ + vsprintf( buf, fmt, ap ); + OutputDebugStringA( buf ); va_end( ap ); } #endif - /* documentation is in ftdebug.h */ #ifndef __REACTOS__ /* win32ss/drivers/font/ftfd/rosglue.c defines this */ @@ -72,18 +82,19 @@ FT_Panic( const char* fmt, ... ) { - va_list ap; + static char buf[8192]; + va_list ap; va_start( ap, fmt ); - vfprintf( stderr, fmt, ap ); + vsprintf( buf, fmt, ap ); + OutputDebugStringA( buf ); va_end( ap ); exit( EXIT_FAILURE ); } #endif - /* documentation is in ftdebug.h */ FT_BASE_DEF( int ) @@ -111,7 +122,6 @@ #endif /* FT_DEBUG_LEVEL_ERROR */ - #ifdef FT_DEBUG_LEVEL_TRACE /* array of trace levels, initialized to 0; */ @@ -130,7 +140,7 @@ static const char* ft_trace_toggles[trace_count + 1] = { -#include FT_INTERNAL_TRACE_H +#include NULL }; @@ -200,7 +210,7 @@ FT_BASE_DEF( void ) ft_debug_init( void ) { - const char* ft2_debug = ft_getenv( "FT2_DEBUG" ); + const char* ft2_debug = getenv( "FT2_DEBUG" ); if ( ft2_debug ) diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/ftconfig.h b/sdk/lib/3rdparty/freetype/include/freetype/config/ftconfig.h index 94666033775..b464e0b7895 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/config/ftconfig.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/ftconfig.h @@ -4,7 +4,7 @@ * * ANSI-specific configuration file (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -41,533 +41,9 @@ #include FT_CONFIG_OPTIONS_H #include FT_CONFIG_STANDARD_LIBRARY_H - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * PLATFORM-SPECIFIC CONFIGURATION MACROS - * - * These macros can be toggled to suit a specific system. The current ones - * are defaults used to compile FreeType in an ANSI C environment (16bit - * compilers are also supported). Copy this file to your own - * `builds/` directory, and edit it to port the engine. - * - */ - - - /* There are systems (like the Texas Instruments 'C54x) where a `char` */ - /* has 16~bits. ANSI~C says that `sizeof(char)` is always~1. Since an */ - /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which */ - /* is probably unexpected. */ - /* */ - /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a */ - /* `char` type. */ - -#ifndef FT_CHAR_BIT -#define FT_CHAR_BIT CHAR_BIT -#endif - - - /* The size of an `int` type. */ -#if FT_UINT_MAX == 0xFFFFUL -#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT ) -#elif FT_UINT_MAX == 0xFFFFFFFFUL -#define FT_SIZEOF_INT ( 32 / FT_CHAR_BIT ) -#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL -#define FT_SIZEOF_INT ( 64 / FT_CHAR_BIT ) -#else -#error "Unsupported size of `int' type!" -#endif - - /* The size of a `long` type. A five-byte `long` (as used e.g. on the */ - /* DM642) is recognized but avoided. */ -#if FT_ULONG_MAX == 0xFFFFFFFFUL -#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) -#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL -#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) -#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL -#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT ) -#else -#error "Unsupported size of `long' type!" -#endif - - - /* `FT_UNUSED` 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. - */ -#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) ) - /* No Carbon frameworks for 64bit 10.4.x. */ - /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */ - /* so guess the system version by maximum errno before inclusion. */ -#include -#ifdef ECANCELED /* defined since 10.2 */ -#include "AvailabilityMacros.h" -#endif -#if defined( __LP64__ ) && \ - ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) -#undef FT_MACINTOSH -#endif - -#elif defined( __SC__ ) || defined( __MRC__ ) - /* Classic MacOS compilers */ -#include "ConditionalMacros.h" -#if TARGET_OS_MAC -#define FT_MACINTOSH 1 -#endif - -#endif - - - /* Fix compiler warning with sgi compiler. */ -#if defined( __sgi ) && !defined( __GNUC__ ) -#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) -#pragma set woff 3505 -#endif -#endif - - - /************************************************************************** - * - * @section: - * basic_types - * - */ - - - /************************************************************************** - * - * @type: - * FT_Int16 - * - * @description: - * A typedef for a 16bit signed integer type. - */ - typedef signed short FT_Int16; - - - /************************************************************************** - * - * @type: - * FT_UInt16 - * - * @description: - * A typedef for a 16bit unsigned integer type. - */ - typedef unsigned short FT_UInt16; - - /* */ - - - /* this #if 0 ... #endif clause is for documentation purposes */ -#if 0 - - /************************************************************************** - * - * @type: - * FT_Int32 - * - * @description: - * A typedef for a 32bit signed integer type. The size depends on the - * configuration. - */ - typedef signed XXX FT_Int32; - - - /************************************************************************** - * - * @type: - * FT_UInt32 - * - * A typedef for a 32bit unsigned integer type. The size depends on the - * configuration. - */ - typedef unsigned XXX FT_UInt32; - - - /************************************************************************** - * - * @type: - * FT_Int64 - * - * A typedef for a 64bit signed integer type. The size depends on the - * configuration. Only defined if there is real 64bit support; - * otherwise, it gets emulated with a structure (if necessary). - */ - typedef signed XXX FT_Int64; - - - /************************************************************************** - * - * @type: - * FT_UInt64 - * - * A typedef for a 64bit unsigned integer type. The size depends on the - * configuration. Only defined if there is real 64bit support; - * otherwise, it gets emulated with a structure (if necessary). - */ - typedef unsigned XXX FT_UInt64; - - /* */ - -#endif - -#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT ) - - typedef signed int FT_Int32; - typedef unsigned int FT_UInt32; - -#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT ) - - typedef signed long FT_Int32; - typedef unsigned long FT_UInt32; - -#else -#error "no 32bit type found -- please check your configuration files" -#endif - - - /* look up an integer type that is at least 32~bits */ -#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT ) - - typedef int FT_Fast; - typedef unsigned int FT_UFast; - -#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT ) - - typedef long FT_Fast; - typedef unsigned long FT_UFast; - -#endif - - - /* determine whether we have a 64-bit `int` type for platforms without */ - /* Autoconf */ -#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT ) - - /* `FT_LONG64` must be defined if a 64-bit type is available */ -#define FT_LONG64 -#define FT_INT64 long -#define FT_UINT64 unsigned long - - /************************************************************************** - * - * A 64-bit data type may create compilation problems if you compile in - * strict ANSI mode. To avoid them, we disable other 64-bit data types if - * `__STDC__` is defined. You can however ignore this rule by defining the - * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro. - */ -#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 ) - -#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L - -#define FT_LONG64 -#define FT_INT64 long long int -#define FT_UINT64 unsigned long long int - -#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ - - /* this compiler provides the `__int64` type */ -#define FT_LONG64 -#define FT_INT64 __int64 -#define FT_UINT64 unsigned __int64 - -#elif defined( __BORLANDC__ ) /* Borland C++ */ - - /* XXXX: We should probably check the value of `__BORLANDC__` in order */ - /* to test the compiler version. */ - - /* this compiler provides the `__int64` type */ -#define FT_LONG64 -#define FT_INT64 __int64 -#define FT_UINT64 unsigned __int64 - -#elif defined( __WATCOMC__ ) /* Watcom C++ */ - - /* Watcom doesn't provide 64-bit data types */ - -#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ - -#define FT_LONG64 -#define FT_INT64 long long int -#define FT_UINT64 unsigned long long int - -#elif defined( __GNUC__ ) - - /* GCC provides the `long long` type */ -#define FT_LONG64 -#define FT_INT64 long long int -#define FT_UINT64 unsigned long long int - -#endif /* __STDC_VERSION__ >= 199901L */ - -#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ - -#ifdef FT_LONG64 - typedef FT_INT64 FT_Int64; - typedef FT_UINT64 FT_UInt64; -#endif - - -#ifdef _WIN64 - /* only 64bit Windows uses the LLP64 data model, i.e., */ - /* 32bit integers, 64bit pointers */ -#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x) -#else -#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x) -#endif - - - /************************************************************************** - * - * miscellaneous - * - */ - - -#define FT_BEGIN_STMNT do { -#define FT_END_STMNT } while ( 0 ) -#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT - - - /* `typeof` condition taken from gnulib's `intprops.h` header file */ -#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \ - ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \ - defined( __IBM__TYPEOF__ ) ) || \ - ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) ) -#define FT_TYPEOF( type ) ( __typeof__ ( type ) ) -#else -#define FT_TYPEOF( type ) /* empty */ -#endif - - - /* 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 -#define FT_LOCAL_DEF( x ) static x - -#else - -#ifdef __cplusplus -#define FT_LOCAL( x ) extern "C" x -#define FT_LOCAL_DEF( x ) extern "C" x -#else -#define FT_LOCAL( x ) extern x -#define FT_LOCAL_DEF( x ) x -#endif - -#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ - -#define FT_LOCAL_ARRAY( x ) extern const x -#define FT_LOCAL_ARRAY_DEF( x ) const x - - - /* 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 -#define FT_BASE( x ) extern "C" x -#else -#define FT_BASE( x ) extern x -#endif - -#endif /* !FT_BASE */ - - -#ifndef FT_BASE_DEF - -#ifdef __cplusplus -#define FT_BASE_DEF( x ) x -#else -#define FT_BASE_DEF( x ) x -#endif - -#endif /* !FT_BASE_DEF */ - - - /* 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_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 -#define FT_EXPORT( x ) extern x -#endif - -#else - -#if defined( _WIN32 ) && defined( DLL_IMPORT ) -#define FT_EXPORT( x ) __declspec( dllimport ) x -#elif defined( __cplusplus ) -#define FT_EXPORT( x ) extern "C" x -#else -#define FT_EXPORT( x ) extern x -#endif - -#endif - -#endif /* !FT_EXPORT */ - - -#ifndef FT_EXPORT_DEF - -#ifdef __cplusplus -#define FT_EXPORT_DEF( x ) extern "C" x -#else -#define FT_EXPORT_DEF( x ) extern x -#endif - -#endif /* !FT_EXPORT_DEF */ - - -#ifndef FT_EXPORT_VAR - -#ifdef __cplusplus -#define FT_EXPORT_VAR( x ) extern "C" x -#else -#define FT_EXPORT_VAR( x ) extern x -#endif - -#endif /* !FT_EXPORT_VAR */ - - - /* The following macros are needed to compile the library with a */ - /* C++ compiler and with 16bit compilers. */ - /* */ - - /* This is special. Within C++, you must specify `extern "C"` for */ - /* functions which are used via function pointers, and you also */ - /* must do that for structures which contain function pointers to */ - /* assure C linkage -- it's not possible to have (local) anonymous */ - /* functions which are accessed by (global) function pointers. */ - /* */ - /* */ - /* FT_CALLBACK_DEF is used to _define_ a callback function, */ - /* located in the same source code file as the structure that uses */ - /* it. */ - /* */ - /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */ - /* and define a callback function, respectively, in a similar way */ - /* as FT_BASE and FT_BASE_DEF work. */ - /* */ - /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ - /* contains pointers to callback functions. */ - /* */ - /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ - /* that contains pointers to callback functions. */ - /* */ - /* */ - /* Some 16bit compilers have to redefine these macros to insert */ - /* the infamous `_cdecl` or `__fastcall` declarations. */ - /* */ -#ifndef FT_CALLBACK_DEF -#ifdef __cplusplus -#define FT_CALLBACK_DEF( x ) extern "C" x -#else -#define FT_CALLBACK_DEF( x ) static x -#endif -#endif /* FT_CALLBACK_DEF */ - -#ifndef FT_BASE_CALLBACK -#ifdef __cplusplus -#define FT_BASE_CALLBACK( x ) extern "C" x -#define FT_BASE_CALLBACK_DEF( x ) extern "C" x -#else -#define FT_BASE_CALLBACK( x ) extern x -#define FT_BASE_CALLBACK_DEF( x ) x -#endif -#endif /* FT_BASE_CALLBACK */ - -#ifndef FT_CALLBACK_TABLE -#ifdef __cplusplus -#define FT_CALLBACK_TABLE extern "C" -#define FT_CALLBACK_TABLE_DEF extern "C" -#else -#define FT_CALLBACK_TABLE extern -#define FT_CALLBACK_TABLE_DEF /* nothing */ -#endif -#endif /* FT_CALLBACK_TABLE */ - - -FT_END_HEADER - +#include +#include +#include #endif /* FTCONFIG_H_ */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/ftheader.h b/sdk/lib/3rdparty/freetype/include/freetype/config/ftheader.h index 696d6ba9066..28b5cc60cfa 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/config/ftheader.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/ftheader.h @@ -4,7 +4,7 @@ * * Build macros of the FreeType 2 library. * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -30,10 +30,12 @@ /* encapsulated in an `extern "C" { .. }` block when included from a */ /* C++ compiler. */ /* */ -#ifdef __cplusplus -#define FT_BEGIN_HEADER extern "C" { -#else -#define FT_BEGIN_HEADER /* nothing */ +#ifndef FT_BEGIN_HEADER +# ifdef __cplusplus +# define FT_BEGIN_HEADER extern "C" { +# else +# define FT_BEGIN_HEADER /* nothing */ +# endif #endif @@ -48,10 +50,12 @@ /* encapsulated in an `extern "C" { .. }` block when included from a */ /* C++ compiler. */ /* */ -#ifdef __cplusplus -#define FT_END_HEADER } -#else -#define FT_END_HEADER /* nothing */ +#ifndef FT_END_HEADER +# ifdef __cplusplus +# define FT_END_HEADER } +# else +# define FT_END_HEADER /* nothing */ +# endif #endif @@ -73,9 +77,16 @@ * 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: + * In addition to the normal scheme of including header files like + * + * ``` + * #include + * #include + * #include + * ``` + * + * it is possible to used named macros instead. They can be used + * directly in `#include` statements as in * * ``` * #include FT_FREETYPE_H @@ -83,13 +94,9 @@ * #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. + * These macros were introduced to overcome the infamous 8.3~naming rule + * required by DOS (and `FT_MULTIPLE_MASTERS_H` is a lot more meaningful + * than `ftmm.h`). * */ @@ -797,16 +804,19 @@ #define FT_CACHE_INTERNAL_IMAGE_H FT_CACHE_H #define FT_CACHE_INTERNAL_SBITS_H FT_CACHE_H - - /* - * Include internal headers definitions from `` only when - * building the library. - */ +/* TODO(david): Move this section below to a different header */ #ifdef FT2_BUILD_LIBRARY -#define FT_INTERNAL_INTERNAL_H -#include FT_INTERNAL_INTERNAL_H -#endif /* FT2_BUILD_LIBRARY */ +#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */ + /* We disable the warning `conditional expression is constant' here */ + /* in order to compile cleanly with the maximum level of warnings. */ + /* In particular, the warning complains about stuff like `while(0)' */ + /* which is very useful in macro definitions. There is no benefit */ + /* in having it enabled. */ +#pragma warning( disable : 4127 ) + +#endif /* _MSC_VER */ +#endif /* FT2_BUILD_LIBRARY */ #endif /* FTHEADER_H_ */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/ftmodule.h b/sdk/lib/3rdparty/freetype/include/freetype/config/ftmodule.h index 7c603e53275..b5c4b1ee583 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/config/ftmodule.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/ftmodule.h @@ -25,8 +25,6 @@ FT_USE_MODULE( FT_Module_Class, pshinter_module_class ) FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class ) FT_USE_MODULE( FT_Module_Class, sfnt_module_class ) FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class ) -FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class ) -FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class ) FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class ) /* EOF */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/ftoption.h b/sdk/lib/3rdparty/freetype/include/freetype/config/ftoption.h index 86edef1066b..da24a0ee96c 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/config/ftoption.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/ftoption.h @@ -4,7 +4,7 @@ * * User-selectable configuration macros (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -42,7 +42,7 @@ FT_BEGIN_HEADER * 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 + * The default FreeType Makefiles use the build directory * `builds/` by default, but you can easily change that for your * own projects. * @@ -123,10 +123,8 @@ FT_BEGIN_HEADER * 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. + * When this macro is not defined, FreeType offers alternative LCD + * rendering technology that produces excellent output. */ #ifdef __REACTOS__ #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING @@ -298,6 +296,22 @@ FT_BEGIN_HEADER /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ + /************************************************************************** + * + * Brotli support. + * + * FreeType uses the Brotli library to provide support for decompressing + * WOFF2 streams. + * + * 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_BROTLI */ + + /************************************************************************** * * Glyph Postscript Names handling @@ -536,7 +550,7 @@ FT_BEGIN_HEADER /************************************************************************** * - * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support coloured + * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' * module (namely TrueType~& OpenType). */ @@ -881,9 +895,11 @@ FT_BEGIN_HEADER * * Compile 'autofit' module with fallback Indic script support, covering * some scripts that the 'latin' submodule of the 'autofit' module doesn't - * (yet) handle. + * (yet) handle. Currently, this needs option `AF_CONFIG_OPTION_CJK`. */ +#ifdef AF_CONFIG_OPTION_CJK #define AF_CONFIG_OPTION_INDIC +#endif /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/ftstdlib.h b/sdk/lib/3rdparty/freetype/include/freetype/config/ftstdlib.h index 438b6145d51..d6091f8b3d6 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/config/ftstdlib.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/ftstdlib.h @@ -5,7 +5,7 @@ * ANSI-specific library and header configuration file (specification * only). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/integer-types.h b/sdk/lib/3rdparty/freetype/include/freetype/config/integer-types.h new file mode 100644 index 00000000000..a0ca0c95e21 --- /dev/null +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/integer-types.h @@ -0,0 +1,245 @@ +/**************************************************************************** + * + * config/integer-types.h + * + * FreeType integer types definitions. + * + * Copyright (C) 1996-2020 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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_CONFIG_INTEGER_TYPES_H_ +#define FREETYPE_CONFIG_INTEGER_TYPES_H_ + + /* There are systems (like the Texas Instruments 'C54x) where a `char` */ + /* has 16~bits. ANSI~C says that `sizeof(char)` is always~1. Since an */ + /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which */ + /* is probably unexpected. */ + /* */ + /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a */ + /* `char` type. */ + +#ifndef FT_CHAR_BIT +#define FT_CHAR_BIT CHAR_BIT +#endif + +#ifndef FT_SIZEOF_INT + + /* The size of an `int` type. */ +#if FT_UINT_MAX == 0xFFFFUL +#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT ) +#elif FT_UINT_MAX == 0xFFFFFFFFUL +#define FT_SIZEOF_INT ( 32 / FT_CHAR_BIT ) +#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL +#define FT_SIZEOF_INT ( 64 / FT_CHAR_BIT ) +#else +#error "Unsupported size of `int' type!" +#endif + +#endif /* !defined(FT_SIZEOF_INT) */ + +#ifndef FT_SIZEOF_LONG + + /* The size of a `long` type. A five-byte `long` (as used e.g. on the */ + /* DM642) is recognized but avoided. */ +#if FT_ULONG_MAX == 0xFFFFFFFFUL +#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) +#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL +#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) +#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL +#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT ) +#else +#error "Unsupported size of `long' type!" +#endif + +#endif /* !defined(FT_SIZEOF_LONG) */ + + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @type: + * FT_Int16 + * + * @description: + * A typedef for a 16bit signed integer type. + */ + typedef signed short FT_Int16; + + + /************************************************************************** + * + * @type: + * FT_UInt16 + * + * @description: + * A typedef for a 16bit unsigned integer type. + */ + typedef unsigned short FT_UInt16; + + /* */ + + + /* this #if 0 ... #endif clause is for documentation purposes */ +#if 0 + + /************************************************************************** + * + * @type: + * FT_Int32 + * + * @description: + * A typedef for a 32bit signed integer type. The size depends on the + * configuration. + */ + typedef signed XXX FT_Int32; + + + /************************************************************************** + * + * @type: + * FT_UInt32 + * + * A typedef for a 32bit unsigned integer type. The size depends on the + * configuration. + */ + typedef unsigned XXX FT_UInt32; + + + /************************************************************************** + * + * @type: + * FT_Int64 + * + * A typedef for a 64bit signed integer type. The size depends on the + * configuration. Only defined if there is real 64bit support; + * otherwise, it gets emulated with a structure (if necessary). + */ + typedef signed XXX FT_Int64; + + + /************************************************************************** + * + * @type: + * FT_UInt64 + * + * A typedef for a 64bit unsigned integer type. The size depends on the + * configuration. Only defined if there is real 64bit support; + * otherwise, it gets emulated with a structure (if necessary). + */ + typedef unsigned XXX FT_UInt64; + + /* */ + +#endif + +#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT ) + + typedef signed int FT_Int32; + typedef unsigned int FT_UInt32; + +#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT ) + + typedef signed long FT_Int32; + typedef unsigned long FT_UInt32; + +#else +#error "no 32bit type found -- please check your configuration files" +#endif + + + /* look up an integer type that is at least 32~bits */ +#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT ) + + typedef int FT_Fast; + typedef unsigned int FT_UFast; + +#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT ) + + typedef long FT_Fast; + typedef unsigned long FT_UFast; + +#endif + + + /* determine whether we have a 64-bit `int` type for platforms without */ + /* Autoconf */ +#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT ) + + /* `FT_LONG64` must be defined if a 64-bit type is available */ +#define FT_LONG64 +#define FT_INT64 long +#define FT_UINT64 unsigned long + + /************************************************************************** + * + * A 64-bit data type may create compilation problems if you compile in + * strict ANSI mode. To avoid them, we disable other 64-bit data types if + * `__STDC__` is defined. You can however ignore this rule by defining the + * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro. + */ +#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 ) + +#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L + +#define FT_LONG64 +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ + + /* this compiler provides the `__int64` type */ +#define FT_LONG64 +#define FT_INT64 __int64 +#define FT_UINT64 unsigned __int64 + +#elif defined( __BORLANDC__ ) /* Borland C++ */ + + /* XXXX: We should probably check the value of `__BORLANDC__` in order */ + /* to test the compiler version. */ + + /* this compiler provides the `__int64` type */ +#define FT_LONG64 +#define FT_INT64 __int64 +#define FT_UINT64 unsigned __int64 + +#elif defined( __WATCOMC__ ) /* Watcom C++ */ + + /* Watcom doesn't provide 64-bit data types */ + +#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ + +#define FT_LONG64 +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#elif defined( __GNUC__ ) + + /* GCC provides the `long long` type */ +#define FT_LONG64 +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#endif /* __STDC_VERSION__ >= 199901L */ + +#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ + +#ifdef FT_LONG64 + typedef FT_INT64 FT_Int64; + typedef FT_UINT64 FT_UInt64; +#endif + + +#endif /* FREETYPE_CONFIG_INTEGER_TYPES_H_ */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/mac-support.h b/sdk/lib/3rdparty/freetype/include/freetype/config/mac-support.h new file mode 100644 index 00000000000..94867088e9d --- /dev/null +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/mac-support.h @@ -0,0 +1,49 @@ +/**************************************************************************** + * + * config/mac-support.h + * + * Mac/OS X support configuration header. + * + * Copyright (C) 1996-2020 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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_CONFIG_MAC_SUPPORT_H_ +#define FREETYPE_CONFIG_MAC_SUPPORT_H_ + + /************************************************************************** + * + * Mac support + * + * This is the only necessary change, so it is defined here instead + * providing a new configuration file. + */ +#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) ) + /* No Carbon frameworks for 64bit 10.4.x. */ + /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */ + /* so guess the system version by maximum errno before inclusion. */ +#include +#ifdef ECANCELED /* defined since 10.2 */ +#include "AvailabilityMacros.h" +#endif +#if defined( __LP64__ ) && \ + ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) +#undef FT_MACINTOSH +#endif + +#elif defined( __SC__ ) || defined( __MRC__ ) + /* Classic MacOS compilers */ +#include "ConditionalMacros.h" +#if TARGET_OS_MAC +#define FT_MACINTOSH 1 +#endif + +#endif /* Mac support */ + +#endif /* FREETYPE_CONFIG_MAC_SUPPORT_H_ */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/config/public-macros.h b/sdk/lib/3rdparty/freetype/include/freetype/config/public-macros.h new file mode 100644 index 00000000000..6aa673e807c --- /dev/null +++ b/sdk/lib/3rdparty/freetype/include/freetype/config/public-macros.h @@ -0,0 +1,120 @@ +/**************************************************************************** + * + * config/public-macros.h + * + * Define a set of compiler macros used in public FreeType headers. + * + * Copyright (C) 2020 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 definitions in this file are used by the public FreeType headers + * and thus should be considered part of the public API. + * + * Other compiler-specific macro definitions that are not exposed by the + * FreeType API should go into + * `include/freetype/internal/compiler-macros.h` instead. + */ +#ifndef FREETYPE_CONFIG_PUBLIC_MACROS_H_ +#define FREETYPE_CONFIG_PUBLIC_MACROS_H_ + + /* + * `FT_BEGIN_HEADER` and `FT_END_HEADER` might have already been defined + * by `freetype/config/ftheader.h`, but we don't want to include this + * header here, so redefine the macros here only when needed. Their + * definition is very stable, so keeping them in sync with the ones in the + * header should not be a maintenance issue. + */ +#ifndef FT_BEGIN_HEADER +#ifdef __cplusplus +#define FT_BEGIN_HEADER extern "C" { +#else +#define FT_BEGIN_HEADER /* empty */ +#endif +#endif /* FT_BEGIN_HEADER */ + +#ifndef FT_END_HEADER +#ifdef __cplusplus +#define FT_END_HEADER } +#else +#define FT_END_HEADER /* empty */ +#endif +#endif /* FT_END_HEADER */ + + +FT_BEGIN_HEADER + + /* + * Mark a function declaration as public. This ensures it will be + * properly exported to client code. Place this before a function + * declaration. + * + * NOTE: This macro should be considered an internal implementation + * detail, and not part of the FreeType API. It is only defined here + * because it is needed by `FT_EXPORT`. + */ + + /* Visual C, mingw */ +#if defined( _WIN32 ) + +#if defined( FT2_BUILD_LIBRARY ) && defined( DLL_EXPORT ) +#define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllexport ) +#elif defined( DLL_IMPORT ) +#define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllimport ) +#endif + + /* gcc, clang */ +#elif ( defined( __GNUC__ ) && __GNUC__ >= 4 ) || defined( __clang__ ) +#define FT_PUBLIC_FUNCTION_ATTRIBUTE \ + __attribute__(( visibility( "default" ) )) + + /* Sun */ +#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550 +#define FT_PUBLIC_FUNCTION_ATTRIBUTE __global +#endif + + +#ifndef FT_PUBLIC_FUNCTION_ATTRIBUTE +#define FT_PUBLIC_FUNCTION_ATTRIBUTE /* empty */ +#endif + + + /* + * Define a public FreeType API function. This ensures it is properly + * exported or imported at build time. The macro parameter is the + * function's return type as in: + * + * FT_EXPORT( FT_Bool ) + * FT_Object_Method( FT_Object obj, + * ... ); + * + * NOTE: This requires that all `FT_EXPORT` uses are inside + * `FT_BEGIN_HEADER ... FT_END_HEADER` blocks. This guarantees that the + * functions are exported with C linkage, even when the header is included + * by a C++ source file. + */ +#define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x + + /* + * `FT_UNUSED` indicates that a given parameter is not used -- this is + * only used to get rid of unpleasant compiler warnings. + * + * Technically, this was not meant to be part of the public API, but some + * third-party code depends on it. + */ +#ifndef FT_UNUSED +#define FT_UNUSED( arg ) ( (arg) = (arg) ) +#endif + + +FT_END_HEADER + +#endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/freetype.h b/sdk/lib/3rdparty/freetype/include/freetype/freetype.h index 4f2eaca6919..be191f5aa0e 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/freetype.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/freetype.h @@ -4,7 +4,7 @@ * * FreeType high-level API and common types (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,19 +20,10 @@ #define FREETYPE_H_ -#ifndef FT_FREETYPE_H -#error "`ft2build.h' hasn't been included yet!" -#error "Please always use macros to include FreeType header files." -#error "Example:" -#error " #include " -#error " #include FT_FREETYPE_H" -#endif - - #include #include FT_CONFIG_CONFIG_H -#include FT_TYPES_H -#include FT_ERRORS_H +#include +#include FT_BEGIN_HEADER @@ -51,22 +42,15 @@ FT_BEGIN_HEADER * 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 + * To be as flexible as possible (and for historical reasons), you must + * load file `ft2build.h` first before other header files, for example * * ``` * #include * - * #include FT_FREETYPE_H - * #include FT_OUTLINE_H + * #include + * #include * ``` - * - * 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. - * */ @@ -645,7 +629,7 @@ FT_BEGIN_HEADER * 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', + * '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'. * @@ -974,6 +958,9 @@ FT_BEGIN_HEADER * Note that the bounding box might be off by (at least) one pixel for * hinted fonts. See @FT_Size_Metrics for further discussion. * + * Note that the bounding box does not vary in OpenType variable fonts + * and should only be used in relation to the default instance. + * * 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 @@ -1239,7 +1226,7 @@ FT_BEGIN_HEADER * */ #define FT_HAS_HORIZONTAL( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL ) + ( !!( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL ) ) /************************************************************************** @@ -1253,7 +1240,7 @@ FT_BEGIN_HEADER * */ #define FT_HAS_VERTICAL( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_VERTICAL ) + ( !!( (face)->face_flags & FT_FACE_FLAG_VERTICAL ) ) /************************************************************************** @@ -1267,7 +1254,7 @@ FT_BEGIN_HEADER * */ #define FT_HAS_KERNING( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_KERNING ) + ( !!( (face)->face_flags & FT_FACE_FLAG_KERNING ) ) /************************************************************************** @@ -1282,7 +1269,7 @@ FT_BEGIN_HEADER * */ #define FT_IS_SCALABLE( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_SCALABLE ) + ( !!( (face)->face_flags & FT_FACE_FLAG_SCALABLE ) ) /************************************************************************** @@ -1301,7 +1288,7 @@ FT_BEGIN_HEADER * */ #define FT_IS_SFNT( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_SFNT ) + ( !!( (face)->face_flags & FT_FACE_FLAG_SFNT ) ) /************************************************************************** @@ -1316,7 +1303,7 @@ FT_BEGIN_HEADER * */ #define FT_IS_FIXED_WIDTH( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) + ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) ) /************************************************************************** @@ -1331,7 +1318,7 @@ FT_BEGIN_HEADER * */ #define FT_HAS_FIXED_SIZES( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES ) + ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES ) ) /************************************************************************** @@ -1357,7 +1344,7 @@ FT_BEGIN_HEADER * */ #define FT_HAS_GLYPH_NAMES( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) + ( !!( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) ) /************************************************************************** @@ -1372,7 +1359,7 @@ FT_BEGIN_HEADER * */ #define FT_HAS_MULTIPLE_MASTERS( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) + ( !!( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) ) /************************************************************************** @@ -1394,7 +1381,7 @@ FT_BEGIN_HEADER * */ #define FT_IS_NAMED_INSTANCE( face ) \ - ( (face)->face_index & 0x7FFF0000L ) + ( !!( (face)->face_index & 0x7FFF0000L ) ) /************************************************************************** @@ -1412,7 +1399,7 @@ FT_BEGIN_HEADER * */ #define FT_IS_VARIATION( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_VARIATION ) + ( !!( (face)->face_flags & FT_FACE_FLAG_VARIATION ) ) /************************************************************************** @@ -1429,7 +1416,7 @@ FT_BEGIN_HEADER * */ #define FT_IS_CID_KEYED( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED ) + ( !!( (face)->face_flags & FT_FACE_FLAG_CID_KEYED ) ) /************************************************************************** @@ -1443,7 +1430,7 @@ FT_BEGIN_HEADER * */ #define FT_IS_TRICKY( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_TRICKY ) + ( !!( (face)->face_flags & FT_FACE_FLAG_TRICKY ) ) /************************************************************************** @@ -1460,7 +1447,7 @@ FT_BEGIN_HEADER * */ #define FT_HAS_COLOR( face ) \ - ( (face)->face_flags & FT_FACE_FLAG_COLOR ) + ( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) ) /************************************************************************** @@ -1766,6 +1753,13 @@ FT_BEGIN_HEADER * 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 @@ -2071,7 +2065,8 @@ FT_BEGIN_HEADER * The size in bytes of the file in memory. * * pathname :: - * A pointer to an 8-bit file pathname. + * A pointer to an 8-bit file pathname. The pointer is not owned by + * FreeType. * * stream :: * A handle to a source stream object. @@ -3180,6 +3175,12 @@ FT_BEGIN_HEADER * A pointer to the translation vector. Use `NULL` for the null vector. * * @note: + * This function is provided as a convenience, but keep in mind that + * @FT_Matrix coefficients are only 16.16 fixed point values, which can + * limit the accuracy of the results. Using floating-point computations + * to perform the transform directly in client code instead will always + * yield better numbers. + * * 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 @@ -3238,14 +3239,6 @@ FT_BEGIN_HEADER * 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 @@ -3932,8 +3925,8 @@ FT_BEGIN_HEADER * 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 ); /************************************************************************** @@ -4081,7 +4074,7 @@ FT_BEGIN_HEADER * 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 + * alternative, multi-color 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. @@ -4774,7 +4767,7 @@ FT_BEGIN_HEADER */ #define FREETYPE_MAJOR 2 #define FREETYPE_MINOR 10 -#define FREETYPE_PATCH 0 +#define FREETYPE_PATCH 4 /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftadvanc.h b/sdk/lib/3rdparty/freetype/include/freetype/ftadvanc.h index 95c38f92bdd..f166bc6f999 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftadvanc.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftadvanc.h @@ -4,7 +4,7 @@ * * Quick computation of advance widths (specification only). * - * Copyright (C) 2008-2019 by + * Copyright (C) 2008-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTADVANC_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -96,6 +95,7 @@ FT_BEGIN_HEADER * 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 diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftbbox.h b/sdk/lib/3rdparty/freetype/include/freetype/ftbbox.h index 22da70c0dc3..fda1ad94a5f 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftbbox.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftbbox.h @@ -4,7 +4,7 @@ * * FreeType exact bbox computation (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -31,8 +31,7 @@ #define FTBBOX_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftbdf.h b/sdk/lib/3rdparty/freetype/include/freetype/ftbdf.h index 1c46da5985d..2e1daeeaaf9 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftbdf.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftbdf.h @@ -4,7 +4,7 @@ * * FreeType API for accessing BDF-specific strings (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTBDF_H_ #define FTBDF_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftbitmap.h b/sdk/lib/3rdparty/freetype/include/freetype/ftbitmap.h index 9a9208e8190..78a06463014 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftbitmap.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftbitmap.h @@ -4,7 +4,7 @@ * * FreeType utility functions for bitmaps (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define FTBITMAP_H_ -#include -#include FT_FREETYPE_H -#include FT_COLOR_H +#include +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftbzip2.h b/sdk/lib/3rdparty/freetype/include/freetype/ftbzip2.h index ae88cfdbdb9..eb6a5a55d19 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftbzip2.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftbzip2.h @@ -4,7 +4,7 @@ * * Bzip2-compressed stream support. * - * Copyright (C) 2010-2019 by + * Copyright (C) 2010-2020 by * Joel Klinghed. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTBZIP2_H_ #define FTBZIP2_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -43,6 +42,16 @@ FT_BEGIN_HEADER * Using bzip2-compressed font files. * * @description: + * 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. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream, + * which significantly undermines the performance. + * * This section contains the declaration of Bzip2-specific functions. * */ @@ -75,15 +84,6 @@ FT_BEGIN_HEADER * **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. */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftcache.h b/sdk/lib/3rdparty/freetype/include/freetype/ftcache.h index 0d589d0b34a..60472752054 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftcache.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftcache.h @@ -4,7 +4,7 @@ * * FreeType Cache subsystem (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTCACHE_H_ -#include -#include FT_GLYPH_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftcid.h b/sdk/lib/3rdparty/freetype/include/freetype/ftcid.h index 8eafc1c78fd..a29fb333068 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftcid.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftcid.h @@ -4,7 +4,7 @@ * * FreeType API for accessing CID font information (specification). * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * Dereg Clegg and Michael Toftdal. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTCID_H_ #define FTCID_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftcolor.h b/sdk/lib/3rdparty/freetype/include/freetype/ftcolor.h index cf180219532..ecc6485e5a0 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftcolor.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftcolor.h @@ -4,7 +4,7 @@ * * FreeType's glyph color management (specification). * - * Copyright (C) 2018-2019 by + * Copyright (C) 2018-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTCOLOR_H_ #define FTCOLOR_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -125,9 +124,9 @@ FT_BEGIN_HEADER * 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 optional 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. @@ -135,8 +134,8 @@ FT_BEGIN_HEADER * `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 + * An optional 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. * @@ -147,7 +146,7 @@ FT_BEGIN_HEADER * same size. * * palette_entry_name_ids :: - * A read-only array of palette entry name IDs with + * An optional 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 @@ -163,6 +162,9 @@ FT_BEGIN_HEADER * Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to * name strings. * + * Use function @FT_Palette_Select to get the colors associated with a + * palette entry. + * * @since: * 2.10 */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftdriver.h b/sdk/lib/3rdparty/freetype/include/freetype/ftdriver.h index 497bde9f6ed..804ec34a395 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftdriver.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftdriver.h @@ -4,7 +4,7 @@ * * FreeType API for controlling driver modules (specification only). * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,9 +19,8 @@ #ifndef FTDRIVER_H_ #define FTDRIVER_H_ -#include -#include FT_FREETYPE_H -#include FT_PARAMETER_TAGS_H +#include +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -427,10 +426,6 @@ FT_BEGIN_HEADER * 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 diff --git a/sdk/lib/3rdparty/freetype/include/freetype/fterrdef.h b/sdk/lib/3rdparty/freetype/include/freetype/fterrdef.h index 9bc7dc65e32..895d2d4dc86 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/fterrdef.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/fterrdef.h @@ -4,7 +4,7 @@ * * FreeType error codes (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/include/freetype/fterrors.h b/sdk/lib/3rdparty/freetype/include/freetype/fterrors.h index 58f5a3ead12..60a637c77c6 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/fterrors.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/fterrors.h @@ -4,7 +4,7 @@ * * FreeType error code handling (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -89,7 +89,7 @@ * const char* err_msg; * } ft_errors[] = * - * #include FT_ERRORS_H + * #include * ``` * * An alternative to using an array is a switch statement. @@ -124,7 +124,7 @@ /* include module base error codes */ -#include FT_MODULE_ERRORS_H +#include /*******************************************************************/ @@ -197,7 +197,7 @@ /* now include the error codes */ -#include FT_ERROR_DEFINITIONS_H +#include #ifdef FT_ERROR_END_LIST @@ -232,11 +232,16 @@ #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`. */ + /* FT_INCLUDE_ERR_PROTOS: Control whether function prototypes should be */ + /* included with */ + /* */ + /* #include */ + /* */ + /* 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 @@ -244,6 +249,8 @@ #define FT_ERR_PROTOS_DEFINED +FT_BEGIN_HEADER + /************************************************************************** * * @function: @@ -274,6 +281,8 @@ FT_EXPORT( const char* ) FT_Error_String( FT_Error error_code ); +FT_END_HEADER + #endif /* FT_ERR_PROTOS_DEFINED */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftfntfmt.h b/sdk/lib/3rdparty/freetype/include/freetype/ftfntfmt.h index aae0b132649..f803349cd74 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftfntfmt.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftfntfmt.h @@ -4,7 +4,7 @@ * * Support functions for font formats. * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTFNTFMT_H_ #define FTFNTFMT_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftgasp.h b/sdk/lib/3rdparty/freetype/include/freetype/ftgasp.h index 24673d8ce16..6b76882c746 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftgasp.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftgasp.h @@ -4,7 +4,7 @@ * * Access of TrueType's 'gasp' table (specification). * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTGASP_H_ #define FTGASP_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftglyph.h b/sdk/lib/3rdparty/freetype/include/freetype/ftglyph.h index 4067c2e62fa..704619e3d09 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftglyph.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftglyph.h @@ -4,7 +4,7 @@ * * FreeType convenience functions to handle glyphs (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -33,8 +33,7 @@ #define FTGLYPH_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -210,7 +209,7 @@ FT_BEGIN_HEADER * * 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(). + * 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. diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftgxval.h b/sdk/lib/3rdparty/freetype/include/freetype/ftgxval.h index b14f637c569..354460a9a71 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftgxval.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftgxval.h @@ -4,7 +4,7 @@ * * FreeType API for validating TrueTypeGX/AAT tables (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * Masatake YAMATO, Redhat K.K, * David Turner, Robert Wilhelm, and Werner Lemberg. * @@ -28,8 +28,7 @@ #ifndef FTGXVAL_H_ #define FTGXVAL_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftgzip.h b/sdk/lib/3rdparty/freetype/include/freetype/ftgzip.h index 418c61228ea..ec5939a191c 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftgzip.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftgzip.h @@ -4,7 +4,7 @@ * * Gzip-compressed stream support. * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTGZIP_H_ #define FTGZIP_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -43,6 +42,16 @@ FT_BEGIN_HEADER * Using gzip-compressed font files. * * @description: + * 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. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream, + * which significantly undermines the performance. + * * This section contains the declaration of Gzip-specific functions. * */ @@ -75,15 +84,6 @@ FT_BEGIN_HEADER * **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. */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftimage.h b/sdk/lib/3rdparty/freetype/include/freetype/ftimage.h index d640b0b0aa9..74911620d2a 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftimage.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftimage.h @@ -5,7 +5,7 @@ * FreeType glyph image formats and default raster interface * (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -30,7 +30,6 @@ /* STANDALONE_ is from ftgrays.c */ #ifndef STANDALONE_ -#include #endif @@ -401,6 +400,13 @@ FT_BEGIN_HEADER * if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more * information. * + * FT_OUTLINE_OVERLAP :: + * This flag indicates that this outline contains overlapping contrours + * and the anti-aliased renderer should perform oversampling to + * mitigate possible artifacts. This flag should _not_ be set for + * well designed glyphs without overlaps because it quadruples the + * rendering time. + * * 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. @@ -432,6 +438,7 @@ FT_BEGIN_HEADER #define FT_OUTLINE_IGNORE_DROPOUTS 0x8 #define FT_OUTLINE_SMART_DROPOUTS 0x10 #define FT_OUTLINE_INCLUDE_STUBS 0x20 +#define FT_OUTLINE_OVERLAP 0x40 #define FT_OUTLINE_HIGH_PRECISION 0x100 #define FT_OUTLINE_SINGLE_PASS 0x200 @@ -869,7 +876,7 @@ FT_BEGIN_HEADER * * @input: * y :: - * The scanline's y~coordinate. + * The scanline's upward y~coordinate. * * count :: * The number of spans to draw on this scanline. @@ -945,19 +952,16 @@ FT_BEGIN_HEADER * 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. + * _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. - * - * 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. + * @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 @@ -978,7 +982,8 @@ FT_BEGIN_HEADER * FT_Raster_Params * * @description: - * A structure to hold the arguments used by a raster's render function. + * A structure to hold the parameters used by a raster's render function, + * passed as an argument to @FT_Outline_Render. * * @fields: * target :: @@ -1006,20 +1011,26 @@ FT_BEGIN_HEADER * 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). + * An optional span clipping box expressed in _integer_ pixels + * (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. + * The @FT_RASTER_FLAG_AA bit flag must be set in the `flags` to + * generate an anti-aliased glyph bitmap, otherwise a monochrome bitmap + * is generated. The `target` should have appropriate pixel mode and its + * dimensions define the clipping region. * - * 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. + * If both @FT_RASTER_FLAG_AA and @FT_RASTER_FLAG_DIRECT bit flags + * are set in `flags`, the raster calls an @FT_SpanFunc callback + * `gray_spans` with `user` data as an argument ignoring `target`. This + * allows direct composition over a pre-existing user surface to perform + * the span drawing and composition. To optionally clip the spans, set + * the @FT_RASTER_FLAG_CLIP flag and `clip_box`. The monochrome raster + * does not support the direct mode. + * + * The gray-level rasterizer always uses 256 gray levels. If you want + * fewer gray levels, you have to use @FT_RASTER_FLAG_DIRECT and reduce + * the levels in the callback function. */ typedef struct FT_Raster_Params_ { diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftincrem.h b/sdk/lib/3rdparty/freetype/include/freetype/ftincrem.h index a4db02b585b..f67655eda02 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftincrem.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftincrem.h @@ -4,7 +4,7 @@ * * FreeType incremental loading (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,9 +19,8 @@ #ifndef FTINCREM_H_ #define FTINCREM_H_ -#include -#include FT_FREETYPE_H -#include FT_PARAMETER_TAGS_H +#include +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftlcdfil.h b/sdk/lib/3rdparty/freetype/include/freetype/ftlcdfil.h index 3a19d043bbe..c6995f2ff7d 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftlcdfil.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftlcdfil.h @@ -5,7 +5,7 @@ * FreeType API for color filtering of subpixel bitmap glyphs * (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #ifndef FTLCDFIL_H_ #define FTLCDFIL_H_ -#include -#include FT_FREETYPE_H -#include FT_PARAMETER_TAGS_H +#include +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -47,7 +46,7 @@ FT_BEGIN_HEADER * @description: * 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. + * `ftoption.h` file, this enables 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 @@ -177,7 +176,7 @@ FT_BEGIN_HEADER * FT_Library_SetLcdFilter * * @description: - * This function is used to apply color filtering to LCD decimated + * This function is used to change filter applied to LCD decimated * bitmaps, like the ones used when calling @FT_Render_Glyph with * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V. * @@ -196,15 +195,14 @@ FT_BEGIN_HEADER * 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. + * Since 2.10.3 the LCD filtering is enabled with @FT_LCD_FILTER_DEFAULT. + * It is no longer necessary to call this function explicitly except + * to choose a different filter or disable filtering altogether with + * @FT_LCD_FILTER_NONE. * - * 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. + * This function does nothing but returns `FT_Err_Unimplemented_Feature` + * if the configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is + * not defined in your build of the library. * * @since: * 2.3.0 @@ -235,11 +233,9 @@ FT_BEGIN_HEADER * 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. + * This function does nothing but returns `FT_Err_Unimplemented_Feature` + * if the configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is + * not defined in your build of the library. * * LCD filter weights can also be set per face using @FT_Face_Properties * with @FT_PARAM_TAG_LCD_FILTER_WEIGHTS. diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftlist.h b/sdk/lib/3rdparty/freetype/include/freetype/ftlist.h index 4782892d1a7..4588922706d 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftlist.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftlist.h @@ -4,7 +4,7 @@ * * Generic list support for FreeType (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -28,8 +28,7 @@ #define FTLIST_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftlzw.h b/sdk/lib/3rdparty/freetype/include/freetype/ftlzw.h index fd22968f5a5..ae46ad6021d 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftlzw.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftlzw.h @@ -4,7 +4,7 @@ * * LZW-compressed stream support. * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTLZW_H_ #define FTLZW_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -43,6 +42,16 @@ FT_BEGIN_HEADER * Using LZW-compressed font files. * * @description: + * 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. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream, + * which significantly undermines the performance. + * * This section contains the declaration of LZW-specific functions. * */ @@ -73,15 +82,6 @@ FT_BEGIN_HEADER * **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. */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftmac.h b/sdk/lib/3rdparty/freetype/include/freetype/ftmac.h index 92b9f3dc0fa..c9de9818452 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftmac.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftmac.h @@ -4,7 +4,7 @@ * * Additional Mac-specific API. * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -29,7 +29,6 @@ #define FTMAC_H_ -#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftmm.h b/sdk/lib/3rdparty/freetype/include/freetype/ftmm.h index f2e16b64087..d8781a8296b 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftmm.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftmm.h @@ -4,7 +4,7 @@ * * FreeType Multiple Master font interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTMM_H_ -#include -#include FT_TYPE1_TABLES_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftmodapi.h b/sdk/lib/3rdparty/freetype/include/freetype/ftmodapi.h index 88488bfe89c..3f7ae82bab2 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftmodapi.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftmodapi.h @@ -4,7 +4,7 @@ * * FreeType modules public interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTMODAPI_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -65,7 +64,7 @@ FT_BEGIN_HEADER * psnames * raster1 * sfnt - * smooth, smooth-lcd, smooth-lcdv + * smooth * truetype * type1 * type42 @@ -486,7 +485,7 @@ FT_BEGIN_HEADER * * ``` * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ - * cff:no-stem-darkening=1 \ + * cff:no-stem-darkening=0 \ * autofitter:warping=1 * ``` * @@ -623,7 +622,7 @@ FT_BEGIN_HEADER * it is bytecode interpreter's execution context, `TT_ExecContext`, * which is declared in FreeType's internal header file `tttypes.h`. */ - typedef void + typedef FT_Error (*FT_DebugHook_Func)( void* arg ); diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftmoderr.h b/sdk/lib/3rdparty/freetype/include/freetype/ftmoderr.h index e16993572c8..f05fc53aa3f 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftmoderr.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftmoderr.h @@ -4,7 +4,7 @@ * * FreeType module error offsets (specification). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -94,7 +94,7 @@ * const char* mod_err_msg * } ft_mod_errors[] = * - * #include FT_MODULE_ERRORS_H + * #include * ``` * */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftotval.h b/sdk/lib/3rdparty/freetype/include/freetype/ftotval.h index c034f489596..9c00ad30b9d 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftotval.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftotval.h @@ -4,7 +4,7 @@ * * FreeType API for validating OpenType tables (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -30,8 +30,7 @@ #ifndef FTOTVAL_H_ #define FTOTVAL_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftoutln.h b/sdk/lib/3rdparty/freetype/include/freetype/ftoutln.h index 75c3d015968..84e9b144c15 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftoutln.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftoutln.h @@ -5,7 +5,7 @@ * Support for the FT_Outline type used to store glyph shapes of * most scalable font formats (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,8 +21,7 @@ #define FTOUTLN_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -466,8 +465,6 @@ FT_BEGIN_HEADER * * @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 :: @@ -485,17 +482,13 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * You should know what you are doing and how @FT_Raster_Params works to - * use this function. - * + * This advanced function uses @FT_Raster_Params as an argument. * 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. + * actually ignored. Either `params.target` must point to preallocated + * bitmap, or @FT_RASTER_FLAG_DIRECT must be set in `params.flags` + * allowing FreeType rasterizer to be used for direct composition, + * translucency, etc. See @FT_Raster_Params for more details. */ FT_EXPORT( FT_Error ) FT_Outline_Render( FT_Library library, diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftparams.h b/sdk/lib/3rdparty/freetype/include/freetype/ftparams.h index c374ee2f2ff..55ea2a38708 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftparams.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftparams.h @@ -4,7 +4,7 @@ * * FreeType API for possible FT_Parameter tags (specification only). * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTPARAMS_H_ #define FTPARAMS_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftpfr.h b/sdk/lib/3rdparty/freetype/include/freetype/ftpfr.h index b4eca76eb7d..9a5383f918d 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftpfr.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftpfr.h @@ -4,7 +4,7 @@ * * FreeType API for accessing PFR-specific data (specification only). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTPFR_H_ #define FTPFR_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftrender.h b/sdk/lib/3rdparty/freetype/include/freetype/ftrender.h index a01c774272e..8007951b371 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftrender.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftrender.h @@ -4,7 +4,7 @@ * * FreeType renderer modules public interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define FTRENDER_H_ -#include -#include FT_MODULE_H -#include FT_GLYPH_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftsizes.h b/sdk/lib/3rdparty/freetype/include/freetype/ftsizes.h index 6c63cef2bfa..a8682a30fb8 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftsizes.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftsizes.h @@ -4,7 +4,7 @@ * * FreeType size objects management (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -29,8 +29,7 @@ #define FTSIZES_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftsnames.h b/sdk/lib/3rdparty/freetype/include/freetype/ftsnames.h index 4d43602a424..729e6ab0699 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftsnames.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftsnames.h @@ -7,7 +7,7 @@ * * This is _not_ used to retrieve glyph names! * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -23,9 +23,8 @@ #define FTSNAMES_H_ -#include -#include FT_FREETYPE_H -#include FT_PARAMETER_TAGS_H +#include +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftstroke.h b/sdk/lib/3rdparty/freetype/include/freetype/ftstroke.h index 01a9c1811c0..a759c94ddec 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftstroke.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftstroke.h @@ -4,7 +4,7 @@ * * FreeType path stroker (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,9 +19,8 @@ #ifndef FTSTROKE_H_ #define FTSTROKE_H_ -#include -#include FT_OUTLINE_H -#include FT_GLYPH_H +#include +#include FT_BEGIN_HEADER @@ -44,7 +43,7 @@ FT_BEGIN_HEADER * 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 + * displayed with a colored (and anti-aliased) border around their * shape. * * @order: @@ -114,22 +113,19 @@ FT_BEGIN_HEADER * 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. + * segments are extended until they meet at an angle. A bevel join + * (see above) is used if the segments meet at too sharp an angle and + * the outer edges meet beyond a distance corresponding to the meter + * limit. 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. + * limit is exceeded. The intersection of the strokes is clipped + * perpendicularly to the bisector, at a distance corresponding to + * the miter limit. 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 @@ -296,12 +292,17 @@ 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 maximum reciprocal sine of half-angle at the miter join, + * 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. + * + * The `miter_limit` multiplied by the `radius` gives the maximum size + * of a miter spike, at which it is clipped for + * @FT_STROKER_LINEJOIN_MITER_VARIABLE or replaced with a bevel join for + * @FT_STROKER_LINEJOIN_MITER_FIXED. * * This function calls @FT_Stroker_Rewind automatically. */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftsynth.h b/sdk/lib/3rdparty/freetype/include/freetype/ftsynth.h index 8754f97ceef..bdb4c5753e6 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftsynth.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftsynth.h @@ -5,7 +5,7 @@ * FreeType synthesizing code for emboldening and slanting * (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -45,8 +45,7 @@ #define FTSYNTH_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftsystem.h b/sdk/lib/3rdparty/freetype/include/freetype/ftsystem.h index 889a6ba1726..22aead71400 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftsystem.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftsystem.h @@ -4,7 +4,7 @@ * * FreeType low-level system interface definition (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define FTSYSTEM_H_ -#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/fttrigon.h b/sdk/lib/3rdparty/freetype/include/freetype/fttrigon.h index 37e1412fdfb..2ce6b324c98 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/fttrigon.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/fttrigon.h @@ -4,7 +4,7 @@ * * FreeType trigonometric functions (specification). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef FTTRIGON_H_ #define FTTRIGON_H_ -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/fttypes.h b/sdk/lib/3rdparty/freetype/include/freetype/fttypes.h index 10571505a58..aaeb9e87851 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/fttypes.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/fttypes.h @@ -4,7 +4,7 @@ * * FreeType simple types definitions (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -22,8 +22,8 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_SYSTEM_H -#include FT_IMAGE_H +#include +#include #include diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ftwinfnt.h b/sdk/lib/3rdparty/freetype/include/freetype/ftwinfnt.h index 3437913d53a..786528c6ecb 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ftwinfnt.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ftwinfnt.h @@ -4,7 +4,7 @@ * * FreeType API for accessing Windows fnt-specific data. * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef FTWINFNT_H_ #define FTWINFNT_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -58,7 +57,7 @@ FT_BEGIN_HEADER * @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 + * '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`. * diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/autohint.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/autohint.h index f64c28bb2ca..2a472e20b97 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/autohint.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/autohint.h @@ -4,7 +4,7 @@ * * High-level 'autohint' module-specific interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -70,8 +70,7 @@ */ -#include -#include FT_FREETYPE_H +#include FT_BEGIN_HEADER @@ -208,6 +207,9 @@ FT_BEGIN_HEADER } FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface; +#define FT_DECLARE_AUTOHINTER_INTERFACE( class_ ) \ + FT_CALLBACK_TABLE const FT_AutoHinter_InterfaceRec class_; + #define FT_DEFINE_AUTOHINTER_INTERFACE( \ class_, \ reset_face_, \ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/cffotypes.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/cffotypes.h index b26893eab3b..a316fd1f302 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/cffotypes.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/cffotypes.h @@ -4,7 +4,7 @@ * * Basic OpenType/CFF object type definitions (specification). * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,12 +19,11 @@ #ifndef CFFOTYPES_H_ #define CFFOTYPES_H_ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_CFF_TYPES_H -#include FT_INTERNAL_TRUETYPE_TYPES_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H +#include +#include +#include +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/cfftypes.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/cfftypes.h index 2fc905ec795..f21167b1e51 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/cfftypes.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/cfftypes.h @@ -5,7 +5,7 @@ * Basic OpenType/CFF type definitions and interface (specification * only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,13 +21,12 @@ #define CFFTYPES_H_ -#include -#include FT_FREETYPE_H -#include FT_TYPE1_TABLES_H -#include FT_INTERNAL_SERVICE_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H -#include FT_INTERNAL_TYPE1_TYPES_H +#include +#include +#include +#include +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/compiler-macros.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/compiler-macros.h new file mode 100644 index 00000000000..97c18d3a214 --- /dev/null +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/compiler-macros.h @@ -0,0 +1,307 @@ +/**************************************************************************** + * + * internal/compiler-macros.h + * + * Compiler-specific macro definitions used internally by FreeType. + * + * Copyright (C) 2020 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +#ifndef INTERNAL_COMPILER_MACROS_H_ +#define INTERNAL_COMPILER_MACROS_H_ + +#include + +FT_BEGIN_HEADER + + /* Fix compiler warning with sgi compiler. */ +#if defined( __sgi ) && !defined( __GNUC__ ) +# if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) +# pragma set woff 3505 +# endif +#endif + + /* Fix compiler warning with sgi compiler. */ +#if defined( __sgi ) && !defined( __GNUC__ ) +# if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) +# pragma set woff 3505 +# endif +#endif + + /* + * When defining a macro that expands to a non-trivial C statement, use + * FT_BEGIN_STMNT and FT_END_STMNT to enclose the macro's body. This + * ensures there are no surprises when the macro is invoked in conditional + * branches. + * + * Example: + * + * #define LOG( ... ) \ + * FT_BEGIN_STMNT \ + * if ( logging_enabled ) \ + * log( __VA_ARGS__ ); \ + * FT_END_STMNT + */ +#define FT_BEGIN_STMNT do { +#define FT_END_STMNT } while ( 0 ) + + /* + * FT_DUMMY_STMNT expands to an empty C statement. Useful for + * conditionally defined statement macros. + * + * Example: + * + * #ifdef BUILD_CONFIG_LOGGING + * #define LOG( ... ) \ + * FT_BEGIN_STMNT \ + * if ( logging_enabled ) \ + * log( __VA_ARGS__ ); \ + * FT_END_STMNT + * #else + * # define LOG( ... ) FT_DUMMY_STMNT + * #endif + */ +#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT + +#ifdef _WIN64 + /* only 64bit Windows uses the LLP64 data model, i.e., */ + /* 32-bit integers, 64-bit pointers. */ +#define FT_UINT_TO_POINTER( x ) (void *)(unsigned __int64)(x) +#else +#define FT_UINT_TO_POINTER( x ) (void *)(unsigned long)(x) +#endif + + /* + * Use `FT_TYPEOF( type )` to cast a value to `type`. This is useful to + * suppress signedness compilation warnings in macros. + * + * Example: + * + * #define PAD_( x, n ) ( (x) & ~FT_TYPEOF( x )( (n) - 1 ) ) + * + * (The `typeof` condition is taken from gnulib's `intprops.h` header + * file.) + */ +#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \ + ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \ + defined( __IBM__TYPEOF__ ) ) || \ + ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) ) +#define FT_TYPEOF( type ) ( __typeof__ ( type ) ) +#else +#define FT_TYPEOF( type ) /* empty */ +#endif + + /* + * Mark a function declaration as internal to the library. This ensures + * that it will not be exposed by default to client code, and helps + * generate smaller and faster code on ELF-based platforms. Place this + * before a function declaration. + */ + + /* Visual C, mingw */ +#if defined( _WIN32 ) +#define FT_INTERNAL_FUNCTION_ATTRIBUTE /* empty */ + + /* gcc, clang */ +#elif ( defined( __GNUC__ ) && __GNUC__ >= 4 ) || defined( __clang__ ) +#define FT_INTERNAL_FUNCTION_ATTRIBUTE \ + __attribute__(( visibility( "hidden" ) )) + + /* Sun */ +#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550 +#define FT_INTERNAL_FUNCTION_ATTRIBUTE __hidden + +#else +#define FT_INTERNAL_FUNCTION_ATTRIBUTE /* empty */ +#endif + + /* + * FreeType supports compilation of its C sources with a C++ compiler (in + * C++ mode); this introduces a number of subtle issues. + * + * The main one is that a C++ function declaration and its definition must + * have the same 'linkage'. Because all FreeType headers declare their + * functions with C linkage (i.e., within an `extern "C" { ... }` block + * due to the magic of FT_BEGIN_HEADER and FT_END_HEADER), their + * definition in FreeType sources should also be prefixed with `extern + * "C"` when compiled in C++ mode. + * + * The `FT_FUNCTION_DECLARATION` and `FT_FUNCTION_DEFINITION` macros are + * provided to deal with this case, as well as `FT_CALLBACK_DEF` and its + * siblings below. + */ + + /* + * `FT_FUNCTION_DECLARATION( type )` can be used to write a C function + * declaration to ensure it will have C linkage when the library is built + * with a C++ compiler. The parameter is the function's return type, so a + * declaration would look like + * + * FT_FUNCTION_DECLARATION( int ) + * foo( int x ); + * + * NOTE: This requires that all uses are inside of `FT_BEGIN_HEADER ... + * FT_END_HEADER` blocks, which guarantees that the declarations have C + * linkage when the headers are included by C++ sources. + * + * NOTE: Do not use directly. Use `FT_LOCAL`, `FT_BASE`, and `FT_EXPORT` + * instead. + */ +#define FT_FUNCTION_DECLARATION( x ) extern x + + /* + * Same as `FT_FUNCTION_DECLARATION`, but for function definitions instead. + * + * NOTE: Do not use directly. Use `FT_LOCAL_DEF`, `FT_BASE_DEF`, and + * `FT_EXPORT_DEF` instead. + */ +#ifdef __cplusplus +#define FT_FUNCTION_DEFINITION( x ) extern "C" x +#else +#define FT_FUNCTION_DEFINITION( x ) x +#endif + + /* + * Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define, respectively, + * an internal FreeType function that is only used by the sources of a + * single `src/module/` directory. This ensures that the functions are + * turned into static ones at build time, resulting in smaller and faster + * code. + */ +#ifdef FT_MAKE_OPTION_SINGLE_OBJECT + +#define FT_LOCAL( x ) static x +#define FT_LOCAL_DEF( x ) static x + +#else + +#define FT_LOCAL( x ) FT_INTERNAL_FUNCTION_ATTRIBUTE \ + FT_FUNCTION_DECLARATION( x ) +#define FT_LOCAL_DEF( x ) FT_FUNCTION_DEFINITION( x ) + +#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ + + /* + * Use `FT_LOCAL_ARRAY` and `FT_LOCAL_ARRAY_DEF` to declare and define, + * respectively, a constant array that must be accessed from several + * sources in the same `src/module/` sub-directory, and which are internal + * to the library. + */ +#define FT_LOCAL_ARRAY( x ) FT_INTERNAL_FUNCTION_ATTRIBUTE \ + extern const x +#define FT_LOCAL_ARRAY_DEF( x ) FT_FUNCTION_DEFINITION( const x ) + + /* + * `Use FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, an + * internal library function that is used by more than a single module. + */ +#define FT_BASE( x ) FT_INTERNAL_FUNCTION_ATTRIBUTE \ + FT_FUNCTION_DECLARATION( x ) +#define FT_BASE_DEF( x ) FT_FUNCTION_DEFINITION( x ) + + + /* + * NOTE: Conditionally define `FT_EXPORT_VAR` due to its definition in + * `src/smooth/ftgrays.h` to make the header more portable. + */ +#ifndef FT_EXPORT_VAR +#define FT_EXPORT_VAR( x ) FT_FUNCTION_DECLARATION( x ) +#endif + + /* 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`. */ + /* */ + + /* See `freetype/config/compiler_macros.h` for the `FT_EXPORT` definition */ +#define FT_EXPORT_DEF( x ) FT_FUNCTION_DEFINITION( x ) + + /* The following macros are needed to compile the library with a */ + /* C++ compiler and with 16bit compilers. */ + /* */ + + /* This is special. Within C++, you must specify `extern "C"` for */ + /* functions which are used via function pointers, and you also */ + /* must do that for structures which contain function pointers to */ + /* assure C linkage -- it's not possible to have (local) anonymous */ + /* functions which are accessed by (global) function pointers. */ + /* */ + /* */ + /* FT_CALLBACK_DEF is used to _define_ a callback function, */ + /* located in the same source code file as the structure that uses */ + /* it. */ + /* */ + /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */ + /* and define a callback function, respectively, in a similar way */ + /* as FT_BASE and FT_BASE_DEF work. */ + /* */ + /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ + /* contains pointers to callback functions. */ + /* */ + /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ + /* that contains pointers to callback functions. */ + /* */ + /* */ + /* Some 16bit compilers have to redefine these macros to insert */ + /* the infamous `_cdecl` or `__fastcall` declarations. */ + /* */ +#ifdef __cplusplus +#define FT_CALLBACK_DEF( x ) extern "C" x +#else +#define FT_CALLBACK_DEF( x ) static x +#endif + +#define FT_BASE_CALLBACK( x ) FT_FUNCTION_DECLARATION( x ) +#define FT_BASE_CALLBACK_DEF( x ) FT_FUNCTION_DEFINITION( x ) + +#ifndef FT_CALLBACK_TABLE +#ifdef __cplusplus +#define FT_CALLBACK_TABLE extern "C" +#define FT_CALLBACK_TABLE_DEF extern "C" +#else +#define FT_CALLBACK_TABLE extern +#define FT_CALLBACK_TABLE_DEF /* nothing */ +#endif +#endif /* FT_CALLBACK_TABLE */ + +FT_END_HEADER + +#endif /* INTERNAL_COMPILER_MACROS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftcalc.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftcalc.h index 2986ec359b1..c65307472f9 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftcalc.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftcalc.h @@ -4,7 +4,7 @@ * * Arithmetic computations (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,9 @@ #define FTCALC_H_ -#include -#include FT_FREETYPE_H +#include +#include "compiler-macros.h" FT_BEGIN_HEADER @@ -378,6 +378,7 @@ FT_BEGIN_HEADER #if FT_SIZEOF_INT == 4 #include +#pragma intrinsic( _BitScanReverse ) static __inline FT_Int32 FT_MSB_i386( FT_UInt32 x ) @@ -385,7 +386,6 @@ FT_BEGIN_HEADER unsigned long where; - /* not available in older VC versions */ _BitScanReverse( &where, x ); return (FT_Int32)where; @@ -449,8 +449,7 @@ FT_BEGIN_HEADER #define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) * 4 ) /* << 2 */ #define FIXED_TO_INT( x ) ( FT_RoundFix( x ) >> 16 ) -#define ROUND_F26DOT6( x ) ( x >= 0 ? ( ( (x) + 32 ) & -64 ) \ - : ( -( ( 32 - (x) ) & -64 ) ) ) +#define ROUND_F26DOT6( x ) ( ( (x) + 32 - ( x < 0 ) ) & -64 ) /* * The following macros have two purposes. diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdebug.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdebug.h index 7e37ad2a0af..df5357ad550 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdebug.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdebug.h @@ -4,7 +4,7 @@ * * Debugging and logging component (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -27,7 +27,9 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_FREETYPE_H +#include + +#include "compiler-macros.h" FT_BEGIN_HEADER @@ -56,7 +58,7 @@ FT_BEGIN_HEADER /* defining the enumeration */ typedef enum FT_Trace_ { -#include FT_INTERNAL_TRACE_H +#include trace_count } FT_Trace; @@ -253,7 +255,6 @@ FT_BEGIN_HEADER #include "stdio.h" /* for vfprintf() */ - /* print a message */ FT_BASE( void ) FT_Message( const char* fmt, diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdrv.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdrv.h index 09e846e1c79..7f22710eae3 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdrv.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftdrv.h @@ -4,7 +4,7 @@ * * FreeType internal font driver interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,9 @@ #define FTDRV_H_ -#include -#include FT_MODULE_H +#include +#include "compiler-macros.h" FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftgloadr.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftgloadr.h index 770871d81be..27b8659f7c3 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftgloadr.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftgloadr.h @@ -4,7 +4,7 @@ * * The FreeType glyph loader (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTGLOADR_H_ -#include -#include FT_FREETYPE_H +#include FT_BEGIN_HEADER @@ -138,8 +137,6 @@ FT_BEGIN_HEADER FT_BASE( void ) FT_GlyphLoader_Add( FT_GlyphLoader loader ); - /* */ - FT_END_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/fthash.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/fthash.h index 249188040b3..622ec76bb9a 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/fthash.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/fthash.h @@ -43,8 +43,7 @@ #define FTHASH_H_ -#include -#include FT_FREETYPE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftmemory.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftmemory.h index 78bd3bc229f..ddb18b05123 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftmemory.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftmemory.h @@ -4,7 +4,7 @@ * * The FreeType memory management macros (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg * * This file is part of the FreeType project, and may only be used, @@ -22,8 +22,9 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_TYPES_H +#include +#include "compiler-macros.h" FT_BEGIN_HEADER @@ -57,6 +58,14 @@ FT_BEGIN_HEADER /*************************************************************************/ + /* The calculation `NULL + n' is undefined in C. Even if the resulting */ + /* pointer doesn't get dereferenced, this causes warnings with */ + /* sanitizers. */ + /* */ + /* We thus provide a macro that should be used if `base' can be NULL. */ +#define FT_OFFSET( base, count ) ( (base) ? (base) + (count) : NULL ) + + /* * 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++, @@ -153,10 +162,10 @@ extern "C++" (FT_Long)(size), \ &error ) ) -#define FT_MEM_FREE( ptr ) \ - FT_BEGIN_STMNT \ - ft_mem_free( memory, (ptr) ); \ - (ptr) = NULL; \ +#define FT_MEM_FREE( ptr ) \ + FT_BEGIN_STMNT \ + FT_DEBUG_INNER( ft_mem_free( memory, (ptr) ) ); \ + (ptr) = NULL; \ FT_END_STMNT #define FT_MEM_NEW( ptr ) \ @@ -381,8 +390,6 @@ extern "C++" #define FT_STRCPYN( dst, src, size ) \ ft_mem_strcpyn( (char*)dst, (const char*)(src), (FT_ULong)(size) ) - /* */ - FT_END_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftobjs.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftobjs.h index f3a41b35aba..25db2c494fe 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftobjs.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftobjs.h @@ -4,7 +4,7 @@ * * The FreeType private base classes (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,21 +26,21 @@ #ifndef FTOBJS_H_ #define FTOBJS_H_ -#include -#include FT_RENDER_H -#include FT_SIZES_H -#include FT_LCD_FILTER_H -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_GLYPH_LOADER_H -#include FT_INTERNAL_DRIVER_H -#include FT_INTERNAL_AUTOHINT_H -#include FT_INTERNAL_SERVICE_H -#include FT_INTERNAL_CALC_H +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef FT_CONFIG_OPTION_INCREMENTAL -#include FT_INCREMENTAL_H +#include #endif +#include "compiler-macros.h" FT_BEGIN_HEADER @@ -226,8 +226,8 @@ FT_BEGIN_HEADER } FT_CMap_ClassRec; -#define FT_DECLARE_CMAP_CLASS( class_ ) \ - FT_CALLBACK_TABLE const FT_CMap_ClassRec class_; +#define FT_DECLARE_CMAP_CLASS( class_ ) \ + FT_CALLBACK_TABLE const FT_CMap_ClassRec class_; #define FT_DEFINE_CMAP_CLASS( \ class_, \ @@ -278,14 +278,12 @@ FT_BEGIN_HEADER #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 */ @@ -655,7 +653,7 @@ FT_BEGIN_HEADER FT_BASE( void ) FT_Done_GlyphSlot( FT_GlyphSlot slot ); - /* */ + /* */ #define FT_REQUEST_WIDTH( req ) \ ( (req)->horiResolution \ @@ -941,8 +939,8 @@ 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 @@ -1059,6 +1057,9 @@ FT_BEGIN_HEADER * The struct will be allocated in the global scope (or the scope where * the macro is used). */ +#define FT_DECLARE_GLYPH( class_ ) \ + FT_CALLBACK_TABLE const FT_Glyph_Class class_; + #define FT_DEFINE_GLYPH( \ class_, \ size_, \ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftpsprop.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftpsprop.h index 574837f6d40..81ec29151c0 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftpsprop.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftpsprop.h @@ -4,7 +4,7 @@ * * Get and set properties of PostScript drivers (specification). * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTPSPROP_H_ -#include -#include FT_FREETYPE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftrfork.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftrfork.h index 75b3e531bb9..1b7b25acbec 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftrfork.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftrfork.h @@ -4,7 +4,7 @@ * * Embedded resource forks accessor (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * Masatake YAMATO and Redhat K.K. * * This file is part of the FreeType project, and may only be used, @@ -25,8 +25,7 @@ #define FTRFORK_H_ -#include -#include FT_INTERNAL_OBJECTS_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftserv.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftserv.h index 8836cf3f18d..6e1a9472da0 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftserv.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftserv.h @@ -4,7 +4,7 @@ * * The FreeType services (specification only). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -31,6 +31,7 @@ #ifndef FTSERV_H_ #define FTSERV_H_ +#include "compiler-macros.h" FT_BEGIN_HEADER @@ -486,33 +487,6 @@ FT_BEGIN_HEADER /* */ - /* - * The header files containing the services. - */ - -#define FT_SERVICE_BDF_H -#define FT_SERVICE_CFF_TABLE_LOAD_H -#define FT_SERVICE_CID_H -#define FT_SERVICE_FONT_FORMAT_H -#define FT_SERVICE_GLYPH_DICT_H -#define FT_SERVICE_GX_VALIDATE_H -#define FT_SERVICE_KERNING_H -#define FT_SERVICE_METRICS_VARIATIONS_H -#define FT_SERVICE_MULTIPLE_MASTERS_H -#define FT_SERVICE_OPENTYPE_VALIDATE_H -#define FT_SERVICE_PFR_H -#define FT_SERVICE_POSTSCRIPT_CMAPS_H -#define FT_SERVICE_POSTSCRIPT_INFO_H -#define FT_SERVICE_POSTSCRIPT_NAME_H -#define FT_SERVICE_PROPERTIES_H -#define FT_SERVICE_SFNT_H -#define FT_SERVICE_TRUETYPE_ENGINE_H -#define FT_SERVICE_TRUETYPE_GLYF_H -#define FT_SERVICE_TT_CMAP_H -#define FT_SERVICE_WINFNT_H - - /* */ - FT_END_HEADER #endif /* FTSERV_H_ */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftstream.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftstream.h index e4dca0b0a5d..e7d922260f5 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftstream.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftstream.h @@ -4,7 +4,7 @@ * * Stream handling (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,8 +21,8 @@ #include -#include FT_SYSTEM_H -#include FT_INTERNAL_OBJECTS_H +#include +#include FT_BEGIN_HEADER @@ -165,6 +165,17 @@ 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. diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/fttrace.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/fttrace.h index 8089babfb6c..58bd77413cd 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/fttrace.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/fttrace.h @@ -4,7 +4,7 @@ * * Tracing handling (specification only). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -48,6 +48,8 @@ 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( sfwoff2 ) /* WOFF2 format handler (sfwoff2.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) */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftvalid.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftvalid.h index 38aa06cc4e9..a5bc6c9b526 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/ftvalid.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/ftvalid.h @@ -4,7 +4,7 @@ * * FreeType validation support (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,9 @@ #define FTVALID_H_ #include -#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_setjmp and ft_longjmp */ +#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_jmpbuf */ +#include "compiler-macros.h" FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/internal.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/internal.h deleted file mode 100644 index 173d8ad906d..00000000000 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/internal.h +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** - * - * 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! - * - */ - - -#define FT_INTERNAL_OBJECTS_H -#define FT_INTERNAL_STREAM_H -#define FT_INTERNAL_MEMORY_H -#define FT_INTERNAL_DEBUG_H -#define FT_INTERNAL_CALC_H -#define FT_INTERNAL_HASH_H -#define FT_INTERNAL_DRIVER_H -#define FT_INTERNAL_TRACE_H -#define FT_INTERNAL_GLYPH_LOADER_H -#define FT_INTERNAL_SFNT_H -#define FT_INTERNAL_SERVICE_H -#define FT_INTERNAL_RFORK_H -#define FT_INTERNAL_VALIDATE_H - -#define FT_INTERNAL_TRUETYPE_TYPES_H -#define FT_INTERNAL_TYPE1_TYPES_H - -#define FT_INTERNAL_POSTSCRIPT_AUX_H -#define FT_INTERNAL_POSTSCRIPT_HINTS_H -#define FT_INTERNAL_POSTSCRIPT_PROPS_H - -#define FT_INTERNAL_AUTOHINT_H - -#define FT_INTERNAL_CFF_TYPES_H -#define FT_INTERNAL_CFF_OBJECTS_TYPES_H - - -#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */ - - /* We disable the warning `conditional expression is constant' here */ - /* in order to compile cleanly with the maximum level of warnings. */ - /* In particular, the warning complains about stuff like `while(0)' */ - /* which is very useful in macro definitions. There is no benefit */ - /* in having it enabled. */ -#pragma warning( disable : 4127 ) - -#endif /* _MSC_VER */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/psaux.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/psaux.h index 3ab01c3e688..8e0a262fd51 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/psaux.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/psaux.h @@ -5,7 +5,7 @@ * Auxiliary functions and data structures related to PostScript fonts * (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,14 +21,13 @@ #define PSAUX_H_ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_TYPE1_TYPES_H -#include FT_INTERNAL_HASH_H -#include FT_INTERNAL_TRUETYPE_TYPES_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_INTERNAL_CFF_TYPES_H -#include FT_INTERNAL_CFF_OBJECTS_TYPES_H +#include +#include +#include +#include +#include +#include +#include @@ -96,10 +95,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 ); diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/pshints.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/pshints.h index 699acea6f52..663e9d34887 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/pshints.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/pshints.h @@ -6,7 +6,7 @@ * 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 + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -22,9 +22,8 @@ #define PSHINTS_H_ -#include -#include FT_FREETYPE_H -#include FT_TYPE1_TABLES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svbdf.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svbdf.h index e4786ed0383..81f5a06b62b 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svbdf.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svbdf.h @@ -4,7 +4,7 @@ * * The FreeType BDF services (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVBDF_H_ #define SVBDF_H_ -#include FT_BDF_H -#include FT_INTERNAL_SERVICE_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcfftl.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcfftl.h index 6c621732da2..1d2dbb6a8ee 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcfftl.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcfftl.h @@ -4,7 +4,7 @@ * * The FreeType CFF tables loader service (specification). * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVCFFTL_H_ #define SVCFFTL_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_INTERNAL_CFF_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcid.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcid.h index 555a5af5b9b..bd49f3270a8 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcid.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svcid.h @@ -4,7 +4,7 @@ * * The FreeType CID font services (specification). * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * Derek Clegg and Michael Toftdal. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef SVCID_H_ #define SVCID_H_ -#include FT_INTERNAL_SERVICE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h index 6f4285ea8c3..6114d638af0 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svfntfmt.h @@ -4,7 +4,7 @@ * * The FreeType font format service (specification only). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef SVFNTFMT_H_ #define SVFNTFMT_H_ -#include FT_INTERNAL_SERVICE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgldict.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgldict.h index ca8edf0eb55..f9443e40d61 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgldict.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgldict.h @@ -4,7 +4,7 @@ * * The FreeType glyph dictionary services (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef SVGLDICT_H_ #define SVGLDICT_H_ -#include FT_INTERNAL_SERVICE_H +#include FT_BEGIN_HEADER @@ -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 ) diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgxval.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgxval.h index 0bb76f31441..83c2f26ceed 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgxval.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svgxval.h @@ -4,7 +4,7 @@ * * FreeType API for validating TrueTypeGX/AAT tables (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * Masatake YAMATO, Red Hat K.K., * David Turner, Robert Wilhelm, and Werner Lemberg. * @@ -28,8 +28,8 @@ #ifndef SVGXVAL_H_ #define SVGXVAL_H_ -#include FT_GX_VALIDATE_H -#include FT_INTERNAL_VALIDATE_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svkern.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svkern.h index f992a327c1a..13cfb327226 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svkern.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svkern.h @@ -4,7 +4,7 @@ * * The FreeType Kerning service (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVKERN_H_ #define SVKERN_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_TRUETYPE_TABLES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmetric.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmetric.h index d688bc7c601..2b30edaabec 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmetric.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmetric.h @@ -4,7 +4,7 @@ * * The FreeType services for metrics variations (specification). * - * Copyright (C) 2016-2019 by + * Copyright (C) 2016-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef SVMETRIC_H_ #define SVMETRIC_H_ -#include FT_INTERNAL_SERVICE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmm.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmm.h index 3652f2050a0..5a807636a63 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmm.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svmm.h @@ -4,7 +4,7 @@ * * The FreeType Multiple Masters and GX var services (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef SVMM_H_ #define SVMM_H_ -#include FT_INTERNAL_SERVICE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svotval.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svotval.h index cab4c6efbb1..763fb2efbed 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svotval.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svotval.h @@ -4,7 +4,7 @@ * * The FreeType OpenType validation service (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVOTVAL_H_ #define SVOTVAL_H_ -#include FT_OPENTYPE_VALIDATE_H -#include FT_INTERNAL_VALIDATE_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpfr.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpfr.h index fd01d614ddd..bdeba0785c7 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpfr.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpfr.h @@ -4,7 +4,7 @@ * * Internal PFR service functions (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVPFR_H_ #define SVPFR_H_ -#include FT_PFR_H -#include FT_INTERNAL_SERVICE_H +#include +#include FT_BEGIN_HEADER @@ -56,7 +56,6 @@ FT_BEGIN_HEADER }; - /* */ FT_END_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpostnm.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpostnm.h index 18e3843cbe7..8ef62c5f92a 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpostnm.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpostnm.h @@ -4,7 +4,7 @@ * * The FreeType PostScript name services (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef SVPOSTNM_H_ #define SVPOSTNM_H_ -#include FT_INTERNAL_SERVICE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svprop.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svprop.h index e48d0151ec0..8f755436a11 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svprop.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svprop.h @@ -4,7 +4,7 @@ * * The FreeType property service (specification). * - * Copyright (C) 2012-2019 by + * Copyright (C) 2012-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpscmap.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpscmap.h index dfac3bafa98..b4dcd807590 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpscmap.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpscmap.h @@ -4,7 +4,7 @@ * * The FreeType PostScript charmap service (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef SVPSCMAP_H_ #define SVPSCMAP_H_ -#include FT_INTERNAL_OBJECTS_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h index fb4e0e3fa9f..1e7276ff434 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h @@ -4,7 +4,7 @@ * * The FreeType PostScript info service (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVPSINFO_H_ #define SVPSINFO_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_INTERNAL_TYPE1_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svsfnt.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svsfnt.h index 464aa209f7f..39c8b5e19d7 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svsfnt.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svsfnt.h @@ -4,7 +4,7 @@ * * The FreeType SFNT table loading service (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVSFNT_H_ #define SVSFNT_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_TRUETYPE_TABLES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttcmap.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttcmap.h index 0fcb81371d6..c18bb2336f8 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttcmap.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttcmap.h @@ -4,7 +4,7 @@ * * The FreeType TrueType/sfnt cmap extra information service. * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * Masatake YAMATO, Redhat K.K., * David Turner, Robert Wilhelm, and Werner Lemberg. * @@ -22,8 +22,8 @@ #ifndef SVTTCMAP_H_ #define SVTTCMAP_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_TRUETYPE_TABLES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svtteng.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svtteng.h index a852f5c6fb6..7a17e4a755b 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svtteng.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svtteng.h @@ -4,7 +4,7 @@ * * The FreeType TrueType engine query service (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVTTENG_H_ #define SVTTENG_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_MODULE_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttglyf.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttglyf.h index c8798771fbb..90a81dd40e8 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttglyf.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svttglyf.h @@ -4,7 +4,7 @@ * * The FreeType TrueType glyph service. * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * David Turner. * * This file is part of the FreeType project, and may only be used, @@ -18,8 +18,8 @@ #ifndef SVTTGLYF_H_ #define SVTTGLYF_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_TRUETYPE_TABLES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h index 38ee0209657..8c915f52572 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h @@ -4,7 +4,7 @@ * * The FreeType Windows FNT/FONT service (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,8 @@ #ifndef SVWINFNT_H_ #define SVWINFNT_H_ -#include FT_INTERNAL_SERVICE_H -#include FT_WINFONTS_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/sfnt.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/sfnt.h index 225f40df6eb..b4c12dbb26d 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/sfnt.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/sfnt.h @@ -4,7 +4,7 @@ * * High-level 'sfnt' driver interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,9 @@ #define SFNT_H_ -#include -#include FT_INTERNAL_DRIVER_H -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/t1types.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/t1types.h index e197a1afca3..6a0fe5e97d9 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/t1types.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/t1types.h @@ -5,7 +5,7 @@ * Basic Type1/Type2 type definitions and interface (specification * only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,12 +21,11 @@ #define T1TYPES_H_ -#include -#include FT_TYPE1_TABLES_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H -#include FT_INTERNAL_SERVICE_H -#include FT_INTERNAL_HASH_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H +#include +#include +#include +#include +#include FT_BEGIN_HEADER @@ -76,8 +75,8 @@ FT_BEGIN_HEADER 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/sdk/lib/3rdparty/freetype/include/freetype/internal/tttypes.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/tttypes.h index 5e9f40ec3f7..c36342c93a0 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/internal/tttypes.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/tttypes.h @@ -5,7 +5,7 @@ * Basic SFNT/TrueType type definitions and interface (specification * only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,13 +21,12 @@ #define TTTYPES_H_ -#include -#include FT_TRUETYPE_TABLES_H -#include FT_INTERNAL_OBJECTS_H -#include FT_COLOR_H +#include +#include +#include #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_MULTIPLE_MASTERS_H +#include #endif @@ -150,81 +149,6 @@ 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: @@ -1395,8 +1319,10 @@ FT_BEGIN_HEADER * * 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. + * 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 @@ -1633,7 +1559,7 @@ 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. */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/internal/wofftypes.h b/sdk/lib/3rdparty/freetype/include/freetype/internal/wofftypes.h new file mode 100644 index 00000000000..1874a138a07 --- /dev/null +++ b/sdk/lib/3rdparty/freetype/include/freetype/internal/wofftypes.h @@ -0,0 +1,312 @@ +/**************************************************************************** + * + * wofftypes.h + * + * Basic WOFF/WOFF2 type definitions and interface (specification + * only). + * + * Copyright (C) 1996-2020 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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 +#include + + +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; + + + /************************************************************************** + * + * @struct: + * WOFF2_TtcFontRec + * + * @description: + * Metadata for a TTC font entry in WOFF2. + * + * @fields: + * flavor :: + * TTC font flavor. + * + * num_tables :: + * Number of tables in TTC, indicating number of elements in + * `table_indices`. + * + * table_indices :: + * Array of table indices for each TTC font. + */ + typedef struct WOFF2_TtcFontRec_ + { + FT_ULong flavor; + FT_UShort num_tables; + FT_UShort* table_indices; + + } WOFF2_TtcFontRec, *WOFF2_TtcFont; + + + /************************************************************************** + * + * @struct: + * WOFF2_HeaderRec + * + * @description: + * WOFF2 file format header. + * + * @fields: + * See + * + * https://www.w3.org/TR/WOFF2/#woff20Header + * + * @note: + * We don't care about the fields `reserved`, `majorVersion` and + * `minorVersion`, so they are not included. The `totalSfntSize` field + * does not necessarily represent the actual size of the uncompressed + * SFNT font stream, so that is used as a reference value instead. + */ + typedef struct WOFF2_HeaderRec_ + { + FT_ULong signature; + FT_ULong flavor; + FT_ULong length; + FT_UShort num_tables; + FT_ULong totalSfntSize; + FT_ULong totalCompressedSize; + FT_ULong metaOffset; + FT_ULong metaLength; + FT_ULong metaOrigLength; + FT_ULong privOffset; + FT_ULong privLength; + + FT_ULong uncompressed_size; /* uncompressed brotli stream size */ + FT_ULong compressed_offset; /* compressed stream offset */ + FT_ULong header_version; /* version of original TTC Header */ + FT_UShort num_fonts; /* number of fonts in TTC */ + FT_ULong actual_sfnt_size; /* actual size of sfnt stream */ + + WOFF2_TtcFont ttc_fonts; /* metadata for fonts in a TTC */ + + } WOFF2_HeaderRec, *WOFF2_Header; + + + /************************************************************************** + * + * @struct: + * WOFF2_TableRec + * + * @description: + * This structure describes a given table of a WOFF2 font. + * + * @fields: + * See + * + * https://www.w3.org/TR/WOFF2/#table_dir_format + */ + typedef struct WOFF2_TableRec_ + { + FT_Byte FlagByte; /* table type and flags */ + FT_ULong Tag; /* table file offset */ + FT_ULong dst_length; /* uncompressed table length */ + FT_ULong TransformLength; /* transformed length */ + + FT_ULong flags; /* calculated flags */ + FT_ULong src_offset; /* compressed table offset */ + FT_ULong src_length; /* compressed table length */ + FT_ULong dst_offset; /* uncompressed table offset */ + + } WOFF2_TableRec, *WOFF2_Table; + + + /************************************************************************** + * + * @struct: + * WOFF2_InfoRec + * + * @description: + * Metadata for WOFF2 font that may be required for reconstruction of + * sfnt tables. + * + * @fields: + * header_checksum :: + * Checksum of SFNT offset table. + * + * num_glyphs :: + * Number of glyphs in the font. + * + * num_hmetrics :: + * `numberOfHMetrics` field in the 'hhea' table. + * + * x_mins :: + * `xMin` values of glyph bounding box. + * + * glyf_table :: + * A pointer to the `glyf' table record. + * + * loca_table :: + * A pointer to the `loca' table record. + * + * head_table :: + * A pointer to the `head' table record. + */ + typedef struct WOFF2_InfoRec_ + { + FT_ULong header_checksum; + FT_UShort num_glyphs; + FT_UShort num_hmetrics; + FT_Short* x_mins; + + WOFF2_Table glyf_table; + WOFF2_Table loca_table; + WOFF2_Table head_table; + + } WOFF2_InfoRec, *WOFF2_Info; + + + /************************************************************************** + * + * @struct: + * WOFF2_SubstreamRec + * + * @description: + * This structure stores information about a substream in the transformed + * 'glyf' table in a WOFF2 stream. + * + * @fields: + * start :: + * Beginning of the substream relative to uncompressed table stream. + * + * offset :: + * Offset of the substream relative to uncompressed table stream. + * + * size :: + * Size of the substream. + */ + typedef struct WOFF2_SubstreamRec_ + { + FT_ULong start; + FT_ULong offset; + FT_ULong size; + + } WOFF2_SubstreamRec, *WOFF2_Substream; + + + /************************************************************************** + * + * @struct: + * WOFF2_PointRec + * + * @description: + * This structure stores information about a point in the transformed + * 'glyf' table in a WOFF2 stream. + * + * @fields: + * x :: + * x-coordinate of point. + * + * y :: + * y-coordinate of point. + * + * on_curve :: + * Set if point is on-curve. + */ + typedef struct WOFF2_PointRec_ + { + FT_Int x; + FT_Int y; + FT_Bool on_curve; + + } WOFF2_PointRec, *WOFF2_Point; + + +FT_END_HEADER + +#endif /* WOFFTYPES_H_ */ + + +/* END */ diff --git a/sdk/lib/3rdparty/freetype/include/freetype/t1tables.h b/sdk/lib/3rdparty/freetype/include/freetype/t1tables.h index 645e6457201..426e14024e6 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/t1tables.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/t1tables.h @@ -5,7 +5,7 @@ * Basic Type 1/Type 2 tables definitions and interface (specification * only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,8 +21,7 @@ #define T1TABLES_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/ttnameid.h b/sdk/lib/3rdparty/freetype/include/freetype/ttnameid.h index cc677de75ad..2b2ed4c6138 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/ttnameid.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/ttnameid.h @@ -4,7 +4,7 @@ * * TrueType name ID definitions (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define TTNAMEID_H_ -#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/include/freetype/tttables.h b/sdk/lib/3rdparty/freetype/include/freetype/tttables.h index d04f8102184..c8fa35ef8ec 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/tttables.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/tttables.h @@ -5,7 +5,7 @@ * Basic SFNT/TrueType tables definitions and interface * (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,8 +21,7 @@ #define TTTABLES_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/include/freetype/tttags.h b/sdk/lib/3rdparty/freetype/include/freetype/tttags.h index bd0986eff09..3c9fbd59d71 100644 --- a/sdk/lib/3rdparty/freetype/include/freetype/tttags.h +++ b/sdk/lib/3rdparty/freetype/include/freetype/tttags.h @@ -4,7 +4,7 @@ * * Tags for TrueType and OpenType tables (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define TTAGS_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -107,6 +106,7 @@ FT_BEGIN_HEADER #define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' ) #define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' ) #define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' ) +#define TTAG_wOF2 FT_MAKE_TAG( 'w', 'O', 'F', '2' ) /* used by "Keyboard.dfont" on legacy Mac OS X */ #define TTAG_0xA5kbd FT_MAKE_TAG( 0xA5, 'k', 'b', 'd' ) diff --git a/sdk/lib/3rdparty/freetype/include/ft2build.h b/sdk/lib/3rdparty/freetype/include/ft2build.h index e3f4887943f..b4fd1f8c3ee 100644 --- a/sdk/lib/3rdparty/freetype/include/ft2build.h +++ b/sdk/lib/3rdparty/freetype/include/ft2build.h @@ -4,7 +4,7 @@ * * FreeType 2 build and setup macros. * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -18,16 +18,14 @@ /************************************************************************** * - * 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`). + * This is the 'entry point' for FreeType header file inclusions, to be + * loaded before all other header files. * * A typical example is * * ``` * #include - * #include FT_FREETYPE_H + * #include * ``` * */ diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afangles.c b/sdk/lib/3rdparty/freetype/src/autofit/afangles.c index 9e1f7a21ffd..a2d45eb72c4 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afangles.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afangles.c @@ -5,7 +5,7 @@ * Routines used to compute vector angles with limited accuracy * and very high speed. It also contains sorting routines (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afblue.c b/sdk/lib/3rdparty/freetype/src/autofit/afblue.c index 28da159008e..9ebffdd0997 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afblue.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afblue.c @@ -7,7 +7,7 @@ * * Auto-fitter data for blue strings (body). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -134,7 +134,7 @@ '\0', '\xF0', '\x90', '\x90', '\xA8', ' ', '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x91', '\x83', /* 𐐨 𐐪 𐐬 𐐿 𐑃 */ '\0', - '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x85', ' ', '\xE0', '\xA4', '\x86', ' ', '\xE0', '\xA4', '\xA5', ' ', '\xE0', '\xA4', '\xA7', ' ', '\xE0', '\xA4', '\xAD', ' ', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */ + '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xA8', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x89', ' ', '\xE0', '\xA4', '\x9B', ' ', '\xE0', '\xA4', '\x9F', ' ', '\xE0', '\xA4', '\xA0', ' ', '\xE0', '\xA4', '\xA1', /* क न म उ छ ट ठ ड */ '\0', '\xE0', '\xA4', '\x88', ' ', '\xE0', '\xA4', '\x90', ' ', '\xE0', '\xA4', '\x93', ' ', '\xE0', '\xA4', '\x94', ' ', '\xE0', '\xA4', '\xBF', ' ', '\xE0', '\xA5', '\x80', ' ', '\xE0', '\xA5', '\x8B', ' ', '\xE0', '\xA5', '\x8C', /* ई ऐ ओ औ ि ी ो ौ */ '\0', @@ -296,6 +296,24 @@ '\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', + '\xF0', '\x96', '\xB9', '\x80', ' ', '\xF0', '\x96', '\xB9', '\x81', ' ', '\xF0', '\x96', '\xB9', '\x82', ' ', '\xF0', '\x96', '\xB9', '\x83', ' ', '\xF0', '\x96', '\xB9', '\x8F', ' ', '\xF0', '\x96', '\xB9', '\x9A', ' ', '\xF0', '\x96', '\xB9', '\x9F', /* 𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹟 */ + '\0', + '\xF0', '\x96', '\xB9', '\x80', ' ', '\xF0', '\x96', '\xB9', '\x81', ' ', '\xF0', '\x96', '\xB9', '\x82', ' ', '\xF0', '\x96', '\xB9', '\x83', ' ', '\xF0', '\x96', '\xB9', '\x8F', ' ', '\xF0', '\x96', '\xB9', '\x9A', ' ', '\xF0', '\x96', '\xB9', '\x92', ' ', '\xF0', '\x96', '\xB9', '\x93', /* 𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹒 𖹓 */ + '\0', + '\xF0', '\x96', '\xB9', '\xA4', ' ', '\xF0', '\x96', '\xB9', '\xAC', ' ', '\xF0', '\x96', '\xB9', '\xA7', ' ', '\xF0', '\x96', '\xB9', '\xB4', ' ', '\xF0', '\x96', '\xB9', '\xB6', ' ', '\xF0', '\x96', '\xB9', '\xBE', /* 𖹤 𖹬 𖹧 𖹴 𖹶 𖹾 */ + '\0', + '\xF0', '\x96', '\xB9', '\xA0', ' ', '\xF0', '\x96', '\xB9', '\xA1', ' ', '\xF0', '\x96', '\xB9', '\xA2', ' ', '\xF0', '\x96', '\xB9', '\xB9', ' ', '\xF0', '\x96', '\xB9', '\xB3', ' ', '\xF0', '\x96', '\xB9', '\xAE', /* 𖹠 𖹡 𖹢 𖹹 𖹳 𖹮 */ + '\0', + '\xF0', '\x96', '\xB9', '\xA0', ' ', '\xF0', '\x96', '\xB9', '\xA1', ' ', '\xF0', '\x96', '\xB9', '\xA2', ' ', '\xF0', '\x96', '\xB9', '\xB3', ' ', '\xF0', '\x96', '\xB9', '\xAD', ' ', '\xF0', '\x96', '\xB9', '\xBD', /* 𖹠 𖹡 𖹢 𖹳 𖹭 𖹽 */ + '\0', + '\xF0', '\x96', '\xB9', '\xA5', ' ', '\xF0', '\x96', '\xB9', '\xA8', ' ', '\xF0', '\x96', '\xB9', '\xA9', /* 𖹥 𖹨 𖹩 */ + '\0', + '\xF0', '\x96', '\xBA', '\x80', ' ', '\xF0', '\x96', '\xBA', '\x85', ' ', '\xF0', '\x96', '\xBA', '\x88', ' ', '\xF0', '\x96', '\xBA', '\x84', ' ', '\xF0', '\x96', '\xBA', '\x8D', /* 𖺀 𖺅 𖺈 𖺄 𖺍 */ + '\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', /* င ဎ ဒ ပ ဗ ဝ ၊ ။ */ @@ -336,6 +354,12 @@ '\0', '\xF0', '\x90', '\x92', '\x80', ' ', '\xF0', '\x90', '\x92', '\x82', ' ', '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x88', ' ', '\xF0', '\x90', '\x92', '\x8A', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA9', /* 𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩 */ '\0', + '\xF0', '\x90', '\xB4', '\x83', ' ', '\xF0', '\x90', '\xB4', '\x80', ' ', '\xF0', '\x90', '\xB4', '\x86', ' ', '\xF0', '\x90', '\xB4', '\x96', ' ', '\xF0', '\x90', '\xB4', '\x95', /* 𐴃 𐴀 𐴆 𐴖 𐴕 */ + '\0', + '\xF0', '\x90', '\xB4', '\x94', ' ', '\xF0', '\x90', '\xB4', '\x96', ' ', '\xF0', '\x90', '\xB4', '\x95', ' ', '\xF0', '\x90', '\xB4', '\x91', ' ', '\xF0', '\x90', '\xB4', '\x90', /* 𐴔 𐴖 𐴕 𐴑 𐴐 */ + '\0', + '\xD9', '\x80', /* ـ */ + '\0', '\xEA', '\xA2', '\x9C', ' ', '\xEA', '\xA2', '\x9E', ' ', '\xEA', '\xA2', '\xB3', ' ', '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\x96', ' ', '\xEA', '\xA2', '\x92', ' ', '\xEA', '\xA2', '\x9D', ' ', '\xEA', '\xA2', '\x9B', /* ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ */ '\0', '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\xA8', ' ', '\xEA', '\xA2', '\xBA', ' ', '\xEA', '\xA2', '\xA4', ' ', '\xEA', '\xA2', '\x8E', /* ꢂ ꢨ ꢺ ꢤ ꢎ */ @@ -484,14 +508,14 @@ { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 }, { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 }, { AF_BLUE_STRING_MAX, 0 }, - { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, - { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 }, - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 }, - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 }, - { AF_BLUE_STRING_MAX, 0 }, + { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 }, + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | + AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 }, + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 }, + { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_CARIAN_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, @@ -591,6 +615,9 @@ { AF_BLUE_STRING_HEBREW_BOTTOM, 0 }, { AF_BLUE_STRING_HEBREW_DESCENDER, 0 }, { AF_BLUE_STRING_MAX, 0 }, + { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }, + { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 }, @@ -609,9 +636,6 @@ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, - { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, - { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }, - { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_LAO_BOTTOM, 0 }, @@ -649,6 +673,18 @@ { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, + { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM, 0 }, + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | + AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM, 0 }, + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0 }, + { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { 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 }, @@ -680,6 +716,10 @@ { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, + { AF_BLUE_STRING_ROHINGYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0 }, + { AF_BLUE_STRING_ROHINGYA_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL }, + { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, @@ -707,9 +747,6 @@ { AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_TELUGU_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, - { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }, - { AF_BLUE_STRING_TIFINAGH, 0 }, - { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT }, { AF_BLUE_STRING_THAI_BOTTOM, 0 }, @@ -719,6 +756,9 @@ { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 }, { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 }, { AF_BLUE_STRING_MAX, 0 }, + { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }, + { AF_BLUE_STRING_TIFINAGH, 0 }, + { AF_BLUE_STRING_MAX, 0 }, { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }, { AF_BLUE_STRING_VAI_BOTTOM, 0 }, { AF_BLUE_STRING_MAX, 0 }, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afblue.cin b/sdk/lib/3rdparty/freetype/src/autofit/afblue.cin index 6545d1fd433..c6a697fee00 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afblue.cin +++ b/sdk/lib/3rdparty/freetype/src/autofit/afblue.cin @@ -4,7 +4,7 @@ * * Auto-fitter data for blue strings (body). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afblue.dat b/sdk/lib/3rdparty/freetype/src/autofit/afblue.dat index 14a0993b61d..b19b8df0f47 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afblue.dat +++ b/sdk/lib/3rdparty/freetype/src/autofit/afblue.dat @@ -2,7 +2,7 @@ // // Auto-fitter data for blue strings. // -// Copyright (C) 2013-2019 by +// Copyright (C) 2013-2020 by // David Turner, Robert Wilhelm, and Werner Lemberg. // // This file is part of the FreeType project, and may only be used, @@ -203,7 +203,7 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN: "𐐨 𐐪 𐐬 𐐿 𐑃" AF_BLUE_STRING_DEVANAGARI_BASE - "क म अ आ थ ध भ श" + "क न म उ छ ट ठ ड" AF_BLUE_STRING_DEVANAGARI_TOP "ई ऐ ओ औ ि ी ो ौ" // note that some fonts have extreme variation in the height of the @@ -392,6 +392,26 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN: AF_BLUE_STRING_MALAYALAM_BOTTOM "ട ഠ ധ ശ ഘ ച ഥ ല" + AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP + "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹟" + AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM + "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹒 𖹓" + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP + "𖹤 𖹬 𖹧 𖹴 𖹶 𖹾" + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP + "𖹠 𖹡 𖹢 𖹹 𖹳 𖹮" + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM + "𖹠 𖹡 𖹢 𖹳 𖹭 𖹽" + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER + "𖹥 𖹨 𖹩" + AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP + "𖺀 𖺅 𖺈 𖺄 𖺍" + + AF_BLUE_STRING_MONGOLIAN_TOP_BASE + "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍" + AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE + "ᡃ" + AF_BLUE_STRING_MYANMAR_TOP "ခ ဂ င ဒ ဝ ၥ ၊ ။" AF_BLUE_STRING_MYANMAR_BOTTOM @@ -438,6 +458,13 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN: AF_BLUE_STRING_OSMANYA_BOTTOM "𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩" + AF_BLUE_STRING_ROHINGYA_TOP + "𐴃 𐴀 𐴆 𐴖 𐴕" + AF_BLUE_STRING_ROHINGYA_BOTTOM + "𐴔 𐴖 𐴕 𐴑 𐴐" + AF_BLUE_STRING_ROHINGYA_JOIN + "ـ" + AF_BLUE_STRING_SAURASHTRA_TOP "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ" AF_BLUE_STRING_SAURASHTRA_BOTTOM @@ -729,14 +756,14 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_MAX, 0 } AF_BLUE_STRINGSET_CANS - { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | - AF_BLUE_PROPERTY_LATIN_X_HEIGHT } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } + { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 } + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | + AF_BLUE_PROPERTY_LATIN_X_HEIGHT } + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 } + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 } + { AF_BLUE_STRING_MAX, 0 } AF_BLUE_STRINGSET_CARI { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } @@ -869,6 +896,11 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_HEBREW_DESCENDER, 0 } { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_KNDA + { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_KANNADA_BOTTOM, 0 } + { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_KALI { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT } @@ -893,11 +925,6 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 } { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_KNDA - { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_KANNADA_BOTTOM, 0 } - { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_LAO { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT } @@ -947,6 +974,22 @@ 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_MEDF + { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM, 0 } + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | + AF_BLUE_PROPERTY_LATIN_X_HEIGHT } + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM, 0 } + { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0 } + { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { 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 } @@ -992,6 +1035,12 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 } { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_ROHG + { AF_BLUE_STRING_ROHINGYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0 } + { AF_BLUE_STRING_ROHINGYA_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL } + { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_SAUR { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 } @@ -1033,11 +1082,6 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_TELUGU_BOTTOM, 0 } { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_TFNG - { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP } - { AF_BLUE_STRING_TIFINAGH, 0 } - { AF_BLUE_STRING_MAX, 0 } - AF_BLUE_STRINGSET_THAI { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT } @@ -1049,6 +1093,11 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 } { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_TFNG + { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP } + { AF_BLUE_STRING_TIFINAGH, 0 } + { AF_BLUE_STRING_MAX, 0 } + AF_BLUE_STRINGSET_VAII { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } { AF_BLUE_STRING_VAI_BOTTOM, 0 } diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afblue.h b/sdk/lib/3rdparty/freetype/src/autofit/afblue.h index a2ff597b8eb..486d663b6c9 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afblue.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afblue.h @@ -7,7 +7,7 @@ * * Auto-fitter data for blue strings (specification). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -212,56 +212,68 @@ 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_MEDEFAIDRIN_CAPITAL_TOP = 3614, + AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM = 3649, + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP = 3689, + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP = 3719, + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM = 3749, + AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER = 3779, + AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP = 3794, + AF_BLUE_STRING_MONGOLIAN_TOP_BASE = 3819, + AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE = 3863, + AF_BLUE_STRING_MYANMAR_TOP = 3867, + AF_BLUE_STRING_MYANMAR_BOTTOM = 3899, + AF_BLUE_STRING_MYANMAR_ASCENDER = 3931, + AF_BLUE_STRING_MYANMAR_DESCENDER = 3959, + AF_BLUE_STRING_NKO_TOP = 3991, + AF_BLUE_STRING_NKO_BOTTOM = 4015, + AF_BLUE_STRING_NKO_SMALL_TOP = 4030, + AF_BLUE_STRING_NKO_SMALL_BOTTOM = 4039, + AF_BLUE_STRING_OL_CHIKI = 4051, + AF_BLUE_STRING_OLD_TURKIC_TOP = 4075, + AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 4090, + AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 4110, + AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 4150, + AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 4180, + AF_BLUE_STRING_OSAGE_SMALL_TOP = 4195, + AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 4235, + AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4275, + AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4300, + AF_BLUE_STRING_OSMANYA_TOP = 4315, + AF_BLUE_STRING_OSMANYA_BOTTOM = 4355, + AF_BLUE_STRING_ROHINGYA_TOP = 4395, + AF_BLUE_STRING_ROHINGYA_BOTTOM = 4420, + AF_BLUE_STRING_ROHINGYA_JOIN = 4445, + AF_BLUE_STRING_SAURASHTRA_TOP = 4448, + AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4480, + AF_BLUE_STRING_SHAVIAN_TOP = 4500, + AF_BLUE_STRING_SHAVIAN_BOTTOM = 4510, + AF_BLUE_STRING_SHAVIAN_DESCENDER = 4535, + AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4545, + AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4580, + AF_BLUE_STRING_SINHALA_TOP = 4595, + AF_BLUE_STRING_SINHALA_BOTTOM = 4627, + AF_BLUE_STRING_SINHALA_DESCENDER = 4659, + AF_BLUE_STRING_SUNDANESE_TOP = 4703, + AF_BLUE_STRING_SUNDANESE_BOTTOM = 4727, + AF_BLUE_STRING_SUNDANESE_DESCENDER = 4759, + AF_BLUE_STRING_TAI_VIET_TOP = 4767, + AF_BLUE_STRING_TAI_VIET_BOTTOM = 4787, + AF_BLUE_STRING_TAMIL_TOP = 4799, + AF_BLUE_STRING_TAMIL_BOTTOM = 4831, + AF_BLUE_STRING_TELUGU_TOP = 4863, + AF_BLUE_STRING_TELUGU_BOTTOM = 4891, + AF_BLUE_STRING_THAI_TOP = 4919, + AF_BLUE_STRING_THAI_BOTTOM = 4943, + AF_BLUE_STRING_THAI_ASCENDER = 4971, + AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4983, + AF_BLUE_STRING_THAI_DESCENDER = 4995, + AF_BLUE_STRING_THAI_LARGE_DESCENDER = 5011, + AF_BLUE_STRING_THAI_DIGIT_TOP = 5019, + AF_BLUE_STRING_TIFINAGH = 5031, + AF_BLUE_STRING_VAI_TOP = 5063, + AF_BLUE_STRING_VAI_BOTTOM = 5095, + af_blue_1_1 = 5126, #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, @@ -345,34 +357,37 @@ FT_BEGIN_HEADER AF_BLUE_STRINGSET_GUJR = 112, AF_BLUE_STRINGSET_GURU = 118, AF_BLUE_STRINGSET_HEBR = 124, - AF_BLUE_STRINGSET_KALI = 128, - AF_BLUE_STRINGSET_KHMR = 134, - AF_BLUE_STRINGSET_KHMS = 140, - AF_BLUE_STRINGSET_KNDA = 143, + AF_BLUE_STRINGSET_KNDA = 128, + AF_BLUE_STRINGSET_KALI = 131, + AF_BLUE_STRINGSET_KHMR = 137, + AF_BLUE_STRINGSET_KHMS = 143, AF_BLUE_STRINGSET_LAO = 146, AF_BLUE_STRINGSET_LATN = 152, AF_BLUE_STRINGSET_LATB = 159, 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_MEDF = 179, + AF_BLUE_STRINGSET_MONG = 187, + AF_BLUE_STRINGSET_MYMR = 190, + AF_BLUE_STRINGSET_NKOO = 195, + AF_BLUE_STRINGSET_NONE = 200, + AF_BLUE_STRINGSET_OLCK = 201, + AF_BLUE_STRINGSET_ORKH = 204, + AF_BLUE_STRINGSET_OSGE = 207, + AF_BLUE_STRINGSET_OSMA = 215, + AF_BLUE_STRINGSET_ROHG = 218, + AF_BLUE_STRINGSET_SAUR = 222, + AF_BLUE_STRINGSET_SHAW = 225, + AF_BLUE_STRINGSET_SINH = 231, + AF_BLUE_STRINGSET_SUND = 235, + AF_BLUE_STRINGSET_TAML = 239, + AF_BLUE_STRINGSET_TAVT = 242, + AF_BLUE_STRINGSET_TELU = 245, + AF_BLUE_STRINGSET_THAI = 248, + AF_BLUE_STRINGSET_TFNG = 256, + AF_BLUE_STRINGSET_VAII = 259, + af_blue_2_1 = 262, #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/sdk/lib/3rdparty/freetype/src/autofit/afblue.hin b/sdk/lib/3rdparty/freetype/src/autofit/afblue.hin index 30a28dafa53..39570270917 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afblue.hin +++ b/sdk/lib/3rdparty/freetype/src/autofit/afblue.hin @@ -4,7 +4,7 @@ * * Auto-fitter data for blue strings (specification). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afcjk.c b/sdk/lib/3rdparty/freetype/src/autofit/afcjk.c index 7847ecc8829..155957ea9b8 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afcjk.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afcjk.c @@ -4,7 +4,7 @@ * * Auto-fitter hinting routines for CJK writing system (body). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -22,9 +22,8 @@ * */ -#include -#include FT_ADVANCES_H -#include FT_INTERNAL_DEBUG_H +#include +#include #include "afglobal.h" #include "aflatin.h" @@ -169,7 +168,7 @@ if ( !glyph_index ) goto Exit; - FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n", + FT_TRACE5(( "standard character: U+%04lX (glyph index %ld)\n", ch, glyph_index )); error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE ); @@ -272,9 +271,9 @@ dim == AF_DIMENSION_VERT ? "horizontal" : "vertical" )); - FT_TRACE5(( " %d (standard)", axis->standard_width )); + FT_TRACE5(( " %ld (standard)", axis->standard_width )); for ( i = 1; i < axis->width_count; i++ ) - FT_TRACE5(( " %d", axis->widths[i].org )); + FT_TRACE5(( " %ld", axis->widths[i].org )); FT_TRACE5(( "\n" )); } @@ -746,7 +745,7 @@ delta2 = FT_MulFix( delta2, scale ); - FT_TRACE5(( "delta: %d", delta1 )); + FT_TRACE5(( "delta: %ld", delta1 )); if ( delta2 < 32 ) delta2 = 0; #if 0 @@ -755,7 +754,7 @@ #endif else delta2 = FT_PIX_ROUND( delta2 ); - FT_TRACE5(( "/%d\n", delta2 )); + FT_TRACE5(( "/%ld\n", delta2 )); if ( delta1 < 0 ) delta2 = -delta2; @@ -824,7 +823,7 @@ { AF_AxisHints axis = &hints->axis[dim]; AF_Segment segments = axis->segments; - AF_Segment segment_limit = segments + axis->num_segments; + AF_Segment segment_limit = FT_OFFSET( segments, axis->num_segments ); FT_Error error; AF_Segment seg; @@ -1202,6 +1201,8 @@ seg = edge->first; + if ( !seg ) + goto Skip_Loop; do { @@ -1257,13 +1258,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; @@ -1659,7 +1661,7 @@ stem_edge->pos = base_edge->pos + fitted_width; - FT_TRACE5(( " CJKLINK: edge %d @%d (opos=%.2f) linked to %.2f," + FT_TRACE5(( " CJKLINK: edge %ld @%d (opos=%.2f) linked to %.2f," " dist was %.2f, now %.2f\n", stem_edge - hints->axis[dim].edges, stem_edge->fpos, stem_edge->opos / 64.0, stem_edge->pos / 64.0, @@ -1881,7 +1883,7 @@ continue; #ifdef FT_DEBUG_LEVEL_TRACE - FT_TRACE5(( " CJKBLUE: edge %d @%d (opos=%.2f) snapped to %.2f," + FT_TRACE5(( " CJKBLUE: edge %ld @%d (opos=%.2f) snapped to %.2f," " was %.2f\n", edge1 - edges, edge1->fpos, edge1->opos / 64.0, blue->fit / 64.0, edge1->pos / 64.0 )); @@ -1945,7 +1947,7 @@ /* this should not happen, but it's better to be safe */ if ( edge2->blue_edge ) { - FT_TRACE5(( "ASSERTION FAILED for edge %d\n", edge2-edges )); + FT_TRACE5(( "ASSERTION FAILED for edge %ld\n", edge2-edges )); af_cjk_align_linked_edge( hints, dim, edge2, edge ); edge->flags |= AF_EDGE_DONE; diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afcjk.h b/sdk/lib/3rdparty/freetype/src/autofit/afcjk.h index 59acae53429..fd0f451aa83 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afcjk.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afcjk.h @@ -4,7 +4,7 @@ * * Auto-fitter hinting routines for CJK writing system (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afcover.h b/sdk/lib/3rdparty/freetype/src/autofit/afcover.h index ff207a97e08..03085ad07ea 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afcover.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afcover.h @@ -4,7 +4,7 @@ * * Auto-fitter coverages (specification only). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afdummy.c b/sdk/lib/3rdparty/freetype/src/autofit/afdummy.c index 7e07a41e7da..77d31df974f 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afdummy.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afdummy.c @@ -5,7 +5,7 @@ * Auto-fitter dummy routines to be used if no hinting should be * performed (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afdummy.h b/sdk/lib/3rdparty/freetype/src/autofit/afdummy.h index ab9227d35d9..efd799e84b7 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afdummy.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afdummy.h @@ -5,7 +5,7 @@ * Auto-fitter dummy routines to be used if no hinting should be * performed (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/aferrors.h b/sdk/lib/3rdparty/freetype/src/autofit/aferrors.h index 2ec336f72c6..f90899944b5 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/aferrors.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/aferrors.h @@ -4,7 +4,7 @@ * * Autofitter error codes (specification only). * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef AFERRORS_H_ #define AFERRORS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX AF_Err_ #define FT_ERR_BASE FT_Mod_Err_Autofit -#include FT_ERRORS_H +#include #endif /* AFERRORS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afglobal.c b/sdk/lib/3rdparty/freetype/src/autofit/afglobal.c index 7183ce4a780..d5129423d52 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afglobal.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afglobal.c @@ -4,7 +4,7 @@ * * Auto-fitter routines to compute global hinting values (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #include "afglobal.h" #include "afranges.h" #include "afshaper.h" -#include FT_INTERNAL_DEBUG_H +#include /************************************************************************** @@ -306,7 +306,7 @@ if ( !( count % 10 ) ) FT_TRACE4(( " " )); - FT_TRACE4(( " %d", idx )); + FT_TRACE4(( " %ld", idx )); count++; if ( !( count % 10 ) ) @@ -443,6 +443,7 @@ style = (AF_Style)( globals->glyph_styles[gindex] & AF_STYLE_UNASSIGNED ); + Again: style_class = af_style_classes[style]; writing_system_class = af_writing_system_classes [style_class->writing_system]; @@ -470,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; } } diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afglobal.h b/sdk/lib/3rdparty/freetype/src/autofit/afglobal.h index 52f38350db3..fecf7af9773 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afglobal.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afglobal.h @@ -5,7 +5,7 @@ * Auto-fitter routines to compute global hinting values * (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afhints.c b/sdk/lib/3rdparty/freetype/src/autofit/afhints.c index ed111c41176..a8e00890ef3 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afhints.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afhints.c @@ -4,7 +4,7 @@ * * Auto-fitter hinting routines (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 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 "afhints.h" #include "aferrors.h" -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_DEBUG_H +#include +#include /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afhints.h b/sdk/lib/3rdparty/freetype/src/autofit/afhints.h index e0cf612f0c5..6397f098f00 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afhints.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afhints.h @@ -4,7 +4,7 @@ * * Auto-fitter hinting routines (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afindic.c b/sdk/lib/3rdparty/freetype/src/autofit/afindic.c index a17117c7129..bc2837a26dd 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afindic.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afindic.c @@ -4,7 +4,7 @@ * * Auto-fitter hinting routines for Indic writing system (body). * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * Rahul Bhalerao , . * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afindic.h b/sdk/lib/3rdparty/freetype/src/autofit/afindic.h index bc5bc59fa55..088b88b19da 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afindic.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afindic.h @@ -5,7 +5,7 @@ * Auto-fitter hinting routines for Indic writing system * (specification). * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * Rahul Bhalerao , . * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/aflatin.c b/sdk/lib/3rdparty/freetype/src/autofit/aflatin.c index d46755680d6..8deb26b44bc 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/aflatin.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/aflatin.c @@ -4,7 +4,7 @@ * * Auto-fitter hinting routines for latin writing system (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,9 +16,8 @@ */ -#include -#include FT_ADVANCES_H -#include FT_INTERNAL_DEBUG_H +#include +#include #include "afglobal.h" #include "aflatin.h" @@ -68,7 +67,6 @@ AF_GlyphHintsRec hints[1]; #endif - FT_TRACE5(( "\n" "latin standard widths computation (style `%s')\n" "=====================================================\n" @@ -161,9 +159,13 @@ 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", + FT_TRACE5(( "standard character: U+%04lX (glyph index %ld)\n", ch, glyph_index )); error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE ); @@ -266,9 +268,9 @@ dim == AF_DIMENSION_VERT ? "horizontal" : "vertical" )); - FT_TRACE5(( " %d (standard)", axis->standard_width )); + FT_TRACE5(( " %ld (standard)", axis->standard_width )); for ( i = 1; i < axis->width_count; i++ ) - FT_TRACE5(( " %d", axis->widths[i].org )); + FT_TRACE5(( " %ld", axis->widths[i].org )); FT_TRACE5(( "\n" )); } @@ -283,7 +285,6 @@ FT_TRACE5(( "\n" )); af_glyph_hints_done( hints ); - #ifdef __REACTOS__ free(hints); #endif @@ -332,7 +333,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 ) { @@ -1001,10 +1002,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]; @@ -1047,17 +1049,40 @@ { *a = *b; FT_TRACE5(( "blue zone overlap:" - " adjusting %s %d to %ld\n", + " adjusting %s %ld to %ld\n", a_is_top ? "overshoot" : "reference", blue_sorted[i] - axis->blues, *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; - return; + 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 1; + } } @@ -1136,6 +1161,8 @@ af_latin_metrics_init( AF_LatinMetrics metrics, FT_Face face ) { + FT_Error error = FT_Err_Ok; + FT_CharMap oldmap = face->charmap; @@ -1144,12 +1171,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; } @@ -1264,7 +1297,7 @@ "af_latin_metrics_scale_dim:" " x height alignment (style `%s'):\n" " " - " vertical scaling changed from %.5f to %.5f (by %d%%)\n" + " vertical scaling changed from %.5f to %.5f (by %ld%%)\n" "\n", af_style_names[metrics->root.style_class->style], scale / 65536.0, @@ -1317,7 +1350,7 @@ width->cur = FT_MulFix( width->org, scale ); width->fit = width->cur; - FT_TRACE5(( " %d scaled to %.2f\n", + FT_TRACE5(( " %ld scaled to %.2f\n", width->org, width->cur / 64.0 )); } @@ -1458,18 +1491,18 @@ AF_LatinBlue blue = &axis->blues[nn]; - FT_TRACE5(( " reference %d: %d scaled to %.2f%s\n" - " overshoot %d: %d scaled to %.2f%s\n", + FT_TRACE5(( " reference %d: %ld scaled to %.2f%s\n" + " overshoot %d: %ld scaled to %.2f%s\n", 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 } @@ -1894,7 +1927,7 @@ /* sense -- this is used to better detect and ignore serifs */ { AF_Segment segments = axis->segments; - AF_Segment segments_end = segments + axis->num_segments; + AF_Segment segments_end = FT_OFFSET( segments, axis->num_segments ); for ( segment = segments; segment < segments_end; segment++ ) @@ -2298,7 +2331,7 @@ */ { AF_Edge edges = axis->edges; - AF_Edge edge_limit = edges + axis->num_edges; + AF_Edge edge_limit = FT_OFFSET( edges, axis->num_edges ); AF_Edge edge; @@ -2929,7 +2962,7 @@ stem_edge->pos = base_edge->pos + fitted_width; - FT_TRACE5(( " LINK: edge %d (opos=%.2f) linked to %.2f," + FT_TRACE5(( " LINK: edge %ld (opos=%.2f) linked to %.2f," " dist was %.2f, now %.2f\n", stem_edge - hints->axis[dim].edges, stem_edge->opos / 64.0, stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 )); @@ -3053,12 +3086,12 @@ #ifdef FT_DEBUG_LEVEL_TRACE if ( !anchor ) - FT_TRACE5(( " BLUE_ANCHOR: edge %d (opos=%.2f) snapped to %.2f," - " was %.2f (anchor=edge %d)\n", + FT_TRACE5(( " BLUE_ANCHOR: edge %ld (opos=%.2f) snapped to %.2f," + " was %.2f (anchor=edge %ld)\n", edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0, edge1->pos / 64.0, edge - edges )); else - FT_TRACE5(( " BLUE: edge %d (opos=%.2f) snapped to %.2f," + FT_TRACE5(( " BLUE: edge %ld (opos=%.2f) snapped to %.2f," " was %.2f\n", edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0, edge1->pos / 64.0 )); @@ -3107,7 +3140,7 @@ /* this should not happen, but it's better to be safe */ if ( edge2->blue_edge ) { - FT_TRACE5(( " ASSERTION FAILED for edge %d\n", edge2 - edges )); + FT_TRACE5(( " ASSERTION FAILED for edge %ld\n", edge2 - edges )); af_latin_align_linked_edge( hints, dim, edge2, edge ); edge->flags |= AF_EDGE_DONE; @@ -3175,7 +3208,7 @@ anchor = edge; edge->flags |= AF_EDGE_DONE; - FT_TRACE5(( " ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)" + FT_TRACE5(( " ANCHOR: edge %ld (opos=%.2f) and %ld (opos=%.2f)" " snapped to %.2f and %.2f\n", edge - edges, edge->opos / 64.0, edge2 - edges, edge2->opos / 64.0, @@ -3204,7 +3237,7 @@ if ( edge2->flags & AF_EDGE_DONE ) { - FT_TRACE5(( " ADJUST: edge %d (pos=%.2f) moved to %.2f\n", + FT_TRACE5(( " ADJUST: edge %ld (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, ( edge2->pos - cur_len ) / 64.0 )); @@ -3245,7 +3278,7 @@ edge->pos = cur_pos1 - cur_len / 2; edge2->pos = cur_pos1 + cur_len / 2; - FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)" + FT_TRACE5(( " STEM: edge %ld (opos=%.2f) linked to %ld (opos=%.2f)" " snapped to %.2f and %.2f\n", edge - edges, edge->opos / 64.0, edge2 - edges, edge2->opos / 64.0, @@ -3276,7 +3309,7 @@ edge->pos = ( delta1 < delta2 ) ? cur_pos1 : cur_pos2; edge2->pos = edge->pos + cur_len; - FT_TRACE5(( " STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)" + FT_TRACE5(( " STEM: edge %ld (opos=%.2f) linked to %ld (opos=%.2f)" " snapped to %.2f and %.2f\n", edge - edges, edge->opos / 64.0, edge2 - edges, edge2->opos / 64.0, @@ -3299,7 +3332,7 @@ if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 ) { #ifdef FT_DEBUG_LEVEL_TRACE - FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n", + FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 )); @@ -3401,7 +3434,7 @@ if ( delta < 64 + 16 ) { af_latin_align_serif_edge( hints, edge->serif, edge ); - FT_TRACE5(( " SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)" + FT_TRACE5(( " SERIF: edge %ld (opos=%.2f) serif to %ld (opos=%.2f)" " aligned to %.2f\n", edge - edges, edge->opos / 64.0, edge->serif - edges, edge->serif->opos / 64.0, @@ -3411,7 +3444,7 @@ { edge->pos = FT_PIX_ROUND( edge->opos ); anchor = edge; - FT_TRACE5(( " SERIF_ANCHOR: edge %d (opos=%.2f)" + FT_TRACE5(( " SERIF_ANCHOR: edge %ld (opos=%.2f)" " snapped to %.2f\n", edge-edges, edge->opos / 64.0, edge->pos / 64.0 )); } @@ -3439,8 +3472,8 @@ after->pos - before->pos, after->opos - before->opos ); - FT_TRACE5(( " SERIF_LINK1: edge %d (opos=%.2f) snapped to %.2f" - " from %d (opos=%.2f)\n", + FT_TRACE5(( " SERIF_LINK1: edge %ld (opos=%.2f) snapped to %.2f" + " from %ld (opos=%.2f)\n", edge - edges, edge->opos / 64.0, edge->pos / 64.0, before - edges, before->opos / 64.0 )); @@ -3449,7 +3482,7 @@ { edge->pos = anchor->pos + ( ( edge->opos - anchor->opos + 16 ) & ~31 ); - FT_TRACE5(( " SERIF_LINK2: edge %d (opos=%.2f)" + FT_TRACE5(( " SERIF_LINK2: edge %ld (opos=%.2f)" " snapped to %.2f\n", edge - edges, edge->opos / 64.0, edge->pos / 64.0 )); } @@ -3469,7 +3502,7 @@ if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 ) { #ifdef FT_DEBUG_LEVEL_TRACE - FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n", + FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 )); @@ -3490,7 +3523,7 @@ if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 ) { #ifdef FT_DEBUG_LEVEL_TRACE - FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n", + FT_TRACE5(( " BOUND: edge %ld (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, edge[1].pos / 64.0 )); diff --git a/sdk/lib/3rdparty/freetype/src/autofit/aflatin.h b/sdk/lib/3rdparty/freetype/src/autofit/aflatin.h index 40479538c25..62bc4c8d442 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/aflatin.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/aflatin.h @@ -5,7 +5,7 @@ * Auto-fitter hinting routines for latin writing system * (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.c b/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.c index 5d4e055b8f3..dd1fea409f8 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.c @@ -9,7 +9,7 @@ * * Auto-fitter hinting routines for latin writing system (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,7 +21,7 @@ */ -#include FT_ADVANCES_H +#include #ifdef FT_OPTION_AUTOFIT2 @@ -75,7 +75,6 @@ AF_GlyphHintsRec hints[1]; #endif - af_glyph_hints_init( hints, face->memory ); metrics->axis[AF_DIMENSION_HORZ].width_count = 0; diff --git a/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.h b/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.h index 507cef3df2b..c2aebc49acf 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/aflatin2.h @@ -10,7 +10,7 @@ * Auto-fitter hinting routines for latin writing system * (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afloader.c b/sdk/lib/3rdparty/freetype/src/autofit/afloader.c index 83743b7be15..c35d85c4cfb 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afloader.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afloader.c @@ -4,7 +4,7 @@ * * Auto-fitter glyph loading routines (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -22,7 +22,7 @@ #include "aferrors.h" #include "afmodule.h" -#include FT_INTERNAL_CALC_H +#include /* Initialize glyph loader. */ diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afloader.h b/sdk/lib/3rdparty/freetype/src/autofit/afloader.h index d1e0f3c093d..97282371cd4 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afloader.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afloader.h @@ -4,7 +4,7 @@ * * Auto-fitter glyph loading routines (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afmodule.c b/sdk/lib/3rdparty/freetype/src/autofit/afmodule.c index fa43e58b945..aaf52d02ad2 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afmodule.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afmodule.c @@ -4,7 +4,7 @@ * * Auto-fitter module implementation (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -53,10 +53,10 @@ void* _af_debug_hints = _af_debug_hints_rec; #endif -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_DRIVER_H -#include FT_SERVICE_PROPERTIES_H +#include +#include +#include +#include /************************************************************************** @@ -149,7 +149,7 @@ if ( !af_style_classes[ss] ) { FT_TRACE0(( "af_property_set: Invalid value %d for property `%s'\n", - fallback_script, property_name )); + *fallback_script, property_name )); return FT_THROW( Invalid_Argument ); } @@ -576,8 +576,8 @@ Exit: NULL, /* reset_face */ NULL, /* get_global_hints */ NULL, /* done_global_hints */ - (FT_AutoHinter_GlyphLoadFunc)af_autofitter_load_glyph ) /* load_glyph */ - + (FT_AutoHinter_GlyphLoadFunc)af_autofitter_load_glyph /* load_glyph */ + ) FT_DEFINE_MODULE( autofit_module_class, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afmodule.h b/sdk/lib/3rdparty/freetype/src/autofit/afmodule.h index b410809aa83..e8fe4a93aad 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afmodule.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afmodule.h @@ -4,7 +4,7 @@ * * Auto-fitter module implementation (specification). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,9 +19,8 @@ #ifndef AFMODULE_H_ #define AFMODULE_H_ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_MODULE_H +#include +#include FT_BEGIN_HEADER @@ -47,6 +46,7 @@ FT_BEGIN_HEADER } AF_ModuleRec, *AF_Module; +FT_DECLARE_AUTOHINTER_INTERFACE( af_autofitter_interface ) FT_DECLARE_MODULE( autofit_module_class ) diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afranges.c b/sdk/lib/3rdparty/freetype/src/autofit/afranges.c index c0dba818a13..c8ebf5e7849 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afranges.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afranges.c @@ -4,7 +4,7 @@ * * Auto-fitter Unicode script ranges (body). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -664,6 +664,33 @@ }; + const AF_Script_UniRangeRec af_medf_uniranges[] = + { + AF_UNIRANGE_REC( 0x16E40, 0x16E9F ), /* Medefaidrin */ + AF_UNIRANGE_REC( 0, 0 ) + }; + + const AF_Script_UniRangeRec af_medf_nonbase_uniranges[] = + { + AF_UNIRANGE_REC( 0, 0 ) + }; + + + 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 */ @@ -763,6 +790,18 @@ }; + const AF_Script_UniRangeRec af_rohg_uniranges[] = + { + AF_UNIRANGE_REC( 0x10D00, 0x10D3F ), /* Hanifi Rohingya */ + AF_UNIRANGE_REC( 0, 0 ) + }; + + const AF_Script_UniRangeRec af_rohg_nonbase_uniranges[] = + { + AF_UNIRANGE_REC( 0, 0 ) + }; + + const AF_Script_UniRangeRec af_saur_uniranges[] = { AF_UNIRANGE_REC( 0xA880, 0xA8DF ), /* Saurashtra */ diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afranges.h b/sdk/lib/3rdparty/freetype/src/autofit/afranges.h index d5917aefed0..c2ffda4b0f9 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afranges.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afranges.h @@ -4,7 +4,7 @@ * * Auto-fitter Unicode script ranges (specification). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afscript.h b/sdk/lib/3rdparty/freetype/src/autofit/afscript.h index c2f0c7ac60a..4cf9cc19f58 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afscript.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afscript.h @@ -4,7 +4,7 @@ * * Auto-fitter scripts (specification only). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -243,6 +243,18 @@ HINTING_BOTTOM_TO_TOP, "\xE0\xB4\xA0 \xE0\xB4\xB1" ) /* ഠ റ */ + SCRIPT( medf, MEDF, + "Medefaidrin", + HB_SCRIPT_MEDEFAIDRIN, + HINTING_BOTTOM_TO_TOP, + "\xF0\x96\xB9\xA1 \xF0\x96\xB9\x9B \xF0\x96\xB9\xAF" ) /* 𖹡 𖹛 𖹯 */ + + SCRIPT( mong, MONG, + "Mongolian", + HB_SCRIPT_MONGOLIAN, + HINTING_TOP_TO_BOTTOM, + "\xE1\xA1\x82 \xE1\xA0\xAA" ) /* ᡂ ᠪ */ + SCRIPT( mymr, MYMR, "Myanmar", HB_SCRIPT_MYANMAR, @@ -285,6 +297,12 @@ HINTING_BOTTOM_TO_TOP, "\xF0\x90\x92\x86 \xF0\x90\x92\xA0" ) /* 𐒆 𐒠 */ + SCRIPT( rohg, ROHG, + "Hanifi Rohingya", + HB_SCRIPT_HANIFI_ROHINGYA, + HINTING_BOTTOM_TO_TOP, + "\xF0\x90\xB4\xB0" ) /* 𐴰 */ + SCRIPT( saur, SAUR, "Saurashtra", HB_SCRIPT_SAURASHTRA, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afshaper.c b/sdk/lib/3rdparty/freetype/src/autofit/afshaper.c index a5191c69158..bbf7b6b1f9a 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afshaper.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afshaper.c @@ -4,7 +4,7 @@ * * HarfBuzz interface for accessing OpenType features (body). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,9 +16,8 @@ */ -#include -#include FT_FREETYPE_H -#include FT_ADVANCES_H +#include +#include #include "afglobal.h" #include "aftypes.h" #include "afshaper.h" diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afshaper.h b/sdk/lib/3rdparty/freetype/src/autofit/afshaper.h index 06a1e066162..138c27b32b6 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afshaper.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afshaper.h @@ -4,7 +4,7 @@ * * HarfBuzz interface for accessing OpenType features (specification). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define AFSHAPER_H_ -#include -#include FT_FREETYPE_H +#include #ifdef FT_CONFIG_OPTION_USE_HARFBUZZ diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afstyles.h b/sdk/lib/3rdparty/freetype/src/autofit/afstyles.h index edf4f54edd7..9113ec451ef 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afstyles.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afstyles.h @@ -4,7 +4,7 @@ * * Auto-fitter styles (specification only). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -322,6 +322,20 @@ AF_BLUE_STRINGSET_MLYM, AF_COVERAGE_DEFAULT ) + STYLE( medf_dflt, MEDF_DFLT, + "Medefaidrin default style", + AF_WRITING_SYSTEM_LATIN, + AF_SCRIPT_MEDF, + AF_BLUE_STRINGSET_MEDF, + 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, @@ -371,6 +385,13 @@ AF_BLUE_STRINGSET_OSMA, AF_COVERAGE_DEFAULT ) + STYLE( rohg_dflt, ROHG_DFLT, + "Hanifi Rohingya default style", + AF_WRITING_SYSTEM_LATIN, + AF_SCRIPT_ROHG, + AF_BLUE_STRINGSET_ROHG, + AF_COVERAGE_DEFAULT ) + STYLE( saur_dflt, SAUR_DFLT, "Saurashtra default style", AF_WRITING_SYSTEM_LATIN, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/aftypes.h b/sdk/lib/3rdparty/freetype/src/autofit/aftypes.h index 579003d27d9..5f040c6b4b9 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/aftypes.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/aftypes.h @@ -4,7 +4,7 @@ * * Auto-fitter types (specification only). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -32,12 +32,11 @@ #ifndef AFTYPES_H_ #define AFTYPES_H_ -#include -#include FT_FREETYPE_H -#include FT_OUTLINE_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H +#include +#include +#include +#include #include "afblue.h" diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afwarp.c b/sdk/lib/3rdparty/freetype/src/autofit/afwarp.c index 84e9753ad99..808280df5d9 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afwarp.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/afwarp.c @@ -4,7 +4,7 @@ * * Auto-fitter warping algorithm (body). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afwarp.h b/sdk/lib/3rdparty/freetype/src/autofit/afwarp.h index 9a2c9a42c1b..cdea23e7dec 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afwarp.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afwarp.h @@ -4,7 +4,7 @@ * * Auto-fitter warping algorithm (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/afwrtsys.h b/sdk/lib/3rdparty/freetype/src/autofit/afwrtsys.h index 5611cf441a4..3990633d2d6 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/afwrtsys.h +++ b/sdk/lib/3rdparty/freetype/src/autofit/afwrtsys.h @@ -4,7 +4,7 @@ * * Auto-fitter writing systems (specification only). * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/autofit/autofit.c b/sdk/lib/3rdparty/freetype/src/autofit/autofit.c index facfec17444..ef5e7f14522 100644 --- a/sdk/lib/3rdparty/freetype/src/autofit/autofit.c +++ b/sdk/lib/3rdparty/freetype/src/autofit/autofit.c @@ -4,7 +4,7 @@ * * Auto-fitter module (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "afangles.c" #include "afblue.c" diff --git a/sdk/lib/3rdparty/freetype/src/base/ftadvanc.c b/sdk/lib/3rdparty/freetype/src/base/ftadvanc.c index 0dfba57036e..c689e6a15ba 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftadvanc.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftadvanc.c @@ -4,7 +4,7 @@ * * Quick computation of advance widths (body). * - * Copyright (C) 2008-2019 by + * Copyright (C) 2008-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_ADVANCES_H -#include FT_INTERNAL_OBJECTS_H +#include +#include static FT_Error diff --git a/sdk/lib/3rdparty/freetype/src/base/ftbase.c b/sdk/lib/3rdparty/freetype/src/base/ftbase.c index fb8cbfcc271..bfbaffd64e9 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftbase.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftbase.c @@ -4,7 +4,7 @@ * * Single object library component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,7 +16,6 @@ */ -#include #define FT_MAKE_OPTION_SINGLE_OBJECT #include "ftadvanc.c" diff --git a/sdk/lib/3rdparty/freetype/src/base/ftbase.h b/sdk/lib/3rdparty/freetype/src/base/ftbase.h index 35b1c47fd9c..25afa9bc314 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftbase.h +++ b/sdk/lib/3rdparty/freetype/src/base/ftbase.h @@ -4,7 +4,7 @@ * * Private functions used in the `base' module (specification). * - * Copyright (C) 2008-2019 by + * Copyright (C) 2008-2020 by * David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. * * This file is part of the FreeType project, and may only be used, @@ -20,13 +20,16 @@ #define FTBASE_H_ -#include -#include FT_INTERNAL_OBJECTS_H +#include FT_BEGIN_HEADER + FT_DECLARE_GLYPH( ft_bitmap_glyph_class ) + FT_DECLARE_GLYPH( ft_outline_glyph_class ) + + #ifdef FT_CONFIG_OPTION_MAC_FONTS /* MacOS resource fork cannot exceed 16MB at least for Carbon code; */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftbbox.c b/sdk/lib/3rdparty/freetype/src/base/ftbbox.c index 0b04fde6359..30a4eba0b3b 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftbbox.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftbbox.c @@ -4,7 +4,7 @@ * * FreeType bbox computation (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used @@ -24,14 +24,13 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_BBOX_H -#include FT_IMAGE_H -#include FT_OUTLINE_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include +#include +#include typedef struct TBBox_Rec_ @@ -294,10 +293,10 @@ if ( shift > 2 ) shift = 2; - q1 <<= shift; - q2 <<= shift; - q3 <<= shift; - q4 <<= shift; + q1 *= 1 << shift; + q2 *= 1 << shift; + q3 *= 1 << shift; + q4 *= 1 << shift; } else { @@ -319,9 +318,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 */ { @@ -330,9 +329,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 */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftbdf.c b/sdk/lib/3rdparty/freetype/src/base/ftbdf.c index c0fccd7b7c6..fc374c66751 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftbdf.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftbdf.c @@ -4,7 +4,7 @@ * * FreeType API for accessing BDF-specific strings (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_BDF_H +#include +#include /* documentation is in ftbdf.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftbitmap.c b/sdk/lib/3rdparty/freetype/src/base/ftbitmap.c index 557a6ea85ae..d3c66c162d1 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftbitmap.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftbitmap.c @@ -4,7 +4,7 @@ * * FreeType utility functions for bitmaps (body). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_BITMAP_H -#include FT_IMAGE_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include /************************************************************************** @@ -622,6 +621,7 @@ { FT_Int val = ss[0]; /* avoid a byte->int cast on each line */ + #ifdef __REACTOS__ if (hack) { @@ -950,25 +950,31 @@ #ifdef FT_DEBUG_LEVEL_TRACE FT_TRACE5(( "FT_Bitmap_Blend:\n" - " source bitmap: (%d, %d) -- (%d, %d); %d x %d\n", + " source bitmap: (%ld, %ld) -- (%ld, %ld); %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", + FT_TRACE5(( " target bitmap: (%ld, %ld) -- (%ld, %ld); %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" )); - 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 )); + if ( final_width && final_rows ) + FT_TRACE5(( " final bitmap: (%ld, %ld) -- (%ld, %ld); %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; @@ -1012,6 +1018,7 @@ pitch = target->pitch; + if ( pitch < 0 ) pitch = -pitch; diff --git a/sdk/lib/3rdparty/freetype/src/base/ftcalc.c b/sdk/lib/3rdparty/freetype/src/base/ftcalc.c index 315dc441856..b5258c85a1b 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftcalc.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftcalc.c @@ -4,7 +4,7 @@ * * Arithmetic computations (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -32,12 +32,11 @@ */ -#include -#include FT_GLYPH_H -#include FT_TRIGONOMETRY_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include +#include +#include #ifdef FT_MULFIX_ASSEMBLER diff --git a/sdk/lib/3rdparty/freetype/src/base/ftcid.c b/sdk/lib/3rdparty/freetype/src/base/ftcid.c index 190b23f3571..ce8a876adc6 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftcid.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftcid.c @@ -4,7 +4,7 @@ * * FreeType API for accessing CID font information. * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * Derek Clegg and Michael Toftdal. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include -#include FT_CID_H -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_CID_H +#include +#include +#include /* documentation is in ftcid.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftcolor.c b/sdk/lib/3rdparty/freetype/src/base/ftcolor.c index 8cb057a3655..a50d6800967 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftcolor.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftcolor.c @@ -4,7 +4,7 @@ * * FreeType's glyph color management (body). * - * Copyright (C) 2018-2019 by + * Copyright (C) 2018-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_SFNT_H -#include FT_INTERNAL_TRUETYPE_TYPES_H -#include FT_COLOR_H +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_COLOR_LAYERS diff --git a/sdk/lib/3rdparty/freetype/src/base/ftdbgmem.c b/sdk/lib/3rdparty/freetype/src/base/ftdbgmem.c index 55cd269e1fe..eb0d6516070 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftdbgmem.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftdbgmem.c @@ -4,7 +4,7 @@ * * Memory debugger (body). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -18,11 +18,11 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_MEMORY_H -#include FT_SYSTEM_H -#include FT_ERRORS_H -#include FT_TYPES_H +#include +#include +#include +#include +#include #ifdef FT_DEBUG_MEMORY @@ -621,8 +621,10 @@ if ( node->size < 0 ) ft_mem_debug_panic( - "freeing memory block at %p more than once at (%s:%ld)\n" - "block allocated at (%s:%ld) and released at (%s:%ld)", + "freeing memory block at %p more than once\n" + " at (%s:%ld)!\n" + " Block was allocated at (%s:%ld)\n" + " and released at (%s:%ld).", address, FT_FILENAME( _ft_debug_file ), _ft_debug_lineno, FT_FILENAME( node->source->file_name ), node->source->line_no, diff --git a/sdk/lib/3rdparty/freetype/src/base/fterrors.c b/sdk/lib/3rdparty/freetype/src/base/fterrors.c index 4ef326d8e28..eba9e76563f 100644 --- a/sdk/lib/3rdparty/freetype/src/base/fterrors.c +++ b/sdk/lib/3rdparty/freetype/src/base/fterrors.c @@ -4,7 +4,7 @@ * * FreeType API for error code handling. * - * Copyright (C) 2018-2019 by + * Copyright (C) 2018-2020 by * Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,8 +16,8 @@ */ -#include -#include FT_ERRORS_H +#include +#include /* documentation is in fterrors.h */ @@ -37,7 +37,7 @@ #define FT_ERRORDEF( e, v, s ) case v: return s; #define FT_ERROR_END_LIST } -#include FT_ERRORS_H +#include #endif /* defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || ... */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftfntfmt.c b/sdk/lib/3rdparty/freetype/src/base/ftfntfmt.c index 54ba5374164..a45317e7973 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftfntfmt.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftfntfmt.c @@ -4,7 +4,7 @@ * * FreeType utility file for font formats (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include -#include FT_FONT_FORMATS_H -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_FONT_FORMAT_H +#include +#include +#include /* documentation is in ftfntfmt.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftfstype.c b/sdk/lib/3rdparty/freetype/src/base/ftfstype.c index 45e2d8089bf..bca548fc568 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftfstype.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftfstype.c @@ -4,7 +4,7 @@ * * FreeType utility file to access FSType data (body). * - * Copyright (C) 2008-2019 by + * Copyright (C) 2008-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -15,11 +15,10 @@ * */ -#include -#include FT_TYPE1_TABLES_H -#include FT_TRUETYPE_TABLES_H -#include FT_INTERNAL_SERVICE_H -#include FT_SERVICE_POSTSCRIPT_INFO_H +#include +#include +#include +#include /* documentation is in freetype.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftgasp.c b/sdk/lib/3rdparty/freetype/src/base/ftgasp.c index 720fb113ca3..eed05a3265c 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftgasp.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftgasp.c @@ -4,7 +4,7 @@ * * Access of TrueType's `gasp' table (body). * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,9 +16,8 @@ */ -#include -#include FT_GASP_H -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include +#include FT_EXPORT_DEF( FT_Int ) diff --git a/sdk/lib/3rdparty/freetype/src/base/ftgloadr.c b/sdk/lib/3rdparty/freetype/src/base/ftgloadr.c index bfeed461a83..05fc7692bb6 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftgloadr.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftgloadr.c @@ -4,7 +4,7 @@ * * The FreeType glyph loader (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_GLYPH_LOADER_H -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include +#include #undef FT_COMPONENT #define FT_COMPONENT gloader @@ -93,6 +92,7 @@ base->outline.n_points = 0; base->outline.n_contours = 0; + base->outline.flags = 0; base->num_subglyphs = 0; *current = *base; @@ -146,9 +146,9 @@ FT_Outline* current = &loader->current.outline; - current->points = base->points + base->n_points; - current->tags = base->tags + base->n_points; - current->contours = base->contours + base->n_contours; + current->points = FT_OFFSET( base->points, base->n_points ); + current->tags = FT_OFFSET( base->tags, base->n_points ); + current->contours = FT_OFFSET( base->contours, base->n_contours ); /* handle extra points table - if any */ if ( loader->use_extra ) @@ -169,6 +169,10 @@ FT_Memory memory = loader->memory; + if ( loader->max_points == 0 || + loader->base.extra_points != NULL ) + return FT_Err_Ok; + if ( !FT_NEW_ARRAY( loader->base.extra_points, 2 * loader->max_points ) ) { loader->use_extra = 1; @@ -189,7 +193,7 @@ FT_GlyphLoad current = &loader->current; - current->subglyphs = base->subglyphs + base->num_subglyphs; + current->subglyphs = FT_OFFSET( base->subglyphs, base->num_subglyphs ); } @@ -211,6 +215,10 @@ FT_UInt new_max, old_max; + error = FT_GlyphLoader_CreateExtra( loader ); + if ( error ) + return error; + /* check points & tags */ new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points + n_points; @@ -244,6 +252,10 @@ loader->max_points = new_max; } + error = FT_GlyphLoader_CreateExtra( loader ); + if ( error ) + return error; + /* check contours */ old_max = loader->max_contours; new_max = (FT_UInt)base->n_contours + (FT_UInt)current->n_contours + diff --git a/sdk/lib/3rdparty/freetype/src/base/ftglyph.c b/sdk/lib/3rdparty/freetype/src/base/ftglyph.c index e6b13279015..825eba2c4d4 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftglyph.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftglyph.c @@ -4,7 +4,7 @@ * * FreeType convenience functions to handle glyphs (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -28,13 +28,14 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_GLYPH_H -#include FT_OUTLINE_H -#include FT_BITMAP_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include +#include + +#include "ftbase.h" /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/src/base/ftgxval.c b/sdk/lib/3rdparty/freetype/src/base/ftgxval.c index 0677d26faaa..f04df145261 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftgxval.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftgxval.c @@ -4,7 +4,7 @@ * * FreeType API for validating TrueTypeGX/AAT tables (body). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * Masatake YAMATO, Redhat K.K, * David Turner, Robert Wilhelm, and Werner Lemberg. * @@ -25,11 +25,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_GX_VALIDATE_H +#include +#include /* documentation is in ftgxval.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/fthash.c b/sdk/lib/3rdparty/freetype/src/base/fthash.c index 387e6d26db9..449b03a5c16 100644 --- a/sdk/lib/3rdparty/freetype/src/base/fthash.c +++ b/sdk/lib/3rdparty/freetype/src/base/fthash.c @@ -39,9 +39,8 @@ */ -#include -#include FT_INTERNAL_HASH_H -#include FT_INTERNAL_MEMORY_H +#include +#include #define INITIAL_HT_SIZE 241 diff --git a/sdk/lib/3rdparty/freetype/src/base/ftinit.c b/sdk/lib/3rdparty/freetype/src/base/ftinit.c index 9d524effa92..0acc75e4607 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftinit.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftinit.c @@ -4,7 +4,7 @@ * * FreeType initialization layer (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -39,9 +39,9 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_MODULE_H +#include +#include +#include /************************************************************************** @@ -176,6 +176,9 @@ module_name, property_name, property_value ); + + if ( !*p ) + break; } } diff --git a/sdk/lib/3rdparty/freetype/src/base/ftlcdfil.c b/sdk/lib/3rdparty/freetype/src/base/ftlcdfil.c index e4865c90c2a..1e84dbc894a 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftlcdfil.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftlcdfil.c @@ -4,7 +4,7 @@ * * FreeType API for color filtering of subpixel bitmap glyphs (body). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_LCD_FILTER_H -#include FT_IMAGE_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include #ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING @@ -77,13 +76,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 */ @@ -91,7 +90,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; @@ -134,7 +133,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; @@ -183,13 +182,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] = { @@ -206,7 +205,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; @@ -243,7 +242,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; @@ -358,11 +357,7 @@ FT_EXPORT_DEF( FT_Error ) FT_Library_SetLcdGeometry( FT_Library library, -#ifndef __REACTOS__ FT_Vector* sub ) -#else - FT_Vector sub[3] ) -#endif { FT_UNUSED( library ); FT_UNUSED( sub ); diff --git a/sdk/lib/3rdparty/freetype/src/base/ftmac.c b/sdk/lib/3rdparty/freetype/src/base/ftmac.c index 5f23ceea9f3..55a631fd748 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftmac.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftmac.c @@ -8,7 +8,7 @@ * This file is for Mac OS X only; see builds/mac/ftoldmac.c for * classic platforms built by MPW. * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -65,10 +65,9 @@ */ -#include -#include FT_FREETYPE_H -#include FT_TRUETYPE_TAGS_H -#include FT_INTERNAL_STREAM_H +#include +#include +#include #include "ftbase.h" diff --git a/sdk/lib/3rdparty/freetype/src/base/ftmm.c b/sdk/lib/3rdparty/freetype/src/base/ftmm.c index ba9e67f008a..9a702b99335 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftmm.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftmm.c @@ -4,7 +4,7 @@ * * Multiple Master font support (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,13 +16,12 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_MULTIPLE_MASTERS_H -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_MULTIPLE_MASTERS_H -#include FT_SERVICE_METRICS_VARIATIONS_H +#include +#include +#include +#include /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/src/base/ftobjs.c b/sdk/lib/3rdparty/freetype/src/base/ftobjs.c index 3f8619d3b3c..c060bbbc879 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftobjs.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftobjs.c @@ -4,7 +4,7 @@ * * The FreeType private base classes (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,32 +16,31 @@ */ -#include -#include FT_LIST_H -#include FT_OUTLINE_H -#include FT_FONT_FORMATS_H +#include +#include +#include -#include FT_INTERNAL_VALIDATE_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_RFORK_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_SFNT_H /* for SFNT_Load_Table_Func */ -#include FT_INTERNAL_POSTSCRIPT_AUX_H /* for PS_Driver */ +#include +#include +#include +#include +#include +#include /* for SFNT_Load_Table_Func */ +#include /* for PS_Driver */ -#include FT_TRUETYPE_TABLES_H -#include FT_TRUETYPE_TAGS_H -#include FT_TRUETYPE_IDS_H +#include +#include +#include -#include FT_SERVICE_PROPERTIES_H -#include FT_SERVICE_SFNT_H -#include FT_SERVICE_POSTSCRIPT_NAME_H -#include FT_SERVICE_GLYPH_DICT_H -#include FT_SERVICE_TT_CMAP_H -#include FT_SERVICE_KERNING_H -#include FT_SERVICE_TRUETYPE_ENGINE_H +#include +#include +#include +#include +#include +#include +#include -#include FT_DRIVER_H +#include #ifdef FT_CONFIG_OPTION_MAC_FONTS #include "ftbase.h" @@ -50,7 +49,7 @@ #ifdef FT_DEBUG_LEVEL_TRACE -#include FT_BITMAP_H +#include #if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */ /* We disable the warning `conversion from XXX to YYY, */ @@ -1063,11 +1062,30 @@ slot->linearHoriAdvance / 65536.0 )); FT_TRACE5(( " linear y advance: %f\n", slot->linearVertAdvance / 65536.0 )); + FT_TRACE5(( "\n" )); 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 )); + FT_TRACE5(( "\n" )); + + { + FT_Glyph_Metrics* metrics = &slot->metrics; + + + FT_TRACE5(( " metrics:\n" )); + FT_TRACE5(( " width: %f\n", metrics->width / 64.0 )); + FT_TRACE5(( " height: %f\n", metrics->height / 64.0 )); + FT_TRACE5(( "\n" )); + FT_TRACE5(( " horiBearingX: %f\n", metrics->horiBearingX / 64.0 )); + FT_TRACE5(( " horiBearingY: %f\n", metrics->horiBearingY / 64.0 )); + FT_TRACE5(( " horiAdvance: %f\n", metrics->horiAdvance / 64.0 )); + FT_TRACE5(( "\n" )); + FT_TRACE5(( " vertBearingX: %f\n", metrics->vertBearingX / 64.0 )); + FT_TRACE5(( " vertBearingY: %f\n", metrics->vertBearingY / 64.0 )); + FT_TRACE5(( " vertAdvance: %f\n", metrics->vertAdvance / 64.0 )); + } #endif Exit: @@ -1842,15 +1860,15 @@ /* FT2 allocator takes signed long buffer length, * too large value causing overflow should be checked */ - FT_TRACE4(( " POST fragment #%d: length=0x%08x" - " total pfb_len=0x%08x\n", + FT_TRACE4(( " POST fragment #%d: length=0x%08lx" + " total pfb_len=0x%08lx\n", i, temp, pfb_len + temp + 6 )); if ( FT_MAC_RFORK_MAX_LEN < temp || FT_MAC_RFORK_MAX_LEN - temp < pfb_len + 6 ) { FT_TRACE2(( " MacOS resource length cannot exceed" - " 0x%08x\n", + " 0x%08lx\n", FT_MAC_RFORK_MAX_LEN )); error = FT_THROW( Invalid_Offset ); @@ -1861,13 +1879,13 @@ } FT_TRACE2(( " total buffer size to concatenate" - " %d POST fragments: 0x%08x\n", + " %ld POST fragments: 0x%08lx\n", resource_cnt, pfb_len + 2 )); if ( pfb_len + 2 < 6 ) { FT_TRACE2(( " too long fragment length makes" - " pfb_len confused: pfb_len=0x%08x\n", + " pfb_len confused: pfb_len=0x%08lx\n", pfb_len )); error = FT_THROW( Array_Too_Large ); @@ -1910,7 +1928,7 @@ goto Exit2; FT_TRACE3(( "POST fragment[%d]:" - " offsets=0x%08x, rlen=0x%08x, flags=0x%04x\n", + " offsets=0x%08lx, rlen=0x%08lx, flags=0x%04x\n", i, offsets[i], rlen, flags )); error = FT_ERR( Array_Too_Large ); @@ -1937,7 +1955,7 @@ else { FT_TRACE3(( " Write POST fragment #%d header (4-byte) to buffer" - " %p + 0x%08x\n", + " %p + 0x%08lx\n", i, pfb_data, pfb_lenpos )); if ( pfb_lenpos + 3 > pfb_len + 2 ) @@ -1952,7 +1970,7 @@ break; FT_TRACE3(( " Write POST fragment #%d header (6-byte) to buffer" - " %p + 0x%08x\n", + " %p + 0x%08lx\n", i, pfb_data, pfb_pos )); if ( pfb_pos + 6 > pfb_len + 2 ) @@ -1974,8 +1992,8 @@ if ( pfb_pos > pfb_len || pfb_pos + rlen > pfb_len ) goto Exit2; - FT_TRACE3(( " Load POST fragment #%d (%d byte) to buffer" - " %p + 0x%08x\n", + FT_TRACE3(( " Load POST fragment #%d (%ld byte) to buffer" + " %p + 0x%08lx\n", i, rlen, pfb_data, pfb_pos )); error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen ); @@ -2260,7 +2278,7 @@ args2.flags = FT_OPEN_PATHNAME; args2.pathname = file_names[i] ? file_names[i] : args->pathname; - FT_TRACE3(( "Try rule %d: %s (offset=%d) ...", + FT_TRACE3(( "Try rule %d: %s (offset=%ld) ...", i, args2.pathname, offsets[i] )); error = FT_Stream_New( library, &args2, &stream2 ); @@ -2858,6 +2876,8 @@ if ( error ) { FT_FREE( node ); + if ( size ) + FT_FREE( size->internal ); FT_FREE( size ); } @@ -3213,9 +3233,9 @@ FT_Size_Metrics* metrics = &face->size->metrics; - FT_TRACE5(( " x scale: %d (%f)\n", + FT_TRACE5(( " x scale: %ld (%f)\n", metrics->x_scale, metrics->x_scale / 65536.0 )); - FT_TRACE5(( " y scale: %d (%f)\n", + FT_TRACE5(( " y scale: %ld (%f)\n", metrics->y_scale, metrics->y_scale / 65536.0 )); FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 )); FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 )); @@ -3288,9 +3308,9 @@ FT_Size_Metrics* metrics = &face->size->metrics; - FT_TRACE5(( " x scale: %d (%f)\n", + FT_TRACE5(( " x scale: %ld (%f)\n", metrics->x_scale, metrics->x_scale / 65536.0 )); - FT_TRACE5(( " y scale: %d (%f)\n", + FT_TRACE5(( " y scale: %ld (%f)\n", metrics->y_scale, metrics->y_scale / 65536.0 )); FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 )); FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 )); @@ -3450,7 +3470,7 @@ if ( akerning->x != orig_x_rounded || akerning->y != orig_y_rounded ) FT_TRACE5(( "FT_Get_Kerning: horizontal kerning" - " (%d, %d) scaled down to (%d, %d) pixels\n", + " (%ld, %ld) scaled down to (%ld, %ld) pixels\n", orig_x_rounded / 64, orig_y_rounded / 64, akerning->x / 64, akerning->y / 64 )); } @@ -3722,7 +3742,7 @@ if ( charcode > 0xFFFFFFFFUL ) { FT_TRACE1(( "FT_Get_Char_Index: too large charcode" )); - FT_TRACE1(( " 0x%x is truncated\n", charcode )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); } result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode ); @@ -3898,13 +3918,13 @@ { FT_TRACE1(( "FT_Face_GetCharVariantIndex:" " too large charcode" )); - FT_TRACE1(( " 0x%x is truncated\n", charcode )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); } if ( variantSelector > 0xFFFFFFFFUL ) { FT_TRACE1(( "FT_Face_GetCharVariantIndex:" " too large variantSelector" )); - FT_TRACE1(( " 0x%x is truncated\n", variantSelector )); + FT_TRACE1(( " 0x%lx is truncated\n", variantSelector )); } result = vcmap->clazz->char_var_index( vcmap, ucmap, @@ -3941,13 +3961,13 @@ { FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:" " too large charcode" )); - FT_TRACE1(( " 0x%x is truncated\n", charcode )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); } if ( variantSelector > 0xFFFFFFFFUL ) { FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:" " too large variantSelector" )); - FT_TRACE1(( " 0x%x is truncated\n", variantSelector )); + FT_TRACE1(( " 0x%lx is truncated\n", variantSelector )); } result = vcmap->clazz->char_var_default( vcmap, @@ -4010,7 +4030,7 @@ if ( charcode > 0xFFFFFFFFUL ) { FT_TRACE1(( "FT_Face_GetVariantsOfChar: too large charcode" )); - FT_TRACE1(( " 0x%x is truncated\n", charcode )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); } result = vcmap->clazz->charvariant_list( vcmap, memory, @@ -4044,7 +4064,7 @@ if ( variantSelector > 0xFFFFFFFFUL ) { FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" )); - FT_TRACE1(( " 0x%x is truncated\n", variantSelector )); + FT_TRACE1(( " 0x%lx is truncated\n", variantSelector )); } result = vcmap->clazz->variantchar_list( vcmap, memory, @@ -4059,8 +4079,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; diff --git a/sdk/lib/3rdparty/freetype/src/base/ftotval.c b/sdk/lib/3rdparty/freetype/src/base/ftotval.c index 007576ce6e2..90a5dd617cd 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftotval.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftotval.c @@ -4,7 +4,7 @@ * * FreeType API for validating OpenType tables (body). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -15,12 +15,11 @@ * */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_OPENTYPE_VALIDATE_H -#include FT_OPENTYPE_VALIDATE_H +#include +#include +#include /* documentation is in ftotval.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftoutln.c b/sdk/lib/3rdparty/freetype/src/base/ftoutln.c index 00329b46c64..311f098e3a8 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftoutln.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftoutln.c @@ -4,7 +4,7 @@ * * FreeType outline management (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_OUTLINE_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_DEBUG_H -#include FT_TRIGONOMETRY_H +#include +#include +#include +#include +#include /************************************************************************** @@ -46,8 +45,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; @@ -276,7 +274,7 @@ first = (FT_UInt)last + 1; } - FT_TRACE5(( "FT_Outline_Decompose: Done\n", n )); + FT_TRACE5(( "FT_Outline_Decompose: Done\n" )); return FT_Err_Ok; Invalid_Outline: @@ -621,6 +619,16 @@ 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 ) { @@ -702,7 +710,7 @@ FT_Vector* limit; - if ( !outline || !matrix ) + if ( !outline || !matrix || !outline->points ) return; vec = outline->points; @@ -1052,6 +1060,11 @@ if ( cbox.xMin == cbox.xMax || cbox.yMin == cbox.yMax ) return FT_ORIENTATION_NONE; + /* Reject values large outlines. */ + if ( cbox.xMin < -0x1000000L || cbox.yMin < -0x1000000L || + cbox.xMax > 0x1000000L || cbox.yMax > 0x1000000L ) + return FT_ORIENTATION_NONE; + xshift = FT_MSB( (FT_UInt32)( FT_ABS( cbox.xMax ) | FT_ABS( cbox.xMin ) ) ) - 14; xshift = FT_MAX( xshift, 0 ); diff --git a/sdk/lib/3rdparty/freetype/src/base/ftpatent.c b/sdk/lib/3rdparty/freetype/src/base/ftpatent.c index 020f4646ebe..a02c636a65f 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftpatent.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftpatent.c @@ -5,7 +5,7 @@ * FreeType API for checking patented TrueType bytecode instructions * (body). Obsolete, retained for backward compatibility. * - * Copyright (C) 2007-2019 by + * Copyright (C) 2007-2020 by * David Turner. * * This file is part of the FreeType project, and may only be used, @@ -16,13 +16,12 @@ * */ -#include -#include FT_FREETYPE_H -#include FT_TRUETYPE_TAGS_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_STREAM_H -#include FT_SERVICE_SFNT_H -#include FT_SERVICE_TRUETYPE_GLYF_H +#include +#include +#include +#include +#include +#include /* documentation is in freetype.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftpfr.c b/sdk/lib/3rdparty/freetype/src/base/ftpfr.c index aeff1db8bd0..c656fcd9b9a 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftpfr.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftpfr.c @@ -4,7 +4,7 @@ * * FreeType API for accessing PFR-specific data (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -15,11 +15,10 @@ * */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_PFR_H +#include +#include /* check the format */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftpsprop.c b/sdk/lib/3rdparty/freetype/src/base/ftpsprop.c index 52b9d453ad2..8c29f50f6b6 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftpsprop.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftpsprop.c @@ -5,7 +5,7 @@ * Get and set properties of PostScript drivers (body). * See `ftdriver.h' for available properties. * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,12 +17,11 @@ */ -#include -#include FT_DRIVER_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_POSTSCRIPT_PROPS_H +#include +#include +#include +#include +#include /************************************************************************** @@ -165,9 +164,9 @@ driver->hinting_engine = *hinting_engine; else error = FT_ERR( Unimplemented_Feature ); - - return error; } + + return error; } else if ( !ft_strcmp( property_name, "no-stem-darkening" ) ) diff --git a/sdk/lib/3rdparty/freetype/src/base/ftrfork.c b/sdk/lib/3rdparty/freetype/src/base/ftrfork.c index 73b7eb0ded4..f989be47f47 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftrfork.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftrfork.c @@ -4,7 +4,7 @@ * * Embedded resource forks accessor (body). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * Masatake YAMATO and Redhat K.K. * * FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are @@ -24,10 +24,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_RFORK_H +#include +#include +#include #include "ftbase.h" @@ -240,7 +239,7 @@ (char)( 0xFF & ( tag_internal >> 16 ) ), (char)( 0xFF & ( tag_internal >> 8 ) ), (char)( 0xFF & ( tag_internal >> 0 ) ) )); - FT_TRACE3(( " : subcount=%d, suboffset=0x%04x\n", + FT_TRACE3(( " : subcount=%d, suboffset=0x%04lx\n", subcnt, rpos )); if ( tag_internal == tag ) @@ -286,7 +285,7 @@ ref[j].offset = temp & 0xFFFFFFL; FT_TRACE3(( " [%d]:" - " resource_id=0x%04x, offset=0x%08x\n", + " resource_id=0x%04x, offset=0x%08lx\n", j, (FT_UShort)ref[j].res_id, ref[j].offset )); } @@ -302,7 +301,7 @@ for ( j = 0; j < *count; j++ ) FT_TRACE3(( " [%d]:" - " resource_id=0x%04x, offset=0x%08x\n", + " resource_id=0x%04x, offset=0x%08lx\n", j, ref[j].res_id, ref[j].offset )); } diff --git a/sdk/lib/3rdparty/freetype/src/base/ftsnames.c b/sdk/lib/3rdparty/freetype/src/base/ftsnames.c index 7ab3fe3cfac..8507f28d367 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftsnames.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftsnames.c @@ -7,7 +7,7 @@ * * This is _not_ used to retrieve glyph names! * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,12 +19,11 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include FT_SFNT_NAMES_H -#include FT_INTERNAL_TRUETYPE_TYPES_H -#include FT_INTERNAL_STREAM_H +#include +#include +#include #ifdef TT_CONFIG_OPTION_SFNT_NAMES diff --git a/sdk/lib/3rdparty/freetype/src/base/ftstream.c b/sdk/lib/3rdparty/freetype/src/base/ftstream.c index 4b0890d7fd5..d940254d8bb 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftstream.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftstream.c @@ -4,7 +4,7 @@ * * I/O stream support (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,9 +16,8 @@ */ -#include -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_DEBUG_H +#include +#include /************************************************************************** @@ -286,7 +285,7 @@ } stream->cursor = stream->base; - stream->limit = stream->cursor + count; + stream->limit = FT_OFFSET( stream->cursor, count ); stream->pos += read_bytes; } else diff --git a/sdk/lib/3rdparty/freetype/src/base/ftstroke.c b/sdk/lib/3rdparty/freetype/src/base/ftstroke.c index 826062c94ec..56f98e1d928 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftstroke.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftstroke.c @@ -4,7 +4,7 @@ * * FreeType path stroker (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,13 +16,12 @@ */ -#include -#include FT_STROKER_H -#include FT_TRIGONOMETRY_H -#include FT_OUTLINE_H -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include +#include +#include +#include /* declare an extern to access `ft_outline_glyph_class' globally */ @@ -86,16 +85,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; } @@ -153,28 +154,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; } @@ -534,63 +539,52 @@ FT_Angle angle_start, FT_Angle angle_diff ) { - FT_Angle total, angle, step, rotate, next, theta; - FT_Vector a, b, a2, b2; - FT_Fixed length; + FT_Fixed coef; + FT_Vector a0, a1, a2, a3; + FT_Int i, arcs = 1; FT_Error error = FT_Err_Ok; - /* compute start point */ - FT_Vector_From_Polar( &a, radius, angle_start ); - a.x += center->x; - a.y += center->y; + /* number of cubic arcs to draw */ + while ( angle_diff > FT_ARC_CUBIC_ANGLE * arcs || + -angle_diff > FT_ARC_CUBIC_ANGLE * arcs ) + arcs++; - total = angle_diff; - angle = angle_start; - rotate = ( angle_diff >= 0 ) ? FT_ANGLE_PI2 : -FT_ANGLE_PI2; + /* control tangents */ + coef = FT_Tan( angle_diff / ( 4 * arcs ) ); + coef += coef / 3; - while ( total != 0 ) + /* compute start and first control point */ + FT_Vector_From_Polar( &a0, radius, angle_start ); + a1.x = FT_MulFix( -a0.y, coef ); + a1.y = FT_MulFix( a0.x, coef ); + + a0.x += center->x; + a0.y += center->y; + a1.x += a0.x; + a1.y += a0.y; + + for ( i = 1; i <= arcs; i++ ) { - step = total; - if ( step > FT_ARC_CUBIC_ANGLE ) - step = FT_ARC_CUBIC_ANGLE; + /* compute end and second control point */ + FT_Vector_From_Polar( &a3, radius, + angle_start + i * angle_diff / arcs ); + a2.x = FT_MulFix( a3.y, coef ); + a2.y = FT_MulFix( -a3.x, coef ); - else if ( step < -FT_ARC_CUBIC_ANGLE ) - step = -FT_ARC_CUBIC_ANGLE; - - next = angle + step; - theta = step; - if ( theta < 0 ) - theta = -theta; - - theta >>= 1; - - /* compute end point */ - FT_Vector_From_Polar( &b, radius, next ); - b.x += center->x; - b.y += center->y; - - /* compute first and second control points */ - length = FT_MulDiv( radius, FT_Sin( theta ) * 4, - ( 0x10000L + FT_Cos( theta ) ) * 3 ); - - FT_Vector_From_Polar( &a2, length, angle + rotate ); - a2.x += a.x; - a2.y += a.y; - - FT_Vector_From_Polar( &b2, length, next - rotate ); - b2.x += b.x; - b2.y += b.y; + a3.x += center->x; + a3.y += center->y; + a2.x += a3.x; + a2.y += a3.y; /* add cubic arc */ - error = ft_stroke_border_cubicto( border, &a2, &b2, &b ); + error = ft_stroke_border_cubicto( border, &a1, &a2, &a3 ); if ( error ) break; - /* process the rest of the arc ?? */ - a = b; - total -= step; - angle = next; + /* a0 = a3; */ + a1.x = a3.x - a2.x + a3.x; + a1.y = a3.y - a2.y + a3.y; } return error; @@ -928,55 +922,40 @@ error = ft_stroker_arcto( stroker, side ); } - else if ( stroker->line_cap == FT_STROKER_LINECAP_SQUARE ) + else { - /* add a square cap */ - FT_Vector delta, delta2; - FT_Angle rotate = FT_SIDE_TO_ROTATE( side ); + /* add a square or butt cap */ + FT_Vector middle, delta; FT_Fixed radius = stroker->radius; FT_StrokeBorder border = stroker->borders + side; - FT_Vector_From_Polar( &delta2, radius, angle + rotate ); - FT_Vector_From_Polar( &delta, radius, angle ); + /* compute middle point and first angle point */ + FT_Vector_From_Polar( &middle, radius, angle ); + delta.x = side ? middle.y : -middle.y; + delta.y = side ? -middle.x : middle.x; - delta.x += stroker->center.x + delta2.x; - delta.y += stroker->center.y + delta2.y; + if ( stroker->line_cap == FT_STROKER_LINECAP_SQUARE ) + { + middle.x += stroker->center.x; + middle.y += stroker->center.y; + } + else /* FT_STROKER_LINECAP_BUTT */ + { + middle.x = stroker->center.x; + middle.y = stroker->center.y; + } + + delta.x += middle.x; + delta.y += middle.y; error = ft_stroke_border_lineto( border, &delta, FALSE ); if ( error ) goto Exit; - FT_Vector_From_Polar( &delta2, radius, angle - rotate ); - FT_Vector_From_Polar( &delta, radius, angle ); - - delta.x += delta2.x + stroker->center.x; - delta.y += delta2.y + stroker->center.y; - - error = ft_stroke_border_lineto( border, &delta, FALSE ); - } - else if ( stroker->line_cap == FT_STROKER_LINECAP_BUTT ) - { - /* add a butt ending */ - FT_Vector delta; - FT_Angle rotate = FT_SIDE_TO_ROTATE( side ); - FT_Fixed radius = stroker->radius; - FT_StrokeBorder border = stroker->borders + side; - - - FT_Vector_From_Polar( &delta, radius, angle + rotate ); - - delta.x += stroker->center.x; - delta.y += stroker->center.y; - - error = ft_stroke_border_lineto( border, &delta, FALSE ); - if ( error ) - goto Exit; - - FT_Vector_From_Polar( &delta, radius, angle - rotate ); - - delta.x += stroker->center.x; - delta.y += stroker->center.y; + /* compute second angle point */ + delta.x = middle.x - delta.x + middle.x; + delta.y = middle.y - delta.y + middle.y; error = ft_stroke_border_lineto( border, &delta, FALSE ); } @@ -994,8 +973,8 @@ { FT_StrokeBorder border = stroker->borders + side; FT_Angle phi, theta, rotate; - FT_Fixed length, thcos; - FT_Vector delta; + FT_Fixed length; + FT_Vector sigma, delta; FT_Error error = FT_Err_Ok; FT_Bool intersect; /* use intersection of lines? */ @@ -1013,10 +992,13 @@ else { /* compute minimum required length of lines */ - FT_Fixed min_length = ft_pos_abs( FT_MulFix( stroker->radius, - FT_Tan( theta ) ) ); + FT_Fixed min_length; + FT_Vector_Unit( &sigma, theta ); + min_length = + ft_pos_abs( FT_MulDiv( stroker->radius, sigma.y, sigma.x ) ); + intersect = FT_BOOL( min_length && stroker->line_length >= min_length && line_length >= min_length ); @@ -1034,13 +1016,11 @@ else { /* compute median angle */ - phi = stroker->angle_in + theta; + phi = stroker->angle_in + theta + rotate; - thcos = FT_Cos( theta ); + length = FT_DivFix( stroker->radius, sigma.x ); - length = FT_DivFix( stroker->radius, thcos ); - - FT_Vector_From_Polar( &delta, length, phi + rotate ); + FT_Vector_From_Polar( &delta, length, phi ); delta.x += stroker->center.x; delta.y += stroker->center.y; } @@ -1067,10 +1047,10 @@ else { /* this is a mitered (pointed) or beveled (truncated) corner */ - FT_Fixed sigma = 0, radius = stroker->radius; - FT_Angle theta = 0, phi = 0; - FT_Fixed thcos = 0; - FT_Bool bevel, fixed_bevel; + FT_Fixed radius = stroker->radius; + FT_Vector sigma; + FT_Angle theta = 0, phi = 0; + FT_Bool bevel, fixed_bevel; rotate = FT_SIDE_TO_ROTATE( side ); @@ -1081,26 +1061,20 @@ fixed_bevel = FT_BOOL( stroker->line_join != FT_STROKER_LINEJOIN_MITER_VARIABLE ); + /* check miter limit first */ if ( !bevel ) { - theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out ); + theta = FT_Angle_Diff( stroker->angle_in, stroker->angle_out ) / 2; - if ( theta == FT_ANGLE_PI ) - { - theta = rotate; - phi = stroker->angle_in; - } - else - { - theta /= 2; - phi = stroker->angle_in + theta + rotate; - } + if ( theta == FT_ANGLE_PI2 ) + theta = -rotate; - thcos = FT_Cos( theta ); - sigma = FT_MulFix( stroker->miter_limit, thcos ); + phi = stroker->angle_in + theta + rotate; + + FT_Vector_From_Polar( &sigma, stroker->miter_limit, theta ); /* is miter limit exceeded? */ - if ( sigma < 0x10000L ) + if ( sigma.x < 0x10000L ) { /* don't create variable bevels for very small deviations; */ /* FT_Sin(x) = 0 for x <= 57 */ @@ -1127,36 +1101,34 @@ border->movable = FALSE; error = ft_stroke_border_lineto( border, &delta, FALSE ); } - else /* variable bevel */ + else /* variable bevel or clipped miter */ { /* the miter is truncated */ FT_Vector middle, delta; - FT_Fixed length; + FT_Fixed coef; - /* compute middle point */ + /* compute middle point and first angle point */ FT_Vector_From_Polar( &middle, FT_MulFix( radius, stroker->miter_limit ), phi ); + + coef = FT_DivFix( 0x10000L - sigma.x, sigma.y ); + delta.x = FT_MulFix( middle.y, coef ); + delta.y = FT_MulFix( -middle.x, coef ); + middle.x += stroker->center.x; middle.y += stroker->center.y; - - /* compute first angle point */ - length = FT_MulDiv( radius, 0x10000L - sigma, - ft_pos_abs( FT_Sin( theta ) ) ); - - FT_Vector_From_Polar( &delta, length, phi + rotate ); - delta.x += middle.x; - delta.y += middle.y; + delta.x += middle.x; + delta.y += middle.y; error = ft_stroke_border_lineto( border, &delta, FALSE ); if ( error ) goto Exit; /* compute second angle point */ - FT_Vector_From_Polar( &delta, length, phi - rotate ); - delta.x += middle.x; - delta.y += middle.y; + delta.x = middle.x - delta.x + middle.x; + delta.y = middle.y - delta.y + middle.y; error = ft_stroke_border_lineto( border, &delta, FALSE ); if ( error ) @@ -1183,7 +1155,7 @@ FT_Vector delta; - length = FT_DivFix( stroker->radius, thcos ); + length = FT_MulDiv( stroker->radius, stroker->miter_limit, sigma.x ); FT_Vector_From_Polar( &delta, length, phi ); delta.x += stroker->center.x; diff --git a/sdk/lib/3rdparty/freetype/src/base/ftsynth.c b/sdk/lib/3rdparty/freetype/src/base/ftsynth.c index f87ed65e751..a9119e2b245 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftsynth.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftsynth.c @@ -4,7 +4,7 @@ * * FreeType synthesizing code for emboldening and slanting (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_SYNTHESIS_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_OUTLINE_H -#include FT_BITMAP_H +#include +#include +#include +#include +#include /************************************************************************** @@ -130,7 +129,7 @@ if ( ( ystr >> 6 ) > FT_INT_MAX || ( ystr >> 6 ) < FT_INT_MIN ) { FT_TRACE1(( "FT_GlyphSlot_Embolden:" )); - FT_TRACE1(( "too strong emboldening parameter ystr=%d\n", ystr )); + FT_TRACE1(( "too strong emboldening parameter ystr=%ld\n", ystr )); return; } error = FT_GlyphSlot_Own_Bitmap( slot ); diff --git a/sdk/lib/3rdparty/freetype/src/base/ftsystem.c b/sdk/lib/3rdparty/freetype/src/base/ftsystem.c index f92b3a03d58..3013cbda9d6 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftsystem.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftsystem.c @@ -4,7 +4,7 @@ * * ANSI-specific FreeType low-level system interface (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -27,11 +27,11 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_SYSTEM_H -#include FT_ERRORS_H -#include FT_TYPES_H +#include +#include +#include +#include +#include /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/src/base/fttrigon.c b/sdk/lib/3rdparty/freetype/src/base/fttrigon.c index 38721977c78..c6f027cf615 100644 --- a/sdk/lib/3rdparty/freetype/src/base/fttrigon.c +++ b/sdk/lib/3rdparty/freetype/src/base/fttrigon.c @@ -4,7 +4,7 @@ * * FreeType trigonometric functions (body). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -29,10 +29,9 @@ * */ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_CALC_H -#include FT_TRIGONOMETRY_H +#include +#include +#include /* the Cordic shrink factor 0.858785336480436 * 2^32 */ diff --git a/sdk/lib/3rdparty/freetype/src/base/fttype1.c b/sdk/lib/3rdparty/freetype/src/base/fttype1.c index 26d4f1c3a8a..be60ed6ec57 100644 --- a/sdk/lib/3rdparty/freetype/src/base/fttype1.c +++ b/sdk/lib/3rdparty/freetype/src/base/fttype1.c @@ -4,7 +4,7 @@ * * FreeType utility file for PS names support (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_SERVICE_H -#include FT_SERVICE_POSTSCRIPT_INFO_H +#include +#include +#include +#include /* documentation is in t1tables.h */ diff --git a/sdk/lib/3rdparty/freetype/src/base/ftutil.c b/sdk/lib/3rdparty/freetype/src/base/ftutil.c index 92bd857e922..d90cfbcd263 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftutil.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftutil.c @@ -4,7 +4,7 @@ * * FreeType utility file for memory and list management (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_OBJECTS_H -#include FT_LIST_H +#include +#include +#include +#include /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/src/base/ftwinfnt.c b/sdk/lib/3rdparty/freetype/src/base/ftwinfnt.c index 59daa77031c..699dc3d700c 100644 --- a/sdk/lib/3rdparty/freetype/src/base/ftwinfnt.c +++ b/sdk/lib/3rdparty/freetype/src/base/ftwinfnt.c @@ -4,7 +4,7 @@ * * FreeType API for accessing Windows FNT specific info (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_WINFONTS_H -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_WINFNT_H +#include +#include +#include +#include /* documentation is in ftwinfnt.h */ diff --git a/sdk/lib/3rdparty/freetype/src/bdf/bdf.c b/sdk/lib/3rdparty/freetype/src/bdf/bdf.c index e54df6649b6..249012e5907 100644 --- a/sdk/lib/3rdparty/freetype/src/bdf/bdf.c +++ b/sdk/lib/3rdparty/freetype/src/bdf/bdf.c @@ -26,7 +26,6 @@ THE SOFTWARE. #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "bdflib.c" #include "bdfdrivr.c" diff --git a/sdk/lib/3rdparty/freetype/src/bdf/bdf.h b/sdk/lib/3rdparty/freetype/src/bdf/bdf.h index 4018756f723..5acbd5f2f94 100644 --- a/sdk/lib/3rdparty/freetype/src/bdf/bdf.h +++ b/sdk/lib/3rdparty/freetype/src/bdf/bdf.h @@ -30,10 +30,9 @@ * Based on bdf.h,v 1.16 2000/03/16 20:08:51 mleisher */ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_HASH_H +#include +#include +#include FT_BEGIN_HEADER @@ -109,9 +108,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; diff --git a/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.c b/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.c index 4a11843a1cb..d29188b97ba 100644 --- a/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.c +++ b/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.c @@ -24,16 +24,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_OBJECTS_H -#include FT_BDF_H -#include FT_TRUETYPE_IDS_H +#include +#include +#include +#include +#include -#include FT_SERVICE_BDF_H -#include FT_SERVICE_FONT_FORMAT_H +#include +#include #include "bdf.h" #include "bdfdrivr.h" @@ -106,7 +105,7 @@ THE SOFTWARE. FT_ULong code; - if ( mid > max || mid < min ) + if ( mid >= max || mid < min ) mid = ( min + max ) >> 1; code = encodings[mid].enc; @@ -152,7 +151,7 @@ THE SOFTWARE. FT_ULong code; /* same as BDF_encoding_el.enc */ - if ( mid > max || mid < min ) + if ( mid >= max || mid < min ) mid = ( min + max ) >> 1; code = encodings[mid].enc; @@ -184,7 +183,8 @@ THE SOFTWARE. Exit: if ( charcode > 0xFFFFFFFFUL ) { - FT_TRACE1(( "bdf_cmap_char_next: charcode 0x%x > 32bit API" )); + FT_TRACE1(( "bdf_cmap_char_next: charcode 0x%lx > 32bit API", + charcode )); *acharcode = 0; /* XXX: result should be changed to indicate an overflow error */ } @@ -216,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' || @@ -230,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++ ) { @@ -267,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; } @@ -283,7 +283,7 @@ THE SOFTWARE. for ( nn = 0; nn < 4; nn++ ) { - char* src = strings[nn]; + const char* src = strings[nn]; len = lengths[nn]; @@ -402,10 +402,10 @@ THE SOFTWARE. bdf_property_t* prop = NULL; - FT_TRACE4(( " number of glyphs: allocated %d (used %d)\n", + FT_TRACE4(( " number of glyphs: allocated %ld (used %ld)\n", font->glyphs_size, font->glyphs_used )); - FT_TRACE4(( " number of unencoded glyphs: allocated %d (used %d)\n", + FT_TRACE4(( " number of unencoded glyphs: allocated %ld (used %ld)\n", font->unencoded_size, font->unencoded_used )); @@ -457,13 +457,13 @@ THE SOFTWARE. if ( font->font_ascent > 0x7FFF || font->font_ascent < -0x7FFF ) { font->font_ascent = font->font_ascent < 0 ? -0x7FFF : 0x7FFF; - FT_TRACE0(( "BDF_Face_Init: clamping font ascent to value %d\n", + FT_TRACE0(( "BDF_Face_Init: clamping font ascent to value %ld\n", font->font_ascent )); } if ( font->font_descent > 0x7FFF || font->font_descent < -0x7FFF ) { font->font_descent = font->font_descent < 0 ? -0x7FFF : 0x7FFF; - FT_TRACE0(( "BDF_Face_Init: clamping font descent to value %d\n", + FT_TRACE0(( "BDF_Face_Init: clamping font descent to value %ld\n", font->font_descent )); } @@ -504,7 +504,7 @@ THE SOFTWARE. prop->value.l < -0x504C2L ) { bsize->size = 0x7FFF; - FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n", + FT_TRACE0(( "BDF_Face_Init: clamping point size to value %ld\n", bsize->size )); } else @@ -517,7 +517,7 @@ THE SOFTWARE. if ( font->point_size > 0x7FFF ) { bsize->size = 0x7FFF; - FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n", + FT_TRACE0(( "BDF_Face_Init: clamping point size to value %ld\n", bsize->size )); } else @@ -539,7 +539,7 @@ THE SOFTWARE. if ( prop->value.l > 0x7FFF || prop->value.l < -0x7FFF ) { bsize->y_ppem = 0x7FFF << 6; - FT_TRACE0(( "BDF_Face_Init: clamping pixel size to value %d\n", + FT_TRACE0(( "BDF_Face_Init: clamping pixel size to value %ld\n", bsize->y_ppem )); } else @@ -615,7 +615,7 @@ THE SOFTWARE. for ( n = 0; n < font->glyphs_size; n++ ) { (face->en_table[n]).enc = cur[n].encoding; - FT_TRACE4(( " idx %d, val 0x%lX\n", n, cur[n].encoding )); + FT_TRACE4(( " idx %ld, val 0x%lX\n", n, cur[n].encoding )); (face->en_table[n]).glyph = (FT_UShort)n; if ( cur[n].encoding == font->default_char ) @@ -624,7 +624,7 @@ THE SOFTWARE. face->default_glyph = (FT_UInt)n; else FT_TRACE1(( "BDF_Face_Init:" - " idx %d is too large for this system\n", n )); + " idx %ld is too large for this system\n", n )); } } } @@ -825,7 +825,7 @@ THE SOFTWARE. bitmap->rows = glyph.bbx.height; bitmap->width = glyph.bbx.width; if ( glyph.bpr > FT_INT_MAX ) - FT_TRACE1(( "BDF_Glyph_Load: too large pitch %d is truncated\n", + FT_TRACE1(( "BDF_Glyph_Load: too large pitch %ld is truncated\n", glyph.bpr )); bitmap->pitch = (int)glyph.bpr; /* same as FT_Bitmap.pitch */ @@ -902,7 +902,8 @@ THE SOFTWARE. if ( prop->value.l > 0x7FFFFFFFL || prop->value.l < ( -1 - 0x7FFFFFFFL ) ) { FT_TRACE1(( "bdf_get_bdf_property:" - " too large integer 0x%x is truncated\n" )); + " too large integer 0x%lx is truncated\n", + prop->value.l )); } aproperty->type = BDF_PROPERTY_TYPE_INTEGER; aproperty->u.integer = (FT_Int32)prop->value.l; @@ -912,7 +913,8 @@ THE SOFTWARE. if ( prop->value.ul > 0xFFFFFFFFUL ) { FT_TRACE1(( "bdf_get_bdf_property:" - " too large cardinal 0x%x is truncated\n" )); + " too large cardinal 0x%lx is truncated\n", + prop->value.ul )); } aproperty->type = BDF_PROPERTY_TYPE_CARDINAL; aproperty->u.cardinal = (FT_UInt32)prop->value.ul; diff --git a/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.h b/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.h index b37b84ea31f..54aaa3353ce 100644 --- a/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.h +++ b/sdk/lib/3rdparty/freetype/src/bdf/bdfdrivr.h @@ -28,8 +28,7 @@ THE SOFTWARE. #ifndef BDFDRIVR_H_ #define BDFDRIVR_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include #include "bdf.h" diff --git a/sdk/lib/3rdparty/freetype/src/bdf/bdferror.h b/sdk/lib/3rdparty/freetype/src/bdf/bdferror.h index dbe41c02ab1..c1b54448714 100644 --- a/sdk/lib/3rdparty/freetype/src/bdf/bdferror.h +++ b/sdk/lib/3rdparty/freetype/src/bdf/bdferror.h @@ -29,7 +29,7 @@ #ifndef BDFERROR_H_ #define BDFERROR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -37,7 +37,7 @@ #define FT_ERR_PREFIX BDF_Err_ #define FT_ERR_BASE FT_Mod_Err_BDF -#include FT_ERRORS_H +#include #endif /* BDFERROR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/bdf/bdflib.c b/sdk/lib/3rdparty/freetype/src/bdf/bdflib.c index 0898b0d470d..a4ddb9a1d9f 100644 --- a/sdk/lib/3rdparty/freetype/src/bdf/bdflib.c +++ b/sdk/lib/3rdparty/freetype/src/bdf/bdflib.c @@ -31,12 +31,11 @@ */ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include +#include #include "bdf.h" #include "bdferror.h" @@ -79,89 +78,89 @@ 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 @@ -364,7 +363,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 * @@ -407,13 +406,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; @@ -473,7 +473,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; @@ -692,7 +692,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; @@ -717,7 +717,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; @@ -750,7 +750,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; @@ -775,7 +775,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; @@ -828,7 +828,7 @@ static FT_Error - bdf_create_property( char* name, + bdf_create_property( const char* name, int format, bdf_font_t* font ) { @@ -998,7 +998,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; @@ -1097,7 +1097,7 @@ static FT_Error _bdf_add_property( bdf_font_t* font, - char* name, + const char* name, char* value, unsigned long lineno ) { @@ -1336,7 +1336,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] ); @@ -1423,7 +1423,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; @@ -1461,7 +1461,7 @@ goto Exit; } - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); + error = _bdf_list_split( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -1615,7 +1615,7 @@ /* Expect the SWIDTH (scalable width) field next. */ if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 ) { - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); + error = _bdf_list_split( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -1628,7 +1628,7 @@ /* Expect the DWIDTH (scalable width) field next. */ if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 ) { - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); + error = _bdf_list_split( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -1653,7 +1653,7 @@ /* Expect the BBX field next. */ if ( _bdf_strncmp( line, "BBX", 3 ) == 0 ) { - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); + error = _bdf_list_split( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -1796,7 +1796,7 @@ { 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; @@ -1808,7 +1808,7 @@ { 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; @@ -1846,7 +1846,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]; @@ -1976,7 +1976,7 @@ goto Exit; } - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); + error = _bdf_list_split( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -2015,7 +2015,7 @@ goto Exit; } - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); + error = _bdf_list_split( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -2038,7 +2038,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 ); @@ -2081,7 +2081,7 @@ goto Exit; } - error = _bdf_list_split( &p->list, (char *)" +", line, linelen ); + error = _bdf_list_split( &p->list, " +", line, linelen ); if ( error ) goto Exit; @@ -2136,7 +2136,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; @@ -2144,7 +2144,7 @@ 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; diff --git a/sdk/lib/3rdparty/freetype/src/bzip2/ftbzip2.c b/sdk/lib/3rdparty/freetype/src/bzip2/ftbzip2.c index 1fda59b60ce..411c5d263b8 100644 --- a/sdk/lib/3rdparty/freetype/src/bzip2/ftbzip2.c +++ b/sdk/lib/3rdparty/freetype/src/bzip2/ftbzip2.c @@ -8,7 +8,7 @@ * parse compressed PCF fonts, as found with many X11 server * distributions. * - * Copyright (C) 2010-2019 by + * Copyright (C) 2010-2020 by * Joel Klinghed. * * based on `src/gzip/ftgzip.c' @@ -22,15 +22,14 @@ */ -#include -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_DEBUG_H -#include FT_BZIP2_H +#include +#include +#include +#include #include FT_CONFIG_STANDARD_LIBRARY_H -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -38,7 +37,7 @@ #define FT_ERR_PREFIX Bzip2_Err_ #define FT_ERR_BASE FT_Mod_Err_Bzip2 -#include FT_ERRORS_H +#include #ifdef FT_CONFIG_OPTION_USE_BZIP2 diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcache.c b/sdk/lib/3rdparty/freetype/src/cache/ftcache.c index a6a3e63ef0b..e90f4639cb1 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcache.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcache.c @@ -4,7 +4,7 @@ * * The FreeType Caching sub-system (body only). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "ftcbasic.c" #include "ftccache.c" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcbasic.c b/sdk/lib/3rdparty/freetype/src/cache/ftcbasic.c index a473585ebcf..43ea314d4a2 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcbasic.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcbasic.c @@ -4,7 +4,7 @@ * * The FreeType basic cache interface (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_CACHE_H +#include +#include +#include #include "ftcglyph.h" #include "ftcimage.h" #include "ftcsbits.h" @@ -111,7 +110,9 @@ if ( (FT_ULong)face->num_glyphs > FT_UINT_MAX || 0 > face->num_glyphs ) FT_TRACE1(( "ftc_basic_family_get_count:" - " too large number of glyphs in this face, truncated\n", + " the number of glyphs in this face is %ld,\n" + " " + " which is too much and thus truncated\n", face->num_glyphs )); if ( !error ) @@ -394,7 +395,7 @@ #if FT_ULONG_MAX > FT_UINT_MAX if ( load_flags > FT_UINT_MAX ) FT_TRACE1(( "FTC_ImageCache_LookupScaler:" - " higher bits in load_flags 0x%x are dropped\n", + " higher bits in load_flags 0x%lx are dropped\n", load_flags & ~((FT_ULong)FT_UINT_MAX) )); #endif @@ -594,7 +595,7 @@ #if FT_ULONG_MAX > FT_UINT_MAX if ( load_flags > FT_UINT_MAX ) FT_TRACE1(( "FTC_ImageCache_LookupScaler:" - " higher bits in load_flags 0x%x are dropped\n", + " higher bits in load_flags 0x%lx are dropped\n", load_flags & ~((FT_ULong)FT_UINT_MAX) )); #endif diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftccache.c b/sdk/lib/3rdparty/freetype/src/cache/ftccache.c index f38ca44ddd3..1c8e0f32211 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftccache.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftccache.c @@ -4,7 +4,7 @@ * * The FreeType internal cache interface (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include #include "ftcmanag.h" -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H +#include +#include #include "ftccback.h" #include "ftcerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftccache.h b/sdk/lib/3rdparty/freetype/src/cache/ftccache.h index 140ceadb117..11698bb0e90 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftccache.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftccache.h @@ -4,7 +4,7 @@ * * FreeType internal cache interface (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef FTCCACHE_H_ #define FTCCACHE_H_ - +#include #include "ftcmru.h" FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftccback.h b/sdk/lib/3rdparty/freetype/src/cache/ftccback.h index 9321bc3d4ee..542acb1565a 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftccback.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftccback.h @@ -4,7 +4,7 @@ * * Callback functions of the caching sub-system (specification only). * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -18,14 +18,14 @@ #ifndef FTCCBACK_H_ #define FTCCBACK_H_ -#include -#include FT_CACHE_H +#include #include "ftcmru.h" #include "ftcimage.h" #include "ftcmanag.h" #include "ftcglyph.h" #include "ftcsbits.h" +FT_BEGIN_HEADER FT_LOCAL( void ) ftc_inode_free( FTC_Node inode, @@ -85,6 +85,7 @@ ftc_node_destroy( FTC_Node node, FTC_Manager manager ); +FT_END_HEADER #endif /* FTCCBACK_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftccmap.c b/sdk/lib/3rdparty/freetype/src/cache/ftccmap.c index 76ba10e3e90..468c008cf60 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftccmap.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftccmap.c @@ -4,7 +4,7 @@ * * FreeType CharMap cache (body) * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,13 +16,12 @@ */ -#include -#include FT_FREETYPE_H -#include FT_CACHE_H +#include +#include #include "ftcmanag.h" -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H +#include +#include +#include #include "ftccback.h" #include "ftcerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcerror.h b/sdk/lib/3rdparty/freetype/src/cache/ftcerror.h index e2d64171804..bedfd28371c 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcerror.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcerror.h @@ -4,7 +4,7 @@ * * Caching sub-system error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef FTCERROR_H_ #define FTCERROR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX FTC_Err_ #define FT_ERR_BASE FT_Mod_Err_Cache -#include FT_ERRORS_H +#include #endif /* FTCERROR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.c b/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.c index 2a0e97d4afa..7f5438aad58 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.c @@ -4,7 +4,7 @@ * * FreeType Glyph Image (FT_Glyph) cache (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_CACHE_H +#include +#include #include "ftcglyph.h" -#include FT_ERRORS_H +#include #include "ftccback.h" #include "ftcerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.h b/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.h index 5a1f0e2a748..5629545f3c5 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcglyph.h @@ -4,7 +4,7 @@ * * FreeType abstract glyph cache (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -117,7 +117,6 @@ #define FTCGLYPH_H_ -#include #include "ftcmanag.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcimage.c b/sdk/lib/3rdparty/freetype/src/cache/ftcimage.c index 9e64d51a22b..58ebad8c932 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcimage.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcimage.c @@ -4,7 +4,7 @@ * * FreeType Image cache (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_CACHE_H +#include #include "ftcimage.h" -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_OBJECTS_H +#include +#include #include "ftccback.h" #include "ftcerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcimage.h b/sdk/lib/3rdparty/freetype/src/cache/ftcimage.h index dcb101fabce..a400788b3cb 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcimage.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcimage.h @@ -4,7 +4,7 @@ * * FreeType Generic Image cache (specification) * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -36,8 +36,7 @@ #define FTCIMAGE_H_ -#include -#include FT_CACHE_H +#include #include "ftcglyph.h" FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.c b/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.c index bd585968e3b..436d41f3745 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.c @@ -4,7 +4,7 @@ * * FreeType Cache Manager (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_CACHE_H +#include #include "ftcmanag.h" -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_SIZES_H +#include +#include +#include #include "ftccback.h" #include "ftcerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.h b/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.h index 60c66c8fc8f..6c6ec685450 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcmanag.h @@ -4,7 +4,7 @@ * * FreeType Cache Manager (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -63,8 +63,7 @@ #define FTCMANAG_H_ -#include -#include FT_CACHE_H +#include #include "ftcmru.h" #include "ftccache.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcmru.c b/sdk/lib/3rdparty/freetype/src/cache/ftcmru.c index 18a7b800545..8feed45f6b5 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcmru.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcmru.c @@ -4,7 +4,7 @@ * * FreeType MRU support (body). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_CACHE_H +#include #include "ftcmru.h" -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H +#include +#include #include "ftcerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcmru.h b/sdk/lib/3rdparty/freetype/src/cache/ftcmru.h index 58721ed3409..ac4f9b126d2 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcmru.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcmru.h @@ -4,7 +4,7 @@ * * Simple MRU list-cache (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -44,8 +44,8 @@ #define FTCMRU_H_ -#include -#include FT_FREETYPE_H +#include +#include #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.c b/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.c index 06b46c896ee..e0db930af8e 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.c +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.c @@ -4,7 +4,7 @@ * * FreeType sbits manager (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_CACHE_H +#include #include "ftcsbits.h" -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_ERRORS_H +#include +#include +#include #include "ftccback.h" #include "ftcerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.h b/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.h index f1b71c28353..46f797e724d 100644 --- a/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.h +++ b/sdk/lib/3rdparty/freetype/src/cache/ftcsbits.h @@ -4,7 +4,7 @@ * * A small-bitmap cache (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTCSBITS_H_ -#include -#include FT_CACHE_H +#include #include "ftcglyph.h" diff --git a/sdk/lib/3rdparty/freetype/src/cff/cff.c b/sdk/lib/3rdparty/freetype/src/cff/cff.c index a34ba9b710e..0fa6c87870b 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cff.c +++ b/sdk/lib/3rdparty/freetype/src/cff/cff.c @@ -4,7 +4,7 @@ * * FreeType OpenType driver component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "cffcmap.c" #include "cffdrivr.c" diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffcmap.c b/sdk/lib/3rdparty/freetype/src/cff/cffcmap.c index 15cc94cafb0..6d16ed42264 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffcmap.c +++ b/sdk/lib/3rdparty/freetype/src/cff/cffcmap.c @@ -4,7 +4,7 @@ * * CFF character mapping table (cmap) support (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,8 +16,7 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include #include "cffcmap.h" #include "cffload.h" diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffcmap.h b/sdk/lib/3rdparty/freetype/src/cff/cffcmap.h index 07366bc7486..69fab8dc6c0 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffcmap.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cffcmap.h @@ -4,7 +4,7 @@ * * CFF character mapping table (cmap) support (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #ifndef CFFCMAP_H_ #define CFFCMAP_H_ -#include FT_INTERNAL_CFF_OBJECTS_TYPES_H +#include FT_BEGIN_HEADER @@ -43,7 +43,7 @@ FT_BEGIN_HEADER } CFF_CMapStdRec; - FT_DECLARE_CMAP_CLASS(cff_cmap_encoding_class_rec) + FT_DECLARE_CMAP_CLASS( cff_cmap_encoding_class_rec ) /*************************************************************************/ @@ -56,7 +56,7 @@ FT_BEGIN_HEADER /* unicode (synthetic) cmaps */ - FT_DECLARE_CMAP_CLASS(cff_cmap_unicode_class_rec) + FT_DECLARE_CMAP_CLASS( cff_cmap_unicode_class_rec ) FT_END_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.c b/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.c index bbd5c403297..486ab242353 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.c +++ b/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.c @@ -4,7 +4,7 @@ * * OpenType font driver implementation (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,18 +16,17 @@ */ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_SFNT_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_POSTSCRIPT_PROPS_H -#include FT_SERVICE_CID_H -#include FT_SERVICE_POSTSCRIPT_INFO_H -#include FT_SERVICE_POSTSCRIPT_NAME_H -#include FT_SERVICE_TT_CMAP_H -#include FT_SERVICE_CFF_TABLE_LOAD_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "cffdrivr.h" #include "cffgload.h" @@ -37,16 +36,16 @@ #include "cffobjs.h" #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_SERVICE_MULTIPLE_MASTERS_H -#include FT_SERVICE_METRICS_VARIATIONS_H +#include +#include #endif #include "cfferrs.h" -#include FT_SERVICE_FONT_FORMAT_H -#include FT_SERVICE_GLYPH_DICT_H -#include FT_SERVICE_PROPERTIES_H -#include FT_DRIVER_H +#include +#include +#include +#include /************************************************************************** @@ -381,8 +380,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; @@ -738,7 +737,7 @@ { if ( dict->cid_supplement < FT_INT_MIN || dict->cid_supplement > FT_INT_MAX ) - FT_TRACE1(( "cff_get_ros: too large supplement %d is truncated\n", + FT_TRACE1(( "cff_get_ros: too large supplement %ld is truncated\n", dict->cid_supplement )); *supplement = (FT_Int)dict->cid_supplement; } diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.h b/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.h index f2bbcfe4f11..d198dd35cb4 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cffdrivr.h @@ -4,7 +4,7 @@ * * High-level OpenType driver interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define CFFDRIVER_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cff/cfferrs.h b/sdk/lib/3rdparty/freetype/src/cff/cfferrs.h index 78d47a156db..5b00a3f0a2e 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cfferrs.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cfferrs.h @@ -4,7 +4,7 @@ * * CFF error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,7 +25,7 @@ #ifndef CFFERRS_H_ #define CFFERRS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_BASE FT_Mod_Err_CFF -#include FT_ERRORS_H +#include #endif /* CFFERRS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffgload.c b/sdk/lib/3rdparty/freetype/src/cff/cffgload.c index 36aa7d1b9ca..feee38a4131 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffgload.c +++ b/sdk/lib/3rdparty/freetype/src/cff/cffgload.c @@ -4,7 +4,7 @@ * * OpenType Glyph Loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,14 +16,13 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_SFNT_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_OUTLINE_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include +#include +#include #include "cffload.h" #include "cffgload.h" @@ -207,8 +206,8 @@ PSAux_Service psaux = (PSAux_Service)face->psaux; const CFF_Decoder_Funcs decoder_funcs = psaux->cff_decoder_funcs; - FT_Matrix font_matrix; - FT_Vector font_offset; + FT_Matrix font_matrix; + FT_Vector font_offset; force_scaling = FALSE; @@ -364,7 +363,6 @@ top_upm = (FT_Long)cff->top_font.font_dict.units_per_em; sub_upm = (FT_Long)cff->subfonts[fd_index]->font_dict.units_per_em; - font_matrix = cff->subfonts[fd_index]->font_dict.font_matrix; font_offset = cff->subfonts[fd_index]->font_dict.font_offset; @@ -399,7 +397,6 @@ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face ); #endif - FT_Byte* charstring; FT_ULong charstring_len; @@ -665,8 +662,12 @@ metrics->horiBearingY = cbox.yMax; if ( has_vertical_info ) + { metrics->vertBearingX = metrics->horiBearingX - metrics->horiAdvance / 2; + metrics->vertBearingY = FT_MulFix( metrics->vertBearingY, + glyph->y_scale ); + } else { if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffgload.h b/sdk/lib/3rdparty/freetype/src/cff/cffgload.h index 754c55acf9e..3b312f452e1 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffgload.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cffgload.h @@ -4,7 +4,7 @@ * * OpenType Glyph Loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define CFFGLOAD_H_ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_CFF_OBJECTS_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffload.c b/sdk/lib/3rdparty/freetype/src/cff/cffload.c index 12efd18dc4b..73d3eecd313 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffload.c +++ b/sdk/lib/3rdparty/freetype/src/cff/cffload.c @@ -4,7 +4,7 @@ * * OpenType and CFF data/program tables loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,17 +16,16 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H -#include FT_TYPE1_TABLES_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_MULTIPLE_MASTERS_H -#include FT_SERVICE_MULTIPLE_MASTERS_H +#include +#include #endif #include "cffload.h" @@ -411,7 +410,7 @@ FT_Error error = FT_Err_Ok; FT_Memory memory = idx->stream->memory; - FT_Byte** t = NULL; + FT_Byte** tbl = NULL; FT_Byte* new_bytes = NULL; FT_ULong new_size; @@ -428,11 +427,11 @@ new_size = idx->data_size + idx->count; if ( idx->count > 0 && - !FT_NEW_ARRAY( t, idx->count + 1 ) && + !FT_NEW_ARRAY( tbl, idx->count + 1 ) && ( !pool || !FT_ALLOC( new_bytes, new_size ) ) ) { FT_ULong n, cur_offset; - FT_ULong extra = 0; + FT_ULong extra = 0; FT_Byte* org_bytes = idx->bytes; @@ -443,15 +442,15 @@ if ( cur_offset != 0 ) { FT_TRACE0(( "cff_index_get_pointers:" - " invalid first offset value %d set to zero\n", + " invalid first offset value %ld set to zero\n", cur_offset )); cur_offset = 0; } if ( !pool ) - t[0] = org_bytes + cur_offset; + tbl[0] = org_bytes + cur_offset; else - t[0] = new_bytes + cur_offset; + tbl[0] = new_bytes + cur_offset; for ( n = 1; n <= idx->count; n++ ) { @@ -465,23 +464,25 @@ next_offset = idx->data_size; if ( !pool ) - t[n] = org_bytes + next_offset; + tbl[n] = org_bytes + next_offset; else { - t[n] = new_bytes + next_offset + extra; + tbl[n] = new_bytes + next_offset + extra; if ( next_offset != cur_offset ) { - FT_MEM_COPY( t[n - 1], org_bytes + cur_offset, t[n] - t[n - 1] ); - t[n][0] = '\0'; - t[n] += 1; + FT_MEM_COPY( tbl[n - 1], + org_bytes + cur_offset, + tbl[n] - tbl[n - 1] ); + tbl[n][0] = '\0'; + tbl[n] += 1; extra++; } } cur_offset = next_offset; } - *table = t; + *table = tbl; if ( pool ) *pool = new_bytes; @@ -490,6 +491,11 @@ } Exit: + if ( error && new_bytes ) + FT_FREE( new_bytes ); + if ( error && tbl ) + FT_FREE( tbl ); + return error; } @@ -553,8 +559,8 @@ idx->data_offset > stream->size - off2 + 1 ) { FT_ERROR(( "cff_index_access_element:" - " offset to next entry (%d)" - " exceeds the end of stream (%d)\n", + " offset to next entry (%ld)" + " exceeds the end of stream (%ld)\n", off2, stream->size - idx->data_offset + 1 )); off2 = stream->size - idx->data_offset + 1; } @@ -978,7 +984,7 @@ if ( glyph_sid > 0xFFFFL - nleft ) { FT_ERROR(( "cff_charset_load: invalid SID range trimmed" - " nleft=%d -> %d\n", nleft, 0xFFFFL - glyph_sid )); + " nleft=%d -> %ld\n", nleft, 0xFFFFL - glyph_sid )); nleft = ( FT_UInt )( 0xFFFFL - glyph_sid ); } @@ -1945,7 +1951,7 @@ if ( priv->blue_shift > 1000 || priv->blue_shift < 0 ) { FT_TRACE2(( "cff_load_private_dict:" - " setting unlikely BlueShift value %d to default (7)\n", + " setting unlikely BlueShift value %ld to default (7)\n", priv->blue_shift )); priv->blue_shift = 7; } @@ -1953,7 +1959,7 @@ if ( priv->blue_fuzz > 1000 || priv->blue_fuzz < 0 ) { FT_TRACE2(( "cff_load_private_dict:" - " setting unlikely BlueFuzz value %d to default (1)\n", + " setting unlikely BlueFuzz value %ld to default (1)\n", priv->blue_fuzz )); priv->blue_fuzz = 1; } @@ -2057,7 +2063,7 @@ if ( !error ) { FT_TRACE4(( " top dictionary:\n" )); - error = cff_parser_run( &parser, dict, dict + dict_len ); + error = cff_parser_run( &parser, dict, FT_OFFSET( dict, dict_len ) ); } /* clean up regardless of error */ diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffload.h b/sdk/lib/3rdparty/freetype/src/cff/cffload.h index 42d2696f33c..fc998db2db9 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffload.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cffload.h @@ -4,7 +4,7 @@ * * OpenType & CFF data/program tables loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,10 +20,9 @@ #define CFFLOAD_H_ -#include -#include FT_INTERNAL_CFF_TYPES_H +#include #include "cffparse.h" -#include FT_INTERNAL_CFF_OBJECTS_TYPES_H /* for CFF_Face */ +#include /* for CFF_Face */ FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffobjs.c b/sdk/lib/3rdparty/freetype/src/cff/cffobjs.c index 1a1030c0650..d555d523580 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffobjs.c +++ b/sdk/lib/3rdparty/freetype/src/cff/cffobjs.c @@ -4,7 +4,7 @@ * * OpenType objects manager (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,32 +16,31 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_STREAM_H -#include FT_ERRORS_H -#include FT_TRUETYPE_IDS_H -#include FT_TRUETYPE_TAGS_H -#include FT_INTERNAL_SFNT_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_MULTIPLE_MASTERS_H -#include FT_SERVICE_MULTIPLE_MASTERS_H -#include FT_SERVICE_METRICS_VARIATIONS_H +#include +#include +#include #endif -#include FT_INTERNAL_CFF_OBJECTS_TYPES_H +#include #include "cffobjs.h" #include "cffload.h" #include "cffcmap.h" #include "cfferrs.h" -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_SERVICE_CFF_TABLE_LOAD_H +#include +#include /************************************************************************** @@ -167,46 +166,56 @@ FT_Error error = FT_Err_Ok; PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size ); + FT_Memory memory = cffsize->face->memory; + CFF_Internal internal = NULL; + CFF_Face face = (CFF_Face)cffsize->face; + CFF_Font font = (CFF_Font)face->extra.data; - if ( funcs ) - { - CFF_Face face = (CFF_Face)cffsize->face; - CFF_Font font = (CFF_Font)face->extra.data; - CFF_Internal internal = NULL; + PS_PrivateRec priv; - PS_PrivateRec priv; - FT_Memory memory = cffsize->face->memory; + FT_UInt i; - FT_UInt i; + if ( !funcs ) + goto Exit; + if ( FT_NEW( internal ) ) + goto Exit; - if ( FT_NEW( internal ) ) - goto Exit; - - cff_make_private_dict( &font->top_font, &priv ); - error = funcs->create( cffsize->face->memory, &priv, + cff_make_private_dict( &font->top_font, &priv ); + error = funcs->create( cffsize->face->memory, &priv, &internal->topfont ); + if ( error ) + goto Exit; + + for ( i = font->num_subfonts; i > 0; i-- ) + { + CFF_SubFont sub = font->subfonts[i - 1]; + + + cff_make_private_dict( sub, &priv ); + error = funcs->create( cffsize->face->memory, &priv, + &internal->subfonts[i - 1] ); if ( error ) goto Exit; - - for ( i = font->num_subfonts; i > 0; i-- ) - { - CFF_SubFont sub = font->subfonts[i - 1]; - - - cff_make_private_dict( sub, &priv ); - error = funcs->create( cffsize->face->memory, &priv, - &internal->subfonts[i - 1] ); - if ( error ) - goto Exit; - } - - cffsize->internal->module_data = internal; } + cffsize->internal->module_data = internal; + size->strike_index = 0xFFFFFFFFUL; Exit: + if ( error ) + { + if ( internal ) + { + for ( i = font->num_subfonts; i > 0; i-- ) + FT_FREE( internal->subfonts[i - 1] ); + FT_FREE( internal->topfont ); + } + + FT_FREE( internal ); + } + return error; } @@ -349,7 +358,8 @@ FT_LOCAL_DEF( void ) cff_slot_done( FT_GlyphSlot slot ) { - slot->internal->glyph_hints = NULL; + if ( slot->internal ) + slot->internal->glyph_hints = NULL; } @@ -940,7 +950,8 @@ style_name = cff_strcpy( memory, fullp ); /* remove the style part from the family name (if present) */ - remove_style( cffface->family_name, style_name ); + if ( style_name ) + remove_style( cffface->family_name, style_name ); } break; } @@ -962,7 +973,7 @@ 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" ); /******************************************************************** * @@ -1018,9 +1029,9 @@ } #ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES - /* CID-keyed CFF fonts don't have glyph names -- the SFNT loader */ - /* has unset this flag because of the 3.0 `post' table. */ - if ( dict->cid_registry == 0xFFFFU ) + /* CID-keyed CFF or CFF2 fonts don't have glyph names -- the SFNT */ + /* loader has unset this flag because of the 3.0 `post' table. */ + if ( dict->cid_registry == 0xFFFFU && !cff2 ) cffface->face_flags |= FT_FACE_FLAG_GLYPH_NAMES; #endif diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffobjs.h b/sdk/lib/3rdparty/freetype/src/cff/cffobjs.h index 03bc78a67f4..845bd909413 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffobjs.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cffobjs.h @@ -4,7 +4,7 @@ * * OpenType objects manager (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define CFFOBJS_H_ -#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffparse.c b/sdk/lib/3rdparty/freetype/src/cff/cffparse.c index fa806f1a905..69bcd5d957c 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffparse.c +++ b/sdk/lib/3rdparty/freetype/src/cff/cffparse.c @@ -4,7 +4,7 @@ * * CFF token stream parser (body) * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,13 +16,12 @@ */ -#include #include "cffparse.h" -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_LIST_H +#include +#include +#include +#include +#include #include "cfferrs.h" #include "cffload.h" @@ -77,6 +76,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 +100,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 +167,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 +188,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 +244,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 +282,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 +319,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 +358,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 +525,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 +551,7 @@ } else - return cff_parse_integer( *d, parser->limit ); + return cff_parse_integer( parser, *d ); } @@ -494,10 +562,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 +630,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 ) { @@ -645,7 +713,7 @@ ( max_scaling - min_scaling ) > 9 ) { FT_TRACE1(( "cff_parse_font_matrix:" - " strange scaling values (minimum %d, maximum %d),\n" + " strange scaling values (minimum %ld, maximum %ld),\n" " " " using default matrix\n", min_scaling, max_scaling )); goto Unlikely; @@ -742,7 +810,7 @@ bbox->yMax = FT_RoundFix( cff_parse_fixed( parser, data ) ); error = FT_Err_Ok; - FT_TRACE4(( " [%d %d %d %d]\n", + FT_TRACE4(( " [%ld %ld %ld %ld]\n", bbox->xMin / 65536, bbox->yMin / 65536, bbox->xMax / 65536, @@ -865,11 +933,11 @@ FT_TRACE1(( "cff_parse_cid_ros: real supplement is rounded\n" )); dict->cid_supplement = cff_parse_num( parser, data ); if ( dict->cid_supplement < 0 ) - FT_TRACE1(( "cff_parse_cid_ros: negative supplement %d is found\n", + FT_TRACE1(( "cff_parse_cid_ros: negative supplement %ld is found\n", dict->cid_supplement )); error = FT_Err_Ok; - FT_TRACE4(( " %d %d %d\n", + FT_TRACE4(( " %d %d %ld\n", dict->cid_registry, dict->cid_ordering, dict->cid_supplement )); @@ -1122,18 +1190,6 @@ #endif /* FT_DEBUG_LEVEL_TRACE */ -#ifdef CFF_CONFIG_OPTION_OLD_ENGINE - static void - destruct_t2s_item( FT_Memory memory, - void* data, - void* user ) - { - FT_UNUSED( user ); - memory->free( memory, data ); - } -#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */ - - FT_LOCAL_DEF( FT_Error ) cff_parser_run( CFF_Parser parser, FT_Byte* start, @@ -1147,11 +1203,6 @@ FT_Library library = parser->library; FT_Memory memory = library->memory; - - FT_ListRec t2s; - - - FT_ZERO( &t2s ); #endif parser->top = parser->stack; @@ -1212,9 +1263,11 @@ FT_Byte* charstring_base; FT_ULong charstring_len; - FT_Fixed* stack; - FT_ListNode node; - FT_Byte* q; + FT_Fixed* stack; + FT_ListNode node; + CFF_T2_String t2; + FT_Fixed t2_size; + FT_Byte* q; charstring_base = ++p; @@ -1261,16 +1314,26 @@ 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. */ - q = (FT_Byte*)memory->alloc( memory, - 5 * ( decoder.top - decoder.stack ) ); + + t2_size = 5 * ( decoder.top - decoder.stack ); + + q = (FT_Byte*)memory->alloc( memory, t2_size ); if ( !q ) goto Out_Of_Memory_Error; - node->data = q; - - FT_List_Add( &t2s, node ); + t2->start = q; + t2->limit = q + t2_size; stack = decoder.stack; @@ -1531,9 +1594,6 @@ } /* while ( p < limit ) */ Exit: -#ifdef CFF_CONFIG_OPTION_OLD_ENGINE - FT_List_Finalize( &t2s, destruct_t2s_item, memory, NULL ); -#endif return error; #ifdef CFF_CONFIG_OPTION_OLD_ENGINE diff --git a/sdk/lib/3rdparty/freetype/src/cff/cffparse.h b/sdk/lib/3rdparty/freetype/src/cff/cffparse.h index bac32f94491..6f3fbb37d63 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cffparse.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cffparse.h @@ -4,7 +4,7 @@ * * CFF token stream parser (specification) * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define CFFPARSE_H_ -#include -#include FT_INTERNAL_CFF_TYPES_H -#include FT_INTERNAL_OBJECTS_H +#include +#include FT_BEGIN_HEADER @@ -60,6 +59,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 +133,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/sdk/lib/3rdparty/freetype/src/cff/cfftoken.h b/sdk/lib/3rdparty/freetype/src/cff/cfftoken.h index 063a7b3be07..4c6a53eec13 100644 --- a/sdk/lib/3rdparty/freetype/src/cff/cfftoken.h +++ b/sdk/lib/3rdparty/freetype/src/cff/cfftoken.h @@ -4,7 +4,7 @@ * * CFF token definitions (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/cid/ciderrs.h b/sdk/lib/3rdparty/freetype/src/cid/ciderrs.h index be80bed3bea..f698bb22936 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/ciderrs.h +++ b/sdk/lib/3rdparty/freetype/src/cid/ciderrs.h @@ -4,7 +4,7 @@ * * CID error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,7 +25,7 @@ #ifndef CIDERRS_H_ #define CIDERRS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -33,7 +33,7 @@ #define FT_ERR_PREFIX CID_Err_ #define FT_ERR_BASE FT_Mod_Err_CID -#include FT_ERRORS_H +#include #endif /* CIDERRS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidgload.c b/sdk/lib/3rdparty/freetype/src/cid/cidgload.c index 1804c28eee4..f2838fe8a4b 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidgload.c +++ b/sdk/lib/3rdparty/freetype/src/cid/cidgload.c @@ -4,7 +4,7 @@ * * CID-keyed Type1 Glyph Loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,17 +16,16 @@ */ -#include #include "cidload.h" #include "cidgload.h" -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_OUTLINE_H -#include FT_INTERNAL_CALC_H +#include +#include +#include +#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_CFF_TYPES_H -#include FT_DRIVER_H +#include +#include +#include #include "ciderrs.h" diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidgload.h b/sdk/lib/3rdparty/freetype/src/cid/cidgload.h index 37eba7ca7be..da36e37e069 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidgload.h +++ b/sdk/lib/3rdparty/freetype/src/cid/cidgload.h @@ -4,7 +4,7 @@ * * OpenType Glyph Loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define CIDGLOAD_H_ -#include #include "cidobjs.h" diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidload.c b/sdk/lib/3rdparty/freetype/src/cid/cidload.c index fce3e37da74..bb9136a3df8 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidload.c +++ b/sdk/lib/3rdparty/freetype/src/cid/cidload.c @@ -4,7 +4,7 @@ * * CID-keyed Type1 font loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,11 +17,11 @@ #include -#include FT_INTERNAL_DEBUG_H +#include #include FT_CONFIG_CONFIG_H -#include FT_MULTIPLE_MASTERS_H -#include FT_INTERNAL_TYPE1_TYPES_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include +#include #include "cidload.h" @@ -254,7 +254,7 @@ goto Exit; } - FT_TRACE4(( " %d\n", num_dicts )); + FT_TRACE4(( " %ld\n", num_dicts )); /* * A single entry in the FDArray must (at least) contain the following @@ -275,7 +275,7 @@ if ( (FT_ULong)num_dicts > stream->size / 100 ) { FT_TRACE0(( "parse_fd_array: adjusting FDArray size" - " (from %d to %d)\n", + " (from %ld to %ld)\n", num_dicts, stream->size / 100 )); num_dicts = (FT_Long)( stream->size / 100 ); @@ -329,7 +329,7 @@ dict->expansion_factor = cid_parser_to_fixed( parser, 0 ); dict->private_dict.expansion_factor = dict->expansion_factor; - FT_TRACE4(( "%d\n", dict->expansion_factor )); + FT_TRACE4(( "%ld\n", dict->expansion_factor )); } return; @@ -715,7 +715,7 @@ if ( ft_isdigit( *p ) ) val = (FT_Byte)( *p - '0' ); else if ( *p >= 'a' && *p <= 'f' ) - val = (FT_Byte)( *p - 'a' ); + val = (FT_Byte)( *p - 'a' + 10 ); else if ( *p >= 'A' && *p <= 'F' ) val = (FT_Byte)( *p - 'A' + 10 ); else if ( *p == ' ' || @@ -804,7 +804,7 @@ face->root.stream->size - parser->data_offset ) { FT_TRACE0(( "cid_face_open: adjusting length of binary data\n" - " (from %d to %d bytes)\n", + " (from %ld to %ld bytes)\n", parser->binary_length, face->root.stream->size - parser->data_offset )); parser->binary_length = face->root.stream->size - diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidload.h b/sdk/lib/3rdparty/freetype/src/cid/cidload.h index fb9d46216d0..06fb9ef4767 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidload.h +++ b/sdk/lib/3rdparty/freetype/src/cid/cidload.h @@ -4,7 +4,7 @@ * * CID-keyed Type1 font loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define CIDLOAD_H_ -#include -#include FT_INTERNAL_STREAM_H +#include #include "cidparse.h" diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidobjs.c b/sdk/lib/3rdparty/freetype/src/cid/cidobjs.c index 4e9728719b7..04b295eb8f3 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidobjs.c +++ b/sdk/lib/3rdparty/freetype/src/cid/cidobjs.c @@ -4,7 +4,7 @@ * * CID objects manager (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,17 +16,16 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H +#include +#include #include "cidgload.h" #include "cidload.h" -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H -#include FT_DRIVER_H +#include +#include +#include +#include #include "ciderrs.h" @@ -50,7 +49,8 @@ FT_LOCAL_DEF( void ) cid_slot_done( FT_GlyphSlot slot ) { - slot->internal->glyph_hints = NULL; + if ( slot->internal ) + slot->internal->glyph_hints = NULL; } diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidobjs.h b/sdk/lib/3rdparty/freetype/src/cid/cidobjs.h index 89c9aa74ab8..6ae3061379c 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidobjs.h +++ b/sdk/lib/3rdparty/freetype/src/cid/cidobjs.h @@ -4,7 +4,7 @@ * * CID objects manager (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,9 +21,9 @@ #include -#include FT_INTERNAL_OBJECTS_H +#include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_TYPE1_TYPES_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidparse.c b/sdk/lib/3rdparty/freetype/src/cid/cidparse.c index 1be46ec3287..1fc098b448e 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidparse.c +++ b/sdk/lib/3rdparty/freetype/src/cid/cidparse.c @@ -4,7 +4,7 @@ * * CID-keyed Type1 parser (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_STREAM_H +#include +#include +#include #include "cidparse.h" diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidparse.h b/sdk/lib/3rdparty/freetype/src/cid/cidparse.h index ec1f6a346db..0b49bebf488 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidparse.h +++ b/sdk/lib/3rdparty/freetype/src/cid/cidparse.h @@ -4,7 +4,7 @@ * * CID-keyed Type1 parser (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,10 +20,9 @@ #define CIDPARSE_H_ -#include -#include FT_INTERNAL_TYPE1_TYPES_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidriver.c b/sdk/lib/3rdparty/freetype/src/cid/cidriver.c index 4d91e875291..d08cea1d7e8 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidriver.c +++ b/sdk/lib/3rdparty/freetype/src/cid/cidriver.c @@ -4,7 +4,7 @@ * * CID driver interface (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,22 +16,21 @@ */ -#include #include "cidriver.h" #include "cidgload.h" -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_POSTSCRIPT_PROPS_H +#include +#include #include "ciderrs.h" -#include FT_SERVICE_POSTSCRIPT_NAME_H -#include FT_SERVICE_FONT_FORMAT_H -#include FT_SERVICE_POSTSCRIPT_INFO_H -#include FT_SERVICE_CID_H -#include FT_SERVICE_PROPERTIES_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include +#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include /************************************************************************** diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidriver.h b/sdk/lib/3rdparty/freetype/src/cid/cidriver.h index 3402fd7e994..0fc8ed37bf2 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidriver.h +++ b/sdk/lib/3rdparty/freetype/src/cid/cidriver.h @@ -4,7 +4,7 @@ * * High-level CID driver interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define CIDRIVER_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/cid/cidtoken.h b/sdk/lib/3rdparty/freetype/src/cid/cidtoken.h index f505c9e1664..e9f068bb501 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/cidtoken.h +++ b/sdk/lib/3rdparty/freetype/src/cid/cidtoken.h @@ -4,7 +4,7 @@ * * CID token definitions (specification only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/cid/type1cid.c b/sdk/lib/3rdparty/freetype/src/cid/type1cid.c index d21801cec19..082e8bfe5b3 100644 --- a/sdk/lib/3rdparty/freetype/src/cid/type1cid.c +++ b/sdk/lib/3rdparty/freetype/src/cid/type1cid.c @@ -4,7 +4,7 @@ * * FreeType OpenType driver component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "cidgload.c" #include "cidload.c" diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/README b/sdk/lib/3rdparty/freetype/src/gxvalid/README deleted file mode 100644 index d493587842d..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/README +++ /dev/null @@ -1,532 +0,0 @@ -gxvalid: TrueType GX validator -============================== - - -1. What is this ---------------- - - `gxvalid' is a module to validate TrueType GX tables: a collection of - additional tables in TrueType font which are used by `QuickDraw GX - Text', Apple Advanced Typography (AAT). In addition, gxvalid can - validates `kern' tables which have been extended for AAT. Like the - otvalid module, gxvalid uses FreeType 2's validator framework - (ftvalid). - - You can link gxvalid with your program; before running your own layout - engine, gxvalid validates a font file. As the result, you can remove - error-checking code from the layout engine. It is also possible to - use gxvalid as a stand-alone font validator; the `ftvalid' test - program included in the ft2demo bundle calls gxvalid internally. - A stand-alone font validator may be useful for font developers. - - This documents documents the following issues. - - - supported TrueType GX tables - - fundamental validation limitations - - permissive error handling of broken GX tables - - `kern' table issue. - - -2. Supported tables -------------------- - - The following GX tables are currently supported. - - bsln - feat - just - kern(*) - lcar - mort - morx - opbd - prop - trak - - The following GX tables are currently unsupported. - - cvar - fdsc - fmtx - fvar - gvar - Zapf - - The following GX tables won't be supported. - - acnt(**) - hsty(***) - - The following undocumented tables in TrueType fonts designed for Apple - platform aren't handled either. - - addg - CVTM - TPNM - umif - - - *) The `kern' validator handles both the classic and the new kern - formats; the former is supported on both Microsoft and Apple - platforms, while the latter is supported on Apple platforms. - - **) `acnt' tables are not supported by currently available Apple font - tools. - - ***) There is one more Apple extension, `hsty', but it is for - Newton-OS, not GX (Newton-OS is a platform by Apple, but it can - use sfnt- housed bitmap fonts only). Therefore, it should be - excluded from `Apple platform' in the context of TrueType. - gxvalid ignores it as Apple font tools do so. - - - We have checked 183 fonts bundled with MacOS 9.1, MacOS 9.2, MacOS - 10.0, MacOS X 10.1, MSIE for MacOS, and AppleWorks 6.0. In addition, - we have checked 67 Dynalab fonts (designed for MacOS) and 189 Ricoh - fonts (designed for Windows and MacOS dual platforms). The number of - fonts including TrueType GX tables are as follows. - - bsln: 76 - feat: 191 - just: 84 - kern: 59 - lcar: 4 - mort: 326 - morx: 19 - opbd: 4 - prop: 114 - trak: 16 - - Dynalab and Ricoh fonts don't have GX tables except of `feat' and - `mort'. - - -3. Fundamental validation limitations -------------------------------------- - - TrueType GX provides layout information to libraries for font - rasterizers and text layout. gxvalid can check whether the layout - data in a font is conformant to the TrueType GX format specified by - Apple. But gxvalid cannot check a how QuickDraw GX/AAT renderer uses - the stored information. - - 3-1. Validation of State Machine activity - ----------------------------------------- - - QuickDraw GX/AAT uses a `State Machine' to provide `stateful' layout - features, and TrueType GX stores the state transition diagram of - this `State Machine' in a `StateTable' data structure. While the - State Machine receives a series of glyph IDs, the State Machine - starts with `start of text' state, walks around various states and - generates various layout information to the renderer, and finally - reaches the `end of text' state. - - gxvalid can check essential errors like: - - - possibility of state transitions to undefined states - - existence of glyph IDs that the State Machine doesn't know how - to handle - - the State Machine cannot compute the layout information from - given diagram - - These errors can be checked within finite steps, and without the - State Machine itself, because these are `expression' errors of state - transition diagram. - - There is no limitation about how long the State Machine walks - around, so validation of the algorithm in the state transition - diagram requires infinite steps, even if we had a State Machine in - gxvalid. Therefore, the following errors and problems cannot be - checked. - - - existence of states which the State Machine never transits to - - the possibility that the State Machine never reaches `end of - text' - - the possibility of stack underflow/overflow in the State Machine - (in ligature and contextual glyph substitutions, the State - Machine can store 16 glyphs onto its stack) - - In addition, gxvalid doesn't check `temporary glyph IDs' used in the - chained State Machines (in `mort' and `morx' tables). If a layout - feature is implemented by a single State Machine, a glyph ID - converted by the State Machine is passed to the glyph renderer, thus - it should not point to an undefined glyph ID. But if a layout - feature is implemented by chained State Machines, a component State - Machine (if it is not the final one) is permitted to generate - undefined glyph IDs for temporary use, because it is handled by next - component State Machine and not by the glyph renderer. To validate - such temporary glyph IDs, gxvalid must stack all undefined glyph IDs - which can occur in the output of the previous State Machine and - search them in the `ClassTable' structure of the current State - Machine. It is too complex to list all possible glyph IDs from the - StateTable, especially from a ligature substitution table. - - 3-2. Validation of relationship between multiple layout features - ---------------------------------------------------------------- - - gxvalid does not validate the relationship between multiple layout - features at all. - - If multiple layout features are defined in TrueType GX tables, - possible interactions, overrides, and conflicts between layout - features are implicitly given in the font too. For example, there - are several predefined spacing control features: - - - Text Spacing (Proportional/Monospace/Half-width/Normal) - - Number Spacing (Monospaced-numbers/Proportional-numbers) - - Kana Spacing (Full-width/Proportional) - - Ideographic Spacing (Full-width/Proportional) - - CJK Roman Spacing (Half-width/Proportional/Default-roman - /Full-width-roman/Proportional) - - If all layout features are independently managed, we can activate - inconsistent typographic rules like `Text Spacing=Monospace' and - `Ideographic Spacing=Proportional' at the same time. - - The combinations of layout features is managed by a 32bit integer - (one bit each for selector setting), so we can define relationships - between up to 32 features, theoretically. But if one feature - setting affects another feature setting, we need typographic - priority rules to validate the relationship. Unfortunately, the - TrueType GX format specification does not give such information even - for predefined features. - - -4. Permissive error handling of broken GX tables ------------------------------------------------- - - When Apple's font rendering system finds an inconsistency, like a - specification violation or an unspecified value in a TrueType GX - table, it does not always return error. In most cases, the rendering - engine silently ignores such wrong values or even whole tables. In - fact, MacOS is shipped with fonts including broken GX/AAT tables, but - no harmful effects due to `officially broken' fonts are observed by - end-users. - - gxvalid is designed to continue the validation process as long as - possible. When gxvalid find wrong values, gxvalid warns it at least, - and takes a fallback procedure if possible. The fallback procedure - depends on the debug level. - - We used the following three tools to investigate Apple's error handling. - - - FontValidator (for MacOS 8.5 - 9.2) resource fork font - - ftxvalidator (for MacOS X 10.1 -) dfont or naked-sfnt - - ftxdumperfuser (for MacOS X 10.1 -) dfont or naked-sfnt - - However, all tests were done on a PowerPC based Macintosh; at present, - we have not checked those tools on a m68k-based Macintosh. - - In total, we checked 183 fonts bundled to MacOS 9.1, MacOS 9.2, MacOS - 10.0, MacOS X 10.1, MSIE for MacOS, and AppleWorks 6.0. These fonts - are distributed officially, but many broken GX/AAT tables were found - by Apple's font tools. In the following, we list typical violation of - the GX specification, in fonts officially distributed with those Apple - systems. - - 4-1. broken BinSrchHeader (19/183) - ---------------------------------- - - `BinSrchHeader' is a header of a data array for m68k platforms to - access memory efficiently. Although there are only two independent - parameters for real (`unitSize' and `nUnits'), BinSrchHeader has - three additional parameters which can be calculated from `unitSize' - and `nUnits', for fast setup. Apple font tools ignore them - silently, so gxvalid warns if it finds and inconsistency, and always - continues validation. The additional parameters are ignored - regardless of the consistency. - - 19 fonts include such inconsistencies; all breaks are in the - BinSrchHeader structure of the `kern' table. - - 4-2. too-short LookupTable (5/183) - ---------------------------------- - - LookupTable format 0 is a simple array to get a value from a given - GID (glyph ID); the index of this array is a GID too. Therefore, - the length of the array is expected to be same as the maximum GID - value defined in the `maxp' table, but there are some fonts whose - LookupTable format 0 is too short to cover all GIDs. FontValidator - ignores this error silently, ftxvalidator and ftxdumperfuser both - warn and continue. Similar problems are found in format 3 subtables - of `kern'. gxvalid warns always and abort if the validation level - is set to FT_VALIDATE_PARANOID. - - 5 fonts include too-short kern format 0 subtables. - 1 font includes too-short kern format 3 subtable. - - 4-3. broken LookupTable format 2 (1/183) - ---------------------------------------- - - LookupTable format 2, subformat 4 covers the GID space by a - collection of segments which are specified by `firstGlyph' and - `lastGlyph'. Some fonts store `firstGlyph' and `lastGlyph' in - reverse order, so the segment specification is broken. Apple font - tools ignore this error silently; a broken segment is ignored as if - it did not exist. gxvalid warns and normalize the segment at - FT_VALIDATE_DEFAULT, or ignore the segment at FT_VALIDATE_TIGHT, or - abort at FT_VALIDATE_PARANOID. - - 1 font includes broken LookupTable format 2, in the `just' table. - - *) It seems that all fonts manufactured by ITC for AppleWorks have - this error. - - 4-4. bad bracketing in glyph property (14/183) - ---------------------------------------------- - - GX/AAT defines a `bracketing' property of the glyphs in the `prop' - table, to control layout features of strings enclosed inside and - outside of brackets. Some fonts give inappropriate bracket - properties to glyphs. Apple font tools warn about this error; - gxvalid warns too and aborts at FT_VALIDATE_PARANOID. - - 14 fonts include wrong bracket properties. - - - 4-5. invalid feature number (117/183) - ------------------------------------- - - The GX/AAT extension can include 255 different layout features, - but popular layout features are predefined (see - https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html). - Some fonts include feature numbers which are incompatible with the - predefined feature registry. - - In our survey, there are 140 fonts including `feat' table. - - a) 67 fonts use a feature number which should not be used. - b) 117 fonts set the wrong feature range (nSetting). This is mostly - found in the `mort' and `morx' tables. - - Apple font tools give no warning, although they cannot recognize - what the feature is. At FT_VALIDATE_DEFAULT, gxvalid warns but - continues in both cases (a, b). At FT_VALIDATE_TIGHT, gxvalid warns - and aborts for (a), but continues for (b). At FT_VALIDATE_PARANOID, - gxvalid warns and aborts in both cases (a, b). - - 4-6. invalid prop version (10/183) - ---------------------------------- - - As most TrueType GX tables, the `prop' table must start with a 32bit - version identifier: 0x00010000, 0x00020000 or 0x00030000. But some - fonts store nonsense binary data instead. When Apple font tools - find them, they abort the processing immediately, and the data which - follows is unhandled. gxvalid does the same. - - 10 fonts include broken `prop' version. - - All of these fonts are classic TrueType fonts for the Japanese - script, manufactured by Apple. - - 4-7. unknown resource name (2/183) - ------------------------------------ - - NOTE: THIS IS NOT A TRUETYPE GX ERROR. - - If a TrueType font is stored in the resource fork or in dfont - format, the data must be tagged as `sfnt' in the resource fork index - to invoke TrueType font handler for the data. But the TrueType font - data in `Keyboard.dfont' is tagged as `kbd', and that in - `LastResort.dfont' is tagged as `lst'. Apple font tools can detect - that the data is in TrueType format and successfully validate them. - Maybe this is possible because they are known to be dfont. The - current implementation of the resource fork driver of FreeType - cannot do that, thus gxvalid cannot validate them. - - 2 fonts use an unknown tag for the TrueType font resource. - -5. `kern' table issues ----------------------- - - In common terminology of TrueType, `kern' is classified as a basic and - platform-independent table. But there are Apple extensions of `kern', - and there is an extension which requires a GX state machine for - contextual kerning. Therefore, gxvalid includes a special validator - for `kern' tables. Unfortunately, there is no exact algorithm to - check Apple's extension, so gxvalid includes a heuristic algorithm to - find the proper validation routines for all possible data formats, - including the data format for Microsoft. By calling - classic_kern_validate() instead of gxv_validate(), you can specify the - `kern' format explicitly. However, current FreeType2 uses Microsoft - `kern' format only, others are ignored (and should be handled in a - library one level higher than FreeType). - - 5-1. History - ------------ - - The original 16bit version of `kern' was designed by Apple in the - pre-GX era, and it was also approved by Microsoft. Afterwards, - Apple designed a new 32bit version of the `kern' table. According - to the documentation, the difference between the 16bit and 32bit - version is only the size of variables in the `kern' header. In the - following, we call the original 16bit version as `classic', and - 32bit version as `new'. - - 5-2. Versions and dialects which should be differentiated - --------------------------------------------------------- - - The `kern' table consists of a table header and several subtables. - The version number which identifies a `classic' or a `new' version - is explicitly written in the table header, but there are - undocumented differences between Microsoft's and Apple's formats. - It is called a `dialect' in the following. There are three cases - which should be handled: the new Apple-dialect, the classic - Apple-dialect, and the classic Microsoft-dialect. An analysis of - the formats and the auto detection algorithm of gxvalid is described - in the following. - - 5-2-1. Version detection: classic and new kern - ---------------------------------------------- - - According to Apple TrueType specification, there are only two - differences between the classic and the new: - - - The `kern' table header starts with the version number. - The classic version starts with 0x0000 (16bit), - the new version starts with 0x00010000 (32bit). - - - In the `kern' table header, the number of subtables follows - the version number. - In the classic version, it is stored as a 16bit value. - In the new version, it is stored as a 32bit value. - - From Apple font tool's output (DumpKERN is also tested in addition - to the three Apple font tools in above), there is another - undocumented difference. In the new version, the subtable header - includes a 16bit variable named `tupleIndex' which does not exist - in the classic version. - - The new version can store all subtable formats (0, 1, 2, and 3), - but the Apple TrueType specification does not mention the subtable - formats available in the classic version. - - 5-2-2. Available subtable formats in classic version - ---------------------------------------------------- - - Although the Apple TrueType specification recommends to use the - classic version in the case if the font is designed for both the - Apple and Microsoft platforms, it does not document the available - subtable formats in the classic version. - - According to the Microsoft TrueType specification, the subtable - format assured for Windows and OS/2 support is only subtable - format 0. The Microsoft TrueType specification also describes - subtable format 2, but does not mention which platforms support - it. Subtable formats 1, 3, and higher are documented as reserved - for future use. Therefore, the classic version can store subtable - formats 0 and 2, at least. `ttfdump.exe', a font tool provided by - Microsoft, ignores the subtable format written in the subtable - header, and parses the table as if all subtables are in format 0. - - `kern' subtable format 1 uses a StateTable, so it cannot be - utilized without a GX State Machine. Therefore, it is reasonable - to assume that format 1 (and 3) were introduced after Apple had - introduced GX and moved to the new 32bit version. - - 5-2-3. Apple and Microsoft dialects - ----------------------------------- - - The `kern' subtable has a 16bit `coverage' field to describe - kerning attributes, but bit interpretations by Apple and Microsoft - are different: For example, Apple uses bits 0-7 to identify the - subtable, while Microsoft uses bits 8-15. - - In addition, due to the output of DumpKERN and FontValidator, - Apple's bit interpretations of coverage in classic and new version - are incompatible also. In summary, there are three dialects: - classic Apple dialect, classic Microsoft dialect, and new Apple - dialect. The classic Microsoft dialect and the new Apple dialect - are documented by each vendors' TrueType font specification, but - the documentation for classic Apple dialect is not available. - - For example, in the new Apple dialect, bit 15 is documented as - `set to 1 if the kerning is vertical'. On the other hand, in - classic Microsoft dialect, bit 1 is documented as `set to 1 if the - kerning is horizontal'. From the outputs of DumpKERN and - FontValidator, classic Apple dialect recognizes 15 as `set to 1 - when the kerning is horizontal'. From the results of similar - experiments, classic Apple dialect seems to be the Endian reverse - of the classic Microsoft dialect. - - As a conclusion it must be noted that no font tool can identify - classic Apple dialect or classic Microsoft dialect automatically. - - 5-2-4. gxvalid auto dialect detection algorithm - ----------------------------------------------- - - The first 16 bits of the `kern' table are enough to identify the - version: - - - if the first 16 bits are 0x0000, the `kern' table is in - classic Apple dialect or classic Microsoft dialect - - if the first 16 bits are 0x0001, and next 16 bits are 0x0000, - the kern table is in new Apple dialect. - - If the `kern' table is a classic one, the 16bit `coverage' field - is checked next. Firstly, the coverage bits are decoded for the - classic Apple dialect using the following bit masks (this is based - on DumpKERN output): - - 0x8000: 1=horizontal, 0=vertical - 0x4000: not used - 0x2000: 1=cross-stream, 0=normal - 0x1FF0: reserved - 0x000F: subtable format - - If any of reserved bits are set or the subtable bits is - interpreted as format 1 or 3, we take it as `impossible in classic - Apple dialect' and retry, using the classic Microsoft dialect. - - The most popular coverage in new Apple-dialect: 0x8000, - The most popular coverage in classic Apple-dialect: 0x0000, - The most popular coverage in classic Microsoft dialect: 0x0001. - - 5-3. Tested fonts - ----------------- - - We checked 59 fonts bundled with MacOS and 38 fonts bundled with - Windows, where all font include a `kern' table. - - - fonts bundled with MacOS - * new Apple dialect - format 0: 18 - format 2: 1 - format 3: 1 - * classic Apple dialect - format 0: 14 - * classic Microsoft dialect - format 0: 15 - - - fonts bundled with Windows - * classic Microsoft dialect - format 0: 38 - - It looks strange that classic Microsoft-dialect fonts are bundled to - MacOS: they come from MSIE for MacOS, except of MarkerFelt.dfont. - - - ACKNOWLEDGEMENT - --------------- - - Some parts of gxvalid are derived from both the `gxlayout' module and - the `otvalid' module. Development of gxlayout was supported by the - Information-technology Promotion Agency(IPA), Japan. - - The detailed analysis of undefined glyph ID utilization in `mort' and - `morx' tables is provided by George Williams. - ------------------------------------------------------------------------- - -Copyright (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. - - ---- end of README --- diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.c deleted file mode 100644 index 462e461bf2a..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.c +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** - * - * 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 -#include - -#include "gxvbsln.c" -#include "gxvcommn.c" -#include "gxvfeat.c" -#include "gxvjust.c" -#include "gxvkern.c" -#include "gxvlcar.c" -#include "gxvmod.c" -#include "gxvmort.c" -#include "gxvmort0.c" -#include "gxvmort1.c" -#include "gxvmort2.c" -#include "gxvmort4.c" -#include "gxvmort5.c" -#include "gxvmorx.c" -#include "gxvmorx0.c" -#include "gxvmorx1.c" -#include "gxvmorx2.c" -#include "gxvmorx4.c" -#include "gxvmorx5.c" -#include "gxvopbd.c" -#include "gxvprop.c" -#include "gxvtrak.c" - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.h b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.h deleted file mode 100644 index 969cd0927ab..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvalid.h +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** - * - * 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_ -#define GXVALID_H_ - -#include -#include FT_FREETYPE_H - -#include "gxverror.h" /* must come before FT_INTERNAL_VALIDATE_H */ - -#include FT_INTERNAL_VALIDATE_H -#include FT_INTERNAL_STREAM_H - - -FT_BEGIN_HEADER - - - FT_LOCAL( void ) - gxv_feat_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - - FT_LOCAL( void ) - gxv_bsln_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - - FT_LOCAL( void ) - gxv_trak_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_just_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_mort_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_morx_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_kern_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_kern_validate_classic( FT_Bytes table, - FT_Face face, - FT_Int dialect_flags, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_opbd_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_prop_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - FT_LOCAL( void ) - gxv_lcar_validate( FT_Bytes table, - FT_Face face, - FT_Validator valid ); - - -FT_END_HEADER - - -#endif /* GXVALID_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvbsln.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvbsln.c deleted file mode 100644 index f22f2545fa2..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvbsln.c +++ /dev/null @@ -1,334 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvbsln - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define GXV_BSLN_VALUE_COUNT 32 -#define GXV_BSLN_VALUE_EMPTY 0xFFFFU - - - typedef struct GXV_bsln_DataRec_ - { - FT_Bytes ctlPoints_p; - FT_UShort defaultBaseline; - - } GXV_bsln_DataRec, *GXV_bsln_Data; - - -#define GXV_BSLN_DATA( field ) GXV_TABLE_DATA( bsln, field ) - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - gxv_bsln_LookupValue_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - FT_UShort v = value_p->u; - FT_UShort* ctlPoints; - - FT_UNUSED( glyph ); - - - GXV_NAME_ENTER( "lookup value" ); - - if ( v >= GXV_BSLN_VALUE_COUNT ) - FT_INVALID_DATA; - - ctlPoints = (FT_UShort*)GXV_BSLN_DATA( ctlPoints_p ); - if ( ctlPoints && ctlPoints[v] == GXV_BSLN_VALUE_EMPTY ) - FT_INVALID_DATA; - - GXV_EXIT; - } - - - /* - +===============+ --------+ - | lookup header | | - +===============+ | - | BinSrchHeader | | - +===============+ | - | lastGlyph[0] | | - +---------------+ | - | firstGlyph[0] | | head of lookup table - +---------------+ | + - | offset[0] | -> | offset [byte] - +===============+ | + - | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte] - +---------------+ | - | firstGlyph[1] | | - +---------------+ | - | offset[1] | | - +===============+ | - | - ... | - | - 16bit value array | - +===============+ | - | value | <-------+ - ... - */ - - static GXV_LookupValueDesc - gxv_bsln_LookupFmt4_transit( FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p; - FT_Bytes limit; - FT_UShort offset; - GXV_LookupValueDesc value; - - /* XXX: check range ? */ - offset = (FT_UShort)( base_value_p->u + - ( relative_gindex * sizeof ( FT_UShort ) ) ); - - p = gxvalid->lookuptbl_head + offset; - limit = lookuptbl_limit; - GXV_LIMIT_CHECK( 2 ); - - value.u = FT_NEXT_USHORT( p ); - - return value; - } - - - static void - gxv_bsln_parts_fmt0_validate( FT_Bytes tables, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = tables; - - - GXV_NAME_ENTER( "parts format 0" ); - - /* deltas */ - GXV_LIMIT_CHECK( 2 * GXV_BSLN_VALUE_COUNT ); - - gxvalid->table_data = NULL; /* No ctlPoints here. */ - - GXV_EXIT; - } - - - static void - gxv_bsln_parts_fmt1_validate( FT_Bytes tables, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = tables; - - - GXV_NAME_ENTER( "parts format 1" ); - - /* deltas */ - gxv_bsln_parts_fmt0_validate( p, limit, gxvalid ); - - /* mappingData */ - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_bsln_LookupValue_validate; - gxvalid->lookupfmt4_trans = gxv_bsln_LookupFmt4_transit; - gxv_LookupTable_validate( p + 2 * GXV_BSLN_VALUE_COUNT, - limit, - gxvalid ); - - GXV_EXIT; - } - - - static void - gxv_bsln_parts_fmt2_validate( FT_Bytes tables, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = tables; - - FT_UShort stdGlyph; - FT_UShort ctlPoint; - FT_Int i; - - FT_UShort defaultBaseline = GXV_BSLN_DATA( defaultBaseline ); - - - GXV_NAME_ENTER( "parts format 2" ); - - GXV_LIMIT_CHECK( 2 + ( 2 * GXV_BSLN_VALUE_COUNT ) ); - - /* stdGlyph */ - stdGlyph = FT_NEXT_USHORT( p ); - GXV_TRACE(( " (stdGlyph = %u)\n", stdGlyph )); - - gxv_glyphid_validate( stdGlyph, gxvalid ); - - /* Record the position of ctlPoints */ - GXV_BSLN_DATA( ctlPoints_p ) = p; - - /* ctlPoints */ - for ( i = 0; i < GXV_BSLN_VALUE_COUNT; i++ ) - { - ctlPoint = FT_NEXT_USHORT( p ); - if ( ctlPoint == GXV_BSLN_VALUE_EMPTY ) - { - if ( i == defaultBaseline ) - FT_INVALID_DATA; - } - else - gxv_ctlPoint_validate( stdGlyph, ctlPoint, gxvalid ); - } - - GXV_EXIT; - } - - - static void - gxv_bsln_parts_fmt3_validate( FT_Bytes tables, - FT_Bytes limit, - GXV_Validator gxvalid) - { - FT_Bytes p = tables; - - - GXV_NAME_ENTER( "parts format 3" ); - - /* stdGlyph + ctlPoints */ - gxv_bsln_parts_fmt2_validate( p, limit, gxvalid ); - - /* mappingData */ - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_bsln_LookupValue_validate; - gxvalid->lookupfmt4_trans = gxv_bsln_LookupFmt4_transit; - gxv_LookupTable_validate( p + ( 2 + 2 * GXV_BSLN_VALUE_COUNT ), - limit, - gxvalid ); - - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** bsln TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_bsln_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - - GXV_bsln_DataRec bslnrec; - GXV_bsln_Data bsln = &bslnrec; - - FT_Bytes p = table; - FT_Bytes limit = 0; - - FT_ULong version; - FT_UShort format; - FT_UShort defaultBaseline; - - GXV_Validate_Func fmt_funcs_table [] = - { - gxv_bsln_parts_fmt0_validate, - gxv_bsln_parts_fmt1_validate, - gxv_bsln_parts_fmt2_validate, - gxv_bsln_parts_fmt3_validate, - }; - - - gxvalid->root = ftvalid; - gxvalid->table_data = bsln; - gxvalid->face = face; - - FT_TRACE3(( "validating `bsln' table\n" )); - GXV_INIT; - - - GXV_LIMIT_CHECK( 4 + 2 + 2 ); - version = FT_NEXT_ULONG( p ); - format = FT_NEXT_USHORT( p ); - defaultBaseline = FT_NEXT_USHORT( p ); - - /* only version 1.0 is defined (1996) */ - if ( version != 0x00010000UL ) - FT_INVALID_FORMAT; - - /* only format 1, 2, 3 are defined (1996) */ - GXV_TRACE(( " (format = %d)\n", format )); - if ( format > 3 ) - FT_INVALID_FORMAT; - - if ( defaultBaseline > 31 ) - FT_INVALID_FORMAT; - - bsln->defaultBaseline = defaultBaseline; - - fmt_funcs_table[format]( p, limit, gxvalid ); - - FT_TRACE4(( "\n" )); - } - - -/* arch-tag: ebe81143-fdaa-4c68-a4d1-b57227daa3bc - (do not change this comment) */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.c deleted file mode 100644 index c5cb8ebe8b3..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.c +++ /dev/null @@ -1,1746 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvcommon - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** 16bit offset sorter *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static int - gxv_compare_ushort_offset( FT_UShort* a, - FT_UShort* b ) - { - if ( *a < *b ) - return -1; - else if ( *a > *b ) - return 1; - else - return 0; - } - - - FT_LOCAL_DEF( void ) - gxv_set_length_by_ushort_offset( FT_UShort* offset, - FT_UShort** length, - FT_UShort* buff, - FT_UInt nmemb, - FT_UShort limit, - GXV_Validator gxvalid ) - { - FT_UInt i; - - - for ( i = 0; i < nmemb; i++ ) - *(length[i]) = 0; - - for ( i = 0; i < nmemb; i++ ) - buff[i] = offset[i]; - buff[nmemb] = limit; - - ft_qsort( buff, ( nmemb + 1 ), sizeof ( FT_UShort ), - ( int(*)(const void*, const void*) )gxv_compare_ushort_offset ); - - if ( buff[nmemb] > limit ) - FT_INVALID_OFFSET; - - for ( i = 0; i < nmemb; i++ ) - { - FT_UInt j; - - - for ( j = 0; j < nmemb; j++ ) - if ( buff[j] == offset[i] ) - break; - - if ( j == nmemb ) - FT_INVALID_OFFSET; - - *(length[i]) = (FT_UShort)( buff[j + 1] - buff[j] ); - - if ( 0 != offset[i] && 0 == *(length[i]) ) - FT_INVALID_OFFSET; - } - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** 32bit offset sorter *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static int - gxv_compare_ulong_offset( FT_ULong* a, - FT_ULong* b ) - { - if ( *a < *b ) - return -1; - else if ( *a > *b ) - return 1; - else - return 0; - } - - - FT_LOCAL_DEF( void ) - gxv_set_length_by_ulong_offset( FT_ULong* offset, - FT_ULong** length, - FT_ULong* buff, - FT_UInt nmemb, - FT_ULong limit, - GXV_Validator gxvalid) - { - FT_UInt i; - - - for ( i = 0; i < nmemb; i++ ) - *(length[i]) = 0; - - for ( i = 0; i < nmemb; i++ ) - buff[i] = offset[i]; - buff[nmemb] = limit; - - ft_qsort( buff, ( nmemb + 1 ), sizeof ( FT_ULong ), - ( int(*)(const void*, const void*) )gxv_compare_ulong_offset ); - - if ( buff[nmemb] > limit ) - FT_INVALID_OFFSET; - - for ( i = 0; i < nmemb; i++ ) - { - FT_UInt j; - - - for ( j = 0; j < nmemb; j++ ) - if ( buff[j] == offset[i] ) - break; - - if ( j == nmemb ) - FT_INVALID_OFFSET; - - *(length[i]) = buff[j + 1] - buff[j]; - - if ( 0 != offset[i] && 0 == *(length[i]) ) - FT_INVALID_OFFSET; - } - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** scan value array and get min & max *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - - FT_LOCAL_DEF( void ) - gxv_array_getlimits_byte( FT_Bytes table, - FT_Bytes limit, - FT_Byte* min, - FT_Byte* max, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - *min = 0xFF; - *max = 0x00; - - while ( p < limit ) - { - FT_Byte val; - - - GXV_LIMIT_CHECK( 1 ); - val = FT_NEXT_BYTE( p ); - - *min = (FT_Byte)FT_MIN( *min, val ); - *max = (FT_Byte)FT_MAX( *max, val ); - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - FT_LOCAL_DEF( void ) - gxv_array_getlimits_ushort( FT_Bytes table, - FT_Bytes limit, - FT_UShort* min, - FT_UShort* max, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - *min = 0xFFFFU; - *max = 0x0000; - - while ( p < limit ) - { - FT_UShort val; - - - GXV_LIMIT_CHECK( 2 ); - val = FT_NEXT_USHORT( p ); - - *min = (FT_Byte)FT_MIN( *min, val ); - *max = (FT_Byte)FT_MAX( *max, val ); - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** BINSEARCHHEADER *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef struct GXV_BinSrchHeader_ - { - FT_UShort unitSize; - FT_UShort nUnits; - FT_UShort searchRange; - FT_UShort entrySelector; - FT_UShort rangeShift; - - } GXV_BinSrchHeader; - - - static void - gxv_BinSrchHeader_check_consistency( GXV_BinSrchHeader* binSrchHeader, - GXV_Validator gxvalid ) - { - FT_UShort searchRange; - FT_UShort entrySelector; - FT_UShort rangeShift; - - - if ( binSrchHeader->unitSize == 0 ) - FT_INVALID_DATA; - - if ( binSrchHeader->nUnits == 0 ) - { - if ( binSrchHeader->searchRange == 0 && - binSrchHeader->entrySelector == 0 && - binSrchHeader->rangeShift == 0 ) - return; - else - FT_INVALID_DATA; - } - - for ( searchRange = 1, entrySelector = 1; - ( searchRange * 2 ) <= binSrchHeader->nUnits && - searchRange < 0x8000U; - searchRange *= 2, entrySelector++ ) - ; - - entrySelector--; - searchRange = (FT_UShort)( searchRange * binSrchHeader->unitSize ); - rangeShift = (FT_UShort)( binSrchHeader->nUnits * binSrchHeader->unitSize - - searchRange ); - - if ( searchRange != binSrchHeader->searchRange || - entrySelector != binSrchHeader->entrySelector || - rangeShift != binSrchHeader->rangeShift ) - { - GXV_TRACE(( "Inconsistency found in BinSrchHeader\n" )); - GXV_TRACE(( "originally: unitSize=%d, nUnits=%d, " - "searchRange=%d, entrySelector=%d, " - "rangeShift=%d\n", - binSrchHeader->unitSize, binSrchHeader->nUnits, - binSrchHeader->searchRange, binSrchHeader->entrySelector, - binSrchHeader->rangeShift )); - GXV_TRACE(( "calculated: unitSize=%d, nUnits=%d, " - "searchRange=%d, entrySelector=%d, " - "rangeShift=%d\n", - binSrchHeader->unitSize, binSrchHeader->nUnits, - searchRange, entrySelector, rangeShift )); - - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - } - - - /* - * parser & validator of BinSrchHeader - * which is used in LookupTable format 2, 4, 6. - * - * Essential parameters (unitSize, nUnits) are returned by - * given pointer, others (searchRange, entrySelector, rangeShift) - * can be calculated by essential parameters, so they are just - * validated and discarded. - * - * However, wrong values in searchRange, entrySelector, rangeShift - * won't cause fatal errors, because these parameters might be - * only used in old m68k font driver in MacOS. - * -- suzuki toshiya - */ - - FT_LOCAL_DEF( void ) - gxv_BinSrchHeader_validate( FT_Bytes table, - FT_Bytes limit, - FT_UShort* unitSize_p, - FT_UShort* nUnits_p, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - GXV_BinSrchHeader binSrchHeader; - - - GXV_NAME_ENTER( "BinSrchHeader validate" ); - - if ( *unitSize_p == 0 ) - { - GXV_LIMIT_CHECK( 2 ); - binSrchHeader.unitSize = FT_NEXT_USHORT( p ); - } - else - binSrchHeader.unitSize = *unitSize_p; - - if ( *nUnits_p == 0 ) - { - GXV_LIMIT_CHECK( 2 ); - binSrchHeader.nUnits = FT_NEXT_USHORT( p ); - } - else - binSrchHeader.nUnits = *nUnits_p; - - GXV_LIMIT_CHECK( 2 + 2 + 2 ); - binSrchHeader.searchRange = FT_NEXT_USHORT( p ); - binSrchHeader.entrySelector = FT_NEXT_USHORT( p ); - binSrchHeader.rangeShift = FT_NEXT_USHORT( p ); - GXV_TRACE(( "nUnits %d\n", binSrchHeader.nUnits )); - - gxv_BinSrchHeader_check_consistency( &binSrchHeader, gxvalid ); - - if ( *unitSize_p == 0 ) - *unitSize_p = binSrchHeader.unitSize; - - if ( *nUnits_p == 0 ) - *nUnits_p = binSrchHeader.nUnits; - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** LOOKUP TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define GXV_LOOKUP_VALUE_LOAD( P, SIGNSPEC ) \ - ( P += 2, gxv_lookup_value_load( P - 2, SIGNSPEC ) ) - - static GXV_LookupValueDesc - gxv_lookup_value_load( FT_Bytes p, - GXV_LookupValue_SignSpec signspec ) - { - GXV_LookupValueDesc v; - - - if ( signspec == GXV_LOOKUPVALUE_UNSIGNED ) - v.u = FT_NEXT_USHORT( p ); - else - v.s = FT_NEXT_SHORT( p ); - - return v; - } - - -#define GXV_UNITSIZE_VALIDATE( FORMAT, UNITSIZE, NUNITS, CORRECTSIZE ) \ - FT_BEGIN_STMNT \ - if ( UNITSIZE != CORRECTSIZE ) \ - { \ - FT_ERROR(( "unitSize=%d differs from" \ - " expected unitSize=%d" \ - " in LookupTable %s\n", \ - UNITSIZE, CORRECTSIZE, FORMAT )); \ - if ( UNITSIZE != 0 && NUNITS != 0 ) \ - { \ - FT_ERROR(( " cannot validate anymore\n" )); \ - FT_INVALID_FORMAT; \ - } \ - else \ - FT_ERROR(( " forcibly continues\n" )); \ - } \ - FT_END_STMNT - - - /* ================= Simple Array Format 0 Lookup Table ================ */ - static void - gxv_LookupTable_fmt0_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort i; - - GXV_LookupValueDesc value; - - - GXV_NAME_ENTER( "LookupTable format 0" ); - - GXV_LIMIT_CHECK( 2 * gxvalid->face->num_glyphs ); - - for ( i = 0; i < gxvalid->face->num_glyphs; i++ ) - { - GXV_LIMIT_CHECK( 2 ); - if ( p + 2 >= limit ) /* some fonts have too-short fmt0 array */ - { - GXV_TRACE(( "too short, glyphs %d - %d are missing\n", - i, gxvalid->face->num_glyphs )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - break; - } - - value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign ); - gxvalid->lookupval_func( i, &value, gxvalid ); - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - /* ================= Segment Single Format 2 Lookup Table ============== */ - /* - * Apple spec says: - * - * To guarantee that a binary search terminates, you must include one or - * more special `end of search table' values at the end of the data to - * be searched. The number of termination values that need to be - * included is table-specific. The value that indicates binary search - * termination is 0xFFFF. - * - * The problem is that nUnits does not include this end-marker. It's - * quite difficult to discriminate whether the following 0xFFFF comes from - * the end-marker or some next data. - * - * -- suzuki toshiya - */ - static void - gxv_LookupTable_fmt2_skip_endmarkers( FT_Bytes table, - FT_UShort unitSize, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - while ( ( p + 4 ) < gxvalid->root->limit ) - { - if ( p[0] != 0xFF || p[1] != 0xFF || /* lastGlyph */ - p[2] != 0xFF || p[3] != 0xFF ) /* firstGlyph */ - break; - p += unitSize; - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - static void - gxv_LookupTable_fmt2_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort gid; - - FT_UShort unitSize; - FT_UShort nUnits; - FT_UShort unit; - FT_UShort lastGlyph; - FT_UShort firstGlyph; - GXV_LookupValueDesc value; - - - GXV_NAME_ENTER( "LookupTable format 2" ); - - unitSize = nUnits = 0; - gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, gxvalid ); - p += gxvalid->subtable_length; - - GXV_UNITSIZE_VALIDATE( "format2", unitSize, nUnits, 6 ); - - for ( unit = 0, gid = 0; unit < nUnits; unit++ ) - { - GXV_LIMIT_CHECK( 2 + 2 + 2 ); - lastGlyph = FT_NEXT_USHORT( p ); - firstGlyph = FT_NEXT_USHORT( p ); - value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign ); - - gxv_glyphid_validate( firstGlyph, gxvalid ); - gxv_glyphid_validate( lastGlyph, gxvalid ); - - if ( lastGlyph < gid ) - { - GXV_TRACE(( "reverse ordered segment specification:" - " lastGlyph[%d]=%d < lastGlyph[%d]=%d\n", - unit, lastGlyph, unit - 1 , gid )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - - if ( lastGlyph < firstGlyph ) - { - GXV_TRACE(( "reverse ordered range specification at unit %d:", - " lastGlyph %d < firstGlyph %d ", - unit, lastGlyph, firstGlyph )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - - if ( gxvalid->root->level == FT_VALIDATE_TIGHT ) - continue; /* ftxvalidator silently skips such an entry */ - - FT_TRACE4(( "continuing with exchanged values\n" )); - gid = firstGlyph; - firstGlyph = lastGlyph; - lastGlyph = gid; - } - - for ( gid = firstGlyph; gid <= lastGlyph; gid++ ) - gxvalid->lookupval_func( gid, &value, gxvalid ); - } - - gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, gxvalid ); - p += gxvalid->subtable_length; - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - /* ================= Segment Array Format 4 Lookup Table =============== */ - static void - gxv_LookupTable_fmt4_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort unit; - FT_UShort gid; - - FT_UShort unitSize; - FT_UShort nUnits; - FT_UShort lastGlyph; - FT_UShort firstGlyph; - GXV_LookupValueDesc base_value; - GXV_LookupValueDesc value; - - - GXV_NAME_ENTER( "LookupTable format 4" ); - - unitSize = nUnits = 0; - gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, gxvalid ); - p += gxvalid->subtable_length; - - GXV_UNITSIZE_VALIDATE( "format4", unitSize, nUnits, 6 ); - - for ( unit = 0, gid = 0; unit < nUnits; unit++ ) - { - GXV_LIMIT_CHECK( 2 + 2 ); - lastGlyph = FT_NEXT_USHORT( p ); - firstGlyph = FT_NEXT_USHORT( p ); - - gxv_glyphid_validate( firstGlyph, gxvalid ); - gxv_glyphid_validate( lastGlyph, gxvalid ); - - if ( lastGlyph < gid ) - { - GXV_TRACE(( "reverse ordered segment specification:" - " lastGlyph[%d]=%d < lastGlyph[%d]=%d\n", - unit, lastGlyph, unit - 1 , gid )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - - if ( lastGlyph < firstGlyph ) - { - GXV_TRACE(( "reverse ordered range specification at unit %d:", - " lastGlyph %d < firstGlyph %d ", - unit, lastGlyph, firstGlyph )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - - if ( gxvalid->root->level == FT_VALIDATE_TIGHT ) - continue; /* ftxvalidator silently skips such an entry */ - - FT_TRACE4(( "continuing with exchanged values\n" )); - gid = firstGlyph; - firstGlyph = lastGlyph; - lastGlyph = gid; - } - - GXV_LIMIT_CHECK( 2 ); - base_value = GXV_LOOKUP_VALUE_LOAD( p, GXV_LOOKUPVALUE_UNSIGNED ); - - for ( gid = firstGlyph; gid <= lastGlyph; gid++ ) - { - value = gxvalid->lookupfmt4_trans( (FT_UShort)( gid - firstGlyph ), - &base_value, - limit, - gxvalid ); - - gxvalid->lookupval_func( gid, &value, gxvalid ); - } - } - - gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, gxvalid ); - p += gxvalid->subtable_length; - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - /* ================= Segment Table Format 6 Lookup Table =============== */ - static void - gxv_LookupTable_fmt6_skip_endmarkers( FT_Bytes table, - FT_UShort unitSize, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - while ( p < gxvalid->root->limit ) - { - if ( p[0] != 0xFF || p[1] != 0xFF ) - break; - p += unitSize; - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - static void - gxv_LookupTable_fmt6_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort unit; - FT_UShort prev_glyph; - - FT_UShort unitSize; - FT_UShort nUnits; - FT_UShort glyph; - GXV_LookupValueDesc value; - - - GXV_NAME_ENTER( "LookupTable format 6" ); - - unitSize = nUnits = 0; - gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, gxvalid ); - p += gxvalid->subtable_length; - - GXV_UNITSIZE_VALIDATE( "format6", unitSize, nUnits, 4 ); - - for ( unit = 0, prev_glyph = 0; unit < nUnits; unit++ ) - { - GXV_LIMIT_CHECK( 2 + 2 ); - glyph = FT_NEXT_USHORT( p ); - value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign ); - - if ( gxv_glyphid_validate( glyph, gxvalid ) ) - GXV_TRACE(( " endmarker found within defined range" - " (entry %d < nUnits=%d)\n", - unit, nUnits )); - - if ( prev_glyph > glyph ) - { - GXV_TRACE(( "current gid 0x%04x < previous gid 0x%04x\n", - glyph, prev_glyph )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - prev_glyph = glyph; - - gxvalid->lookupval_func( glyph, &value, gxvalid ); - } - - gxv_LookupTable_fmt6_skip_endmarkers( p, unitSize, gxvalid ); - p += gxvalid->subtable_length; - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - /* ================= Trimmed Array Format 8 Lookup Table =============== */ - static void - gxv_LookupTable_fmt8_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort i; - - GXV_LookupValueDesc value; - FT_UShort firstGlyph; - FT_UShort glyphCount; - - - GXV_NAME_ENTER( "LookupTable format 8" ); - - /* firstGlyph + glyphCount */ - GXV_LIMIT_CHECK( 2 + 2 ); - firstGlyph = FT_NEXT_USHORT( p ); - glyphCount = FT_NEXT_USHORT( p ); - - gxv_glyphid_validate( firstGlyph, gxvalid ); - gxv_glyphid_validate( (FT_UShort)( firstGlyph + glyphCount ), gxvalid ); - - /* valueArray */ - for ( i = 0; i < glyphCount; i++ ) - { - GXV_LIMIT_CHECK( 2 ); - value = GXV_LOOKUP_VALUE_LOAD( p, gxvalid->lookupval_sign ); - gxvalid->lookupval_func( (FT_UShort)( firstGlyph + i ), &value, gxvalid ); - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_LookupTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort format; - - GXV_Validate_Func fmt_funcs_table[] = - { - gxv_LookupTable_fmt0_validate, /* 0 */ - NULL, /* 1 */ - gxv_LookupTable_fmt2_validate, /* 2 */ - NULL, /* 3 */ - gxv_LookupTable_fmt4_validate, /* 4 */ - NULL, /* 5 */ - gxv_LookupTable_fmt6_validate, /* 6 */ - NULL, /* 7 */ - gxv_LookupTable_fmt8_validate, /* 8 */ - }; - - GXV_Validate_Func func; - - - GXV_NAME_ENTER( "LookupTable" ); - - /* lookuptbl_head may be used in fmt4 transit function. */ - gxvalid->lookuptbl_head = table; - - /* format */ - GXV_LIMIT_CHECK( 2 ); - format = FT_NEXT_USHORT( p ); - GXV_TRACE(( " (format %d)\n", format )); - - if ( format > 8 ) - FT_INVALID_FORMAT; - - func = fmt_funcs_table[format]; - if ( !func ) - FT_INVALID_FORMAT; - - func( p, limit, gxvalid ); - p += gxvalid->subtable_length; - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Glyph ID *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( FT_Int ) - gxv_glyphid_validate( FT_UShort gid, - GXV_Validator gxvalid ) - { - FT_Face face; - - - if ( gid == 0xFFFFU ) - { - GXV_EXIT; - return 1; - } - - face = gxvalid->face; - if ( face->num_glyphs < gid ) - { - GXV_TRACE(( " gxv_glyphid_check() gid overflow: num_glyphs %d < %d\n", - face->num_glyphs, gid )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - - return 0; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** CONTROL POINT *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_ctlPoint_validate( FT_UShort gid, - FT_UShort ctl_point, - GXV_Validator gxvalid ) - { - FT_Face face; - FT_Error error; - - FT_GlyphSlot glyph; - FT_Outline outline; - FT_UShort n_points; - - - face = gxvalid->face; - - error = FT_Load_Glyph( face, - gid, - FT_LOAD_NO_BITMAP | FT_LOAD_IGNORE_TRANSFORM ); - if ( error ) - FT_INVALID_GLYPH_ID; - - glyph = face->glyph; - outline = glyph->outline; - n_points = (FT_UShort)outline.n_points; - - if ( !( ctl_point < n_points ) ) - FT_INVALID_DATA; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** SFNT NAME *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_sfntName_validate( FT_UShort name_index, - FT_UShort min_index, - FT_UShort max_index, - GXV_Validator gxvalid ) - { - FT_SfntName name; - FT_UInt i; - FT_UInt nnames; - - - GXV_NAME_ENTER( "sfntName" ); - - if ( name_index < min_index || max_index < name_index ) - FT_INVALID_FORMAT; - - nnames = FT_Get_Sfnt_Name_Count( gxvalid->face ); - for ( i = 0; i < nnames; i++ ) - { - if ( FT_Get_Sfnt_Name( gxvalid->face, i, &name ) != FT_Err_Ok ) - continue; - - if ( name.name_id == name_index ) - goto Out; - } - - GXV_TRACE(( " nameIndex = %d (UNTITLED)\n", name_index )); - FT_INVALID_DATA; - goto Exit; /* make compiler happy */ - - Out: - FT_TRACE1(( " nameIndex = %d (", name_index )); - GXV_TRACE_HEXDUMP_SFNTNAME( name ); - FT_TRACE1(( ")\n" )); - - Exit: - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** STATE TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* -------------------------- Class Table --------------------------- */ - - /* - * highestClass specifies how many classes are defined in this - * Class Subtable. Apple spec does not mention whether undefined - * holes in the class (e.g.: 0-3 are predefined, 4 is unused, 5 is used) - * are permitted. At present, holes in a defined class are not checked. - * -- suzuki toshiya - */ - - static void - gxv_ClassTable_validate( FT_Bytes table, - FT_UShort* length_p, - FT_UShort stateSize, - FT_Byte* maxClassID_p, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = table + *length_p; - FT_UShort firstGlyph; - FT_UShort nGlyphs; - - - GXV_NAME_ENTER( "ClassTable" ); - - *maxClassID_p = 3; /* Classes 0, 2, and 3 are predefined */ - - GXV_LIMIT_CHECK( 2 + 2 ); - firstGlyph = FT_NEXT_USHORT( p ); - nGlyphs = FT_NEXT_USHORT( p ); - - GXV_TRACE(( " (firstGlyph = %d, nGlyphs = %d)\n", firstGlyph, nGlyphs )); - - if ( !nGlyphs ) - goto Out; - - gxv_glyphid_validate( (FT_UShort)( firstGlyph + nGlyphs ), gxvalid ); - - { - FT_Byte nGlyphInClass[256]; - FT_Byte classID; - FT_UShort i; - - - FT_MEM_ZERO( nGlyphInClass, 256 ); - - - for ( i = 0; i < nGlyphs; i++ ) - { - GXV_LIMIT_CHECK( 1 ); - classID = FT_NEXT_BYTE( p ); - switch ( classID ) - { - /* following classes should not appear in class array */ - case 0: /* end of text */ - case 2: /* out of bounds */ - case 3: /* end of line */ - FT_INVALID_DATA; - break; - - case 1: /* out of bounds */ - default: /* user-defined: 4 - ( stateSize - 1 ) */ - if ( classID >= stateSize ) - FT_INVALID_DATA; /* assign glyph to undefined state */ - - nGlyphInClass[classID]++; - break; - } - } - *length_p = (FT_UShort)( p - table ); - - /* scan max ClassID in use */ - for ( i = 0; i < stateSize; i++ ) - if ( ( 3 < i ) && ( nGlyphInClass[i] > 0 ) ) - *maxClassID_p = (FT_Byte)i; /* XXX: Check Range? */ - } - - Out: - GXV_TRACE(( "Declared stateSize=0x%02x, Used maxClassID=0x%02x\n", - stateSize, *maxClassID_p )); - GXV_EXIT; - } - - - /* --------------------------- State Array ----------------------------- */ - - static void - gxv_StateArray_validate( FT_Bytes table, - FT_UShort* length_p, - FT_Byte maxClassID, - FT_UShort stateSize, - FT_Byte* maxState_p, - FT_Byte* maxEntry_p, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = table + *length_p; - FT_Byte clazz; - FT_Byte entry; - - FT_UNUSED( stateSize ); /* for the non-debugging case */ - - - GXV_NAME_ENTER( "StateArray" ); - - GXV_TRACE(( "parse %d bytes by stateSize=%d maxClassID=%d\n", - (int)(*length_p), stateSize, (int)(maxClassID) )); - - /* - * 2 states are predefined and must be described in StateArray: - * state 0 (start of text), 1 (start of line) - */ - GXV_LIMIT_CHECK( ( 1 + maxClassID ) * 2 ); - - *maxState_p = 0; - *maxEntry_p = 0; - - /* read if enough to read another state */ - while ( p + ( 1 + maxClassID ) <= limit ) - { - (*maxState_p)++; - for ( clazz = 0; clazz <= maxClassID; clazz++ ) - { - entry = FT_NEXT_BYTE( p ); - *maxEntry_p = (FT_Byte)FT_MAX( *maxEntry_p, entry ); - } - } - GXV_TRACE(( "parsed: maxState=%d, maxEntry=%d\n", - *maxState_p, *maxEntry_p )); - - *length_p = (FT_UShort)( p - table ); - - GXV_EXIT; - } - - - /* --------------------------- Entry Table ----------------------------- */ - - static void - gxv_EntryTable_validate( FT_Bytes table, - FT_UShort* length_p, - FT_Byte maxEntry, - FT_UShort stateArray, - FT_UShort stateArray_length, - FT_Byte maxClassID, - FT_Bytes statetable_table, - FT_Bytes statetable_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = table + *length_p; - FT_Byte entry; - FT_Byte state; - FT_Int entrySize = 2 + 2 + GXV_GLYPHOFFSET_SIZE( statetable ); - - GXV_XStateTable_GlyphOffsetDesc glyphOffset; - - - GXV_NAME_ENTER( "EntryTable" ); - - GXV_TRACE(( "maxEntry=%d entrySize=%d\n", maxEntry, entrySize )); - - if ( ( maxEntry + 1 ) * entrySize > *length_p ) - { - GXV_SET_ERR_IF_PARANOID( FT_INVALID_TOO_SHORT ); - - /* ftxvalidator and FontValidator both warn and continue */ - maxEntry = (FT_Byte)( *length_p / entrySize - 1 ); - GXV_TRACE(( "too large maxEntry, shrinking to %d fit EntryTable length\n", - maxEntry )); - } - - for ( entry = 0; entry <= maxEntry; entry++ ) - { - FT_UShort newState; - FT_UShort flags; - - - GXV_LIMIT_CHECK( 2 + 2 ); - newState = FT_NEXT_USHORT( p ); - flags = FT_NEXT_USHORT( p ); - - - if ( newState < stateArray || - stateArray + stateArray_length < newState ) - { - GXV_TRACE(( " newState offset 0x%04x is out of stateArray\n", - newState )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - continue; - } - - if ( 0 != ( ( newState - stateArray ) % ( 1 + maxClassID ) ) ) - { - GXV_TRACE(( " newState offset 0x%04x is not aligned to %d-classes\n", - newState, 1 + maxClassID )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - continue; - } - - state = (FT_Byte)( ( newState - stateArray ) / ( 1 + maxClassID ) ); - - switch ( GXV_GLYPHOFFSET_FMT( statetable ) ) - { - case GXV_GLYPHOFFSET_NONE: - glyphOffset.uc = 0; /* make compiler happy */ - break; - - case GXV_GLYPHOFFSET_UCHAR: - glyphOffset.uc = FT_NEXT_BYTE( p ); - break; - - case GXV_GLYPHOFFSET_CHAR: - glyphOffset.c = FT_NEXT_CHAR( p ); - break; - - case GXV_GLYPHOFFSET_USHORT: - glyphOffset.u = FT_NEXT_USHORT( p ); - break; - - case GXV_GLYPHOFFSET_SHORT: - glyphOffset.s = FT_NEXT_SHORT( p ); - break; - - case GXV_GLYPHOFFSET_ULONG: - glyphOffset.ul = FT_NEXT_ULONG( p ); - break; - - case GXV_GLYPHOFFSET_LONG: - glyphOffset.l = FT_NEXT_LONG( p ); - break; - } - - if ( gxvalid->statetable.entry_validate_func ) - gxvalid->statetable.entry_validate_func( state, - flags, - &glyphOffset, - statetable_table, - statetable_limit, - gxvalid ); - } - - *length_p = (FT_UShort)( p - table ); - - GXV_EXIT; - } - - - /* =========================== State Table ============================= */ - - FT_LOCAL_DEF( void ) - gxv_StateTable_subtable_setup( FT_UShort table_size, - FT_UShort classTable, - FT_UShort stateArray, - FT_UShort entryTable, - FT_UShort* classTable_length_p, - FT_UShort* stateArray_length_p, - FT_UShort* entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_UShort o[3]; - FT_UShort* l[3]; - FT_UShort buff[4]; - - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - - gxv_set_length_by_ushort_offset( o, l, buff, 3, table_size, gxvalid ); - } - - - FT_LOCAL_DEF( void ) - gxv_StateTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_UShort stateSize; - FT_UShort classTable; /* offset to Class(Sub)Table */ - FT_UShort stateArray; /* offset to StateArray */ - FT_UShort entryTable; /* offset to EntryTable */ - - FT_UShort classTable_length; - FT_UShort stateArray_length; - FT_UShort entryTable_length; - FT_Byte maxClassID; - FT_Byte maxState; - FT_Byte maxEntry; - - GXV_StateTable_Subtable_Setup_Func setup_func; - - FT_Bytes p = table; - - - GXV_NAME_ENTER( "StateTable" ); - - GXV_TRACE(( "StateTable header\n" )); - - GXV_LIMIT_CHECK( 2 + 2 + 2 + 2 ); - stateSize = FT_NEXT_USHORT( p ); - classTable = FT_NEXT_USHORT( p ); - stateArray = FT_NEXT_USHORT( p ); - entryTable = FT_NEXT_USHORT( p ); - - GXV_TRACE(( "stateSize=0x%04x\n", stateSize )); - GXV_TRACE(( "offset to classTable=0x%04x\n", classTable )); - GXV_TRACE(( "offset to stateArray=0x%04x\n", stateArray )); - GXV_TRACE(( "offset to entryTable=0x%04x\n", entryTable )); - - if ( stateSize > 0xFF ) - FT_INVALID_DATA; - - if ( gxvalid->statetable.optdata_load_func ) - gxvalid->statetable.optdata_load_func( p, limit, gxvalid ); - - if ( gxvalid->statetable.subtable_setup_func ) - setup_func = gxvalid->statetable.subtable_setup_func; - else - setup_func = gxv_StateTable_subtable_setup; - - setup_func( (FT_UShort)( limit - table ), - classTable, - stateArray, - entryTable, - &classTable_length, - &stateArray_length, - &entryTable_length, - gxvalid ); - - GXV_TRACE(( "StateTable Subtables\n" )); - - if ( classTable != 0 ) - gxv_ClassTable_validate( table + classTable, - &classTable_length, - stateSize, - &maxClassID, - gxvalid ); - else - maxClassID = (FT_Byte)( stateSize - 1 ); - - if ( stateArray != 0 ) - gxv_StateArray_validate( table + stateArray, - &stateArray_length, - maxClassID, - stateSize, - &maxState, - &maxEntry, - gxvalid ); - else - { -#if 0 - maxState = 1; /* 0:start of text, 1:start of line are predefined */ -#endif - maxEntry = 0; - } - - if ( maxEntry > 0 && entryTable == 0 ) - FT_INVALID_OFFSET; - - if ( entryTable != 0 ) - gxv_EntryTable_validate( table + entryTable, - &entryTable_length, - maxEntry, - stateArray, - stateArray_length, - maxClassID, - table, - limit, - gxvalid ); - - GXV_EXIT; - } - - - /* ================= eXtended State Table (for morx) =================== */ - - FT_LOCAL_DEF( void ) - gxv_XStateTable_subtable_setup( FT_ULong table_size, - FT_ULong classTable, - FT_ULong stateArray, - FT_ULong entryTable, - FT_ULong* classTable_length_p, - FT_ULong* stateArray_length_p, - FT_ULong* entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_ULong o[3]; - FT_ULong* l[3]; - FT_ULong buff[4]; - - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - - gxv_set_length_by_ulong_offset( o, l, buff, 3, table_size, gxvalid ); - } - - - static void - gxv_XClassTable_lookupval_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - FT_UNUSED( glyph ); - - if ( value_p->u >= gxvalid->xstatetable.nClasses ) - FT_INVALID_DATA; - if ( value_p->u > gxvalid->xstatetable.maxClassID ) - gxvalid->xstatetable.maxClassID = value_p->u; - } - - - /* - +===============+ --------+ - | lookup header | | - +===============+ | - | BinSrchHeader | | - +===============+ | - | lastGlyph[0] | | - +---------------+ | - | firstGlyph[0] | | head of lookup table - +---------------+ | + - | offset[0] | -> | offset [byte] - +===============+ | + - | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte] - +---------------+ | - | firstGlyph[1] | | - +---------------+ | - | offset[1] | | - +===============+ | - | - .... | - | - 16bit value array | - +===============+ | - | value | <-------+ - .... - */ - static GXV_LookupValueDesc - gxv_XClassTable_lookupfmt4_transit( FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p; - FT_Bytes limit; - FT_UShort offset; - GXV_LookupValueDesc value; - - /* XXX: check range? */ - offset = (FT_UShort)( base_value_p->u + - relative_gindex * sizeof ( FT_UShort ) ); - - p = gxvalid->lookuptbl_head + offset; - limit = lookuptbl_limit; - - GXV_LIMIT_CHECK ( 2 ); - value.u = FT_NEXT_USHORT( p ); - - return value; - } - - - static void - gxv_XStateArray_validate( FT_Bytes table, - FT_ULong* length_p, - FT_UShort maxClassID, - FT_ULong stateSize, - FT_UShort* maxState_p, - FT_UShort* maxEntry_p, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = table + *length_p; - FT_UShort clazz; - FT_UShort entry; - - FT_UNUSED( stateSize ); /* for the non-debugging case */ - - - GXV_NAME_ENTER( "XStateArray" ); - - GXV_TRACE(( "parse % 3d bytes by stateSize=% 3d maxClassID=% 3d\n", - (int)(*length_p), stateSize, (int)(maxClassID) )); - - /* - * 2 states are predefined and must be described: - * state 0 (start of text), 1 (start of line) - */ - GXV_LIMIT_CHECK( ( 1 + maxClassID ) * 2 * 2 ); - - *maxState_p = 0; - *maxEntry_p = 0; - - /* read if enough to read another state */ - while ( p + ( ( 1 + maxClassID ) * 2 ) <= limit ) - { - (*maxState_p)++; - for ( clazz = 0; clazz <= maxClassID; clazz++ ) - { - entry = FT_NEXT_USHORT( p ); - *maxEntry_p = (FT_UShort)FT_MAX( *maxEntry_p, entry ); - } - } - GXV_TRACE(( "parsed: maxState=%d, maxEntry=%d\n", - *maxState_p, *maxEntry_p )); - - *length_p = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - static void - gxv_XEntryTable_validate( FT_Bytes table, - FT_ULong* length_p, - FT_UShort maxEntry, - FT_ULong stateArray_length, - FT_UShort maxClassID, - FT_Bytes xstatetable_table, - FT_Bytes xstatetable_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = table + *length_p; - FT_UShort entry; - FT_UShort state; - FT_Int entrySize = 2 + 2 + GXV_GLYPHOFFSET_SIZE( xstatetable ); - - - GXV_NAME_ENTER( "XEntryTable" ); - GXV_TRACE(( "maxEntry=%d entrySize=%d\n", maxEntry, entrySize )); - - if ( ( p + ( maxEntry + 1 ) * entrySize ) > limit ) - FT_INVALID_TOO_SHORT; - - for (entry = 0; entry <= maxEntry; entry++ ) - { - FT_UShort newState_idx; - FT_UShort flags; - GXV_XStateTable_GlyphOffsetDesc glyphOffset; - - - GXV_LIMIT_CHECK( 2 + 2 ); - newState_idx = FT_NEXT_USHORT( p ); - flags = FT_NEXT_USHORT( p ); - - if ( stateArray_length < (FT_ULong)( newState_idx * 2 ) ) - { - GXV_TRACE(( " newState index 0x%04x points out of stateArray\n", - newState_idx )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - - state = (FT_UShort)( newState_idx / ( 1 + maxClassID ) ); - if ( 0 != ( newState_idx % ( 1 + maxClassID ) ) ) - { - FT_TRACE4(( "-> new state = %d (supposed)\n" - "but newState index 0x%04x is not aligned to %d-classes\n", - state, newState_idx, 1 + maxClassID )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - - switch ( GXV_GLYPHOFFSET_FMT( xstatetable ) ) - { - case GXV_GLYPHOFFSET_NONE: - glyphOffset.uc = 0; /* make compiler happy */ - break; - - case GXV_GLYPHOFFSET_UCHAR: - glyphOffset.uc = FT_NEXT_BYTE( p ); - break; - - case GXV_GLYPHOFFSET_CHAR: - glyphOffset.c = FT_NEXT_CHAR( p ); - break; - - case GXV_GLYPHOFFSET_USHORT: - glyphOffset.u = FT_NEXT_USHORT( p ); - break; - - case GXV_GLYPHOFFSET_SHORT: - glyphOffset.s = FT_NEXT_SHORT( p ); - break; - - case GXV_GLYPHOFFSET_ULONG: - glyphOffset.ul = FT_NEXT_ULONG( p ); - break; - - case GXV_GLYPHOFFSET_LONG: - glyphOffset.l = FT_NEXT_LONG( p ); - break; - - default: - GXV_SET_ERR_IF_PARANOID( FT_INVALID_FORMAT ); - goto Exit; - } - - if ( gxvalid->xstatetable.entry_validate_func ) - gxvalid->xstatetable.entry_validate_func( state, - flags, - &glyphOffset, - xstatetable_table, - xstatetable_limit, - gxvalid ); - } - - Exit: - *length_p = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_XStateTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - /* StateHeader members */ - FT_ULong classTable; /* offset to Class(Sub)Table */ - FT_ULong stateArray; /* offset to StateArray */ - FT_ULong entryTable; /* offset to EntryTable */ - - FT_ULong classTable_length; - FT_ULong stateArray_length; - FT_ULong entryTable_length; - FT_UShort maxState; - FT_UShort maxEntry; - - GXV_XStateTable_Subtable_Setup_Func setup_func; - - FT_Bytes p = table; - - - GXV_NAME_ENTER( "XStateTable" ); - - GXV_TRACE(( "XStateTable header\n" )); - - GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 ); - gxvalid->xstatetable.nClasses = FT_NEXT_ULONG( p ); - classTable = FT_NEXT_ULONG( p ); - stateArray = FT_NEXT_ULONG( p ); - entryTable = FT_NEXT_ULONG( p ); - - GXV_TRACE(( "nClasses =0x%08x\n", gxvalid->xstatetable.nClasses )); - GXV_TRACE(( "offset to classTable=0x%08x\n", classTable )); - GXV_TRACE(( "offset to stateArray=0x%08x\n", stateArray )); - GXV_TRACE(( "offset to entryTable=0x%08x\n", entryTable )); - - if ( gxvalid->xstatetable.nClasses > 0xFFFFU ) - FT_INVALID_DATA; - - GXV_TRACE(( "StateTable Subtables\n" )); - - if ( gxvalid->xstatetable.optdata_load_func ) - gxvalid->xstatetable.optdata_load_func( p, limit, gxvalid ); - - if ( gxvalid->xstatetable.subtable_setup_func ) - setup_func = gxvalid->xstatetable.subtable_setup_func; - else - setup_func = gxv_XStateTable_subtable_setup; - - setup_func( (FT_ULong)( limit - table ), - classTable, - stateArray, - entryTable, - &classTable_length, - &stateArray_length, - &entryTable_length, - gxvalid ); - - if ( classTable != 0 ) - { - gxvalid->xstatetable.maxClassID = 0; - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_XClassTable_lookupval_validate; - gxvalid->lookupfmt4_trans = gxv_XClassTable_lookupfmt4_transit; - gxv_LookupTable_validate( table + classTable, - table + classTable + classTable_length, - gxvalid ); -#if 0 - if ( gxvalid->subtable_length < classTable_length ) - classTable_length = gxvalid->subtable_length; -#endif - } - else - { - /* XXX: check range? */ - gxvalid->xstatetable.maxClassID = - (FT_UShort)( gxvalid->xstatetable.nClasses - 1 ); - } - - if ( stateArray != 0 ) - gxv_XStateArray_validate( table + stateArray, - &stateArray_length, - gxvalid->xstatetable.maxClassID, - gxvalid->xstatetable.nClasses, - &maxState, - &maxEntry, - gxvalid ); - else - { -#if 0 - maxState = 1; /* 0:start of text, 1:start of line are predefined */ -#endif - maxEntry = 0; - } - - if ( maxEntry > 0 && entryTable == 0 ) - FT_INVALID_OFFSET; - - if ( entryTable != 0 ) - gxv_XEntryTable_validate( table + entryTable, - &entryTable_length, - maxEntry, - stateArray_length, - gxvalid->xstatetable.maxClassID, - table, - limit, - gxvalid ); - - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Table overlapping *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static int - gxv_compare_ranges( FT_Bytes table1_start, - FT_ULong table1_length, - FT_Bytes table2_start, - FT_ULong table2_length ) - { - if ( table1_start == table2_start ) - { - if ( ( table1_length == 0 || table2_length == 0 ) ) - goto Out; - } - else if ( table1_start < table2_start ) - { - if ( ( table1_start + table1_length ) <= table2_start ) - goto Out; - } - else if ( table1_start > table2_start ) - { - if ( ( table1_start >= table2_start + table2_length ) ) - goto Out; - } - return 1; - - Out: - return 0; - } - - - FT_LOCAL_DEF( void ) - gxv_odtect_add_range( FT_Bytes start, - FT_ULong length, - const FT_String* name, - GXV_odtect_Range odtect ) - { - odtect->range[odtect->nRanges].start = start; - odtect->range[odtect->nRanges].length = length; - odtect->range[odtect->nRanges].name = (FT_String*)name; - odtect->nRanges++; - } - - - FT_LOCAL_DEF( void ) - gxv_odtect_validate( GXV_odtect_Range odtect, - GXV_Validator gxvalid ) - { - FT_UInt i, j; - - - GXV_NAME_ENTER( "check overlap among multi ranges" ); - - for ( i = 0; i < odtect->nRanges; i++ ) - for ( j = 0; j < i; j++ ) - if ( 0 != gxv_compare_ranges( odtect->range[i].start, - odtect->range[i].length, - odtect->range[j].start, - odtect->range[j].length ) ) - { -#ifdef FT_DEBUG_LEVEL_TRACE - if ( odtect->range[i].name || odtect->range[j].name ) - GXV_TRACE(( "found overlap between range %d and range %d\n", - i, j )); - else - GXV_TRACE(( "found overlap between `%s' and `%s\'\n", - odtect->range[i].name, - odtect->range[j].name )); -#endif - FT_INVALID_OFFSET; - } - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.h b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.h deleted file mode 100644 index 334dc9dfb35..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvcommn.h +++ /dev/null @@ -1,582 +0,0 @@ -/**************************************************************************** - * - * 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, - * including padding for alignment. - * offset: Of type FT_UInt, the number of octets from the start to target. - * length: Of type FT_UInt, the number of octets from the start to the - * end in this table/subtable, including padding for alignment. - * - * _MIN, _MAX: Should be added to the tail of macros, as INT_MIN, etc. - */ - - -#ifndef GXVCOMMN_H_ -#define GXVCOMMN_H_ - - -#include -#include "gxvalid.h" -#include FT_INTERNAL_DEBUG_H -#include FT_SFNT_NAMES_H - - -FT_BEGIN_HEADER - - - /* some variables are not evaluated or only used in trace */ - -#ifdef FT_DEBUG_LEVEL_TRACE -#define GXV_LOAD_TRACE_VARS -#else -#undef GXV_LOAD_TRACE_VARS -#endif - -#undef GXV_LOAD_UNUSED_VARS /* debug purpose */ - -#define IS_PARANOID_VALIDATION ( gxvalid->root->level >= FT_VALIDATE_PARANOID ) -#define GXV_SET_ERR_IF_PARANOID( err ) { if ( IS_PARANOID_VALIDATION ) ( err ); } - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** VALIDATION *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef struct GXV_ValidatorRec_* GXV_Validator; - - -#define DUMMY_LIMIT 0 - - typedef void - (*GXV_Validate_Func)( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - - /* ====================== LookupTable Validator ======================== */ - - typedef union GXV_LookupValueDesc_ - { - FT_UShort u; - FT_Short s; - - } GXV_LookupValueDesc; - - typedef const GXV_LookupValueDesc* GXV_LookupValueCPtr; - - typedef enum GXV_LookupValue_SignSpec_ - { - GXV_LOOKUPVALUE_UNSIGNED = 0, - GXV_LOOKUPVALUE_SIGNED - - } GXV_LookupValue_SignSpec; - - - typedef void - (*GXV_Lookup_Value_Validate_Func)( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ); - - typedef GXV_LookupValueDesc - (*GXV_Lookup_Fmt4_Transit_Func)( FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ); - - - /* ====================== StateTable Validator ========================= */ - - typedef enum GXV_GlyphOffset_Format_ - { - GXV_GLYPHOFFSET_NONE = -1, - GXV_GLYPHOFFSET_UCHAR = 2, - GXV_GLYPHOFFSET_CHAR, - GXV_GLYPHOFFSET_USHORT = 4, - GXV_GLYPHOFFSET_SHORT, - GXV_GLYPHOFFSET_ULONG = 8, - GXV_GLYPHOFFSET_LONG - - } GXV_GlyphOffset_Format; - - -#define GXV_GLYPHOFFSET_FMT( table ) \ - ( gxvalid->table.entry_glyphoffset_fmt ) - -#define GXV_GLYPHOFFSET_SIZE( table ) \ - ( gxvalid->table.entry_glyphoffset_fmt / 2 ) - - - /* ----------------------- 16bit StateTable ---------------------------- */ - - typedef union GXV_StateTable_GlyphOffsetDesc_ - { - FT_Byte uc; - FT_UShort u; /* same as GXV_LookupValueDesc */ - FT_ULong ul; - FT_Char c; - FT_Short s; /* same as GXV_LookupValueDesc */ - FT_Long l; - - } GXV_StateTable_GlyphOffsetDesc; - - typedef const GXV_StateTable_GlyphOffsetDesc* GXV_StateTable_GlyphOffsetCPtr; - - typedef void - (*GXV_StateTable_Subtable_Setup_Func)( FT_UShort table_size, - FT_UShort classTable, - FT_UShort stateArray, - FT_UShort entryTable, - FT_UShort* classTable_length_p, - FT_UShort* stateArray_length_p, - FT_UShort* entryTable_length_p, - GXV_Validator gxvalid ); - - typedef void - (*GXV_StateTable_Entry_Validate_Func)( - FT_Byte state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes statetable_table, - FT_Bytes statetable_limit, - GXV_Validator gxvalid ); - - typedef void - (*GXV_StateTable_OptData_Load_Func)( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - typedef struct GXV_StateTable_ValidatorRec_ - { - GXV_GlyphOffset_Format entry_glyphoffset_fmt; - void* optdata; - - GXV_StateTable_Subtable_Setup_Func subtable_setup_func; - GXV_StateTable_Entry_Validate_Func entry_validate_func; - GXV_StateTable_OptData_Load_Func optdata_load_func; - - } GXV_StateTable_ValidatorRec, *GXV_StateTable_ValidatorRecData; - - - /* ---------------------- 32bit XStateTable ---------------------------- */ - - typedef GXV_StateTable_GlyphOffsetDesc GXV_XStateTable_GlyphOffsetDesc; - - typedef const GXV_XStateTable_GlyphOffsetDesc* GXV_XStateTable_GlyphOffsetCPtr; - - typedef void - (*GXV_XStateTable_Subtable_Setup_Func)( FT_ULong table_size, - FT_ULong classTable, - FT_ULong stateArray, - FT_ULong entryTable, - FT_ULong* classTable_length_p, - FT_ULong* stateArray_length_p, - FT_ULong* entryTable_length_p, - GXV_Validator gxvalid ); - - typedef void - (*GXV_XStateTable_Entry_Validate_Func)( - FT_UShort state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes xstatetable_table, - FT_Bytes xstatetable_limit, - GXV_Validator gxvalid ); - - - typedef GXV_StateTable_OptData_Load_Func GXV_XStateTable_OptData_Load_Func; - - - typedef struct GXV_XStateTable_ValidatorRec_ - { - int entry_glyphoffset_fmt; - void* optdata; - - GXV_XStateTable_Subtable_Setup_Func subtable_setup_func; - GXV_XStateTable_Entry_Validate_Func entry_validate_func; - GXV_XStateTable_OptData_Load_Func optdata_load_func; - - FT_ULong nClasses; - FT_UShort maxClassID; - - } GXV_XStateTable_ValidatorRec, *GXV_XStateTable_ValidatorRecData; - - - /* ===================================================================== */ - - typedef struct GXV_ValidatorRec_ - { - FT_Validator root; - - FT_Face face; - void* table_data; - - FT_ULong subtable_length; - - GXV_LookupValue_SignSpec lookupval_sign; - GXV_Lookup_Value_Validate_Func lookupval_func; - GXV_Lookup_Fmt4_Transit_Func lookupfmt4_trans; - FT_Bytes lookuptbl_head; - - FT_UShort min_gid; - FT_UShort max_gid; - - GXV_StateTable_ValidatorRec statetable; - GXV_XStateTable_ValidatorRec xstatetable; - -#ifdef FT_DEBUG_LEVEL_TRACE - FT_UInt debug_indent; - const FT_String* debug_function_name[3]; -#endif - - } GXV_ValidatorRec; - - -#define GXV_TABLE_DATA( tag, field ) \ - ( ( (GXV_ ## tag ## _Data)gxvalid->table_data )->field ) - -#undef FT_INVALID_ -#define FT_INVALID_( _error ) \ - ft_validator_error( gxvalid->root, FT_THROW( _error ) ) - -#define GXV_LIMIT_CHECK( _count ) \ - FT_BEGIN_STMNT \ - if ( p + _count > ( limit? limit : gxvalid->root->limit ) ) \ - FT_INVALID_TOO_SHORT; \ - FT_END_STMNT - - -#ifdef FT_DEBUG_LEVEL_TRACE - -#define GXV_INIT gxvalid->debug_indent = 0 - -#define GXV_NAME_ENTER( name ) \ - FT_BEGIN_STMNT \ - gxvalid->debug_indent += 2; \ - FT_TRACE4(( "%*.s", gxvalid->debug_indent, 0 )); \ - FT_TRACE4(( "%s table\n", name )); \ - FT_END_STMNT - -#define GXV_EXIT gxvalid->debug_indent -= 2 - -#define GXV_TRACE( s ) \ - FT_BEGIN_STMNT \ - FT_TRACE4(( "%*.s", gxvalid->debug_indent, 0 )); \ - FT_TRACE4( s ); \ - FT_END_STMNT - -#else /* !FT_DEBUG_LEVEL_TRACE */ - -#define GXV_INIT do { } while ( 0 ) -#define GXV_NAME_ENTER( name ) do { } while ( 0 ) -#define GXV_EXIT do { } while ( 0 ) - -#define GXV_TRACE( s ) do { } while ( 0 ) - -#endif /* !FT_DEBUG_LEVEL_TRACE */ - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** 32bit alignment checking *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define GXV_32BIT_ALIGNMENT_VALIDATE( a ) \ - FT_BEGIN_STMNT \ - { \ - if ( (a) & 3 ) \ - FT_INVALID_OFFSET; \ - } \ - FT_END_STMNT - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Dumping Binary Data *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define GXV_TRACE_HEXDUMP( p, len ) \ - FT_BEGIN_STMNT \ - { \ - FT_Bytes b; \ - \ - \ - for ( b = p; b < (FT_Bytes)p + len; b++ ) \ - FT_TRACE1(("\\x%02x", *b)); \ - } \ - FT_END_STMNT - -#define GXV_TRACE_HEXDUMP_C( p, len ) \ - FT_BEGIN_STMNT \ - { \ - FT_Bytes b; \ - \ - \ - for ( b = p; b < (FT_Bytes)p + len; b++ ) \ - if ( 0x40 < *b && *b < 0x7E ) \ - FT_TRACE1(("%c", *b)); \ - else \ - FT_TRACE1(("\\x%02x", *b)); \ - } \ - FT_END_STMNT - -#define GXV_TRACE_HEXDUMP_SFNTNAME( n ) \ - GXV_TRACE_HEXDUMP( n.string, n.string_len ) - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** LOOKUP TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - gxv_BinSrchHeader_validate( FT_Bytes p, - FT_Bytes limit, - FT_UShort* unitSize_p, - FT_UShort* nUnits_p, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_LookupTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Glyph ID *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( FT_Int ) - gxv_glyphid_validate( FT_UShort gid, - GXV_Validator gxvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** CONTROL POINT *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - gxv_ctlPoint_validate( FT_UShort gid, - FT_UShort ctl_point, - GXV_Validator gxvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** SFNT NAME *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - gxv_sfntName_validate( FT_UShort name_index, - FT_UShort min_index, - FT_UShort max_index, - GXV_Validator gxvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** STATE TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - gxv_StateTable_subtable_setup( FT_UShort table_size, - FT_UShort classTable, - FT_UShort stateArray, - FT_UShort entryTable, - FT_UShort* classTable_length_p, - FT_UShort* stateArray_length_p, - FT_UShort* entryTable_length_p, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_XStateTable_subtable_setup( FT_ULong table_size, - FT_ULong classTable, - FT_ULong stateArray, - FT_ULong entryTable, - FT_ULong* classTable_length_p, - FT_ULong* stateArray_length_p, - FT_ULong* entryTable_length_p, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_StateTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_XStateTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY MACROS AND FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - gxv_array_getlimits_byte( FT_Bytes table, - FT_Bytes limit, - FT_Byte* min, - FT_Byte* max, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_array_getlimits_ushort( FT_Bytes table, - FT_Bytes limit, - FT_UShort* min, - FT_UShort* max, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_set_length_by_ushort_offset( FT_UShort* offset, - FT_UShort** length, - FT_UShort* buff, - FT_UInt nmemb, - FT_UShort limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_set_length_by_ulong_offset( FT_ULong* offset, - FT_ULong** length, - FT_ULong* buff, - FT_UInt nmemb, - FT_ULong limit, - GXV_Validator gxvalid); - - -#define GXV_SUBTABLE_OFFSET_CHECK( _offset ) \ - FT_BEGIN_STMNT \ - if ( (_offset) > gxvalid->subtable_length ) \ - FT_INVALID_OFFSET; \ - FT_END_STMNT - -#define GXV_SUBTABLE_LIMIT_CHECK( _count ) \ - FT_BEGIN_STMNT \ - if ( ( p + (_count) - gxvalid->subtable_start ) > \ - gxvalid->subtable_length ) \ - FT_INVALID_TOO_SHORT; \ - FT_END_STMNT - -#define GXV_USHORT_TO_SHORT( _us ) \ - ( ( 0x8000U < ( _us ) ) ? ( ( _us ) - 0x8000U ) : ( _us ) ) - -#define GXV_STATETABLE_HEADER_SIZE ( 2 + 2 + 2 + 2 ) -#define GXV_STATEHEADER_SIZE GXV_STATETABLE_HEADER_SIZE - -#define GXV_XSTATETABLE_HEADER_SIZE ( 4 + 4 + 4 + 4 ) -#define GXV_XSTATEHEADER_SIZE GXV_XSTATETABLE_HEADER_SIZE - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Table overlapping *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef struct GXV_odtect_DataRec_ - { - FT_Bytes start; - FT_ULong length; - FT_String* name; - - } GXV_odtect_DataRec, *GXV_odtect_Data; - - typedef struct GXV_odtect_RangeRec_ - { - FT_UInt nRanges; - GXV_odtect_Data range; - - } GXV_odtect_RangeRec, *GXV_odtect_Range; - - - FT_LOCAL( void ) - gxv_odtect_add_range( FT_Bytes start, - FT_ULong length, - const FT_String* name, - GXV_odtect_Range odtect ); - - FT_LOCAL( void ) - gxv_odtect_validate( GXV_odtect_Range odtect, - GXV_Validator gxvalid ); - - -#define GXV_ODTECT( n, odtect ) \ - GXV_odtect_DataRec odtect ## _range[n]; \ - GXV_odtect_RangeRec odtect ## _rec = { 0, NULL }; \ - GXV_odtect_Range odtect = NULL - -#define GXV_ODTECT_INIT( odtect ) \ - FT_BEGIN_STMNT \ - odtect ## _rec.nRanges = 0; \ - odtect ## _rec.range = odtect ## _range; \ - odtect = & odtect ## _rec; \ - FT_END_STMNT - - - /* */ - -FT_END_HEADER - -#endif /* GXVCOMMN_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxverror.h b/sdk/lib/3rdparty/freetype/src/gxvalid/gxverror.h deleted file mode 100644 index da0edb35f94..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxverror.h +++ /dev/null @@ -1,51 +0,0 @@ -/**************************************************************************** - * - * 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_ - -#include FT_MODULE_ERRORS_H - -#undef FTERRORS_H_ - -#undef FT_ERR_PREFIX -#define FT_ERR_PREFIX GXV_Err_ -#define FT_ERR_BASE FT_Mod_Err_GXvalid - -#include FT_ERRORS_H - -#endif /* GXVERROR_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.c deleted file mode 100644 index e1a12a18edd..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.c +++ /dev/null @@ -1,339 +0,0 @@ -/**************************************************************************** - * - * 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" -#include "gxvcommn.h" -#include "gxvfeat.h" - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvfeat - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef struct GXV_feat_DataRec_ - { - FT_UInt reserved_size; - FT_UShort feature; - FT_UShort setting; - - } GXV_feat_DataRec, *GXV_feat_Data; - - -#define GXV_FEAT_DATA( field ) GXV_TABLE_DATA( feat, field ) - - - typedef enum GXV_FeatureFlagsMask_ - { - GXV_FEAT_MASK_EXCLUSIVE_SETTINGS = 0x8000U, - GXV_FEAT_MASK_DYNAMIC_DEFAULT = 0x4000, - GXV_FEAT_MASK_UNUSED = 0x3F00, - GXV_FEAT_MASK_DEFAULT_SETTING = 0x00FF - - } GXV_FeatureFlagsMask; - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - gxv_feat_registry_validate( FT_UShort feature, - FT_UShort nSettings, - FT_Bool exclusive, - GXV_Validator gxvalid ) - { - GXV_NAME_ENTER( "feature in registry" ); - - GXV_TRACE(( " (feature = %u)\n", feature )); - - if ( feature >= gxv_feat_registry_length ) - { - GXV_TRACE(( "feature number %d is out of range %d\n", - feature, gxv_feat_registry_length )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - goto Exit; - } - - if ( gxv_feat_registry[feature].existence == 0 ) - { - GXV_TRACE(( "feature number %d is in defined range but doesn't exist\n", - feature )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - goto Exit; - } - - if ( gxv_feat_registry[feature].apple_reserved ) - { - /* Don't use here. Apple is reserved. */ - GXV_TRACE(( "feature number %d is reserved by Apple\n", feature )); - if ( gxvalid->root->level >= FT_VALIDATE_TIGHT ) - FT_INVALID_DATA; - } - - if ( nSettings != gxv_feat_registry[feature].nSettings ) - { - GXV_TRACE(( "feature %d: nSettings %d != defined nSettings %d\n", - feature, nSettings, - gxv_feat_registry[feature].nSettings )); - if ( gxvalid->root->level >= FT_VALIDATE_TIGHT ) - FT_INVALID_DATA; - } - - if ( exclusive != gxv_feat_registry[feature].exclusive ) - { - GXV_TRACE(( "exclusive flag %d differs from predefined value\n", - exclusive )); - if ( gxvalid->root->level >= FT_VALIDATE_TIGHT ) - FT_INVALID_DATA; - } - - Exit: - GXV_EXIT; - } - - - static void - gxv_feat_name_index_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - FT_Short nameIndex; - - - GXV_NAME_ENTER( "nameIndex" ); - - GXV_LIMIT_CHECK( 2 ); - nameIndex = FT_NEXT_SHORT ( p ); - GXV_TRACE(( " (nameIndex = %d)\n", nameIndex )); - - gxv_sfntName_validate( (FT_UShort)nameIndex, - 255, - 32768U, - gxvalid ); - - GXV_EXIT; - } - - - static void - gxv_feat_setting_validate( FT_Bytes table, - FT_Bytes limit, - FT_Bool exclusive, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort setting; - - - GXV_NAME_ENTER( "setting" ); - - GXV_LIMIT_CHECK( 2 ); - - setting = FT_NEXT_USHORT( p ); - - /* If we have exclusive setting, the setting should be odd. */ - if ( exclusive && ( setting & 1 ) == 0 ) - FT_INVALID_DATA; - - gxv_feat_name_index_validate( p, limit, gxvalid ); - - GXV_FEAT_DATA( setting ) = setting; - - GXV_EXIT; - } - - - static void - gxv_feat_name_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UInt reserved_size = GXV_FEAT_DATA( reserved_size ); - - FT_UShort feature; - FT_UShort nSettings; - FT_ULong settingTable; - FT_UShort featureFlags; - - FT_Bool exclusive; - FT_Int last_setting; - FT_UInt i; - - - GXV_NAME_ENTER( "name" ); - - /* feature + nSettings + settingTable + featureFlags */ - GXV_LIMIT_CHECK( 2 + 2 + 4 + 2 ); - - feature = FT_NEXT_USHORT( p ); - GXV_FEAT_DATA( feature ) = feature; - - nSettings = FT_NEXT_USHORT( p ); - settingTable = FT_NEXT_ULONG ( p ); - featureFlags = FT_NEXT_USHORT( p ); - - if ( settingTable < reserved_size ) - FT_INVALID_OFFSET; - - if ( ( featureFlags & GXV_FEAT_MASK_UNUSED ) == 0 ) - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - - exclusive = FT_BOOL( featureFlags & GXV_FEAT_MASK_EXCLUSIVE_SETTINGS ); - if ( exclusive ) - { - FT_Byte dynamic_default; - - - if ( featureFlags & GXV_FEAT_MASK_DYNAMIC_DEFAULT ) - dynamic_default = (FT_Byte)( featureFlags & - GXV_FEAT_MASK_DEFAULT_SETTING ); - else - dynamic_default = 0; - - /* If exclusive, check whether default setting is in the range. */ - if ( !( dynamic_default < nSettings ) ) - FT_INVALID_FORMAT; - } - - gxv_feat_registry_validate( feature, nSettings, exclusive, gxvalid ); - - gxv_feat_name_index_validate( p, limit, gxvalid ); - - p = gxvalid->root->base + settingTable; - for ( last_setting = -1, i = 0; i < nSettings; i++ ) - { - gxv_feat_setting_validate( p, limit, exclusive, gxvalid ); - - if ( (FT_Int)GXV_FEAT_DATA( setting ) <= last_setting ) - GXV_SET_ERR_IF_PARANOID( FT_INVALID_FORMAT ); - - last_setting = (FT_Int)GXV_FEAT_DATA( setting ); - /* setting + nameIndex */ - p += ( 2 + 2 ); - } - - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** feat TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_feat_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - - GXV_feat_DataRec featrec; - GXV_feat_Data feat = &featrec; - - FT_Bytes p = table; - FT_Bytes limit = 0; - - FT_UInt featureNameCount; - - FT_UInt i; - FT_Int last_feature; - - - gxvalid->root = ftvalid; - gxvalid->table_data = feat; - gxvalid->face = face; - - FT_TRACE3(( "validating `feat' table\n" )); - GXV_INIT; - - feat->reserved_size = 0; - - /* version + featureNameCount + none_0 + none_1 */ - GXV_LIMIT_CHECK( 4 + 2 + 2 + 4 ); - feat->reserved_size += 4 + 2 + 2 + 4; - - if ( FT_NEXT_ULONG( p ) != 0x00010000UL ) /* Version */ - FT_INVALID_FORMAT; - - featureNameCount = FT_NEXT_USHORT( p ); - GXV_TRACE(( " (featureNameCount = %d)\n", featureNameCount )); - - if ( !( IS_PARANOID_VALIDATION ) ) - p += 6; /* skip (none) and (none) */ - else - { - if ( FT_NEXT_USHORT( p ) != 0 ) - FT_INVALID_DATA; - - if ( FT_NEXT_ULONG( p ) != 0 ) - FT_INVALID_DATA; - } - - feat->reserved_size += featureNameCount * ( 2 + 2 + 4 + 2 + 2 ); - - for ( last_feature = -1, i = 0; i < featureNameCount; i++ ) - { - gxv_feat_name_validate( p, limit, gxvalid ); - - if ( (FT_Int)GXV_FEAT_DATA( feature ) <= last_feature ) - GXV_SET_ERR_IF_PARANOID( FT_INVALID_FORMAT ); - - last_feature = GXV_FEAT_DATA( feature ); - p += 2 + 2 + 4 + 2 + 2; - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.h b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.h deleted file mode 100644 index 6c9892910ce..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfeat.h +++ /dev/null @@ -1,173 +0,0 @@ -/**************************************************************************** - * - * 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_ -#define GXVFEAT_H_ - - -#include "gxvalid.h" -#include "gxvcommn.h" - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Registry predefined by Apple *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* TODO: More compact format */ - typedef struct GXV_Feature_RegistryRec_ - { - FT_Bool existence; - FT_Bool apple_reserved; - FT_Bool exclusive; - FT_Byte nSettings; - - } GX_Feature_RegistryRec; - - -#define gxv_feat_registry_length \ - ( sizeof ( gxv_feat_registry ) / \ - sizeof ( GX_Feature_RegistryRec ) ) - - - static GX_Feature_RegistryRec gxv_feat_registry[] = - { - /* Generated from gxvfgen.c */ - {1, 0, 0, 1}, /* All Typographic Features */ - {1, 0, 0, 8}, /* Ligatures */ - {1, 0, 1, 3}, /* Cursive Connection */ - {1, 0, 1, 6}, /* Letter Case */ - {1, 0, 0, 1}, /* Vertical Substitution */ - {1, 0, 0, 1}, /* Linguistic Rearrangement */ - {1, 0, 1, 2}, /* Number Spacing */ - {1, 1, 0, 0}, /* Apple Reserved 1 */ - {1, 0, 0, 5}, /* Smart Swashes */ - {1, 0, 1, 3}, /* Diacritics */ - {1, 0, 1, 4}, /* Vertical Position */ - {1, 0, 1, 3}, /* Fractions */ - {1, 1, 0, 0}, /* Apple Reserved 2 */ - {1, 0, 0, 1}, /* Overlapping Characters */ - {1, 0, 0, 6}, /* Typographic Extras */ - {1, 0, 0, 5}, /* Mathematical Extras */ - {1, 0, 1, 7}, /* Ornament Sets */ - {1, 0, 1, 1}, /* Character Alternatives */ - {1, 0, 1, 5}, /* Design Complexity */ - {1, 0, 1, 6}, /* Style Options */ - {1, 0, 1, 11}, /* Character Shape */ - {1, 0, 1, 2}, /* Number Case */ - {1, 0, 1, 4}, /* Text Spacing */ - {1, 0, 1, 10}, /* Transliteration */ - {1, 0, 1, 9}, /* Annotation */ - {1, 0, 1, 2}, /* Kana Spacing */ - {1, 0, 1, 2}, /* Ideographic Spacing */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {0, 0, 0, 0}, /* __EMPTY__ */ - {1, 0, 1, 4}, /* Text Spacing */ - {1, 0, 1, 2}, /* Kana Spacing */ - {1, 0, 1, 2}, /* Ideographic Spacing */ - {1, 0, 1, 4}, /* CJK Roman Spacing */ - }; - - -#endif /* GXVFEAT_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfgen.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfgen.c deleted file mode 100644 index 5ecb9443c3b..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvfgen.c +++ /dev/null @@ -1,483 +0,0 @@ -/**************************************************************************** - * - * gxfgen.c - * - * Generate feature registry data for gxv `feat' validator. - * This program is derived from gxfeatreg.c in gxlayout. - * - * Copyright (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. - * - */ - -/**************************************************************************** - * - * Development of gxfeatreg.c is supported by - * Information-technology Promotion Agency, Japan. - * - */ - - -/**************************************************************************** - * - * This file is compiled as a stand-alone executable. - * This file is never compiled into `libfreetype2'. - * The output of this file is used in `gxvfeat.c'. - * ----------------------------------------------------------------------- - * Compile: gcc `pkg-config --cflags freetype2` gxvfgen.c -o gxvfgen - * Run: ./gxvfgen > tmp.c - * - */ - - /******************************************************************** - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - */ - - /* - * If you add a new setting to a feature, check the number of settings - * in the feature. If the number is greater than the value defined as - * FEATREG_MAX_SETTING, update the value. - */ -#define FEATREG_MAX_SETTING 12 - - /******************************************************************** - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - */ - - -#include -#include - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define APPLE_RESERVED "Apple Reserved" -#define APPLE_RESERVED_LENGTH 14 - - typedef struct GX_Feature_RegistryRec_ - { - const char* feat_name; - char exclusive; - char* setting_name[FEATREG_MAX_SETTING]; - - } GX_Feature_RegistryRec; - - -#define EMPTYFEAT {0, 0, {NULL}} - - - static GX_Feature_RegistryRec featreg_table[] = { - { /* 0 */ - "All Typographic Features", - 0, - { - "All Type Features", - NULL - } - }, { /* 1 */ - "Ligatures", - 0, - { - "Required Ligatures", - "Common Ligatures", - "Rare Ligatures", - "Logos", - "Rebus Pictures", - "Diphthong Ligatures", - "Squared Ligatures", - "Squared Ligatures, Abbreviated", - NULL - } - }, { /* 2 */ - "Cursive Connection", - 1, - { - "Unconnected", - "Partially Connected", - "Cursive", - NULL - } - }, { /* 3 */ - "Letter Case", - 1, - { - "Upper & Lower Case", - "All Caps", - "All Lower Case", - "Small Caps", - "Initial Caps", - "Initial Caps & Small Caps", - NULL - } - }, { /* 4 */ - "Vertical Substitution", - 0, - { - /* "Substitute Vertical Forms", */ - "Turns on the feature", - NULL - } - }, { /* 5 */ - "Linguistic Rearrangement", - 0, - { - /* "Linguistic Rearrangement", */ - "Turns on the feature", - NULL - } - }, { /* 6 */ - "Number Spacing", - 1, - { - "Monospaced Numbers", - "Proportional Numbers", - NULL - } - }, { /* 7 */ - APPLE_RESERVED " 1", - 0, - {NULL} - }, { /* 8 */ - "Smart Swashes", - 0, - { - "Word Initial Swashes", - "Word Final Swashes", - "Line Initial Swashes", - "Line Final Swashes", - "Non-Final Swashes", - NULL - } - }, { /* 9 */ - "Diacritics", - 1, - { - "Show Diacritics", - "Hide Diacritics", - "Decompose Diacritics", - NULL - } - }, { /* 10 */ - "Vertical Position", - 1, - { - /* "Normal Position", */ - "No Vertical Position", - "Superiors", - "Inferiors", - "Ordinals", - NULL - } - }, { /* 11 */ - "Fractions", - 1, - { - "No Fractions", - "Vertical Fractions", - "Diagonal Fractions", - NULL - } - }, { /* 12 */ - APPLE_RESERVED " 2", - 0, - {NULL} - }, { /* 13 */ - "Overlapping Characters", - 0, - { - /* "Prevent Overlap", */ - "Turns on the feature", - NULL - } - }, { /* 14 */ - "Typographic Extras", - 0, - { - "Hyphens to Em Dash", - "Hyphens to En Dash", - "Unslashed Zero", - "Form Interrobang", - "Smart Quotes", - "Periods to Ellipsis", - NULL - } - }, { /* 15 */ - "Mathematical Extras", - 0, - { - "Hyphens to Minus", - "Asterisk to Multiply", - "Slash to Divide", - "Inequality Ligatures", - "Exponents", - NULL - } - }, { /* 16 */ - "Ornament Sets", - 1, - { - "No Ornaments", - "Dingbats", - "Pi Characters", - "Fleurons", - "Decorative Borders", - "International Symbols", - "Math Symbols", - NULL - } - }, { /* 17 */ - "Character Alternatives", - 1, - { - "No Alternates", - /* TODO */ - NULL - } - }, { /* 18 */ - "Design Complexity", - 1, - { - "Design Level 1", - "Design Level 2", - "Design Level 3", - "Design Level 4", - "Design Level 5", - /* TODO */ - NULL - } - }, { /* 19 */ - "Style Options", - 1, - { - "No Style Options", - "Display Text", - "Engraved Text", - "Illuminated Caps", - "Tilling Caps", - "Tall Caps", - NULL - } - }, { /* 20 */ - "Character Shape", - 1, - { - "Traditional Characters", - "Simplified Characters", - "JIS 1978 Characters", - "JIS 1983 Characters", - "JIS 1990 Characters", - "Traditional Characters, Alternative Set 1", - "Traditional Characters, Alternative Set 2", - "Traditional Characters, Alternative Set 3", - "Traditional Characters, Alternative Set 4", - "Traditional Characters, Alternative Set 5", - "Expert Characters", - NULL /* count => 12 */ - } - }, { /* 21 */ - "Number Case", - 1, - { - "Lower Case Numbers", - "Upper Case Numbers", - NULL - } - }, { /* 22 */ - "Text Spacing", - 1, - { - "Proportional", - "Monospaced", - "Half-width", - "Normal", - NULL - } - }, /* Here after Newer */ { /* 23 */ - "Transliteration", - 1, - { - "No Transliteration", - "Hanja To Hangul", - "Hiragana to Katakana", - "Katakana to Hiragana", - "Kana to Romanization", - "Romanization to Hiragana", - "Romanization to Katakana", - "Hanja to Hangul, Alternative Set 1", - "Hanja to Hangul, Alternative Set 2", - "Hanja to Hangul, Alternative Set 3", - NULL - } - }, { /* 24 */ - "Annotation", - 1, - { - "No Annotation", - "Box Annotation", - "Rounded Box Annotation", - "Circle Annotation", - "Inverted Circle Annotation", - "Parenthesis Annotation", - "Period Annotation", - "Roman Numeral Annotation", - "Diamond Annotation", - NULL - } - }, { /* 25 */ - "Kana Spacing", - 1, - { - "Full Width", - "Proportional", - NULL - } - }, { /* 26 */ - "Ideographic Spacing", - 1, - { - "Full Width", - "Proportional", - NULL - } - }, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 27-30 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 31-35 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 36-40 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 40-45 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 46-50 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 51-55 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 56-60 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 61-65 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 66-70 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 71-75 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 76-80 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 81-85 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 86-90 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 91-95 */ - EMPTYFEAT, EMPTYFEAT, EMPTYFEAT, /* 96-98 */ - EMPTYFEAT, /* 99 */ { /* 100 => 22 */ - "Text Spacing", - 1, - { - "Proportional", - "Monospaced", - "Half-width", - "Normal", - NULL - } - }, { /* 101 => 25 */ - "Kana Spacing", - 1, - { - "Full Width", - "Proportional", - NULL - } - }, { /* 102 => 26 */ - "Ideographic Spacing", - 1, - { - "Full Width", - "Proportional", - NULL - } - }, { /* 103 */ - "CJK Roman Spacing", - 1, - { - "Half-width", - "Proportional", - "Default Roman", - "Full-width Roman", - NULL - } - }, { /* 104 => 1 */ - "All Typographic Features", - 0, - { - "All Type Features", - NULL - } - } - }; - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Generator *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - int - main( void ) - { - int i; - - - printf( " {\n" ); - printf( " /* Generated from %s */\n", __FILE__ ); - - for ( i = 0; - i < sizeof ( featreg_table ) / sizeof ( GX_Feature_RegistryRec ); - i++ ) - { - const char* feat_name; - int nSettings; - - - feat_name = featreg_table[i].feat_name; - for ( nSettings = 0; - featreg_table[i].setting_name[nSettings]; - nSettings++) - ; /* Do nothing */ - - printf( " {%1d, %1d, %1d, %2d}, /* %s */\n", - feat_name ? 1 : 0, - ( feat_name && - ( ft_strncmp( feat_name, - APPLE_RESERVED, APPLE_RESERVED_LENGTH ) == 0 ) - ) ? 1 : 0, - featreg_table[i].exclusive ? 1 : 0, - nSettings, - feat_name ? feat_name : "__EMPTY__" ); - } - - printf( " };\n" ); - - return 0; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvjust.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvjust.c deleted file mode 100644 index a582377859f..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvjust.c +++ /dev/null @@ -1,721 +0,0 @@ -/**************************************************************************** - * - * 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" -#include "gxvcommn.h" - -#include FT_SFNT_NAMES_H - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvjust - - /* - * referred `just' table format specification: - * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6just.html - * last updated 2000. - * ---------------------------------------------- - * [JUST HEADER]: GXV_JUST_HEADER_SIZE - * version (fixed: 32bit) = 0x00010000 - * format (uint16: 16bit) = 0 is only defined (2000) - * horizOffset (uint16: 16bit) - * vertOffset (uint16: 16bit) - * ---------------------------------------------- - */ - - typedef struct GXV_just_DataRec_ - { - FT_UShort wdc_offset_max; - FT_UShort wdc_offset_min; - FT_UShort pc_offset_max; - FT_UShort pc_offset_min; - - } GXV_just_DataRec, *GXV_just_Data; - - -#define GXV_JUST_DATA( a ) GXV_TABLE_DATA( just, a ) - - - /* GX just table does not define their subset of GID */ - static void - gxv_just_check_max_gid( FT_UShort gid, - const FT_String* msg_tag, - GXV_Validator gxvalid ) - { - FT_UNUSED( msg_tag ); - - if ( gid < gxvalid->face->num_glyphs ) - return; - - GXV_TRACE(( "just table includes too large %s" - " GID=%d > %d (in maxp)\n", - msg_tag, gid, gxvalid->face->num_glyphs )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - - - static void - gxv_just_wdp_entry_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_ULong justClass; -#ifdef GXV_LOAD_UNUSED_VARS - FT_Fixed beforeGrowLimit; - FT_Fixed beforeShrinkGrowLimit; - FT_Fixed afterGrowLimit; - FT_Fixed afterShrinkGrowLimit; - FT_UShort growFlags; - FT_UShort shrinkFlags; -#endif - - - GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 + 4 + 2 + 2 ); - justClass = FT_NEXT_ULONG( p ); -#ifndef GXV_LOAD_UNUSED_VARS - p += 4 + 4 + 4 + 4 + 2 + 2; -#else - beforeGrowLimit = FT_NEXT_ULONG( p ); - beforeShrinkGrowLimit = FT_NEXT_ULONG( p ); - afterGrowLimit = FT_NEXT_ULONG( p ); - afterShrinkGrowLimit = FT_NEXT_ULONG( p ); - growFlags = FT_NEXT_USHORT( p ); - shrinkFlags = FT_NEXT_USHORT( p ); -#endif - - /* According to Apple spec, only 7bits in justClass is used */ - if ( ( justClass & 0xFFFFFF80UL ) != 0 ) - { - GXV_TRACE(( "just table includes non-zero value" - " in unused justClass higher bits" - " of WidthDeltaPair" )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - static void - gxv_just_wdc_entry_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_ULong count, i; - - - GXV_LIMIT_CHECK( 4 ); - count = FT_NEXT_ULONG( p ); - for ( i = 0; i < count; i++ ) - { - GXV_TRACE(( "validating wdc pair %d/%d\n", i + 1, count )); - gxv_just_wdp_entry_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - static void - gxv_just_widthDeltaClusters_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_Bytes wdc_end = table + GXV_JUST_DATA( wdc_offset_max ); - FT_UInt i; - - - GXV_NAME_ENTER( "just justDeltaClusters" ); - - if ( limit <= wdc_end ) - FT_INVALID_OFFSET; - - for ( i = 0; p <= wdc_end; i++ ) - { - gxv_just_wdc_entry_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - static void - gxv_just_actSubrecord_type0_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - FT_Fixed lowerLimit; - FT_Fixed upperLimit; -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort order; -#endif - FT_UShort decomposedCount; - - FT_UInt i; - - - GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 ); - lowerLimit = FT_NEXT_LONG( p ); - upperLimit = FT_NEXT_LONG( p ); -#ifdef GXV_LOAD_UNUSED_VARS - order = FT_NEXT_USHORT( p ); -#else - p += 2; -#endif - decomposedCount = FT_NEXT_USHORT( p ); - - if ( lowerLimit >= upperLimit ) - { - GXV_TRACE(( "just table includes invalid range spec:" - " lowerLimit(%d) > upperLimit(%d)\n" )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - - for ( i = 0; i < decomposedCount; i++ ) - { - FT_UShort glyphs; - - - GXV_LIMIT_CHECK( 2 ); - glyphs = FT_NEXT_USHORT( p ); - gxv_just_check_max_gid( glyphs, "type0:glyphs", gxvalid ); - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - static void - gxv_just_actSubrecord_type1_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort addGlyph; - - - GXV_LIMIT_CHECK( 2 ); - addGlyph = FT_NEXT_USHORT( p ); - - gxv_just_check_max_gid( addGlyph, "type1:addGlyph", gxvalid ); - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - static void - gxv_just_actSubrecord_type2_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; -#ifdef GXV_LOAD_UNUSED_VARS - FT_Fixed substThreshhold; /* Apple misspelled "Threshhold" */ -#endif - FT_UShort addGlyph; - FT_UShort substGlyph; - - - GXV_LIMIT_CHECK( 4 + 2 + 2 ); -#ifdef GXV_LOAD_UNUSED_VARS - substThreshhold = FT_NEXT_ULONG( p ); -#else - p += 4; -#endif - addGlyph = FT_NEXT_USHORT( p ); - substGlyph = FT_NEXT_USHORT( p ); - - if ( addGlyph != 0xFFFF ) - gxv_just_check_max_gid( addGlyph, "type2:addGlyph", gxvalid ); - - gxv_just_check_max_gid( substGlyph, "type2:substGlyph", gxvalid ); - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - static void - gxv_just_actSubrecord_type4_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_ULong variantsAxis; - FT_Fixed minimumLimit; - FT_Fixed noStretchValue; - FT_Fixed maximumLimit; - - - GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 ); - variantsAxis = FT_NEXT_ULONG( p ); - minimumLimit = FT_NEXT_LONG( p ); - noStretchValue = FT_NEXT_LONG( p ); - maximumLimit = FT_NEXT_LONG( p ); - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - if ( variantsAxis != 0x64756374L ) /* 'duct' */ - GXV_TRACE(( "variantsAxis 0x%08x is non default value", - variantsAxis )); - - if ( minimumLimit > noStretchValue ) - GXV_TRACE(( "type4:minimumLimit 0x%08x > noStretchValue 0x%08x\n", - minimumLimit, noStretchValue )); - else if ( noStretchValue > maximumLimit ) - GXV_TRACE(( "type4:noStretchValue 0x%08x > maximumLimit 0x%08x\n", - noStretchValue, maximumLimit )); - else if ( !IS_PARANOID_VALIDATION ) - return; - - FT_INVALID_DATA; - } - - - static void - gxv_just_actSubrecord_type5_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort flags; - FT_UShort glyph; - - - GXV_LIMIT_CHECK( 2 + 2 ); - flags = FT_NEXT_USHORT( p ); - glyph = FT_NEXT_USHORT( p ); - - if ( flags ) - GXV_TRACE(( "type5: nonzero value 0x%04x in unused flags\n", - flags )); - gxv_just_check_max_gid( glyph, "type5:glyph", gxvalid ); - - gxvalid->subtable_length = (FT_ULong)( p - table ); - } - - - /* parse single actSubrecord */ - static void - gxv_just_actSubrecord_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort actionClass; - FT_UShort actionType; - FT_ULong actionLength; - - - GXV_NAME_ENTER( "just actSubrecord" ); - - GXV_LIMIT_CHECK( 2 + 2 + 4 ); - actionClass = FT_NEXT_USHORT( p ); - actionType = FT_NEXT_USHORT( p ); - actionLength = FT_NEXT_ULONG( p ); - - /* actionClass is related with justClass using 7bit only */ - if ( ( actionClass & 0xFF80 ) != 0 ) - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - - if ( actionType == 0 ) - gxv_just_actSubrecord_type0_validate( p, limit, gxvalid ); - else if ( actionType == 1 ) - gxv_just_actSubrecord_type1_validate( p, limit, gxvalid ); - else if ( actionType == 2 ) - gxv_just_actSubrecord_type2_validate( p, limit, gxvalid ); - else if ( actionType == 3 ) - ; /* Stretch glyph action: no actionData */ - else if ( actionType == 4 ) - gxv_just_actSubrecord_type4_validate( p, limit, gxvalid ); - else if ( actionType == 5 ) - gxv_just_actSubrecord_type5_validate( p, limit, gxvalid ); - else - FT_INVALID_DATA; - - gxvalid->subtable_length = actionLength; - - GXV_EXIT; - } - - - static void - gxv_just_pcActionRecord_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_ULong actionCount; - FT_ULong i; - - - GXV_LIMIT_CHECK( 4 ); - actionCount = FT_NEXT_ULONG( p ); - GXV_TRACE(( "actionCount = %d\n", actionCount )); - - for ( i = 0; i < actionCount; i++ ) - { - gxv_just_actSubrecord_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - static void - gxv_just_pcTable_LookupValue_entry_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - FT_UNUSED( glyph ); - - if ( value_p->u > GXV_JUST_DATA( pc_offset_max ) ) - GXV_JUST_DATA( pc_offset_max ) = value_p->u; - if ( value_p->u < GXV_JUST_DATA( pc_offset_max ) ) - GXV_JUST_DATA( pc_offset_min ) = value_p->u; - } - - - static void - gxv_just_pcLookupTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - GXV_NAME_ENTER( "just pcLookupTable" ); - GXV_JUST_DATA( pc_offset_max ) = 0x0000; - GXV_JUST_DATA( pc_offset_min ) = 0xFFFFU; - - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_just_pcTable_LookupValue_entry_validate; - - gxv_LookupTable_validate( p, limit, gxvalid ); - - /* subtable_length is set by gxv_LookupTable_validate() */ - - GXV_EXIT; - } - - - static void - gxv_just_postcompTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - GXV_NAME_ENTER( "just postcompTable" ); - - gxv_just_pcLookupTable_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - - gxv_just_pcActionRecord_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - static void - gxv_just_classTable_entry_validate( - FT_Byte state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - /* TODO: validate markClass & currentClass */ - FT_UShort setMark; - FT_UShort dontAdvance; - FT_UShort markClass; - FT_UShort currentClass; -#endif - - FT_UNUSED( state ); - FT_UNUSED( glyphOffset_p ); - FT_UNUSED( table ); - FT_UNUSED( limit ); - FT_UNUSED( gxvalid ); - -#ifndef GXV_LOAD_UNUSED_VARS - FT_UNUSED( flags ); -#else - setMark = (FT_UShort)( ( flags >> 15 ) & 1 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); - markClass = (FT_UShort)( ( flags >> 7 ) & 0x7F ); - currentClass = (FT_UShort)( flags & 0x7F ); -#endif - } - - - static void - gxv_just_justClassTable_validate ( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort length; - FT_UShort coverage; - FT_ULong subFeatureFlags; - - - GXV_NAME_ENTER( "just justClassTable" ); - - GXV_LIMIT_CHECK( 2 + 2 + 4 ); - length = FT_NEXT_USHORT( p ); - coverage = FT_NEXT_USHORT( p ); - subFeatureFlags = FT_NEXT_ULONG( p ); - - GXV_TRACE(( " justClassTable: coverage = 0x%04x (%s) ", coverage )); - if ( ( coverage & 0x4000 ) == 0 ) - GXV_TRACE(( "ascending\n" )); - else - GXV_TRACE(( "descending\n" )); - - if ( subFeatureFlags ) - GXV_TRACE(( " justClassTable: nonzero value (0x%08x)" - " in unused subFeatureFlags\n", subFeatureFlags )); - - gxvalid->statetable.optdata = NULL; - gxvalid->statetable.optdata_load_func = NULL; - gxvalid->statetable.subtable_setup_func = NULL; - gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; - gxvalid->statetable.entry_validate_func = - gxv_just_classTable_entry_validate; - - gxv_StateTable_validate( p, table + length, gxvalid ); - - /* subtable_length is set by gxv_LookupTable_validate() */ - - GXV_EXIT; - } - - - static void - gxv_just_wdcTable_LookupValue_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - FT_UNUSED( glyph ); - - if ( value_p->u > GXV_JUST_DATA( wdc_offset_max ) ) - GXV_JUST_DATA( wdc_offset_max ) = value_p->u; - if ( value_p->u < GXV_JUST_DATA( wdc_offset_min ) ) - GXV_JUST_DATA( wdc_offset_min ) = value_p->u; - } - - - static void - gxv_just_justData_lookuptable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - GXV_JUST_DATA( wdc_offset_max ) = 0x0000; - GXV_JUST_DATA( wdc_offset_min ) = 0xFFFFU; - - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_just_wdcTable_LookupValue_validate; - - gxv_LookupTable_validate( p, limit, gxvalid ); - - /* subtable_length is set by gxv_LookupTable_validate() */ - - GXV_EXIT; - } - - - /* - * gxv_just_justData_validate() parses and validates horizData, vertData. - */ - static void - gxv_just_justData_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - /* - * following 3 offsets are measured from the start of `just' - * (which table points to), not justData - */ - FT_UShort justClassTableOffset; - FT_UShort wdcTableOffset; - FT_UShort pcTableOffset; - FT_Bytes p = table; - - GXV_ODTECT( 4, odtect ); - - - GXV_NAME_ENTER( "just justData" ); - - GXV_ODTECT_INIT( odtect ); - GXV_LIMIT_CHECK( 2 + 2 + 2 ); - justClassTableOffset = FT_NEXT_USHORT( p ); - wdcTableOffset = FT_NEXT_USHORT( p ); - pcTableOffset = FT_NEXT_USHORT( p ); - - GXV_TRACE(( " (justClassTableOffset = 0x%04x)\n", justClassTableOffset )); - GXV_TRACE(( " (wdcTableOffset = 0x%04x)\n", wdcTableOffset )); - GXV_TRACE(( " (pcTableOffset = 0x%04x)\n", pcTableOffset )); - - gxv_just_justData_lookuptable_validate( p, limit, gxvalid ); - gxv_odtect_add_range( p, gxvalid->subtable_length, - "just_LookupTable", odtect ); - - if ( wdcTableOffset ) - { - gxv_just_widthDeltaClusters_validate( - gxvalid->root->base + wdcTableOffset, limit, gxvalid ); - gxv_odtect_add_range( gxvalid->root->base + wdcTableOffset, - gxvalid->subtable_length, "just_wdcTable", odtect ); - } - - if ( pcTableOffset ) - { - gxv_just_postcompTable_validate( gxvalid->root->base + pcTableOffset, - limit, gxvalid ); - gxv_odtect_add_range( gxvalid->root->base + pcTableOffset, - gxvalid->subtable_length, "just_pcTable", odtect ); - } - - if ( justClassTableOffset ) - { - gxv_just_justClassTable_validate( - gxvalid->root->base + justClassTableOffset, limit, gxvalid ); - gxv_odtect_add_range( gxvalid->root->base + justClassTableOffset, - gxvalid->subtable_length, "just_justClassTable", - odtect ); - } - - gxv_odtect_validate( odtect, gxvalid ); - - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_just_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = 0; - - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - GXV_just_DataRec justrec; - GXV_just_Data just = &justrec; - - FT_ULong version; - FT_UShort format; - FT_UShort horizOffset; - FT_UShort vertOffset; - - GXV_ODTECT( 3, odtect ); - - - GXV_ODTECT_INIT( odtect ); - - gxvalid->root = ftvalid; - gxvalid->table_data = just; - gxvalid->face = face; - - FT_TRACE3(( "validating `just' table\n" )); - GXV_INIT; - - limit = gxvalid->root->limit; - - GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 ); - version = FT_NEXT_ULONG( p ); - format = FT_NEXT_USHORT( p ); - horizOffset = FT_NEXT_USHORT( p ); - vertOffset = FT_NEXT_USHORT( p ); - gxv_odtect_add_range( table, (FT_ULong)( p - table ), - "just header", odtect ); - - - /* Version 1.0 (always:2000) */ - GXV_TRACE(( " (version = 0x%08x)\n", version )); - if ( version != 0x00010000UL ) - FT_INVALID_FORMAT; - - /* format 0 (always:2000) */ - GXV_TRACE(( " (format = 0x%04x)\n", format )); - if ( format != 0x0000 ) - FT_INVALID_FORMAT; - - GXV_TRACE(( " (horizOffset = %d)\n", horizOffset )); - GXV_TRACE(( " (vertOffset = %d)\n", vertOffset )); - - - /* validate justData */ - if ( 0 < horizOffset ) - { - gxv_just_justData_validate( table + horizOffset, limit, gxvalid ); - gxv_odtect_add_range( table + horizOffset, gxvalid->subtable_length, - "horizJustData", odtect ); - } - - if ( 0 < vertOffset ) - { - gxv_just_justData_validate( table + vertOffset, limit, gxvalid ); - gxv_odtect_add_range( table + vertOffset, gxvalid->subtable_length, - "vertJustData", odtect ); - } - - gxv_odtect_validate( odtect, gxvalid ); - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvkern.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvkern.c deleted file mode 100644 index a7532335a57..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvkern.c +++ /dev/null @@ -1,920 +0,0 @@ -/**************************************************************************** - * - * 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" -#include "gxvcommn.h" - -#include FT_SFNT_NAMES_H -#include FT_SERVICE_GX_VALIDATE_H - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvkern - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef enum GXV_kern_Version_ - { - KERN_VERSION_CLASSIC = 0x0000, - KERN_VERSION_NEW = 0x0001 - - } GXV_kern_Version; - - - typedef enum GXV_kern_Dialect_ - { - KERN_DIALECT_UNKNOWN = 0, - KERN_DIALECT_MS = FT_VALIDATE_MS, - KERN_DIALECT_APPLE = FT_VALIDATE_APPLE, - KERN_DIALECT_ANY = FT_VALIDATE_CKERN - - } GXV_kern_Dialect; - - - typedef struct GXV_kern_DataRec_ - { - GXV_kern_Version version; - void *subtable_data; - GXV_kern_Dialect dialect_request; - - } GXV_kern_DataRec, *GXV_kern_Data; - - -#define GXV_KERN_DATA( field ) GXV_TABLE_DATA( kern, field ) - -#define KERN_IS_CLASSIC( gxvalid ) \ - ( KERN_VERSION_CLASSIC == GXV_KERN_DATA( version ) ) -#define KERN_IS_NEW( gxvalid ) \ - ( KERN_VERSION_NEW == GXV_KERN_DATA( version ) ) - -#define KERN_DIALECT( gxvalid ) \ - GXV_KERN_DATA( dialect_request ) -#define KERN_ALLOWS_MS( gxvalid ) \ - ( KERN_DIALECT( gxvalid ) & KERN_DIALECT_MS ) -#define KERN_ALLOWS_APPLE( gxvalid ) \ - ( KERN_DIALECT( gxvalid ) & KERN_DIALECT_APPLE ) - -#define GXV_KERN_HEADER_SIZE ( KERN_IS_NEW( gxvalid ) ? 8 : 4 ) -#define GXV_KERN_SUBTABLE_HEADER_SIZE ( KERN_IS_NEW( gxvalid ) ? 8 : 6 ) - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** SUBTABLE VALIDATORS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - - /* ============================= format 0 ============================== */ - - static void - gxv_kern_subtable_fmt0_pairs_validate( FT_Bytes table, - FT_Bytes limit, - FT_UShort nPairs, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort i; - - FT_UShort last_gid_left = 0; - FT_UShort last_gid_right = 0; - - FT_UNUSED( limit ); - - - GXV_NAME_ENTER( "kern format 0 pairs" ); - - for ( i = 0; i < nPairs; i++ ) - { - FT_UShort gid_left; - FT_UShort gid_right; -#ifdef GXV_LOAD_UNUSED_VARS - FT_Short kernValue; -#endif - - - /* left */ - gid_left = FT_NEXT_USHORT( p ); - gxv_glyphid_validate( gid_left, gxvalid ); - - /* right */ - gid_right = FT_NEXT_USHORT( p ); - gxv_glyphid_validate( gid_right, gxvalid ); - - /* Pairs of left and right GIDs must be unique and sorted. */ - GXV_TRACE(( "left gid = %u, right gid = %u\n", gid_left, gid_right )); - if ( gid_left == last_gid_left ) - { - if ( last_gid_right < gid_right ) - last_gid_right = gid_right; - else - FT_INVALID_DATA; - } - else if ( last_gid_left < gid_left ) - { - last_gid_left = gid_left; - last_gid_right = gid_right; - } - else - FT_INVALID_DATA; - - /* skip the kern value */ -#ifdef GXV_LOAD_UNUSED_VARS - kernValue = FT_NEXT_SHORT( p ); -#else - p += 2; -#endif - } - - GXV_EXIT; - } - - static void - gxv_kern_subtable_fmt0_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table + GXV_KERN_SUBTABLE_HEADER_SIZE; - - FT_UShort nPairs; - FT_UShort unitSize; - - - GXV_NAME_ENTER( "kern subtable format 0" ); - - unitSize = 2 + 2 + 2; - nPairs = 0; - - /* nPairs, searchRange, entrySelector, rangeShift */ - GXV_LIMIT_CHECK( 2 + 2 + 2 + 2 ); - gxv_BinSrchHeader_validate( p, limit, &unitSize, &nPairs, gxvalid ); - p += 2 + 2 + 2 + 2; - - gxv_kern_subtable_fmt0_pairs_validate( p, limit, nPairs, gxvalid ); - - GXV_EXIT; - } - - - /* ============================= format 1 ============================== */ - - - typedef struct GXV_kern_fmt1_StateOptRec_ - { - FT_UShort valueTable; - FT_UShort valueTable_length; - - } GXV_kern_fmt1_StateOptRec, *GXV_kern_fmt1_StateOptRecData; - - - static void - gxv_kern_subtable_fmt1_valueTable_load( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - GXV_kern_fmt1_StateOptRecData optdata = - (GXV_kern_fmt1_StateOptRecData)gxvalid->statetable.optdata; - - - GXV_LIMIT_CHECK( 2 ); - optdata->valueTable = FT_NEXT_USHORT( p ); - } - - - /* - * passed tables_size covers whole StateTable, including kern fmt1 header - */ - static void - gxv_kern_subtable_fmt1_subtable_setup( FT_UShort table_size, - FT_UShort classTable, - FT_UShort stateArray, - FT_UShort entryTable, - FT_UShort* classTable_length_p, - FT_UShort* stateArray_length_p, - FT_UShort* entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_UShort o[4]; - FT_UShort *l[4]; - FT_UShort buff[5]; - - GXV_kern_fmt1_StateOptRecData optdata = - (GXV_kern_fmt1_StateOptRecData)gxvalid->statetable.optdata; - - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - o[3] = optdata->valueTable; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - l[3] = &(optdata->valueTable_length); - - gxv_set_length_by_ushort_offset( o, l, buff, 4, table_size, gxvalid ); - } - - - /* - * passed table & limit are of whole StateTable, not including subtables - */ - static void - gxv_kern_subtable_fmt1_entry_validate( - FT_Byte state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort push; - FT_UShort dontAdvance; -#endif - FT_UShort valueOffset; -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort kernAction; - FT_UShort kernValue; -#endif - - FT_UNUSED( state ); - FT_UNUSED( glyphOffset_p ); - - -#ifdef GXV_LOAD_UNUSED_VARS - push = (FT_UShort)( ( flags >> 15 ) & 1 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); -#endif - valueOffset = (FT_UShort)( flags & 0x3FFF ); - - { - GXV_kern_fmt1_StateOptRecData vt_rec = - (GXV_kern_fmt1_StateOptRecData)gxvalid->statetable.optdata; - FT_Bytes p; - - - if ( valueOffset < vt_rec->valueTable ) - FT_INVALID_OFFSET; - - p = table + valueOffset; - limit = table + vt_rec->valueTable + vt_rec->valueTable_length; - - GXV_LIMIT_CHECK( 2 + 2 ); -#ifdef GXV_LOAD_UNUSED_VARS - kernAction = FT_NEXT_USHORT( p ); - kernValue = FT_NEXT_USHORT( p ); -#endif - } - } - - - static void - gxv_kern_subtable_fmt1_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - GXV_kern_fmt1_StateOptRec vt_rec; - - - GXV_NAME_ENTER( "kern subtable format 1" ); - - gxvalid->statetable.optdata = - &vt_rec; - gxvalid->statetable.optdata_load_func = - gxv_kern_subtable_fmt1_valueTable_load; - gxvalid->statetable.subtable_setup_func = - gxv_kern_subtable_fmt1_subtable_setup; - gxvalid->statetable.entry_glyphoffset_fmt = - GXV_GLYPHOFFSET_NONE; - gxvalid->statetable.entry_validate_func = - gxv_kern_subtable_fmt1_entry_validate; - - gxv_StateTable_validate( p, limit, gxvalid ); - - GXV_EXIT; - } - - - /* ================ Data for Class-Based Subtables 2, 3 ================ */ - - typedef enum GXV_kern_ClassSpec_ - { - GXV_KERN_CLS_L = 0, - GXV_KERN_CLS_R - - } GXV_kern_ClassSpec; - - - /* ============================= format 2 ============================== */ - - /* ---------------------- format 2 specific data ----------------------- */ - - typedef struct GXV_kern_subtable_fmt2_DataRec_ - { - FT_UShort rowWidth; - FT_UShort array; - FT_UShort offset_min[2]; - FT_UShort offset_max[2]; - const FT_String* class_tag[2]; - GXV_odtect_Range odtect; - - } GXV_kern_subtable_fmt2_DataRec, *GXV_kern_subtable_fmt2_Data; - - -#define GXV_KERN_FMT2_DATA( field ) \ - ( ( (GXV_kern_subtable_fmt2_DataRec *) \ - ( GXV_KERN_DATA( subtable_data ) ) )->field ) - - - /* -------------------------- utility functions ----------------------- */ - - static void - gxv_kern_subtable_fmt2_clstbl_validate( FT_Bytes table, - FT_Bytes limit, - GXV_kern_ClassSpec spec, - GXV_Validator gxvalid ) - { - const FT_String* tag = GXV_KERN_FMT2_DATA( class_tag[spec] ); - GXV_odtect_Range odtect = GXV_KERN_FMT2_DATA( odtect ); - - FT_Bytes p = table; - FT_UShort firstGlyph; - FT_UShort nGlyphs; - - - GXV_NAME_ENTER( "kern format 2 classTable" ); - - GXV_LIMIT_CHECK( 2 + 2 ); - firstGlyph = FT_NEXT_USHORT( p ); - nGlyphs = FT_NEXT_USHORT( p ); - GXV_TRACE(( " %s firstGlyph=%d, nGlyphs=%d\n", - tag, firstGlyph, nGlyphs )); - - gxv_glyphid_validate( firstGlyph, gxvalid ); - gxv_glyphid_validate( (FT_UShort)( firstGlyph + nGlyphs - 1 ), gxvalid ); - - gxv_array_getlimits_ushort( p, p + ( 2 * nGlyphs ), - &( GXV_KERN_FMT2_DATA( offset_min[spec] ) ), - &( GXV_KERN_FMT2_DATA( offset_max[spec] ) ), - gxvalid ); - - gxv_odtect_add_range( table, 2 * nGlyphs, tag, odtect ); - - GXV_EXIT; - } - - - static void - gxv_kern_subtable_fmt2_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - GXV_ODTECT( 3, odtect ); - GXV_kern_subtable_fmt2_DataRec fmt2_rec = - { 0, 0, { 0, 0 }, { 0, 0 }, { "leftClass", "rightClass" }, NULL }; - - FT_Bytes p = table + GXV_KERN_SUBTABLE_HEADER_SIZE; - FT_UShort leftOffsetTable; - FT_UShort rightOffsetTable; - - - GXV_NAME_ENTER( "kern subtable format 2" ); - - GXV_ODTECT_INIT( odtect ); - fmt2_rec.odtect = odtect; - GXV_KERN_DATA( subtable_data ) = &fmt2_rec; - - GXV_LIMIT_CHECK( 2 + 2 + 2 + 2 ); - GXV_KERN_FMT2_DATA( rowWidth ) = FT_NEXT_USHORT( p ); - leftOffsetTable = FT_NEXT_USHORT( p ); - rightOffsetTable = FT_NEXT_USHORT( p ); - GXV_KERN_FMT2_DATA( array ) = FT_NEXT_USHORT( p ); - - GXV_TRACE(( "rowWidth = %d\n", GXV_KERN_FMT2_DATA( rowWidth ) )); - - - GXV_LIMIT_CHECK( leftOffsetTable ); - GXV_LIMIT_CHECK( rightOffsetTable ); - GXV_LIMIT_CHECK( GXV_KERN_FMT2_DATA( array ) ); - - gxv_kern_subtable_fmt2_clstbl_validate( table + leftOffsetTable, limit, - GXV_KERN_CLS_L, gxvalid ); - - gxv_kern_subtable_fmt2_clstbl_validate( table + rightOffsetTable, limit, - GXV_KERN_CLS_R, gxvalid ); - - if ( GXV_KERN_FMT2_DATA( offset_min[GXV_KERN_CLS_L] ) + - GXV_KERN_FMT2_DATA( offset_min[GXV_KERN_CLS_R] ) - < GXV_KERN_FMT2_DATA( array ) ) - FT_INVALID_OFFSET; - - gxv_odtect_add_range( table + GXV_KERN_FMT2_DATA( array ), - GXV_KERN_FMT2_DATA( offset_max[GXV_KERN_CLS_L] ) - + GXV_KERN_FMT2_DATA( offset_max[GXV_KERN_CLS_R] ) - - GXV_KERN_FMT2_DATA( array ), - "array", odtect ); - - gxv_odtect_validate( odtect, gxvalid ); - - GXV_EXIT; - } - - - /* ============================= format 3 ============================== */ - - static void - gxv_kern_subtable_fmt3_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table + GXV_KERN_SUBTABLE_HEADER_SIZE; - FT_UShort glyphCount; - FT_Byte kernValueCount; - FT_Byte leftClassCount; - FT_Byte rightClassCount; - FT_Byte flags; - - - GXV_NAME_ENTER( "kern subtable format 3" ); - - GXV_LIMIT_CHECK( 2 + 1 + 1 + 1 + 1 ); - glyphCount = FT_NEXT_USHORT( p ); - kernValueCount = FT_NEXT_BYTE( p ); - leftClassCount = FT_NEXT_BYTE( p ); - rightClassCount = FT_NEXT_BYTE( p ); - flags = FT_NEXT_BYTE( p ); - - if ( gxvalid->face->num_glyphs != glyphCount ) - { - GXV_TRACE(( "maxGID=%d, but glyphCount=%d\n", - gxvalid->face->num_glyphs, glyphCount )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - - if ( flags != 0 ) - GXV_TRACE(( "kern subtable fmt3 has nonzero value" - " (%d) in unused flag\n", flags )); - /* - * just skip kernValue[kernValueCount] - */ - GXV_LIMIT_CHECK( 2 * kernValueCount ); - p += 2 * kernValueCount; - - /* - * check leftClass[gid] < leftClassCount - */ - { - FT_Byte min, max; - - - GXV_LIMIT_CHECK( glyphCount ); - gxv_array_getlimits_byte( p, p + glyphCount, &min, &max, gxvalid ); - p += gxvalid->subtable_length; - - if ( leftClassCount < max ) - FT_INVALID_DATA; - } - - /* - * check rightClass[gid] < rightClassCount - */ - { - FT_Byte min, max; - - - GXV_LIMIT_CHECK( glyphCount ); - gxv_array_getlimits_byte( p, p + glyphCount, &min, &max, gxvalid ); - p += gxvalid->subtable_length; - - if ( rightClassCount < max ) - FT_INVALID_DATA; - } - - /* - * check kernIndex[i, j] < kernValueCount - */ - { - FT_UShort i, j; - - - for ( i = 0; i < leftClassCount; i++ ) - { - for ( j = 0; j < rightClassCount; j++ ) - { - GXV_LIMIT_CHECK( 1 ); - if ( kernValueCount < FT_NEXT_BYTE( p ) ) - FT_INVALID_OFFSET; - } - } - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - static FT_Bool - gxv_kern_coverage_new_apple_validate( FT_UShort coverage, - FT_UShort* format, - GXV_Validator gxvalid ) - { - /* new Apple-dialect */ -#ifdef GXV_LOAD_TRACE_VARS - FT_Bool kernVertical; - FT_Bool kernCrossStream; - FT_Bool kernVariation; -#endif - - FT_UNUSED( gxvalid ); - - - /* reserved bits = 0 */ - if ( coverage & 0x1FFC ) - return FALSE; - -#ifdef GXV_LOAD_TRACE_VARS - kernVertical = FT_BOOL( ( coverage >> 15 ) & 1 ); - kernCrossStream = FT_BOOL( ( coverage >> 14 ) & 1 ); - kernVariation = FT_BOOL( ( coverage >> 13 ) & 1 ); -#endif - - *format = (FT_UShort)( coverage & 0x0003 ); - - GXV_TRACE(( "new Apple-dialect: " - "horizontal=%d, cross-stream=%d, variation=%d, format=%d\n", - !kernVertical, kernCrossStream, kernVariation, *format )); - - GXV_TRACE(( "kerning values in Apple format subtable are ignored\n" )); - - return TRUE; - } - - - static FT_Bool - gxv_kern_coverage_classic_apple_validate( FT_UShort coverage, - FT_UShort* format, - GXV_Validator gxvalid ) - { - /* classic Apple-dialect */ -#ifdef GXV_LOAD_TRACE_VARS - FT_Bool horizontal; - FT_Bool cross_stream; -#endif - - - /* check expected flags, but don't check if MS-dialect is impossible */ - if ( !( coverage & 0xFD00 ) && KERN_ALLOWS_MS( gxvalid ) ) - return FALSE; - - /* reserved bits = 0 */ - if ( coverage & 0x02FC ) - return FALSE; - -#ifdef GXV_LOAD_TRACE_VARS - horizontal = FT_BOOL( ( coverage >> 15 ) & 1 ); - cross_stream = FT_BOOL( ( coverage >> 13 ) & 1 ); -#endif - - *format = (FT_UShort)( coverage & 0x0003 ); - - GXV_TRACE(( "classic Apple-dialect: " - "horizontal=%d, cross-stream=%d, format=%d\n", - horizontal, cross_stream, *format )); - - /* format 1 requires GX State Machine, too new for classic */ - if ( *format == 1 ) - return FALSE; - - GXV_TRACE(( "kerning values in Apple format subtable are ignored\n" )); - - return TRUE; - } - - - static FT_Bool - gxv_kern_coverage_classic_microsoft_validate( FT_UShort coverage, - FT_UShort* format, - GXV_Validator gxvalid ) - { - /* classic Microsoft-dialect */ -#ifdef GXV_LOAD_TRACE_VARS - FT_Bool horizontal; - FT_Bool minimum; - FT_Bool cross_stream; - FT_Bool override; -#endif - - FT_UNUSED( gxvalid ); - - - /* reserved bits = 0 */ - if ( coverage & 0xFDF0 ) - return FALSE; - -#ifdef GXV_LOAD_TRACE_VARS - horizontal = FT_BOOL( coverage & 1 ); - minimum = FT_BOOL( ( coverage >> 1 ) & 1 ); - cross_stream = FT_BOOL( ( coverage >> 2 ) & 1 ); - override = FT_BOOL( ( coverage >> 3 ) & 1 ); -#endif - - *format = (FT_UShort)( ( coverage >> 8 ) & 0x0003 ); - - GXV_TRACE(( "classic Microsoft-dialect: " - "horizontal=%d, minimum=%d, cross-stream=%d, " - "override=%d, format=%d\n", - horizontal, minimum, cross_stream, override, *format )); - - if ( *format == 2 ) - GXV_TRACE(( - "kerning values in Microsoft format 2 subtable are ignored\n" )); - - return TRUE; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MAIN *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static GXV_kern_Dialect - gxv_kern_coverage_validate( FT_UShort coverage, - FT_UShort* format, - GXV_Validator gxvalid ) - { - GXV_kern_Dialect result = KERN_DIALECT_UNKNOWN; - - - GXV_NAME_ENTER( "validating coverage" ); - - GXV_TRACE(( "interpret coverage 0x%04x by Apple style\n", coverage )); - - if ( KERN_IS_NEW( gxvalid ) ) - { - if ( gxv_kern_coverage_new_apple_validate( coverage, - format, - gxvalid ) ) - { - result = KERN_DIALECT_APPLE; - goto Exit; - } - } - - if ( KERN_IS_CLASSIC( gxvalid ) && KERN_ALLOWS_APPLE( gxvalid ) ) - { - if ( gxv_kern_coverage_classic_apple_validate( coverage, - format, - gxvalid ) ) - { - result = KERN_DIALECT_APPLE; - goto Exit; - } - } - - if ( KERN_IS_CLASSIC( gxvalid ) && KERN_ALLOWS_MS( gxvalid ) ) - { - if ( gxv_kern_coverage_classic_microsoft_validate( coverage, - format, - gxvalid ) ) - { - result = KERN_DIALECT_MS; - goto Exit; - } - } - - GXV_TRACE(( "cannot interpret coverage, broken kern subtable\n" )); - - Exit: - GXV_EXIT; - return result; - } - - - static void - gxv_kern_subtable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; -#ifdef GXV_LOAD_TRACE_VARS - FT_UShort version = 0; /* MS only: subtable version, unused */ -#endif - FT_ULong length; /* MS: 16bit, Apple: 32bit*/ - FT_UShort coverage; -#ifdef GXV_LOAD_TRACE_VARS - FT_UShort tupleIndex = 0; /* Apple only */ -#endif - FT_UShort u16[2]; - FT_UShort format = 255; /* subtable format */ - - - GXV_NAME_ENTER( "kern subtable" ); - - GXV_LIMIT_CHECK( 2 + 2 + 2 ); - u16[0] = FT_NEXT_USHORT( p ); /* Apple: length_hi MS: version */ - u16[1] = FT_NEXT_USHORT( p ); /* Apple: length_lo MS: length */ - coverage = FT_NEXT_USHORT( p ); - - switch ( gxv_kern_coverage_validate( coverage, &format, gxvalid ) ) - { - case KERN_DIALECT_MS: -#ifdef GXV_LOAD_TRACE_VARS - version = u16[0]; -#endif - length = u16[1]; -#ifdef GXV_LOAD_TRACE_VARS - tupleIndex = 0; -#endif - GXV_TRACE(( "Subtable version = %d\n", version )); - GXV_TRACE(( "Subtable length = %d\n", length )); - break; - - case KERN_DIALECT_APPLE: -#ifdef GXV_LOAD_TRACE_VARS - version = 0; -#endif - length = ( (FT_ULong)u16[0] << 16 ) + u16[1]; -#ifdef GXV_LOAD_TRACE_VARS - tupleIndex = 0; -#endif - GXV_TRACE(( "Subtable length = %d\n", length )); - - if ( KERN_IS_NEW( gxvalid ) ) - { - GXV_LIMIT_CHECK( 2 ); -#ifdef GXV_LOAD_TRACE_VARS - tupleIndex = FT_NEXT_USHORT( p ); -#else - p += 2; -#endif - GXV_TRACE(( "Subtable tupleIndex = %d\n", tupleIndex )); - } - break; - - default: - length = u16[1]; - GXV_TRACE(( "cannot detect subtable dialect, " - "just skip %d byte\n", length )); - goto Exit; - } - - /* formats 1, 2, 3 require the position of the start of this subtable */ - if ( format == 0 ) - gxv_kern_subtable_fmt0_validate( table, table + length, gxvalid ); - else if ( format == 1 ) - gxv_kern_subtable_fmt1_validate( table, table + length, gxvalid ); - else if ( format == 2 ) - gxv_kern_subtable_fmt2_validate( table, table + length, gxvalid ); - else if ( format == 3 ) - gxv_kern_subtable_fmt3_validate( table, table + length, gxvalid ); - else - FT_INVALID_DATA; - - Exit: - gxvalid->subtable_length = length; - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** kern TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - gxv_kern_validate_generic( FT_Bytes table, - FT_Face face, - FT_Bool classic_only, - GXV_kern_Dialect dialect_request, - FT_Validator ftvalid ) - { - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - - GXV_kern_DataRec kernrec; - GXV_kern_Data kern = &kernrec; - - FT_Bytes p = table; - FT_Bytes limit = 0; - - FT_ULong nTables = 0; - FT_UInt i; - - - gxvalid->root = ftvalid; - gxvalid->table_data = kern; - gxvalid->face = face; - - FT_TRACE3(( "validating `kern' table\n" )); - GXV_INIT; - KERN_DIALECT( gxvalid ) = dialect_request; - - GXV_LIMIT_CHECK( 2 ); - GXV_KERN_DATA( version ) = (GXV_kern_Version)FT_NEXT_USHORT( p ); - GXV_TRACE(( "version 0x%04x (higher 16bit)\n", - GXV_KERN_DATA( version ) )); - - if ( 0x0001 < GXV_KERN_DATA( version ) ) - FT_INVALID_FORMAT; - else if ( KERN_IS_CLASSIC( gxvalid ) ) - { - GXV_LIMIT_CHECK( 2 ); - nTables = FT_NEXT_USHORT( p ); - } - else if ( KERN_IS_NEW( gxvalid ) ) - { - if ( classic_only ) - FT_INVALID_FORMAT; - - if ( 0x0000 != FT_NEXT_USHORT( p ) ) - FT_INVALID_FORMAT; - - GXV_LIMIT_CHECK( 4 ); - nTables = FT_NEXT_ULONG( p ); - } - - for ( i = 0; i < nTables; i++ ) - { - GXV_TRACE(( "validating subtable %d/%d\n", i, nTables )); - /* p should be 32bit-aligned? */ - gxv_kern_subtable_validate( p, 0, gxvalid ); - p += gxvalid->subtable_length; - } - - FT_TRACE4(( "\n" )); - } - - - FT_LOCAL_DEF( void ) - gxv_kern_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - gxv_kern_validate_generic( table, face, 0, KERN_DIALECT_ANY, ftvalid ); - } - - - FT_LOCAL_DEF( void ) - gxv_kern_validate_classic( FT_Bytes table, - FT_Face face, - FT_Int dialect_flags, - FT_Validator ftvalid ) - { - GXV_kern_Dialect dialect_request; - - - dialect_request = (GXV_kern_Dialect)dialect_flags; - gxv_kern_validate_generic( table, face, 1, dialect_request, ftvalid ); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvlcar.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvlcar.c deleted file mode 100644 index 13b3de3eaa8..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvlcar.c +++ /dev/null @@ -1,224 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvlcar - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef struct GXV_lcar_DataRec_ - { - FT_UShort format; - - } GXV_lcar_DataRec, *GXV_lcar_Data; - - -#define GXV_LCAR_DATA( FIELD ) GXV_TABLE_DATA( lcar, FIELD ) - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - gxv_lcar_partial_validate( FT_Short partial, - FT_UShort glyph, - GXV_Validator gxvalid ) - { - GXV_NAME_ENTER( "partial" ); - - if ( GXV_LCAR_DATA( format ) != 1 ) - goto Exit; - - gxv_ctlPoint_validate( glyph, (FT_UShort)partial, gxvalid ); - - Exit: - GXV_EXIT; - } - - - static void - gxv_lcar_LookupValue_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - FT_Bytes p = gxvalid->root->base + value_p->u; - FT_Bytes limit = gxvalid->root->limit; - FT_UShort count; - FT_Short partial; - FT_UShort i; - - - GXV_NAME_ENTER( "element in lookupTable" ); - - GXV_LIMIT_CHECK( 2 ); - count = FT_NEXT_USHORT( p ); - - GXV_LIMIT_CHECK( 2 * count ); - for ( i = 0; i < count; i++ ) - { - partial = FT_NEXT_SHORT( p ); - gxv_lcar_partial_validate( partial, glyph, gxvalid ); - } - - GXV_EXIT; - } - - - /* - +------ lcar --------------------+ - | | - | +===============+ | - | | lookup header | | - | +===============+ | - | | BinSrchHeader | | - | +===============+ | - | | lastGlyph[0] | | - | +---------------+ | - | | firstGlyph[0] | | head of lcar sfnt table - | +---------------+ | + - | | offset[0] | -> | offset [byte] - | +===============+ | + - | | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte] - | +---------------+ | - | | firstGlyph[1] | | - | +---------------+ | - | | offset[1] | | - | +===============+ | - | | - | .... | - | | - | 16bit value array | - | +===============+ | - +------| value | <-------+ - | .... - | - | - | - | - | - +----> lcar values...handled by lcar callback function - */ - - static GXV_LookupValueDesc - gxv_lcar_LookupFmt4_transit( FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p; - FT_Bytes limit; - FT_UShort offset; - GXV_LookupValueDesc value; - - FT_UNUSED( lookuptbl_limit ); - - /* XXX: check range? */ - offset = (FT_UShort)( base_value_p->u + - relative_gindex * sizeof ( FT_UShort ) ); - p = gxvalid->root->base + offset; - limit = gxvalid->root->limit; - - GXV_LIMIT_CHECK ( 2 ); - value.u = FT_NEXT_USHORT( p ); - - return value; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** lcar TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_lcar_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = 0; - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - - GXV_lcar_DataRec lcarrec; - GXV_lcar_Data lcar = &lcarrec; - - FT_Fixed version; - - - gxvalid->root = ftvalid; - gxvalid->table_data = lcar; - gxvalid->face = face; - - FT_TRACE3(( "validating `lcar' table\n" )); - GXV_INIT; - - GXV_LIMIT_CHECK( 4 + 2 ); - version = FT_NEXT_LONG( p ); - GXV_LCAR_DATA( format ) = FT_NEXT_USHORT( p ); - - if ( version != 0x00010000UL) - FT_INVALID_FORMAT; - - if ( GXV_LCAR_DATA( format ) > 1 ) - FT_INVALID_FORMAT; - - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_lcar_LookupValue_validate; - gxvalid->lookupfmt4_trans = gxv_lcar_LookupFmt4_transit; - gxv_LookupTable_validate( p, limit, gxvalid ); - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.c deleted file mode 100644 index eeadeb3e1d6..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.c +++ /dev/null @@ -1,285 +0,0 @@ -/**************************************************************************** - * - * 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 -#include FT_TRUETYPE_TABLES_H -#include FT_TRUETYPE_TAGS_H -#include FT_GX_VALIDATE_H -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_GX_VALIDATE_H - -#include "gxvmod.h" -#include "gxvalid.h" -#include "gxvcommn.h" - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmodule - - - static FT_Error - gxv_load_table( FT_Face face, - FT_Tag tag, - FT_Byte* volatile* table, - FT_ULong* table_len ) - { - FT_Error error; - FT_Memory memory = FT_FACE_MEMORY( face ); - - - error = FT_Load_Sfnt_Table( face, tag, 0, NULL, table_len ); - if ( FT_ERR_EQ( error, Table_Missing ) ) - return FT_Err_Ok; - if ( error ) - goto Exit; - - if ( FT_ALLOC( *table, *table_len ) ) - goto Exit; - - error = FT_Load_Sfnt_Table( face, tag, 0, *table, table_len ); - - Exit: - return error; - } - - -#define GXV_TABLE_DECL( _sfnt ) \ - FT_Byte* volatile _sfnt = NULL; \ - FT_ULong len_ ## _sfnt = 0 - -#define GXV_TABLE_LOAD( _sfnt ) \ - if ( ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count ) && \ - ( gx_flags & FT_VALIDATE_ ## _sfnt ) ) \ - { \ - error = gxv_load_table( face, TTAG_ ## _sfnt, \ - &_sfnt, &len_ ## _sfnt ); \ - if ( error ) \ - goto Exit; \ - } - -#define GXV_TABLE_VALIDATE( _sfnt ) \ - if ( _sfnt ) \ - { \ - ft_validator_init( &valid, _sfnt, _sfnt + len_ ## _sfnt, \ - FT_VALIDATE_DEFAULT ); \ - if ( ft_setjmp( valid.jump_buffer ) == 0 ) \ - gxv_ ## _sfnt ## _validate( _sfnt, face, &valid ); \ - error = valid.error; \ - if ( error ) \ - goto Exit; \ - } - -#define GXV_TABLE_SET( _sfnt ) \ - if ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count ) \ - tables[FT_VALIDATE_ ## _sfnt ## _INDEX] = (FT_Bytes)_sfnt - - - static FT_Error - gxv_validate( FT_Face face, - FT_UInt gx_flags, - FT_Bytes tables[FT_VALIDATE_GX_LENGTH], - FT_UInt table_count ) - { - FT_Memory volatile memory = FT_FACE_MEMORY( face ); - - FT_Error error = FT_Err_Ok; - FT_ValidatorRec volatile valid; - - FT_UInt i; - - - GXV_TABLE_DECL( feat ); - GXV_TABLE_DECL( bsln ); - GXV_TABLE_DECL( trak ); - GXV_TABLE_DECL( just ); - GXV_TABLE_DECL( mort ); - GXV_TABLE_DECL( morx ); - GXV_TABLE_DECL( kern ); - GXV_TABLE_DECL( opbd ); - GXV_TABLE_DECL( prop ); - GXV_TABLE_DECL( lcar ); - - for ( i = 0; i < table_count; i++ ) - tables[i] = 0; - - /* load tables */ - GXV_TABLE_LOAD( feat ); - GXV_TABLE_LOAD( bsln ); - GXV_TABLE_LOAD( trak ); - GXV_TABLE_LOAD( just ); - GXV_TABLE_LOAD( mort ); - GXV_TABLE_LOAD( morx ); - GXV_TABLE_LOAD( kern ); - GXV_TABLE_LOAD( opbd ); - GXV_TABLE_LOAD( prop ); - GXV_TABLE_LOAD( lcar ); - - /* validate tables */ - GXV_TABLE_VALIDATE( feat ); - GXV_TABLE_VALIDATE( bsln ); - GXV_TABLE_VALIDATE( trak ); - GXV_TABLE_VALIDATE( just ); - GXV_TABLE_VALIDATE( mort ); - GXV_TABLE_VALIDATE( morx ); - GXV_TABLE_VALIDATE( kern ); - GXV_TABLE_VALIDATE( opbd ); - GXV_TABLE_VALIDATE( prop ); - GXV_TABLE_VALIDATE( lcar ); - - /* Set results */ - GXV_TABLE_SET( feat ); - GXV_TABLE_SET( mort ); - GXV_TABLE_SET( morx ); - GXV_TABLE_SET( bsln ); - GXV_TABLE_SET( just ); - GXV_TABLE_SET( kern ); - GXV_TABLE_SET( opbd ); - GXV_TABLE_SET( trak ); - GXV_TABLE_SET( prop ); - GXV_TABLE_SET( lcar ); - - Exit: - if ( error ) - { - FT_FREE( feat ); - FT_FREE( bsln ); - FT_FREE( trak ); - FT_FREE( just ); - FT_FREE( mort ); - FT_FREE( morx ); - FT_FREE( kern ); - FT_FREE( opbd ); - FT_FREE( prop ); - FT_FREE( lcar ); - } - - return error; - } - - - static FT_Error - classic_kern_validate( FT_Face face, - FT_UInt ckern_flags, - FT_Bytes* ckern_table ) - { - FT_Memory volatile memory = FT_FACE_MEMORY( face ); - - FT_Byte* volatile ckern = NULL; - FT_ULong len_ckern = 0; - - /* without volatile on `error' GCC 4.1.1. emits: */ - /* warning: variable 'error' might be clobbered by 'longjmp' or 'vfork' */ - /* this warning seems spurious but --- */ - FT_Error volatile error; - FT_ValidatorRec volatile valid; - - - *ckern_table = NULL; - - error = gxv_load_table( face, TTAG_kern, &ckern, &len_ckern ); - if ( error ) - goto Exit; - - if ( ckern ) - { - ft_validator_init( &valid, ckern, ckern + len_ckern, - FT_VALIDATE_DEFAULT ); - if ( ft_setjmp( valid.jump_buffer ) == 0 ) - gxv_kern_validate_classic( ckern, face, - ckern_flags & FT_VALIDATE_CKERN, &valid ); - error = valid.error; - if ( error ) - goto Exit; - } - - *ckern_table = ckern; - - Exit: - if ( error ) - FT_FREE( ckern ); - - return error; - } - - - static - const FT_Service_GXvalidateRec gxvalid_interface = - { - gxv_validate /* validate */ - }; - - - static - const FT_Service_CKERNvalidateRec ckernvalid_interface = - { - classic_kern_validate /* validate */ - }; - - - static - const FT_ServiceDescRec gxvalid_services[] = - { - { FT_SERVICE_ID_GX_VALIDATE, &gxvalid_interface }, - { FT_SERVICE_ID_CLASSICKERN_VALIDATE, &ckernvalid_interface }, - { NULL, NULL } - }; - - - static FT_Pointer - gxvalid_get_service( FT_Module module, - const char* service_id ) - { - FT_UNUSED( module ); - - return ft_service_list_lookup( gxvalid_services, service_id ); - } - - - FT_CALLBACK_TABLE_DEF - const FT_Module_Class gxv_module_class = - { - 0, - sizeof ( FT_ModuleRec ), - "gxvalid", - 0x10000L, - 0x20000L, - - NULL, /* module-specific interface */ - - (FT_Module_Constructor)NULL, /* module_init */ - (FT_Module_Destructor) NULL, /* module_done */ - (FT_Module_Requester) gxvalid_get_service /* get_interface */ - }; - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.h b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.h deleted file mode 100644 index 6ecd7312c9f..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmod.h +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** - * - * 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_ -#define GXVMOD_H_ - -#include -#include FT_MODULE_H - - -FT_BEGIN_HEADER - - - FT_EXPORT_VAR( const FT_Module_Class ) gxv_module_class; - - -FT_END_HEADER - -#endif /* GXVMOD_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.c deleted file mode 100644 index 288ef6988b7..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.c +++ /dev/null @@ -1,301 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmort - - - static void - gxv_mort_feature_validate( GXV_mort_feature f, - GXV_Validator gxvalid ) - { - if ( f->featureType >= gxv_feat_registry_length ) - { - GXV_TRACE(( "featureType %d is out of registered range, " - "setting %d is unchecked\n", - f->featureType, f->featureSetting )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - else if ( !gxv_feat_registry[f->featureType].existence ) - { - GXV_TRACE(( "featureType %d is within registered area " - "but undefined, setting %d is unchecked\n", - f->featureType, f->featureSetting )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - else - { - FT_Byte nSettings_max; - - - /* nSettings in gxvfeat.c is halved for exclusive on/off settings */ - nSettings_max = gxv_feat_registry[f->featureType].nSettings; - if ( gxv_feat_registry[f->featureType].exclusive ) - nSettings_max = (FT_Byte)( 2 * nSettings_max ); - - GXV_TRACE(( "featureType %d is registered", f->featureType )); - GXV_TRACE(( "setting %d", f->featureSetting )); - - if ( f->featureSetting > nSettings_max ) - { - GXV_TRACE(( "out of defined range %d", nSettings_max )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - GXV_TRACE(( "\n" )); - } - - /* TODO: enableFlags must be unique value in specified chain? */ - } - - - /* - * nFeatureFlags is typed to FT_ULong to accept that in - * mort (typed FT_UShort) and morx (typed FT_ULong). - */ - FT_LOCAL_DEF( void ) - gxv_mort_featurearray_validate( FT_Bytes table, - FT_Bytes limit, - FT_ULong nFeatureFlags, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_ULong i; - - GXV_mort_featureRec f = GXV_MORT_FEATURE_OFF; - - - GXV_NAME_ENTER( "mort feature list" ); - for ( i = 0; i < nFeatureFlags; i++ ) - { - GXV_LIMIT_CHECK( 2 + 2 + 4 + 4 ); - f.featureType = FT_NEXT_USHORT( p ); - f.featureSetting = FT_NEXT_USHORT( p ); - f.enableFlags = FT_NEXT_ULONG( p ); - f.disableFlags = FT_NEXT_ULONG( p ); - - gxv_mort_feature_validate( &f, gxvalid ); - } - - if ( !IS_GXV_MORT_FEATURE_OFF( f ) ) - FT_INVALID_DATA; - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_mort_coverage_validate( FT_UShort coverage, - GXV_Validator gxvalid ) - { - FT_UNUSED( gxvalid ); - FT_UNUSED( coverage ); - -#ifdef FT_DEBUG_LEVEL_TRACE - if ( coverage & 0x8000U ) - GXV_TRACE(( " this subtable is for vertical text only\n" )); - else - GXV_TRACE(( " this subtable is for horizontal text only\n" )); - - if ( coverage & 0x4000 ) - GXV_TRACE(( " this subtable is applied to glyph array " - "in descending order\n" )); - else - GXV_TRACE(( " this subtable is applied to glyph array " - "in ascending order\n" )); - - if ( coverage & 0x2000 ) - GXV_TRACE(( " this subtable is forcibly applied to " - "vertical/horizontal text\n" )); - - if ( coverage & 0x1FF8 ) - GXV_TRACE(( " coverage has non-zero bits in reserved area\n" )); -#endif - } - - - static void - gxv_mort_subtables_validate( FT_Bytes table, - FT_Bytes limit, - FT_UShort nSubtables, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_Validate_Func fmt_funcs_table[] = - { - gxv_mort_subtable_type0_validate, /* 0 */ - gxv_mort_subtable_type1_validate, /* 1 */ - gxv_mort_subtable_type2_validate, /* 2 */ - NULL, /* 3 */ - gxv_mort_subtable_type4_validate, /* 4 */ - gxv_mort_subtable_type5_validate, /* 5 */ - - }; - - FT_UShort i; - - - GXV_NAME_ENTER( "subtables in a chain" ); - - for ( i = 0; i < nSubtables; i++ ) - { - GXV_Validate_Func func; - - FT_UShort length; - FT_UShort coverage; -#ifdef GXV_LOAD_UNUSED_VARS - FT_ULong subFeatureFlags; -#endif - FT_UInt type; - FT_UInt rest; - - - GXV_LIMIT_CHECK( 2 + 2 + 4 ); - length = FT_NEXT_USHORT( p ); - coverage = FT_NEXT_USHORT( p ); -#ifdef GXV_LOAD_UNUSED_VARS - subFeatureFlags = FT_NEXT_ULONG( p ); -#else - p += 4; -#endif - - GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n", - i + 1, nSubtables, length )); - type = coverage & 0x0007; - rest = length - ( 2 + 2 + 4 ); - - GXV_LIMIT_CHECK( rest ); - gxv_mort_coverage_validate( coverage, gxvalid ); - - if ( type > 5 ) - FT_INVALID_FORMAT; - - func = fmt_funcs_table[type]; - if ( !func ) - GXV_TRACE(( "morx type %d is reserved\n", type )); - - func( p, p + rest, gxvalid ); - - p += rest; - /* TODO: validate subFeatureFlags */ - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - static void - gxv_mort_chain_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; -#ifdef GXV_LOAD_UNUSED_VARS - FT_ULong defaultFlags; -#endif - FT_ULong chainLength; - FT_UShort nFeatureFlags; - FT_UShort nSubtables; - - - GXV_NAME_ENTER( "mort chain header" ); - - GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 ); -#ifdef GXV_LOAD_UNUSED_VARS - defaultFlags = FT_NEXT_ULONG( p ); -#else - p += 4; -#endif - chainLength = FT_NEXT_ULONG( p ); - nFeatureFlags = FT_NEXT_USHORT( p ); - nSubtables = FT_NEXT_USHORT( p ); - - gxv_mort_featurearray_validate( p, table + chainLength, - nFeatureFlags, gxvalid ); - p += gxvalid->subtable_length; - gxv_mort_subtables_validate( p, table + chainLength, nSubtables, gxvalid ); - gxvalid->subtable_length = chainLength; - - /* TODO: validate defaultFlags */ - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_mort_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - FT_Bytes p = table; - FT_Bytes limit = 0; - FT_ULong version; - FT_ULong nChains; - FT_ULong i; - - - gxvalid->root = ftvalid; - gxvalid->face = face; - limit = gxvalid->root->limit; - - FT_TRACE3(( "validating `mort' table\n" )); - GXV_INIT; - - GXV_LIMIT_CHECK( 4 + 4 ); - version = FT_NEXT_ULONG( p ); - nChains = FT_NEXT_ULONG( p ); - - if (version != 0x00010000UL) - FT_INVALID_FORMAT; - - for ( i = 0; i < nChains; i++ ) - { - GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains )); - GXV_32BIT_ALIGNMENT_VALIDATE( p - table ); - gxv_mort_chain_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.h b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.h deleted file mode 100644 index 0619e24fb9d..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort.h +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** - * - * 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_ -#define GXVMORT_H_ - -#include "gxvalid.h" -#include "gxvcommn.h" - -#include FT_SFNT_NAMES_H - - - typedef struct GXV_mort_featureRec_ - { - FT_UShort featureType; - FT_UShort featureSetting; - FT_ULong enableFlags; - FT_ULong disableFlags; - - } GXV_mort_featureRec, *GXV_mort_feature; - -#define GXV_MORT_FEATURE_OFF {0, 1, 0x00000000UL, 0x00000000UL} - -#define IS_GXV_MORT_FEATURE_OFF( f ) \ - ( (f).featureType == 0 || \ - (f).featureSetting == 1 || \ - (f).enableFlags == 0x00000000UL || \ - (f).disableFlags == 0x00000000UL ) - - - FT_LOCAL( void ) - gxv_mort_featurearray_validate( FT_Bytes table, - FT_Bytes limit, - FT_ULong nFeatureFlags, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_mort_coverage_validate( FT_UShort coverage, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_mort_subtable_type0_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_mort_subtable_type1_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_mort_subtable_type2_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_mort_subtable_type4_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_mort_subtable_type5_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - -#endif /* GXVMORT_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort0.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort0.c deleted file mode 100644 index 2c01bf95ec7..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort0.c +++ /dev/null @@ -1,152 +0,0 @@ -/**************************************************************************** - * - * gxvmort0.c - * - * TrueTypeGX/AAT mort table validation - * body for type0 (Indic Script Rearrangement) subtable. - * - * Copyright (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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmort - - - static const char* GXV_Mort_IndicScript_Msg[] = - { - "no change", - "Ax => xA", - "xD => Dx", - "AxD => DxA", - "ABx => xAB", - "ABx => xBA", - "xCD => CDx", - "xCD => DCx", - "AxCD => CDxA", - "AxCD => DCxA", - "ABxD => DxAB", - "ABxD => DxBA", - "ABxCD => CDxAB", - "ABxCD => CDxBA", - "ABxCD => DCxAB", - "ABxCD => DCxBA", - - }; - - - static void - gxv_mort_subtable_type0_entry_validate( - FT_Byte state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_UShort markFirst; - FT_UShort dontAdvance; - FT_UShort markLast; - FT_UShort reserved; - FT_UShort verb = 0; - - FT_UNUSED( state ); - FT_UNUSED( table ); - FT_UNUSED( limit ); - - FT_UNUSED( GXV_Mort_IndicScript_Msg[verb] ); /* for the non-debugging */ - FT_UNUSED( glyphOffset_p ); /* case */ - - - markFirst = (FT_UShort)( ( flags >> 15 ) & 1 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); - markLast = (FT_UShort)( ( flags >> 13 ) & 1 ); - - reserved = (FT_UShort)( flags & 0x1FF0 ); - verb = (FT_UShort)( flags & 0x000F ); - - GXV_TRACE(( " IndicScript MorphRule for glyphOffset 0x%04x", - glyphOffset_p->u )); - GXV_TRACE(( " markFirst=%01d", markFirst )); - GXV_TRACE(( " dontAdvance=%01d", dontAdvance )); - GXV_TRACE(( " markLast=%01d", markLast )); - GXV_TRACE(( " %02d", verb )); - GXV_TRACE(( " %s\n", GXV_Mort_IndicScript_Msg[verb] )); - - if ( markFirst > 0 && markLast > 0 ) - { - GXV_TRACE(( " [odd] a glyph is marked as the first and last" - " in Indic rearrangement\n" )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - - if ( markFirst > 0 && dontAdvance > 0 ) - { - GXV_TRACE(( " [odd] the first glyph is marked as dontAdvance" - " in Indic rearrangement\n" )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - - if ( 0 < reserved ) - { - GXV_TRACE(( " non-zero bits found in reserved range\n" )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - else - GXV_TRACE(( "\n" )); - } - - - FT_LOCAL_DEF( void ) - gxv_mort_subtable_type0_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - GXV_NAME_ENTER( - "mort chain subtable type0 (Indic-Script Rearrangement)" ); - - GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE ); - - gxvalid->statetable.optdata = NULL; - gxvalid->statetable.optdata_load_func = NULL; - gxvalid->statetable.subtable_setup_func = NULL; - gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; - gxvalid->statetable.entry_validate_func = - gxv_mort_subtable_type0_entry_validate; - - gxv_StateTable_validate( p, limit, gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort1.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort1.c deleted file mode 100644 index c71ba13351c..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort1.c +++ /dev/null @@ -1,260 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmort - - - typedef struct GXV_mort_subtable_type1_StateOptRec_ - { - FT_UShort substitutionTable; - FT_UShort substitutionTable_length; - - } GXV_mort_subtable_type1_StateOptRec, - *GXV_mort_subtable_type1_StateOptRecData; - -#define GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE \ - ( GXV_STATETABLE_HEADER_SIZE + 2 ) - - - static void - gxv_mort_subtable_type1_substitutionTable_load( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_mort_subtable_type1_StateOptRecData optdata = - (GXV_mort_subtable_type1_StateOptRecData)gxvalid->statetable.optdata; - - - GXV_LIMIT_CHECK( 2 ); - optdata->substitutionTable = FT_NEXT_USHORT( p ); - } - - - static void - gxv_mort_subtable_type1_subtable_setup( FT_UShort table_size, - FT_UShort classTable, - FT_UShort stateArray, - FT_UShort entryTable, - FT_UShort* classTable_length_p, - FT_UShort* stateArray_length_p, - FT_UShort* entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_UShort o[4]; - FT_UShort *l[4]; - FT_UShort buff[5]; - - GXV_mort_subtable_type1_StateOptRecData optdata = - (GXV_mort_subtable_type1_StateOptRecData)gxvalid->statetable.optdata; - - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - o[3] = optdata->substitutionTable; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - l[3] = &( optdata->substitutionTable_length ); - - gxv_set_length_by_ushort_offset( o, l, buff, 4, table_size, gxvalid ); - } - - - static void - gxv_mort_subtable_type1_offset_to_subst_validate( - FT_Short wordOffset, - const FT_String* tag, - FT_Byte state, - GXV_Validator gxvalid ) - { - FT_UShort substTable; - FT_UShort substTable_limit; - - FT_UNUSED( tag ); - FT_UNUSED( state ); - - - substTable = - ((GXV_mort_subtable_type1_StateOptRec *) - (gxvalid->statetable.optdata))->substitutionTable; - substTable_limit = - (FT_UShort)( substTable + - ((GXV_mort_subtable_type1_StateOptRec *) - (gxvalid->statetable.optdata))->substitutionTable_length ); - - gxvalid->min_gid = (FT_UShort)( ( substTable - wordOffset * 2 ) / 2 ); - gxvalid->max_gid = (FT_UShort)( ( substTable_limit - wordOffset * 2 ) / 2 ); - gxvalid->max_gid = (FT_UShort)( FT_MAX( gxvalid->max_gid, - gxvalid->face->num_glyphs ) ); - - /* XXX: check range? */ - - /* TODO: min_gid & max_gid comparison with ClassTable contents */ - } - - - static void - gxv_mort_subtable_type1_entry_validate( - FT_Byte state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort setMark; - FT_UShort dontAdvance; -#endif - FT_UShort reserved; - FT_Short markOffset; - FT_Short currentOffset; - - FT_UNUSED( table ); - FT_UNUSED( limit ); - - -#ifdef GXV_LOAD_UNUSED_VARS - setMark = (FT_UShort)( flags >> 15 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); -#endif - reserved = (FT_UShort)( flags & 0x3FFF ); - - markOffset = (FT_Short)( glyphOffset_p->ul >> 16 ); - currentOffset = (FT_Short)( glyphOffset_p->ul ); - - if ( 0 < reserved ) - { - GXV_TRACE(( " non-zero bits found in reserved range\n" )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - - gxv_mort_subtable_type1_offset_to_subst_validate( markOffset, - "markOffset", - state, - gxvalid ); - - gxv_mort_subtable_type1_offset_to_subst_validate( currentOffset, - "currentOffset", - state, - gxvalid ); - } - - - static void - gxv_mort_subtable_type1_substTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort num_gids = (FT_UShort)( - ((GXV_mort_subtable_type1_StateOptRec *) - (gxvalid->statetable.optdata))->substitutionTable_length / 2 ); - FT_UShort i; - - - GXV_NAME_ENTER( "validating contents of substitutionTable" ); - for ( i = 0; i < num_gids; i++ ) - { - FT_UShort dst_gid; - - - GXV_LIMIT_CHECK( 2 ); - dst_gid = FT_NEXT_USHORT( p ); - - if ( dst_gid >= 0xFFFFU ) - continue; - - if ( dst_gid < gxvalid->min_gid || gxvalid->max_gid < dst_gid ) - { - GXV_TRACE(( "substTable include a strange gid[%d]=%d >" - " out of define range (%d..%d)\n", - i, dst_gid, gxvalid->min_gid, gxvalid->max_gid )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - } - - GXV_EXIT; - } - - - /* - * subtable for Contextual glyph substitution is a modified StateTable. - * In addition to classTable, stateArray, and entryTable, the field - * `substitutionTable' is added. - */ - FT_LOCAL_DEF( void ) - gxv_mort_subtable_type1_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_mort_subtable_type1_StateOptRec st_rec; - - - GXV_NAME_ENTER( "mort chain subtable type1 (Contextual Glyph Subst)" ); - - GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE ); - - gxvalid->statetable.optdata = - &st_rec; - gxvalid->statetable.optdata_load_func = - gxv_mort_subtable_type1_substitutionTable_load; - gxvalid->statetable.subtable_setup_func = - gxv_mort_subtable_type1_subtable_setup; - gxvalid->statetable.entry_glyphoffset_fmt = - GXV_GLYPHOFFSET_ULONG; - gxvalid->statetable.entry_validate_func = - - gxv_mort_subtable_type1_entry_validate; - gxv_StateTable_validate( p, limit, gxvalid ); - - gxv_mort_subtable_type1_substTable_validate( - table + st_rec.substitutionTable, - table + st_rec.substitutionTable + st_rec.substitutionTable_length, - gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort2.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort2.c deleted file mode 100644 index 889d3bd582c..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort2.c +++ /dev/null @@ -1,312 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmort - - - typedef struct GXV_mort_subtable_type2_StateOptRec_ - { - FT_UShort ligActionTable; - FT_UShort componentTable; - FT_UShort ligatureTable; - FT_UShort ligActionTable_length; - FT_UShort componentTable_length; - FT_UShort ligatureTable_length; - - } GXV_mort_subtable_type2_StateOptRec, - *GXV_mort_subtable_type2_StateOptRecData; - -#define GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE \ - ( GXV_STATETABLE_HEADER_SIZE + 2 + 2 + 2 ) - - - static void - gxv_mort_subtable_type2_opttable_load( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - GXV_mort_subtable_type2_StateOptRecData optdata = - (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata; - - - GXV_LIMIT_CHECK( 2 + 2 + 2 ); - optdata->ligActionTable = FT_NEXT_USHORT( p ); - optdata->componentTable = FT_NEXT_USHORT( p ); - optdata->ligatureTable = FT_NEXT_USHORT( p ); - - GXV_TRACE(( "offset to ligActionTable=0x%04x\n", - optdata->ligActionTable )); - GXV_TRACE(( "offset to componentTable=0x%04x\n", - optdata->componentTable )); - GXV_TRACE(( "offset to ligatureTable=0x%04x\n", - optdata->ligatureTable )); - } - - - static void - gxv_mort_subtable_type2_subtable_setup( FT_UShort table_size, - FT_UShort classTable, - FT_UShort stateArray, - FT_UShort entryTable, - FT_UShort *classTable_length_p, - FT_UShort *stateArray_length_p, - FT_UShort *entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_UShort o[6]; - FT_UShort *l[6]; - FT_UShort buff[7]; - - GXV_mort_subtable_type2_StateOptRecData optdata = - (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata; - - - GXV_NAME_ENTER( "subtable boundaries setup" ); - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - o[3] = optdata->ligActionTable; - o[4] = optdata->componentTable; - o[5] = optdata->ligatureTable; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - l[3] = &(optdata->ligActionTable_length); - l[4] = &(optdata->componentTable_length); - l[5] = &(optdata->ligatureTable_length); - - gxv_set_length_by_ushort_offset( o, l, buff, 6, table_size, gxvalid ); - - GXV_TRACE(( "classTable: offset=0x%04x length=0x%04x\n", - classTable, *classTable_length_p )); - GXV_TRACE(( "stateArray: offset=0x%04x length=0x%04x\n", - stateArray, *stateArray_length_p )); - GXV_TRACE(( "entryTable: offset=0x%04x length=0x%04x\n", - entryTable, *entryTable_length_p )); - GXV_TRACE(( "ligActionTable: offset=0x%04x length=0x%04x\n", - optdata->ligActionTable, - optdata->ligActionTable_length )); - GXV_TRACE(( "componentTable: offset=0x%04x length=0x%04x\n", - optdata->componentTable, - optdata->componentTable_length )); - GXV_TRACE(( "ligatureTable: offset=0x%04x length=0x%04x\n", - optdata->ligatureTable, - optdata->ligatureTable_length )); - - GXV_EXIT; - } - - - static void - gxv_mort_subtable_type2_ligActionOffset_validate( - FT_Bytes table, - FT_UShort ligActionOffset, - GXV_Validator gxvalid ) - { - /* access ligActionTable */ - GXV_mort_subtable_type2_StateOptRecData optdata = - (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata; - - FT_Bytes lat_base = table + optdata->ligActionTable; - FT_Bytes p = table + ligActionOffset; - FT_Bytes lat_limit = lat_base + optdata->ligActionTable; - - - GXV_32BIT_ALIGNMENT_VALIDATE( ligActionOffset ); - if ( p < lat_base ) - { - GXV_TRACE(( "too short offset 0x%04x: p < lat_base (%d byte rewind)\n", - ligActionOffset, lat_base - p )); - - /* FontValidator, ftxvalidator, ftxdumperfuser warn but continue */ - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - else if ( lat_limit < p ) - { - GXV_TRACE(( "too large offset 0x%04x: lat_limit < p (%d byte overrun)\n", - ligActionOffset, p - lat_limit )); - - /* FontValidator, ftxvalidator, ftxdumperfuser warn but continue */ - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - else - { - /* validate entry in ligActionTable */ - FT_ULong lig_action; -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort last; - FT_UShort store; -#endif - FT_ULong offset; - - - lig_action = FT_NEXT_ULONG( p ); -#ifdef GXV_LOAD_UNUSED_VARS - last = (FT_UShort)( ( lig_action >> 31 ) & 1 ); - store = (FT_UShort)( ( lig_action >> 30 ) & 1 ); -#endif - - /* Apple spec defines this offset as a word offset */ - offset = lig_action & 0x3FFFFFFFUL; - if ( offset * 2 < optdata->ligatureTable ) - { - GXV_TRACE(( "too short offset 0x%08x:" - " 2 x offset < ligatureTable (%d byte rewind)\n", - offset, optdata->ligatureTable - offset * 2 )); - - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } else if ( offset * 2 > - optdata->ligatureTable + optdata->ligatureTable_length ) - { - GXV_TRACE(( "too long offset 0x%08x:" - " 2 x offset > ligatureTable + ligatureTable_length" - " (%d byte overrun)\n", - offset, - optdata->ligatureTable + optdata->ligatureTable_length - - offset * 2 )); - - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - } - } - - - static void - gxv_mort_subtable_type2_entry_validate( - FT_Byte state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort setComponent; - FT_UShort dontAdvance; -#endif - FT_UShort offset; - - FT_UNUSED( state ); - FT_UNUSED( glyphOffset_p ); - FT_UNUSED( limit ); - - -#ifdef GXV_LOAD_UNUSED_VARS - setComponent = (FT_UShort)( ( flags >> 15 ) & 1 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); -#endif - - offset = (FT_UShort)( flags & 0x3FFFU ); - - if ( 0 < offset ) - gxv_mort_subtable_type2_ligActionOffset_validate( table, offset, - gxvalid ); - } - - - static void - gxv_mort_subtable_type2_ligatureTable_validate( FT_Bytes table, - GXV_Validator gxvalid ) - { - GXV_mort_subtable_type2_StateOptRecData optdata = - (GXV_mort_subtable_type2_StateOptRecData)gxvalid->statetable.optdata; - - FT_Bytes p = table + optdata->ligatureTable; - FT_Bytes limit = table + optdata->ligatureTable - + optdata->ligatureTable_length; - - - GXV_NAME_ENTER( "mort chain subtable type2 - substitutionTable" ); - if ( 0 != optdata->ligatureTable ) - { - /* Apple does not give specification of ligatureTable format */ - while ( p < limit ) - { - FT_UShort lig_gid; - - - GXV_LIMIT_CHECK( 2 ); - lig_gid = FT_NEXT_USHORT( p ); - - if ( gxvalid->face->num_glyphs < lig_gid ) - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - } - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_mort_subtable_type2_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_mort_subtable_type2_StateOptRec lig_rec; - - - GXV_NAME_ENTER( "mort chain subtable type2 (Ligature Substitution)" ); - - GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE ); - - gxvalid->statetable.optdata = - &lig_rec; - gxvalid->statetable.optdata_load_func = - gxv_mort_subtable_type2_opttable_load; - gxvalid->statetable.subtable_setup_func = - gxv_mort_subtable_type2_subtable_setup; - gxvalid->statetable.entry_glyphoffset_fmt = - GXV_GLYPHOFFSET_NONE; - gxvalid->statetable.entry_validate_func = - gxv_mort_subtable_type2_entry_validate; - - gxv_StateTable_validate( p, limit, gxvalid ); - - p += gxvalid->subtable_length; - gxv_mort_subtable_type2_ligatureTable_validate( table, gxvalid ); - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort4.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort4.c deleted file mode 100644 index f8ce6cf789e..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort4.c +++ /dev/null @@ -1,126 +0,0 @@ -/**************************************************************************** - * - * gxvmort4.c - * - * TrueTypeGX/AAT mort table validation - * body for type4 (Non-Contextual Glyph Substitution) subtable. - * - * Copyright (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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmort - - - static void - gxv_mort_subtable_type4_lookupval_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - FT_UNUSED( glyph ); - - gxv_glyphid_validate( value_p->u, gxvalid ); - } - - /* - +===============+ --------+ - | lookup header | | - +===============+ | - | BinSrchHeader | | - +===============+ | - | lastGlyph[0] | | - +---------------+ | - | firstGlyph[0] | | head of lookup table - +---------------+ | + - | offset[0] | -> | offset [byte] - +===============+ | + - | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte] - +---------------+ | - | firstGlyph[1] | | - +---------------+ | - | offset[1] | | - +===============+ | - | - .... | - | - 16bit value array | - +===============+ | - | value | <-------+ - .... - */ - - static GXV_LookupValueDesc - gxv_mort_subtable_type4_lookupfmt4_transit( - FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p; - FT_Bytes limit; - FT_UShort offset; - GXV_LookupValueDesc value; - - /* XXX: check range? */ - offset = (FT_UShort)( base_value_p->u + - relative_gindex * sizeof ( FT_UShort ) ); - - p = gxvalid->lookuptbl_head + offset; - limit = lookuptbl_limit; - - GXV_LIMIT_CHECK( 2 ); - value.u = FT_NEXT_USHORT( p ); - - return value; - } - - - FT_LOCAL_DEF( void ) - gxv_mort_subtable_type4_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - GXV_NAME_ENTER( "mort chain subtable type4 " - "(Non-Contextual Glyph Substitution)" ); - - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_mort_subtable_type4_lookupval_validate; - gxvalid->lookupfmt4_trans = gxv_mort_subtable_type4_lookupfmt4_transit; - - gxv_LookupTable_validate( p, limit, gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort5.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort5.c deleted file mode 100644 index 1ba1e5ded05..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmort5.c +++ /dev/null @@ -1,234 +0,0 @@ -/**************************************************************************** - * - * gxvmort5.c - * - * TrueTypeGX/AAT mort table validation - * body for type5 (Contextual Glyph Insertion) subtable. - * - * Copyright (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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmort - - - /* - * mort subtable type5 (Contextual Glyph Insertion) - * has the format of StateTable with insertion-glyph-list, - * but without name. The offset is given by glyphOffset in - * entryTable. There is no table location declaration - * like xxxTable. - */ - - typedef struct GXV_mort_subtable_type5_StateOptRec_ - { - FT_UShort classTable; - FT_UShort stateArray; - FT_UShort entryTable; - -#define GXV_MORT_SUBTABLE_TYPE5_HEADER_SIZE GXV_STATETABLE_HEADER_SIZE - - FT_UShort* classTable_length_p; - FT_UShort* stateArray_length_p; - FT_UShort* entryTable_length_p; - - } GXV_mort_subtable_type5_StateOptRec, - *GXV_mort_subtable_type5_StateOptRecData; - - - FT_LOCAL_DEF( void ) - gxv_mort_subtable_type5_subtable_setup( FT_UShort table_size, - FT_UShort classTable, - FT_UShort stateArray, - FT_UShort entryTable, - FT_UShort* classTable_length_p, - FT_UShort* stateArray_length_p, - FT_UShort* entryTable_length_p, - GXV_Validator gxvalid ) - { - GXV_mort_subtable_type5_StateOptRecData optdata = - (GXV_mort_subtable_type5_StateOptRecData)gxvalid->statetable.optdata; - - - gxv_StateTable_subtable_setup( table_size, - classTable, - stateArray, - entryTable, - classTable_length_p, - stateArray_length_p, - entryTable_length_p, - gxvalid ); - - optdata->classTable = classTable; - optdata->stateArray = stateArray; - optdata->entryTable = entryTable; - - optdata->classTable_length_p = classTable_length_p; - optdata->stateArray_length_p = stateArray_length_p; - optdata->entryTable_length_p = entryTable_length_p; - } - - - static void - gxv_mort_subtable_type5_InsertList_validate( FT_UShort offset, - FT_UShort count, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - /* - * We don't know the range of insertion-glyph-list. - * Set range by whole of state table. - */ - FT_Bytes p = table + offset; - - GXV_mort_subtable_type5_StateOptRecData optdata = - (GXV_mort_subtable_type5_StateOptRecData)gxvalid->statetable.optdata; - - if ( optdata->classTable < offset && - offset < optdata->classTable + *(optdata->classTable_length_p) ) - GXV_TRACE(( " offset runs into ClassTable" )); - if ( optdata->stateArray < offset && - offset < optdata->stateArray + *(optdata->stateArray_length_p) ) - GXV_TRACE(( " offset runs into StateArray" )); - if ( optdata->entryTable < offset && - offset < optdata->entryTable + *(optdata->entryTable_length_p) ) - GXV_TRACE(( " offset runs into EntryTable" )); - -#ifndef GXV_LOAD_TRACE_VARS - GXV_LIMIT_CHECK( count * 2 ); -#else - while ( p < table + offset + ( count * 2 ) ) - { - FT_UShort insert_glyphID; - - - GXV_LIMIT_CHECK( 2 ); - insert_glyphID = FT_NEXT_USHORT( p ); - GXV_TRACE(( " 0x%04x", insert_glyphID )); - } - GXV_TRACE(( "\n" )); -#endif - } - - - static void - gxv_mort_subtable_type5_entry_validate( - FT_Byte state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - FT_Bool setMark; - FT_Bool dontAdvance; - FT_Bool currentIsKashidaLike; - FT_Bool markedIsKashidaLike; - FT_Bool currentInsertBefore; - FT_Bool markedInsertBefore; -#endif - FT_Byte currentInsertCount; - FT_Byte markedInsertCount; - FT_UShort currentInsertList; - FT_UShort markedInsertList; - - FT_UNUSED( state ); - - -#ifdef GXV_LOAD_UNUSED_VARS - setMark = FT_BOOL( ( flags >> 15 ) & 1 ); - dontAdvance = FT_BOOL( ( flags >> 14 ) & 1 ); - currentIsKashidaLike = FT_BOOL( ( flags >> 13 ) & 1 ); - markedIsKashidaLike = FT_BOOL( ( flags >> 12 ) & 1 ); - currentInsertBefore = FT_BOOL( ( flags >> 11 ) & 1 ); - markedInsertBefore = FT_BOOL( ( flags >> 10 ) & 1 ); -#endif - - currentInsertCount = (FT_Byte)( ( flags >> 5 ) & 0x1F ); - markedInsertCount = (FT_Byte)( flags & 0x001F ); - - currentInsertList = (FT_UShort)( glyphOffset->ul >> 16 ); - markedInsertList = (FT_UShort)( glyphOffset->ul ); - - if ( 0 != currentInsertList && 0 != currentInsertCount ) - { - gxv_mort_subtable_type5_InsertList_validate( currentInsertList, - currentInsertCount, - table, - limit, - gxvalid ); - } - - if ( 0 != markedInsertList && 0 != markedInsertCount ) - { - gxv_mort_subtable_type5_InsertList_validate( markedInsertList, - markedInsertCount, - table, - limit, - gxvalid ); - } - } - - - FT_LOCAL_DEF( void ) - gxv_mort_subtable_type5_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_mort_subtable_type5_StateOptRec et_rec; - GXV_mort_subtable_type5_StateOptRecData et = &et_rec; - - - GXV_NAME_ENTER( "mort chain subtable type5 (Glyph Insertion)" ); - - GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE5_HEADER_SIZE ); - - gxvalid->statetable.optdata = - et; - gxvalid->statetable.optdata_load_func = - NULL; - gxvalid->statetable.subtable_setup_func = - gxv_mort_subtable_type5_subtable_setup; - gxvalid->statetable.entry_glyphoffset_fmt = - GXV_GLYPHOFFSET_ULONG; - gxvalid->statetable.entry_validate_func = - gxv_mort_subtable_type5_entry_validate; - - gxv_StateTable_validate( p, limit, gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.c deleted file mode 100644 index 8bd45c27e6b..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.c +++ /dev/null @@ -1,199 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmorx - - - static void - gxv_morx_subtables_validate( FT_Bytes table, - FT_Bytes limit, - FT_UShort nSubtables, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_Validate_Func fmt_funcs_table[] = - { - gxv_morx_subtable_type0_validate, /* 0 */ - gxv_morx_subtable_type1_validate, /* 1 */ - gxv_morx_subtable_type2_validate, /* 2 */ - NULL, /* 3 */ - gxv_morx_subtable_type4_validate, /* 4 */ - gxv_morx_subtable_type5_validate, /* 5 */ - - }; - - FT_UShort i; - - - GXV_NAME_ENTER( "subtables in a chain" ); - - for ( i = 0; i < nSubtables; i++ ) - { - GXV_Validate_Func func; - - FT_ULong length; - FT_ULong coverage; -#ifdef GXV_LOAD_UNUSED_VARS - FT_ULong subFeatureFlags; -#endif - FT_ULong type; - FT_ULong rest; - - - GXV_LIMIT_CHECK( 4 + 4 + 4 ); - length = FT_NEXT_ULONG( p ); - coverage = FT_NEXT_ULONG( p ); -#ifdef GXV_LOAD_UNUSED_VARS - subFeatureFlags = FT_NEXT_ULONG( p ); -#else - p += 4; -#endif - - GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n", - i + 1, nSubtables, length )); - - type = coverage & 0x0007; - rest = length - ( 4 + 4 + 4 ); - GXV_LIMIT_CHECK( rest ); - - /* morx coverage consists of mort_coverage & 16bit padding */ - gxv_mort_coverage_validate( (FT_UShort)( ( coverage >> 16 ) | coverage ), - gxvalid ); - if ( type > 5 ) - FT_INVALID_FORMAT; - - func = fmt_funcs_table[type]; - if ( !func ) - GXV_TRACE(( "morx type %d is reserved\n", type )); - - func( p, p + rest, gxvalid ); - - /* TODO: subFeatureFlags should be unique in a table? */ - p += rest; - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - - GXV_EXIT; - } - - - static void - gxv_morx_chain_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; -#ifdef GXV_LOAD_UNUSED_VARS - FT_ULong defaultFlags; -#endif - FT_ULong chainLength; - FT_ULong nFeatureFlags; - FT_ULong nSubtables; - - - GXV_NAME_ENTER( "morx chain header" ); - - GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 ); -#ifdef GXV_LOAD_UNUSED_VARS - defaultFlags = FT_NEXT_ULONG( p ); -#else - p += 4; -#endif - chainLength = FT_NEXT_ULONG( p ); - nFeatureFlags = FT_NEXT_ULONG( p ); - nSubtables = FT_NEXT_ULONG( p ); - - /* feature-array of morx is same with that of mort */ - gxv_mort_featurearray_validate( p, limit, nFeatureFlags, gxvalid ); - p += gxvalid->subtable_length; - - if ( nSubtables >= 0x10000L ) - FT_INVALID_DATA; - - gxv_morx_subtables_validate( p, table + chainLength, - (FT_UShort)nSubtables, gxvalid ); - - gxvalid->subtable_length = chainLength; - - /* TODO: defaultFlags should be compared with the flags in tables */ - - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_morx_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - FT_Bytes p = table; - FT_Bytes limit = 0; - FT_ULong version; - FT_ULong nChains; - FT_ULong i; - - - gxvalid->root = ftvalid; - gxvalid->face = face; - - FT_TRACE3(( "validating `morx' table\n" )); - GXV_INIT; - - GXV_LIMIT_CHECK( 4 + 4 ); - version = FT_NEXT_ULONG( p ); - nChains = FT_NEXT_ULONG( p ); - - if ( version != 0x00020000UL ) - FT_INVALID_FORMAT; - - for ( i = 0; i < nChains; i++ ) - { - GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains )); - GXV_32BIT_ALIGNMENT_VALIDATE( p - table ); - gxv_morx_chain_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.h b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.h deleted file mode 100644 index e2572703424..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** - * - * 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_ -#define GXVMORX_H_ - - -#include "gxvalid.h" -#include "gxvcommn.h" -#include "gxvmort.h" - -#include FT_SFNT_NAMES_H - - - FT_LOCAL( void ) - gxv_morx_subtable_type0_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_morx_subtable_type1_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_morx_subtable_type2_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_morx_subtable_type4_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - FT_LOCAL( void ) - gxv_morx_subtable_type5_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ); - - -#endif /* GXVMORX_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx0.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx0.c deleted file mode 100644 index d7764a0ae8b..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx0.c +++ /dev/null @@ -1,112 +0,0 @@ -/**************************************************************************** - * - * gxvmorx0.c - * - * TrueTypeGX/AAT morx table validation - * body for type0 (Indic Script Rearrangement) subtable. - * - * Copyright (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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmorx - - - static void - gxv_morx_subtable_type0_entry_validate( - FT_UShort state, - FT_UShort flags, - GXV_XStateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort markFirst; - FT_UShort dontAdvance; - FT_UShort markLast; -#endif - FT_UShort reserved; -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort verb; -#endif - - FT_UNUSED( state ); - FT_UNUSED( glyphOffset_p ); - FT_UNUSED( table ); - FT_UNUSED( limit ); - - -#ifdef GXV_LOAD_UNUSED_VARS - markFirst = (FT_UShort)( ( flags >> 15 ) & 1 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); - markLast = (FT_UShort)( ( flags >> 13 ) & 1 ); -#endif - - reserved = (FT_UShort)( flags & 0x1FF0 ); -#ifdef GXV_LOAD_UNUSED_VARS - verb = (FT_UShort)( flags & 0x000F ); -#endif - - if ( 0 < reserved ) - { - GXV_TRACE(( " non-zero bits found in reserved range\n" )); - FT_INVALID_DATA; - } - } - - - FT_LOCAL_DEF( void ) - gxv_morx_subtable_type0_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - - GXV_NAME_ENTER( - "morx chain subtable type0 (Indic-Script Rearrangement)" ); - - GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE ); - - gxvalid->xstatetable.optdata = NULL; - gxvalid->xstatetable.optdata_load_func = NULL; - gxvalid->xstatetable.subtable_setup_func = NULL; - gxvalid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; - gxvalid->xstatetable.entry_validate_func = - gxv_morx_subtable_type0_entry_validate; - - gxv_XStateTable_validate( p, limit, gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx1.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx1.c deleted file mode 100644 index 5b41b3605f8..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx1.c +++ /dev/null @@ -1,278 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmorx - - - typedef struct GXV_morx_subtable_type1_StateOptRec_ - { - FT_ULong substitutionTable; - FT_ULong substitutionTable_length; - FT_UShort substitutionTable_num_lookupTables; - - } GXV_morx_subtable_type1_StateOptRec, - *GXV_morx_subtable_type1_StateOptRecData; - - -#define GXV_MORX_SUBTABLE_TYPE1_HEADER_SIZE \ - ( GXV_STATETABLE_HEADER_SIZE + 2 ) - - - static void - gxv_morx_subtable_type1_substitutionTable_load( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_morx_subtable_type1_StateOptRecData optdata = - (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata; - - - GXV_LIMIT_CHECK( 2 ); - optdata->substitutionTable = FT_NEXT_USHORT( p ); - } - - - static void - gxv_morx_subtable_type1_subtable_setup( FT_ULong table_size, - FT_ULong classTable, - FT_ULong stateArray, - FT_ULong entryTable, - FT_ULong* classTable_length_p, - FT_ULong* stateArray_length_p, - FT_ULong* entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_ULong o[4]; - FT_ULong *l[4]; - FT_ULong buff[5]; - - GXV_morx_subtable_type1_StateOptRecData optdata = - (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata; - - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - o[3] = optdata->substitutionTable; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - l[3] = &(optdata->substitutionTable_length); - - gxv_set_length_by_ulong_offset( o, l, buff, 4, table_size, gxvalid ); - } - - - static void - gxv_morx_subtable_type1_entry_validate( - FT_UShort state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_TRACE_VARS - FT_UShort setMark; - FT_UShort dontAdvance; -#endif - FT_UShort reserved; - FT_Short markIndex; - FT_Short currentIndex; - - GXV_morx_subtable_type1_StateOptRecData optdata = - (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata; - - FT_UNUSED( state ); - FT_UNUSED( table ); - FT_UNUSED( limit ); - - -#ifdef GXV_LOAD_TRACE_VARS - setMark = (FT_UShort)( ( flags >> 15 ) & 1 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); -#endif - - reserved = (FT_UShort)( flags & 0x3FFF ); - - markIndex = (FT_Short)( glyphOffset_p->ul >> 16 ); - currentIndex = (FT_Short)( glyphOffset_p->ul ); - - GXV_TRACE(( " setMark=%01d dontAdvance=%01d\n", - setMark, dontAdvance )); - - if ( 0 < reserved ) - { - GXV_TRACE(( " non-zero bits found in reserved range\n" )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA ); - } - - GXV_TRACE(( "markIndex = %d, currentIndex = %d\n", - markIndex, currentIndex )); - - if ( optdata->substitutionTable_num_lookupTables < markIndex + 1 ) - optdata->substitutionTable_num_lookupTables = - (FT_UShort)( markIndex + 1 ); - - if ( optdata->substitutionTable_num_lookupTables < currentIndex + 1 ) - optdata->substitutionTable_num_lookupTables = - (FT_UShort)( currentIndex + 1 ); - } - - - static void - gxv_morx_subtable_type1_LookupValue_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - FT_UNUSED( glyph ); /* for the non-debugging case */ - - GXV_TRACE(( "morx subtable type1 subst.: %d -> %d\n", glyph, value_p->u )); - - if ( value_p->u > gxvalid->face->num_glyphs ) - FT_INVALID_GLYPH_ID; - } - - - static GXV_LookupValueDesc - gxv_morx_subtable_type1_LookupFmt4_transit( - FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p; - FT_Bytes limit; - FT_UShort offset; - GXV_LookupValueDesc value; - - /* XXX: check range? */ - offset = (FT_UShort)( base_value_p->u + - relative_gindex * sizeof ( FT_UShort ) ); - - p = gxvalid->lookuptbl_head + offset; - limit = lookuptbl_limit; - - GXV_LIMIT_CHECK ( 2 ); - value.u = FT_NEXT_USHORT( p ); - - return value; - } - - - /* - * TODO: length should be limit? - **/ - static void - gxv_morx_subtable_type1_substitutionTable_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort i; - - GXV_morx_subtable_type1_StateOptRecData optdata = - (GXV_morx_subtable_type1_StateOptRecData)gxvalid->xstatetable.optdata; - - - /* TODO: calculate offset/length for each lookupTables */ - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_morx_subtable_type1_LookupValue_validate; - gxvalid->lookupfmt4_trans = gxv_morx_subtable_type1_LookupFmt4_transit; - - for ( i = 0; i < optdata->substitutionTable_num_lookupTables; i++ ) - { - FT_ULong offset; - - - GXV_LIMIT_CHECK( 4 ); - offset = FT_NEXT_ULONG( p ); - - gxv_LookupTable_validate( table + offset, limit, gxvalid ); - } - - /* TODO: overlapping of lookupTables in substitutionTable */ - } - - - /* - * subtable for Contextual glyph substitution is a modified StateTable. - * In addition to classTable, stateArray, entryTable, the field - * `substitutionTable' is added. - */ - FT_LOCAL_DEF( void ) - gxv_morx_subtable_type1_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_morx_subtable_type1_StateOptRec st_rec; - - - GXV_NAME_ENTER( "morx chain subtable type1 (Contextual Glyph Subst)" ); - - GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE1_HEADER_SIZE ); - - st_rec.substitutionTable_num_lookupTables = 0; - - gxvalid->xstatetable.optdata = - &st_rec; - gxvalid->xstatetable.optdata_load_func = - gxv_morx_subtable_type1_substitutionTable_load; - gxvalid->xstatetable.subtable_setup_func = - gxv_morx_subtable_type1_subtable_setup; - gxvalid->xstatetable.entry_glyphoffset_fmt = - GXV_GLYPHOFFSET_ULONG; - gxvalid->xstatetable.entry_validate_func = - gxv_morx_subtable_type1_entry_validate; - - gxv_XStateTable_validate( p, limit, gxvalid ); - - gxv_morx_subtable_type1_substitutionTable_validate( - table + st_rec.substitutionTable, - table + st_rec.substitutionTable + st_rec.substitutionTable_length, - gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx2.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx2.c deleted file mode 100644 index ec4c81299d6..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx2.c +++ /dev/null @@ -1,331 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmorx - - - typedef struct GXV_morx_subtable_type2_StateOptRec_ - { - FT_ULong ligActionTable; - FT_ULong componentTable; - FT_ULong ligatureTable; - FT_ULong ligActionTable_length; - FT_ULong componentTable_length; - FT_ULong ligatureTable_length; - - } GXV_morx_subtable_type2_StateOptRec, - *GXV_morx_subtable_type2_StateOptRecData; - - -#define GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE \ - ( GXV_XSTATETABLE_HEADER_SIZE + 4 + 4 + 4 ) - - - static void - gxv_morx_subtable_type2_opttable_load( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_morx_subtable_type2_StateOptRecData optdata = - (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata; - - - GXV_LIMIT_CHECK( 4 + 4 + 4 ); - optdata->ligActionTable = FT_NEXT_ULONG( p ); - optdata->componentTable = FT_NEXT_ULONG( p ); - optdata->ligatureTable = FT_NEXT_ULONG( p ); - - GXV_TRACE(( "offset to ligActionTable=0x%08x\n", - optdata->ligActionTable )); - GXV_TRACE(( "offset to componentTable=0x%08x\n", - optdata->componentTable )); - GXV_TRACE(( "offset to ligatureTable=0x%08x\n", - optdata->ligatureTable )); - } - - - static void - gxv_morx_subtable_type2_subtable_setup( FT_ULong table_size, - FT_ULong classTable, - FT_ULong stateArray, - FT_ULong entryTable, - FT_ULong* classTable_length_p, - FT_ULong* stateArray_length_p, - FT_ULong* entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_ULong o[6]; - FT_ULong* l[6]; - FT_ULong buff[7]; - - GXV_morx_subtable_type2_StateOptRecData optdata = - (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata; - - - GXV_NAME_ENTER( "subtable boundaries setup" ); - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - o[3] = optdata->ligActionTable; - o[4] = optdata->componentTable; - o[5] = optdata->ligatureTable; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - l[3] = &(optdata->ligActionTable_length); - l[4] = &(optdata->componentTable_length); - l[5] = &(optdata->ligatureTable_length); - - gxv_set_length_by_ulong_offset( o, l, buff, 6, table_size, gxvalid ); - - GXV_TRACE(( "classTable: offset=0x%08x length=0x%08x\n", - classTable, *classTable_length_p )); - GXV_TRACE(( "stateArray: offset=0x%08x length=0x%08x\n", - stateArray, *stateArray_length_p )); - GXV_TRACE(( "entryTable: offset=0x%08x length=0x%08x\n", - entryTable, *entryTable_length_p )); - GXV_TRACE(( "ligActionTable: offset=0x%08x length=0x%08x\n", - optdata->ligActionTable, - optdata->ligActionTable_length )); - GXV_TRACE(( "componentTable: offset=0x%08x length=0x%08x\n", - optdata->componentTable, - optdata->componentTable_length )); - GXV_TRACE(( "ligatureTable: offset=0x%08x length=0x%08x\n", - optdata->ligatureTable, - optdata->ligatureTable_length )); - - GXV_EXIT; - } - - -#define GXV_MORX_LIGACTION_ENTRY_SIZE 4 - - - static void - gxv_morx_subtable_type2_ligActionIndex_validate( - FT_Bytes table, - FT_UShort ligActionIndex, - GXV_Validator gxvalid ) - { - /* access ligActionTable */ - GXV_morx_subtable_type2_StateOptRecData optdata = - (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata; - - FT_Bytes lat_base = table + optdata->ligActionTable; - FT_Bytes p = lat_base + - ligActionIndex * GXV_MORX_LIGACTION_ENTRY_SIZE; - FT_Bytes lat_limit = lat_base + optdata->ligActionTable; - - - if ( p < lat_base ) - { - GXV_TRACE(( "p < lat_base (%d byte rewind)\n", lat_base - p )); - FT_INVALID_OFFSET; - } - else if ( lat_limit < p ) - { - GXV_TRACE(( "lat_limit < p (%d byte overrun)\n", p - lat_limit )); - FT_INVALID_OFFSET; - } - - { - /* validate entry in ligActionTable */ - FT_ULong lig_action; -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort last; - FT_UShort store; -#endif - FT_ULong offset; - FT_Long gid_limit; - - - lig_action = FT_NEXT_ULONG( p ); -#ifdef GXV_LOAD_UNUSED_VARS - last = (FT_UShort)( ( lig_action >> 31 ) & 1 ); - store = (FT_UShort)( ( lig_action >> 30 ) & 1 ); -#endif - - offset = lig_action & 0x3FFFFFFFUL; - - /* this offset is 30-bit signed value to add to GID */ - /* it is different from the location offset in mort */ - if ( ( offset & 0x3FFF0000UL ) == 0x3FFF0000UL ) - { /* negative offset */ - gid_limit = gxvalid->face->num_glyphs - - (FT_Long)( offset & 0x0000FFFFUL ); - if ( gid_limit > 0 ) - return; - - GXV_TRACE(( "ligature action table includes" - " too negative offset moving all GID" - " below defined range: 0x%04x\n", - offset & 0xFFFFU )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - else if ( ( offset & 0x3FFF0000UL ) == 0x00000000UL ) - { /* positive offset */ - if ( (FT_Long)offset < gxvalid->face->num_glyphs ) - return; - - GXV_TRACE(( "ligature action table includes" - " too large offset moving all GID" - " over defined range: 0x%04x\n", - offset & 0xFFFFU )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - - GXV_TRACE(( "ligature action table includes" - " invalid offset to add to 16-bit GID:" - " 0x%08x\n", offset )); - GXV_SET_ERR_IF_PARANOID( FT_INVALID_OFFSET ); - } - } - - - static void - gxv_morx_subtable_type2_entry_validate( - FT_UShort state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - FT_UShort setComponent; - FT_UShort dontAdvance; - FT_UShort performAction; -#endif - FT_UShort reserved; - FT_UShort ligActionIndex; - - FT_UNUSED( state ); - FT_UNUSED( limit ); - - -#ifdef GXV_LOAD_UNUSED_VARS - setComponent = (FT_UShort)( ( flags >> 15 ) & 1 ); - dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 ); - performAction = (FT_UShort)( ( flags >> 13 ) & 1 ); -#endif - - reserved = (FT_UShort)( flags & 0x1FFF ); - ligActionIndex = glyphOffset_p->u; - - if ( reserved > 0 ) - GXV_TRACE(( " reserved 14bit is non-zero\n" )); - - if ( 0 < ligActionIndex ) - gxv_morx_subtable_type2_ligActionIndex_validate( - table, ligActionIndex, gxvalid ); - } - - - static void - gxv_morx_subtable_type2_ligatureTable_validate( FT_Bytes table, - GXV_Validator gxvalid ) - { - GXV_morx_subtable_type2_StateOptRecData optdata = - (GXV_morx_subtable_type2_StateOptRecData)gxvalid->xstatetable.optdata; - - FT_Bytes p = table + optdata->ligatureTable; - FT_Bytes limit = table + optdata->ligatureTable - + optdata->ligatureTable_length; - - - GXV_NAME_ENTER( "morx chain subtable type2 - substitutionTable" ); - - if ( 0 != optdata->ligatureTable ) - { - /* Apple does not give specification of ligatureTable format */ - while ( p < limit ) - { - FT_UShort lig_gid; - - - GXV_LIMIT_CHECK( 2 ); - lig_gid = FT_NEXT_USHORT( p ); - if ( lig_gid < gxvalid->face->num_glyphs ) - GXV_SET_ERR_IF_PARANOID( FT_INVALID_GLYPH_ID ); - } - } - - GXV_EXIT; - } - - - FT_LOCAL_DEF( void ) - gxv_morx_subtable_type2_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_morx_subtable_type2_StateOptRec lig_rec; - - - GXV_NAME_ENTER( "morx chain subtable type2 (Ligature Substitution)" ); - - GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE ); - - gxvalid->xstatetable.optdata = - &lig_rec; - gxvalid->xstatetable.optdata_load_func = - gxv_morx_subtable_type2_opttable_load; - gxvalid->xstatetable.subtable_setup_func = - gxv_morx_subtable_type2_subtable_setup; - gxvalid->xstatetable.entry_glyphoffset_fmt = - GXV_GLYPHOFFSET_USHORT; - gxvalid->xstatetable.entry_validate_func = - gxv_morx_subtable_type2_entry_validate; - - gxv_XStateTable_validate( p, limit, gxvalid ); - -#if 0 - p += gxvalid->subtable_length; -#endif - gxv_morx_subtable_type2_ligatureTable_validate( table, gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx4.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx4.c deleted file mode 100644 index 7b041534c0b..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx4.c +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** - * - * gxvmorx4.c - * - * TrueTypeGX/AAT morx table validation - * body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. - * - * Copyright (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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmorx - - - FT_LOCAL_DEF( void ) - gxv_morx_subtable_type4_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - GXV_NAME_ENTER( "morx chain subtable type4 " - "(Non-Contextual Glyph Substitution)" ); - - gxv_mort_subtable_type4_validate( table, limit, gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx5.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx5.c deleted file mode 100644 index 70a46236565..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvmorx5.c +++ /dev/null @@ -1,226 +0,0 @@ -/**************************************************************************** - * - * gxvmorx5.c - * - * TrueTypeGX/AAT morx table validation - * body for type5 (Contextual Glyph Insertion) subtable. - * - * Copyright (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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvmorx - - - /* - * `morx' subtable type5 (Contextual Glyph Insertion) - * has format of a StateTable with insertion-glyph-list - * without name. However, the 32bit offset from the head - * of subtable to the i-g-l is given after `entryTable', - * without variable name specification (the existence of - * this offset to the table is different from mort type5). - */ - - - typedef struct GXV_morx_subtable_type5_StateOptRec_ - { - FT_ULong insertionGlyphList; - FT_ULong insertionGlyphList_length; - - } GXV_morx_subtable_type5_StateOptRec, - *GXV_morx_subtable_type5_StateOptRecData; - - -#define GXV_MORX_SUBTABLE_TYPE5_HEADER_SIZE \ - ( GXV_STATETABLE_HEADER_SIZE + 4 ) - - - static void - gxv_morx_subtable_type5_insertionGlyphList_load( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_morx_subtable_type5_StateOptRecData optdata = - (GXV_morx_subtable_type5_StateOptRecData)gxvalid->xstatetable.optdata; - - - GXV_LIMIT_CHECK( 4 ); - optdata->insertionGlyphList = FT_NEXT_ULONG( p ); - } - - - static void - gxv_morx_subtable_type5_subtable_setup( FT_ULong table_size, - FT_ULong classTable, - FT_ULong stateArray, - FT_ULong entryTable, - FT_ULong* classTable_length_p, - FT_ULong* stateArray_length_p, - FT_ULong* entryTable_length_p, - GXV_Validator gxvalid ) - { - FT_ULong o[4]; - FT_ULong* l[4]; - FT_ULong buff[5]; - - GXV_morx_subtable_type5_StateOptRecData optdata = - (GXV_morx_subtable_type5_StateOptRecData)gxvalid->xstatetable.optdata; - - - o[0] = classTable; - o[1] = stateArray; - o[2] = entryTable; - o[3] = optdata->insertionGlyphList; - l[0] = classTable_length_p; - l[1] = stateArray_length_p; - l[2] = entryTable_length_p; - l[3] = &(optdata->insertionGlyphList_length); - - gxv_set_length_by_ulong_offset( o, l, buff, 4, table_size, gxvalid ); - } - - - static void - gxv_morx_subtable_type5_InsertList_validate( FT_UShort table_index, - FT_UShort count, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table + table_index * 2; - - -#ifndef GXV_LOAD_TRACE_VARS - GXV_LIMIT_CHECK( count * 2 ); -#else - while ( p < table + count * 2 + table_index * 2 ) - { - FT_UShort insert_glyphID; - - - GXV_LIMIT_CHECK( 2 ); - insert_glyphID = FT_NEXT_USHORT( p ); - GXV_TRACE(( " 0x%04x", insert_glyphID )); - } - - GXV_TRACE(( "\n" )); -#endif - } - - - static void - gxv_morx_subtable_type5_entry_validate( - FT_UShort state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetCPtr glyphOffset_p, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { -#ifdef GXV_LOAD_UNUSED_VARS - FT_Bool setMark; - FT_Bool dontAdvance; - FT_Bool currentIsKashidaLike; - FT_Bool markedIsKashidaLike; - FT_Bool currentInsertBefore; - FT_Bool markedInsertBefore; -#endif - FT_Byte currentInsertCount; - FT_Byte markedInsertCount; - FT_Byte currentInsertList; - FT_UShort markedInsertList; - - FT_UNUSED( state ); - - -#ifdef GXV_LOAD_UNUSED_VARS - setMark = FT_BOOL( ( flags >> 15 ) & 1 ); - dontAdvance = FT_BOOL( ( flags >> 14 ) & 1 ); - currentIsKashidaLike = FT_BOOL( ( flags >> 13 ) & 1 ); - markedIsKashidaLike = FT_BOOL( ( flags >> 12 ) & 1 ); - currentInsertBefore = FT_BOOL( ( flags >> 11 ) & 1 ); - markedInsertBefore = FT_BOOL( ( flags >> 10 ) & 1 ); -#endif - - currentInsertCount = (FT_Byte)( ( flags >> 5 ) & 0x1F ); - markedInsertCount = (FT_Byte)( flags & 0x001F ); - - currentInsertList = (FT_Byte) ( glyphOffset_p->ul >> 16 ); - markedInsertList = (FT_UShort)( glyphOffset_p->ul ); - - if ( currentInsertList && 0 != currentInsertCount ) - gxv_morx_subtable_type5_InsertList_validate( currentInsertList, - currentInsertCount, - table, limit, - gxvalid ); - - if ( markedInsertList && 0 != markedInsertCount ) - gxv_morx_subtable_type5_InsertList_validate( markedInsertList, - markedInsertCount, - table, limit, - gxvalid ); - } - - - FT_LOCAL_DEF( void ) - gxv_morx_subtable_type5_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - GXV_morx_subtable_type5_StateOptRec et_rec; - GXV_morx_subtable_type5_StateOptRecData et = &et_rec; - - - GXV_NAME_ENTER( "morx chain subtable type5 (Glyph Insertion)" ); - - GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE5_HEADER_SIZE ); - - gxvalid->xstatetable.optdata = - et; - gxvalid->xstatetable.optdata_load_func = - gxv_morx_subtable_type5_insertionGlyphList_load; - gxvalid->xstatetable.subtable_setup_func = - gxv_morx_subtable_type5_subtable_setup; - gxvalid->xstatetable.entry_glyphoffset_fmt = - GXV_GLYPHOFFSET_ULONG; - gxvalid->xstatetable.entry_validate_func = - gxv_morx_subtable_type5_entry_validate; - - gxv_XStateTable_validate( p, limit, gxvalid ); - - GXV_EXIT; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvopbd.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvopbd.c deleted file mode 100644 index f055a220544..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvopbd.c +++ /dev/null @@ -1,218 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvopbd - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef struct GXV_opbd_DataRec_ - { - FT_UShort format; - FT_UShort valueOffset_min; - - } GXV_opbd_DataRec, *GXV_opbd_Data; - - -#define GXV_OPBD_DATA( FIELD ) GXV_TABLE_DATA( opbd, FIELD ) - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - gxv_opbd_LookupValue_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - /* offset in LookupTable is measured from the head of opbd table */ - FT_Bytes p = gxvalid->root->base + value_p->u; - FT_Bytes limit = gxvalid->root->limit; - FT_Short delta_value; - int i; - - - if ( value_p->u < GXV_OPBD_DATA( valueOffset_min ) ) - GXV_OPBD_DATA( valueOffset_min ) = value_p->u; - - for ( i = 0; i < 4; i++ ) - { - GXV_LIMIT_CHECK( 2 ); - delta_value = FT_NEXT_SHORT( p ); - - if ( GXV_OPBD_DATA( format ) ) /* format 1, value is ctrl pt. */ - { - if ( delta_value == -1 ) - continue; - - gxv_ctlPoint_validate( glyph, (FT_UShort)delta_value, gxvalid ); - } - else /* format 0, value is distance */ - continue; - } - } - - - /* - opbd ---------------------+ - | - +===============+ | - | lookup header | | - +===============+ | - | BinSrchHeader | | - +===============+ | - | lastGlyph[0] | | - +---------------+ | - | firstGlyph[0] | | head of opbd sfnt table - +---------------+ | + - | offset[0] | -> | offset [byte] - +===============+ | + - | lastGlyph[1] | | (glyphID - firstGlyph) * 4 * sizeof(FT_Short) [byte] - +---------------+ | - | firstGlyph[1] | | - +---------------+ | - | offset[1] | | - +===============+ | - | - .... | - | - 48bit value array | - +===============+ | - | value | <-------+ - | | - | | - | | - +---------------+ - .... */ - - static GXV_LookupValueDesc - gxv_opbd_LookupFmt4_transit( FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ) - { - GXV_LookupValueDesc value; - - FT_UNUSED( lookuptbl_limit ); - FT_UNUSED( gxvalid ); - - /* XXX: check range? */ - value.u = (FT_UShort)( base_value_p->u + - relative_gindex * 4 * sizeof ( FT_Short ) ); - - return value; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** opbd TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_opbd_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - GXV_opbd_DataRec opbdrec; - GXV_opbd_Data opbd = &opbdrec; - FT_Bytes p = table; - FT_Bytes limit = 0; - - FT_ULong version; - - - gxvalid->root = ftvalid; - gxvalid->table_data = opbd; - gxvalid->face = face; - - FT_TRACE3(( "validating `opbd' table\n" )); - GXV_INIT; - GXV_OPBD_DATA( valueOffset_min ) = 0xFFFFU; - - - GXV_LIMIT_CHECK( 4 + 2 ); - version = FT_NEXT_ULONG( p ); - GXV_OPBD_DATA( format ) = FT_NEXT_USHORT( p ); - - - /* only 0x00010000 is defined (1996) */ - GXV_TRACE(( "(version=0x%08x)\n", version )); - if ( 0x00010000UL != version ) - FT_INVALID_FORMAT; - - /* only values 0 and 1 are defined (1996) */ - GXV_TRACE(( "(format=0x%04x)\n", GXV_OPBD_DATA( format ) )); - if ( 0x0001 < GXV_OPBD_DATA( format ) ) - FT_INVALID_FORMAT; - - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_opbd_LookupValue_validate; - gxvalid->lookupfmt4_trans = gxv_opbd_LookupFmt4_transit; - - gxv_LookupTable_validate( p, limit, gxvalid ); - p += gxvalid->subtable_length; - - if ( p > table + GXV_OPBD_DATA( valueOffset_min ) ) - { - GXV_TRACE(( - "found overlap between LookupTable and opbd_value array\n" )); - FT_INVALID_OFFSET; - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvprop.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvprop.c deleted file mode 100644 index e1911edd48d..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvprop.c +++ /dev/null @@ -1,330 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvprop - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define GXV_PROP_HEADER_SIZE ( 4 + 2 + 2 ) -#define GXV_PROP_SIZE_MIN GXV_PROP_HEADER_SIZE - - typedef struct GXV_prop_DataRec_ - { - FT_Fixed version; - - } GXV_prop_DataRec, *GXV_prop_Data; - -#define GXV_PROP_DATA( field ) GXV_TABLE_DATA( prop, field ) - -#define GXV_PROP_FLOATER 0x8000U -#define GXV_PROP_USE_COMPLEMENTARY_BRACKET 0x1000U -#define GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET 0x0F00U -#define GXV_PROP_ATTACHING_TO_RIGHT 0x0080U -#define GXV_PROP_RESERVED 0x0060U -#define GXV_PROP_DIRECTIONALITY_CLASS 0x001FU - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - gxv_prop_zero_advance_validate( FT_UShort gid, - GXV_Validator gxvalid ) - { - FT_Face face; - FT_Error error; - FT_GlyphSlot glyph; - - - GXV_NAME_ENTER( "zero advance" ); - - face = gxvalid->face; - - error = FT_Load_Glyph( face, - gid, - FT_LOAD_IGNORE_TRANSFORM ); - if ( error ) - FT_INVALID_GLYPH_ID; - - glyph = face->glyph; - - if ( glyph->advance.x != (FT_Pos)0 || - glyph->advance.y != (FT_Pos)0 ) - { - GXV_TRACE(( " found non-zero advance in zero-advance glyph\n" )); - FT_INVALID_DATA; - } - - GXV_EXIT; - } - - - /* Pass 0 as GLYPH to check the default property */ - static void - gxv_prop_property_validate( FT_UShort property, - FT_UShort glyph, - GXV_Validator gxvalid ) - { - if ( glyph != 0 && ( property & GXV_PROP_FLOATER ) ) - gxv_prop_zero_advance_validate( glyph, gxvalid ); - - if ( property & GXV_PROP_USE_COMPLEMENTARY_BRACKET ) - { - FT_UShort offset; - char complement; - - - offset = (FT_UShort)( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET ); - if ( offset == 0 ) - { - GXV_TRACE(( " found zero offset to property\n" )); - FT_INVALID_OFFSET; - } - - complement = (char)( offset >> 8 ); - if ( complement & 0x08 ) - { - /* Top bit is set: negative */ - - /* Calculate the absolute offset */ - complement = (char)( ( complement & 0x07 ) + 1 ); - - /* The gid for complement must be greater than 0 */ - if ( glyph <= complement ) - { - GXV_TRACE(( " found non-positive glyph complement\n" )); - FT_INVALID_DATA; - } - } - else - { - /* The gid for complement must be the face. */ - gxv_glyphid_validate( (FT_UShort)( glyph + complement ), gxvalid ); - } - } - else - { - if ( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET ) - GXV_TRACE(( "glyph %d cannot have complementary bracketing\n", - glyph )); - } - - /* this is introduced in version 2.0 */ - if ( property & GXV_PROP_ATTACHING_TO_RIGHT ) - { - if ( GXV_PROP_DATA( version ) == 0x00010000UL ) - { - GXV_TRACE(( " found older version (1.0) in new version table\n" )); - FT_INVALID_DATA; - } - } - - if ( property & GXV_PROP_RESERVED ) - { - GXV_TRACE(( " found non-zero bits in reserved bits\n" )); - FT_INVALID_DATA; - } - - if ( ( property & GXV_PROP_DIRECTIONALITY_CLASS ) > 11 ) - { - /* TODO: Too restricted. Use the validation level. */ - if ( GXV_PROP_DATA( version ) == 0x00010000UL || - GXV_PROP_DATA( version ) == 0x00020000UL ) - { - GXV_TRACE(( " found too old version in directionality class\n" )); - FT_INVALID_DATA; - } - } - } - - - static void - gxv_prop_LookupValue_validate( FT_UShort glyph, - GXV_LookupValueCPtr value_p, - GXV_Validator gxvalid ) - { - gxv_prop_property_validate( value_p->u, glyph, gxvalid ); - } - - - /* - +===============+ --------+ - | lookup header | | - +===============+ | - | BinSrchHeader | | - +===============+ | - | lastGlyph[0] | | - +---------------+ | - | firstGlyph[0] | | head of lookup table - +---------------+ | + - | offset[0] | -> | offset [byte] - +===============+ | + - | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte] - +---------------+ | - | firstGlyph[1] | | - +---------------+ | - | offset[1] | | - +===============+ | - | - ... | - | - 16bit value array | - +===============+ | - | value | <-------+ - ... - */ - - static GXV_LookupValueDesc - gxv_prop_LookupFmt4_transit( FT_UShort relative_gindex, - GXV_LookupValueCPtr base_value_p, - FT_Bytes lookuptbl_limit, - GXV_Validator gxvalid ) - { - FT_Bytes p; - FT_Bytes limit; - FT_UShort offset; - GXV_LookupValueDesc value; - - /* XXX: check range? */ - offset = (FT_UShort)( base_value_p->u + - relative_gindex * sizeof ( FT_UShort ) ); - p = gxvalid->lookuptbl_head + offset; - limit = lookuptbl_limit; - - GXV_LIMIT_CHECK ( 2 ); - value.u = FT_NEXT_USHORT( p ); - - return value; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** prop TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_prop_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = 0; - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - - GXV_prop_DataRec proprec; - GXV_prop_Data prop = &proprec; - - FT_Fixed version; - FT_UShort format; - FT_UShort defaultProp; - - - gxvalid->root = ftvalid; - gxvalid->table_data = prop; - gxvalid->face = face; - - FT_TRACE3(( "validating `prop' table\n" )); - GXV_INIT; - - GXV_LIMIT_CHECK( 4 + 2 + 2 ); - version = FT_NEXT_LONG( p ); - format = FT_NEXT_USHORT( p ); - defaultProp = FT_NEXT_USHORT( p ); - - GXV_TRACE(( " version 0x%08x\n", version )); - GXV_TRACE(( " format 0x%04x\n", format )); - GXV_TRACE(( " defaultProp 0x%04x\n", defaultProp )); - - /* only versions 1.0, 2.0, 3.0 are defined (1996) */ - if ( version != 0x00010000UL && - version != 0x00020000UL && - version != 0x00030000UL ) - { - GXV_TRACE(( " found unknown version\n" )); - FT_INVALID_FORMAT; - } - - - /* only formats 0x0000, 0x0001 are defined (1996) */ - if ( format > 1 ) - { - GXV_TRACE(( " found unknown format\n" )); - FT_INVALID_FORMAT; - } - - gxv_prop_property_validate( defaultProp, 0, gxvalid ); - - if ( format == 0 ) - { - FT_TRACE3(( "(format 0, no per-glyph properties, " - "remaining %d bytes are skipped)", limit - p )); - goto Exit; - } - - /* format == 1 */ - GXV_PROP_DATA( version ) = version; - - gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; - gxvalid->lookupval_func = gxv_prop_LookupValue_validate; - gxvalid->lookupfmt4_trans = gxv_prop_LookupFmt4_transit; - - gxv_LookupTable_validate( p, limit, gxvalid ); - - Exit: - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvtrak.c b/sdk/lib/3rdparty/freetype/src/gxvalid/gxvtrak.c deleted file mode 100644 index b7794b7af46..00000000000 --- a/sdk/lib/3rdparty/freetype/src/gxvalid/gxvtrak.c +++ /dev/null @@ -1,288 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT gxvtrak - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** Data and Types *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* - * referred track table format specification: - * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6trak.html - * last update was 1996. - * ---------------------------------------------- - * [MINIMUM HEADER]: GXV_TRAK_SIZE_MIN - * version (fixed: 32bit) = 0x00010000 - * format (uint16: 16bit) = 0 is only defined (1996) - * horizOffset (uint16: 16bit) - * vertOffset (uint16: 16bit) - * reserved (uint16: 16bit) = 0 - * ---------------------------------------------- - * [VARIABLE BODY]: - * horizData - * header ( 2 + 2 + 4 - * trackTable + nTracks * ( 4 + 2 + 2 ) - * sizeTable + nSizes * 4 ) - * ---------------------------------------------- - * vertData - * header ( 2 + 2 + 4 - * trackTable + nTracks * ( 4 + 2 + 2 ) - * sizeTable + nSizes * 4 ) - * ---------------------------------------------- - */ - typedef struct GXV_trak_DataRec_ - { - FT_UShort trackValueOffset_min; - FT_UShort trackValueOffset_max; - - } GXV_trak_DataRec, *GXV_trak_Data; - - -#define GXV_TRAK_DATA( FIELD ) GXV_TABLE_DATA( trak, FIELD ) - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - gxv_trak_trackTable_validate( FT_Bytes table, - FT_Bytes limit, - FT_UShort nTracks, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - - FT_Fixed track, t; - FT_UShort nameIndex; - FT_UShort offset; - FT_UShort i, j; - - - GXV_NAME_ENTER( "trackTable" ); - - GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFFU; - GXV_TRAK_DATA( trackValueOffset_max ) = 0x0000; - - GXV_LIMIT_CHECK( nTracks * ( 4 + 2 + 2 ) ); - - for ( i = 0; i < nTracks; i++ ) - { - p = table + i * ( 4 + 2 + 2 ); - track = FT_NEXT_LONG( p ); - nameIndex = FT_NEXT_USHORT( p ); - offset = FT_NEXT_USHORT( p ); - - if ( offset < GXV_TRAK_DATA( trackValueOffset_min ) ) - GXV_TRAK_DATA( trackValueOffset_min ) = offset; - if ( offset > GXV_TRAK_DATA( trackValueOffset_max ) ) - GXV_TRAK_DATA( trackValueOffset_max ) = offset; - - gxv_sfntName_validate( nameIndex, 256, 32767, gxvalid ); - - for ( j = i; j < nTracks; j++ ) - { - p = table + j * ( 4 + 2 + 2 ); - t = FT_NEXT_LONG( p ); - if ( t == track ) - GXV_TRACE(( "duplicated entries found for track value 0x%x\n", - track )); - } - } - - gxvalid->subtable_length = (FT_ULong)( p - table ); - GXV_EXIT; - } - - - static void - gxv_trak_trackData_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator gxvalid ) - { - FT_Bytes p = table; - FT_UShort nTracks; - FT_UShort nSizes; - FT_ULong sizeTableOffset; - - GXV_ODTECT( 4, odtect ); - - - GXV_ODTECT_INIT( odtect ); - GXV_NAME_ENTER( "trackData" ); - - /* read the header of trackData */ - GXV_LIMIT_CHECK( 2 + 2 + 4 ); - nTracks = FT_NEXT_USHORT( p ); - nSizes = FT_NEXT_USHORT( p ); - sizeTableOffset = FT_NEXT_ULONG( p ); - - gxv_odtect_add_range( table, (FT_ULong)( p - table ), - "trackData header", odtect ); - - /* validate trackTable */ - gxv_trak_trackTable_validate( p, limit, nTracks, gxvalid ); - gxv_odtect_add_range( p, gxvalid->subtable_length, - "trackTable", odtect ); - - /* sizeTable is array of FT_Fixed, don't check contents */ - p = gxvalid->root->base + sizeTableOffset; - GXV_LIMIT_CHECK( nSizes * 4 ); - gxv_odtect_add_range( p, nSizes * 4, "sizeTable", odtect ); - - /* validate trackValueOffet */ - p = gxvalid->root->base + GXV_TRAK_DATA( trackValueOffset_min ); - if ( limit - p < nTracks * nSizes * 2 ) - GXV_TRACE(( "too short trackValue array\n" )); - - p = gxvalid->root->base + GXV_TRAK_DATA( trackValueOffset_max ); - GXV_LIMIT_CHECK( nSizes * 2 ); - - gxv_odtect_add_range( gxvalid->root->base - + GXV_TRAK_DATA( trackValueOffset_min ), - GXV_TRAK_DATA( trackValueOffset_max ) - - GXV_TRAK_DATA( trackValueOffset_min ) - + nSizes * 2, - "trackValue array", odtect ); - - gxv_odtect_validate( odtect, gxvalid ); - - GXV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** trak TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - gxv_trak_validate( FT_Bytes table, - FT_Face face, - FT_Validator ftvalid ) - { - FT_Bytes p = table; - FT_Bytes limit = 0; - - GXV_ValidatorRec gxvalidrec; - GXV_Validator gxvalid = &gxvalidrec; - GXV_trak_DataRec trakrec; - GXV_trak_Data trak = &trakrec; - - FT_ULong version; - FT_UShort format; - FT_UShort horizOffset; - FT_UShort vertOffset; - FT_UShort reserved; - - - GXV_ODTECT( 3, odtect ); - - GXV_ODTECT_INIT( odtect ); - gxvalid->root = ftvalid; - gxvalid->table_data = trak; - gxvalid->face = face; - - limit = gxvalid->root->limit; - - FT_TRACE3(( "validating `trak' table\n" )); - GXV_INIT; - - GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 + 2 ); - version = FT_NEXT_ULONG( p ); - format = FT_NEXT_USHORT( p ); - horizOffset = FT_NEXT_USHORT( p ); - vertOffset = FT_NEXT_USHORT( p ); - reserved = FT_NEXT_USHORT( p ); - - GXV_TRACE(( " (version = 0x%08x)\n", version )); - GXV_TRACE(( " (format = 0x%04x)\n", format )); - GXV_TRACE(( " (horizOffset = 0x%04x)\n", horizOffset )); - GXV_TRACE(( " (vertOffset = 0x%04x)\n", vertOffset )); - GXV_TRACE(( " (reserved = 0x%04x)\n", reserved )); - - /* Version 1.0 (always:1996) */ - if ( version != 0x00010000UL ) - FT_INVALID_FORMAT; - - /* format 0 (always:1996) */ - if ( format != 0x0000 ) - FT_INVALID_FORMAT; - - GXV_32BIT_ALIGNMENT_VALIDATE( horizOffset ); - GXV_32BIT_ALIGNMENT_VALIDATE( vertOffset ); - - /* Reserved Fixed Value (always) */ - if ( reserved != 0x0000 ) - FT_INVALID_DATA; - - /* validate trackData */ - if ( 0 < horizOffset ) - { - gxv_trak_trackData_validate( table + horizOffset, limit, gxvalid ); - gxv_odtect_add_range( table + horizOffset, gxvalid->subtable_length, - "horizJustData", odtect ); - } - - if ( 0 < vertOffset ) - { - gxv_trak_trackData_validate( table + vertOffset, limit, gxvalid ); - gxv_odtect_add_range( table + vertOffset, gxvalid->subtable_length, - "vertJustData", odtect ); - } - - gxv_odtect_validate( odtect, gxvalid ); - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/gzip/ftgzip.c b/sdk/lib/3rdparty/freetype/src/gzip/ftgzip.c index a5206307f4e..de7d0fdd5b6 100644 --- a/sdk/lib/3rdparty/freetype/src/gzip/ftgzip.c +++ b/sdk/lib/3rdparty/freetype/src/gzip/ftgzip.c @@ -8,7 +8,7 @@ * parse compressed PCF fonts, as found with many X11 server * distributions. * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,15 +20,14 @@ */ -#include -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_DEBUG_H -#include FT_GZIP_H +#include +#include +#include +#include #include FT_CONFIG_STANDARD_LIBRARY_H -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -36,7 +35,7 @@ #define FT_ERR_PREFIX Gzip_Err_ #define FT_ERR_BASE FT_Mod_Err_Gzip -#include FT_ERRORS_H +#include #ifdef FT_CONFIG_OPTION_USE_ZLIB @@ -746,7 +745,17 @@ stream.zfree = (free_func) ft_gzip_free; stream.opaque = memory; + /* This is a temporary fix and will be removed once the internal + * copy of zlib is updated to the newest version. The `|32' flag + * is only supported in the new versions of zlib to enable gzip + * encoded header. + */ +#ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB + err = inflateInit2( &stream, MAX_WBITS|32 ); +#else err = inflateInit2( &stream, MAX_WBITS ); +#endif + if ( err != Z_OK ) return FT_THROW( Invalid_Argument ); diff --git a/sdk/lib/3rdparty/freetype/src/gzip/infblock.c b/sdk/lib/3rdparty/freetype/src/gzip/infblock.c index d6e2dc297da..2b4f0c2b537 100644 --- a/sdk/lib/3rdparty/freetype/src/gzip/infblock.c +++ b/sdk/lib/3rdparty/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/sdk/lib/3rdparty/freetype/src/gzip/infcodes.c b/sdk/lib/3rdparty/freetype/src/gzip/infcodes.c index f7bfd58c4ff..ba306549907 100644 --- a/sdk/lib/3rdparty/freetype/src/gzip/infcodes.c +++ b/sdk/lib/3rdparty/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/sdk/lib/3rdparty/freetype/src/gzip/inflate.c b/sdk/lib/3rdparty/freetype/src/gzip/inflate.c index 8877fa3eb2b..95e2653662d 100644 --- a/sdk/lib/3rdparty/freetype/src/gzip/inflate.c +++ b/sdk/lib/3rdparty/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/sdk/lib/3rdparty/freetype/src/gzip/infutil.h b/sdk/lib/3rdparty/freetype/src/gzip/infutil.h index 7174b6dd0ff..cdf18b4f901 100644 --- a/sdk/lib/3rdparty/freetype/src/gzip/infutil.h +++ b/sdk/lib/3rdparty/freetype/src/gzip/infutil.h @@ -86,7 +86,7 @@ struct inflate_blocks_state { /* masks for lower bits (size given to avoid silly warnings with Visual C++) */ #ifndef NO_INFLATE_MASK -local uInt inflate_mask[17]; +local const uInt inflate_mask[17]; #endif /* copy as much as possible from the sliding window to the output area */ diff --git a/sdk/lib/3rdparty/freetype/src/lzw/ftlzw.c b/sdk/lib/3rdparty/freetype/src/lzw/ftlzw.c index 9805a1e3bd0..ddb81e6e973 100644 --- a/sdk/lib/3rdparty/freetype/src/lzw/ftlzw.c +++ b/sdk/lib/3rdparty/freetype/src/lzw/ftlzw.c @@ -8,7 +8,7 @@ * be used to parse compressed PCF fonts, as found with many X11 server * distributions. * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * Albert Chin-A-Young. * * based on code in `src/gzip/ftgzip.c' @@ -21,15 +21,14 @@ * */ -#include -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_DEBUG_H -#include FT_LZW_H +#include +#include +#include +#include #include FT_CONFIG_STANDARD_LIBRARY_H -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -37,7 +36,7 @@ #define FT_ERR_PREFIX LZW_Err_ #define FT_ERR_BASE FT_Mod_Err_LZW -#include FT_ERRORS_H +#include #ifdef FT_CONFIG_OPTION_USE_LZW diff --git a/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.c b/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.c index 67e6760f95f..884d2ec74eb 100644 --- a/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.c +++ b/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.c @@ -8,7 +8,7 @@ * be used to parse compressed PCF fonts, as found with many X11 server * distributions. * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,9 @@ */ #include "ftzopen.h" -#include FT_INTERNAL_MEMORY_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_DEBUG_H +#include +#include +#include static int diff --git a/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.h b/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.h index 44fe36d6c5b..d8768f7b47b 100644 --- a/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.h +++ b/sdk/lib/3rdparty/freetype/src/lzw/ftzopen.h @@ -8,7 +8,7 @@ * be used to parse compressed PCF fonts, as found with many X11 server * distributions. * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner. * * This file is part of the FreeType project, and may only be used, @@ -22,9 +22,9 @@ #ifndef FTZOPEN_H_ #define FTZOPEN_H_ -#include -#include FT_FREETYPE_H +#include +FT_BEGIN_HEADER /* * This is a complete re-implementation of the LZW file reader, @@ -166,6 +166,8 @@ /* */ +FT_END_HEADER + #endif /* FTZOPEN_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvalid.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvalid.c deleted file mode 100644 index e3964b99aee..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvalid.c +++ /dev/null @@ -1,32 +0,0 @@ -/**************************************************************************** - * - * 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 -#include - -#include "otvbase.c" -#include "otvcommn.c" -#include "otvgdef.c" -#include "otvgpos.c" -#include "otvgsub.c" -#include "otvjstf.c" -#include "otvmath.c" -#include "otvmod.c" - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvalid.h b/sdk/lib/3rdparty/freetype/src/otvalid/otvalid.h deleted file mode 100644 index 5ca819f2619..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvalid.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** - * - * 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_ -#define OTVALID_H_ - - -#include -#include FT_FREETYPE_H - -#include "otverror.h" /* must come before FT_INTERNAL_VALIDATE_H */ - -#include FT_INTERNAL_VALIDATE_H -#include FT_INTERNAL_STREAM_H - - -FT_BEGIN_HEADER - - - FT_LOCAL( void ) - otv_BASE_validate( FT_Bytes table, - FT_Validator valid ); - - /* GSUB and GPOS tables should already be validated; */ - /* if missing, set corresponding argument to 0 */ - FT_LOCAL( void ) - otv_GDEF_validate( FT_Bytes table, - FT_Bytes gsub, - FT_Bytes gpos, - FT_UInt glyph_count, - FT_Validator valid ); - - FT_LOCAL( void ) - otv_GPOS_validate( FT_Bytes table, - FT_UInt glyph_count, - FT_Validator valid ); - - FT_LOCAL( void ) - otv_GSUB_validate( FT_Bytes table, - FT_UInt glyph_count, - FT_Validator valid ); - - /* GSUB and GPOS tables should already be validated; */ - /* if missing, set corresponding argument to 0 */ - FT_LOCAL( void ) - otv_JSTF_validate( FT_Bytes table, - FT_Bytes gsub, - FT_Bytes gpos, - FT_UInt glyph_count, - FT_Validator valid ); - - FT_LOCAL( void ) - otv_MATH_validate( FT_Bytes table, - FT_UInt glyph_count, - FT_Validator ftvalid ); - - -FT_END_HEADER - -#endif /* OTVALID_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvbase.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvbase.c deleted file mode 100644 index be69d7ca31d..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvbase.c +++ /dev/null @@ -1,345 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvbase - - - static void - otv_BaseCoord_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt BaseCoordFormat; - - - OTV_NAME_ENTER( "BaseCoord" ); - - OTV_LIMIT_CHECK( 4 ); - BaseCoordFormat = FT_NEXT_USHORT( p ); - p += 2; /* skip Coordinate */ - - OTV_TRACE(( " (format %d)\n", BaseCoordFormat )); - - switch ( BaseCoordFormat ) - { - case 1: /* BaseCoordFormat1 */ - break; - - case 2: /* BaseCoordFormat2 */ - OTV_LIMIT_CHECK( 4 ); /* ReferenceGlyph, BaseCoordPoint */ - break; - - case 3: /* BaseCoordFormat3 */ - OTV_LIMIT_CHECK( 2 ); - /* DeviceTable */ - otv_Device_validate( table + FT_NEXT_USHORT( p ), otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - static void - otv_BaseTagList_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt BaseTagCount; - - - OTV_NAME_ENTER( "BaseTagList" ); - - OTV_LIMIT_CHECK( 2 ); - - BaseTagCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (BaseTagCount = %d)\n", BaseTagCount )); - - OTV_LIMIT_CHECK( BaseTagCount * 4 ); /* BaselineTag */ - - OTV_EXIT; - } - - - static void - otv_BaseValues_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt BaseCoordCount; - - - OTV_NAME_ENTER( "BaseValues" ); - - OTV_LIMIT_CHECK( 4 ); - - p += 2; /* skip DefaultIndex */ - BaseCoordCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (BaseCoordCount = %d)\n", BaseCoordCount )); - - OTV_LIMIT_CHECK( BaseCoordCount * 2 ); - - /* BaseCoord */ - for ( ; BaseCoordCount > 0; BaseCoordCount-- ) - otv_BaseCoord_validate( table + FT_NEXT_USHORT( p ), otvalid ); - - OTV_EXIT; - } - - - static void - otv_MinMax_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt table_size; - FT_UInt FeatMinMaxCount; - - OTV_OPTIONAL_TABLE( MinCoord ); - OTV_OPTIONAL_TABLE( MaxCoord ); - - - OTV_NAME_ENTER( "MinMax" ); - - OTV_LIMIT_CHECK( 6 ); - - OTV_OPTIONAL_OFFSET( MinCoord ); - OTV_OPTIONAL_OFFSET( MaxCoord ); - FeatMinMaxCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (FeatMinMaxCount = %d)\n", FeatMinMaxCount )); - - table_size = FeatMinMaxCount * 8 + 6; - - OTV_SIZE_CHECK( MinCoord ); - if ( MinCoord ) - otv_BaseCoord_validate( table + MinCoord, otvalid ); - - OTV_SIZE_CHECK( MaxCoord ); - if ( MaxCoord ) - otv_BaseCoord_validate( table + MaxCoord, otvalid ); - - OTV_LIMIT_CHECK( FeatMinMaxCount * 8 ); - - /* FeatMinMaxRecord */ - for ( ; FeatMinMaxCount > 0; FeatMinMaxCount-- ) - { - p += 4; /* skip FeatureTableTag */ - - OTV_OPTIONAL_OFFSET( MinCoord ); - OTV_OPTIONAL_OFFSET( MaxCoord ); - - OTV_SIZE_CHECK( MinCoord ); - if ( MinCoord ) - otv_BaseCoord_validate( table + MinCoord, otvalid ); - - OTV_SIZE_CHECK( MaxCoord ); - if ( MaxCoord ) - otv_BaseCoord_validate( table + MaxCoord, otvalid ); - } - - OTV_EXIT; - } - - - static void - otv_BaseScript_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt table_size; - FT_UInt BaseLangSysCount; - - OTV_OPTIONAL_TABLE( BaseValues ); - OTV_OPTIONAL_TABLE( DefaultMinMax ); - - - OTV_NAME_ENTER( "BaseScript" ); - - OTV_LIMIT_CHECK( 6 ); - OTV_OPTIONAL_OFFSET( BaseValues ); - OTV_OPTIONAL_OFFSET( DefaultMinMax ); - BaseLangSysCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (BaseLangSysCount = %d)\n", BaseLangSysCount )); - - table_size = BaseLangSysCount * 6 + 6; - - OTV_SIZE_CHECK( BaseValues ); - if ( BaseValues ) - otv_BaseValues_validate( table + BaseValues, otvalid ); - - OTV_SIZE_CHECK( DefaultMinMax ); - if ( DefaultMinMax ) - otv_MinMax_validate( table + DefaultMinMax, otvalid ); - - OTV_LIMIT_CHECK( BaseLangSysCount * 6 ); - - /* BaseLangSysRecord */ - for ( ; BaseLangSysCount > 0; BaseLangSysCount-- ) - { - p += 4; /* skip BaseLangSysTag */ - - otv_MinMax_validate( table + FT_NEXT_USHORT( p ), otvalid ); - } - - OTV_EXIT; - } - - - static void - otv_BaseScriptList_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt BaseScriptCount; - - - OTV_NAME_ENTER( "BaseScriptList" ); - - OTV_LIMIT_CHECK( 2 ); - BaseScriptCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (BaseScriptCount = %d)\n", BaseScriptCount )); - - OTV_LIMIT_CHECK( BaseScriptCount * 6 ); - - /* BaseScriptRecord */ - for ( ; BaseScriptCount > 0; BaseScriptCount-- ) - { - p += 4; /* skip BaseScriptTag */ - - /* BaseScript */ - otv_BaseScript_validate( table + FT_NEXT_USHORT( p ), otvalid ); - } - - OTV_EXIT; - } - - - static void - otv_Axis_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt table_size; - - OTV_OPTIONAL_TABLE( BaseTagList ); - - - OTV_NAME_ENTER( "Axis" ); - - OTV_LIMIT_CHECK( 4 ); - OTV_OPTIONAL_OFFSET( BaseTagList ); - - table_size = 4; - - OTV_SIZE_CHECK( BaseTagList ); - if ( BaseTagList ) - otv_BaseTagList_validate( table + BaseTagList, otvalid ); - - /* BaseScriptList */ - otv_BaseScriptList_validate( table + FT_NEXT_USHORT( p ), otvalid ); - - OTV_EXIT; - } - - - FT_LOCAL_DEF( void ) - otv_BASE_validate( FT_Bytes table, - FT_Validator ftvalid ) - { - OTV_ValidatorRec otvalidrec; - OTV_Validator otvalid = &otvalidrec; - FT_Bytes p = table; - FT_UInt table_size; - FT_UShort version; - - OTV_OPTIONAL_TABLE( HorizAxis ); - OTV_OPTIONAL_TABLE( VertAxis ); - - OTV_OPTIONAL_TABLE32( itemVarStore ); - - - otvalid->root = ftvalid; - - FT_TRACE3(( "validating BASE table\n" )); - OTV_INIT; - - OTV_LIMIT_CHECK( 4 ); - - if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */ - FT_INVALID_FORMAT; - - version = FT_NEXT_USHORT( p ); /* minorVersion */ - - table_size = 8; - switch ( version ) - { - case 0: - OTV_LIMIT_CHECK( 4 ); - break; - - case 1: - OTV_LIMIT_CHECK( 8 ); - table_size += 4; - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_OPTIONAL_OFFSET( HorizAxis ); - OTV_SIZE_CHECK( HorizAxis ); - if ( HorizAxis ) - otv_Axis_validate( table + HorizAxis, otvalid ); - - OTV_OPTIONAL_OFFSET( VertAxis ); - OTV_SIZE_CHECK( VertAxis ); - if ( VertAxis ) - otv_Axis_validate( table + VertAxis, otvalid ); - - if ( version > 0 ) - { - OTV_OPTIONAL_OFFSET32( itemVarStore ); - OTV_SIZE_CHECK32( itemVarStore ); - if ( itemVarStore ) - OTV_TRACE(( " [omitting itemVarStore validation]\n" )); /* XXX */ - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.c deleted file mode 100644 index 5ed1723506f..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.c +++ /dev/null @@ -1,1096 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvcommon - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** COVERAGE TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - otv_Coverage_validate( FT_Bytes table, - OTV_Validator otvalid, - FT_Int expected_count ) - { - FT_Bytes p = table; - FT_UInt CoverageFormat; - FT_UInt total = 0; - - - OTV_NAME_ENTER( "Coverage" ); - - OTV_LIMIT_CHECK( 4 ); - CoverageFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", CoverageFormat )); - - switch ( CoverageFormat ) - { - case 1: /* CoverageFormat1 */ - { - FT_UInt GlyphCount; - FT_UInt i; - - - GlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount )); - - OTV_LIMIT_CHECK( GlyphCount * 2 ); /* GlyphArray */ - - for ( i = 0; i < GlyphCount; i++ ) - { - FT_UInt gid; - - - gid = FT_NEXT_USHORT( p ); - if ( gid >= otvalid->glyph_count ) - FT_INVALID_GLYPH_ID; - } - - total = GlyphCount; - } - break; - - case 2: /* CoverageFormat2 */ - { - FT_UInt n, RangeCount; - FT_UInt Start, End, StartCoverageIndex, last = 0; - - - RangeCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (RangeCount = %d)\n", RangeCount )); - - OTV_LIMIT_CHECK( RangeCount * 6 ); - - /* RangeRecord */ - for ( n = 0; n < RangeCount; n++ ) - { - Start = FT_NEXT_USHORT( p ); - End = FT_NEXT_USHORT( p ); - StartCoverageIndex = FT_NEXT_USHORT( p ); - - if ( Start > End || StartCoverageIndex != total ) - FT_INVALID_DATA; - - if ( End >= otvalid->glyph_count ) - FT_INVALID_GLYPH_ID; - - if ( n > 0 && Start <= last ) - FT_INVALID_DATA; - - total += End - Start + 1; - last = End; - } - } - break; - - default: - FT_INVALID_FORMAT; - } - - /* Generally, a coverage table offset has an associated count field. */ - /* The number of glyphs in the table should match this field. If */ - /* there is no associated count, a value of -1 tells us not to check. */ - if ( expected_count != -1 && (FT_UInt)expected_count != total ) - FT_INVALID_DATA; - - OTV_EXIT; - } - - - FT_LOCAL_DEF( FT_UInt ) - otv_Coverage_get_first( FT_Bytes table ) - { - FT_Bytes p = table; - - - p += 4; /* skip CoverageFormat and Glyph/RangeCount */ - - return FT_NEXT_USHORT( p ); - } - - - FT_LOCAL_DEF( FT_UInt ) - otv_Coverage_get_last( FT_Bytes table ) - { - FT_Bytes p = table; - FT_UInt CoverageFormat = FT_NEXT_USHORT( p ); - FT_UInt count = FT_NEXT_USHORT( p ); /* Glyph/RangeCount */ - FT_UInt result = 0; - - - switch ( CoverageFormat ) - { - case 1: - p += ( count - 1 ) * 2; - result = FT_NEXT_USHORT( p ); - break; - - case 2: - p += ( count - 1 ) * 6 + 2; - result = FT_NEXT_USHORT( p ); - break; - - default: - ; - } - - return result; - } - - - FT_LOCAL_DEF( FT_UInt ) - otv_Coverage_get_count( FT_Bytes table ) - { - FT_Bytes p = table; - FT_UInt CoverageFormat = FT_NEXT_USHORT( p ); - FT_UInt count = FT_NEXT_USHORT( p ); /* Glyph/RangeCount */ - FT_UInt result = 0; - - - switch ( CoverageFormat ) - { - case 1: - return count; - - case 2: - { - FT_UInt Start, End; - - - for ( ; count > 0; count-- ) - { - Start = FT_NEXT_USHORT( p ); - End = FT_NEXT_USHORT( p ); - p += 2; /* skip StartCoverageIndex */ - - result += End - Start + 1; - } - } - break; - - default: - ; - } - - return result; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** CLASS DEFINITION TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - otv_ClassDef_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt ClassFormat; - - - OTV_NAME_ENTER( "ClassDef" ); - - OTV_LIMIT_CHECK( 4 ); - ClassFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", ClassFormat )); - - switch ( ClassFormat ) - { - case 1: /* ClassDefFormat1 */ - { - FT_UInt StartGlyph; - FT_UInt GlyphCount; - - - OTV_LIMIT_CHECK( 4 ); - - StartGlyph = FT_NEXT_USHORT( p ); - GlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount )); - - OTV_LIMIT_CHECK( GlyphCount * 2 ); /* ClassValueArray */ - - if ( StartGlyph + GlyphCount - 1 >= otvalid->glyph_count ) - FT_INVALID_GLYPH_ID; - } - break; - - case 2: /* ClassDefFormat2 */ - { - FT_UInt n, ClassRangeCount; - FT_UInt Start, End, last = 0; - - - ClassRangeCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (ClassRangeCount = %d)\n", ClassRangeCount )); - - OTV_LIMIT_CHECK( ClassRangeCount * 6 ); - - /* ClassRangeRecord */ - for ( n = 0; n < ClassRangeCount; n++ ) - { - Start = FT_NEXT_USHORT( p ); - End = FT_NEXT_USHORT( p ); - p += 2; /* skip Class */ - - if ( Start > End || ( n > 0 && Start <= last ) ) - FT_INVALID_DATA; - - if ( End >= otvalid->glyph_count ) - FT_INVALID_GLYPH_ID; - - last = End; - } - } - break; - - default: - FT_INVALID_FORMAT; - } - - /* no need to check glyph indices used as input to class definition */ - /* tables since even invalid glyph indices return a meaningful result */ - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** DEVICE TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - otv_Device_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt StartSize, EndSize, DeltaFormat, count; - - - OTV_NAME_ENTER( "Device" ); - - OTV_LIMIT_CHECK( 6 ); - StartSize = FT_NEXT_USHORT( p ); - EndSize = FT_NEXT_USHORT( p ); - DeltaFormat = FT_NEXT_USHORT( p ); - - if ( DeltaFormat == 0x8000U ) - { - /* VariationIndex, nothing to do */ - } - else - { - if ( DeltaFormat < 1 || DeltaFormat > 3 ) - FT_INVALID_FORMAT; - - if ( EndSize < StartSize ) - FT_INVALID_DATA; - - count = EndSize - StartSize + 1; - OTV_LIMIT_CHECK( ( 1 << DeltaFormat ) * count / 8 ); /* DeltaValue */ - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** LOOKUPS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* uses otvalid->type_count */ - /* uses otvalid->type_funcs */ - - FT_LOCAL_DEF( void ) - otv_Lookup_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt LookupType, LookupFlag, SubTableCount; - OTV_Validate_Func validate; - - - OTV_NAME_ENTER( "Lookup" ); - - OTV_LIMIT_CHECK( 6 ); - LookupType = FT_NEXT_USHORT( p ); - LookupFlag = FT_NEXT_USHORT( p ); - SubTableCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (type %d)\n", LookupType )); - - if ( LookupType == 0 || LookupType > otvalid->type_count ) - FT_INVALID_DATA; - - validate = otvalid->type_funcs[LookupType - 1]; - - OTV_TRACE(( " (SubTableCount = %d)\n", SubTableCount )); - - OTV_LIMIT_CHECK( SubTableCount * 2 ); - - /* SubTable */ - for ( ; SubTableCount > 0; SubTableCount-- ) - validate( table + FT_NEXT_USHORT( p ), otvalid ); - - if ( LookupFlag & 0x10 ) - OTV_LIMIT_CHECK( 2 ); /* MarkFilteringSet */ - - OTV_EXIT; - } - - - /* uses valid->lookup_count */ - - FT_LOCAL_DEF( void ) - otv_LookupList_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt LookupCount; - - - OTV_NAME_ENTER( "LookupList" ); - - OTV_LIMIT_CHECK( 2 ); - LookupCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (LookupCount = %d)\n", LookupCount )); - - OTV_LIMIT_CHECK( LookupCount * 2 ); - - otvalid->lookup_count = LookupCount; - - /* Lookup */ - for ( ; LookupCount > 0; LookupCount-- ) - otv_Lookup_validate( table + FT_NEXT_USHORT( p ), otvalid ); - - OTV_EXIT; - } - - - static FT_UInt - otv_LookupList_get_count( FT_Bytes table ) - { - return FT_NEXT_USHORT( table ); - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** FEATURES *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* uses otvalid->lookup_count */ - - FT_LOCAL_DEF( void ) - otv_Feature_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt LookupCount; - - - OTV_NAME_ENTER( "Feature" ); - - OTV_LIMIT_CHECK( 4 ); - p += 2; /* skip FeatureParams (unused) */ - LookupCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (LookupCount = %d)\n", LookupCount )); - - OTV_LIMIT_CHECK( LookupCount * 2 ); - - /* LookupListIndex */ - for ( ; LookupCount > 0; LookupCount-- ) - if ( FT_NEXT_USHORT( p ) >= otvalid->lookup_count ) - FT_INVALID_DATA; - - OTV_EXIT; - } - - - static FT_UInt - otv_Feature_get_count( FT_Bytes table ) - { - return FT_NEXT_USHORT( table ); - } - - - /* sets otvalid->lookup_count */ - - FT_LOCAL_DEF( void ) - otv_FeatureList_validate( FT_Bytes table, - FT_Bytes lookups, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt FeatureCount; - - - OTV_NAME_ENTER( "FeatureList" ); - - OTV_LIMIT_CHECK( 2 ); - FeatureCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (FeatureCount = %d)\n", FeatureCount )); - - OTV_LIMIT_CHECK( FeatureCount * 2 ); - - otvalid->lookup_count = otv_LookupList_get_count( lookups ); - - /* FeatureRecord */ - for ( ; FeatureCount > 0; FeatureCount-- ) - { - p += 4; /* skip FeatureTag */ - - /* Feature */ - otv_Feature_validate( table + FT_NEXT_USHORT( p ), otvalid ); - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** LANGUAGE SYSTEM *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - - /* uses otvalid->extra1 (number of features) */ - - FT_LOCAL_DEF( void ) - otv_LangSys_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt ReqFeatureIndex; - FT_UInt FeatureCount; - - - OTV_NAME_ENTER( "LangSys" ); - - OTV_LIMIT_CHECK( 6 ); - p += 2; /* skip LookupOrder (unused) */ - ReqFeatureIndex = FT_NEXT_USHORT( p ); - FeatureCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (ReqFeatureIndex = %d)\n", ReqFeatureIndex )); - OTV_TRACE(( " (FeatureCount = %d)\n", FeatureCount )); - - if ( ReqFeatureIndex != 0xFFFFU && ReqFeatureIndex >= otvalid->extra1 ) - FT_INVALID_DATA; - - OTV_LIMIT_CHECK( FeatureCount * 2 ); - - /* FeatureIndex */ - for ( ; FeatureCount > 0; FeatureCount-- ) - if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 ) - FT_INVALID_DATA; - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** SCRIPTS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL_DEF( void ) - otv_Script_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_UInt DefaultLangSys, LangSysCount; - FT_Bytes p = table; - - - OTV_NAME_ENTER( "Script" ); - - OTV_LIMIT_CHECK( 4 ); - DefaultLangSys = FT_NEXT_USHORT( p ); - LangSysCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (LangSysCount = %d)\n", LangSysCount )); - - if ( DefaultLangSys != 0 ) - otv_LangSys_validate( table + DefaultLangSys, otvalid ); - - OTV_LIMIT_CHECK( LangSysCount * 6 ); - - /* LangSysRecord */ - for ( ; LangSysCount > 0; LangSysCount-- ) - { - p += 4; /* skip LangSysTag */ - - /* LangSys */ - otv_LangSys_validate( table + FT_NEXT_USHORT( p ), otvalid ); - } - - OTV_EXIT; - } - - - /* sets otvalid->extra1 (number of features) */ - - FT_LOCAL_DEF( void ) - otv_ScriptList_validate( FT_Bytes table, - FT_Bytes features, - OTV_Validator otvalid ) - { - FT_UInt ScriptCount; - FT_Bytes p = table; - - - OTV_NAME_ENTER( "ScriptList" ); - - OTV_LIMIT_CHECK( 2 ); - ScriptCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (ScriptCount = %d)\n", ScriptCount )); - - OTV_LIMIT_CHECK( ScriptCount * 6 ); - - otvalid->extra1 = otv_Feature_get_count( features ); - - /* ScriptRecord */ - for ( ; ScriptCount > 0; ScriptCount-- ) - { - p += 4; /* skip ScriptTag */ - - otv_Script_validate( table + FT_NEXT_USHORT( p ), otvalid ); /* Script */ - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* - u: uint16 - ux: unit16 [x] - - s: struct - sx: struct [x] - sxy: struct [x], using external y count - - x: uint16 x - - C: Coverage - - O: Offset - On: Offset (NULL) - Ox: Offset [x] - Onx: Offset (NULL) [x] - */ - - FT_LOCAL_DEF( void ) - otv_x_Ox( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Count; - OTV_Validate_Func func; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 2 ); - Count = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (Count = %d)\n", Count )); - - OTV_LIMIT_CHECK( Count * 2 ); - - otvalid->nesting_level++; - func = otvalid->func[otvalid->nesting_level]; - - for ( ; Count > 0; Count-- ) - func( table + FT_NEXT_USHORT( p ), otvalid ); - - otvalid->nesting_level--; - - OTV_EXIT; - } - - - FT_LOCAL_DEF( void ) - otv_u_C_x_Ox( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Count, Coverage; - OTV_Validate_Func func; - - - OTV_ENTER; - - p += 2; /* skip Format */ - - OTV_LIMIT_CHECK( 4 ); - Coverage = FT_NEXT_USHORT( p ); - Count = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (Count = %d)\n", Count )); - - otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)Count ); - - OTV_LIMIT_CHECK( Count * 2 ); - - otvalid->nesting_level++; - func = otvalid->func[otvalid->nesting_level]; - - for ( ; Count > 0; Count-- ) - func( table + FT_NEXT_USHORT( p ), otvalid ); - - otvalid->nesting_level--; - - OTV_EXIT; - } - - - /* uses otvalid->extra1 (if > 0: array value limit) */ - - FT_LOCAL_DEF( void ) - otv_x_ux( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Count; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 2 ); - Count = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (Count = %d)\n", Count )); - - OTV_LIMIT_CHECK( Count * 2 ); - - if ( otvalid->extra1 ) - { - for ( ; Count > 0; Count-- ) - if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 ) - FT_INVALID_DATA; - } - - OTV_EXIT; - } - - - /* `ux' in the function's name is not really correct since only x-1 */ - /* elements are tested */ - - /* uses otvalid->extra1 (array value limit) */ - - FT_LOCAL_DEF( void ) - otv_x_y_ux_sy( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Count1, Count2; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 4 ); - Count1 = FT_NEXT_USHORT( p ); - Count2 = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (Count1 = %d)\n", Count1 )); - OTV_TRACE(( " (Count2 = %d)\n", Count2 )); - - if ( Count1 == 0 ) - FT_INVALID_DATA; - - OTV_LIMIT_CHECK( ( Count1 - 1 ) * 2 + Count2 * 4 ); - p += ( Count1 - 1 ) * 2; - - for ( ; Count2 > 0; Count2-- ) - { - if ( FT_NEXT_USHORT( p ) >= Count1 ) - FT_INVALID_DATA; - - if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 ) - FT_INVALID_DATA; - } - - OTV_EXIT; - } - - - /* `uy' in the function's name is not really correct since only y-1 */ - /* elements are tested */ - - /* uses otvalid->extra1 (array value limit) */ - - FT_LOCAL_DEF( void ) - otv_x_ux_y_uy_z_uz_p_sp( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt BacktrackCount, InputCount, LookaheadCount; - FT_UInt Count; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 2 ); - BacktrackCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (BacktrackCount = %d)\n", BacktrackCount )); - - OTV_LIMIT_CHECK( BacktrackCount * 2 + 2 ); - p += BacktrackCount * 2; - - InputCount = FT_NEXT_USHORT( p ); - if ( InputCount == 0 ) - FT_INVALID_DATA; - - OTV_TRACE(( " (InputCount = %d)\n", InputCount )); - - OTV_LIMIT_CHECK( InputCount * 2 ); - p += ( InputCount - 1 ) * 2; - - LookaheadCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (LookaheadCount = %d)\n", LookaheadCount )); - - OTV_LIMIT_CHECK( LookaheadCount * 2 + 2 ); - p += LookaheadCount * 2; - - Count = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (Count = %d)\n", Count )); - - OTV_LIMIT_CHECK( Count * 4 ); - - for ( ; Count > 0; Count-- ) - { - if ( FT_NEXT_USHORT( p ) >= InputCount ) - FT_INVALID_DATA; - - if ( FT_NEXT_USHORT( p ) >= otvalid->extra1 ) - FT_INVALID_DATA; - } - - OTV_EXIT; - } - - - /* sets otvalid->extra1 (valid->lookup_count) */ - - FT_LOCAL_DEF( void ) - otv_u_O_O_x_Onx( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Coverage, ClassDef, ClassSetCount; - OTV_Validate_Func func; - - - OTV_ENTER; - - p += 2; /* skip Format */ - - OTV_LIMIT_CHECK( 6 ); - Coverage = FT_NEXT_USHORT( p ); - ClassDef = FT_NEXT_USHORT( p ); - ClassSetCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (ClassSetCount = %d)\n", ClassSetCount )); - - otv_Coverage_validate( table + Coverage, otvalid, -1 ); - otv_ClassDef_validate( table + ClassDef, otvalid ); - - OTV_LIMIT_CHECK( ClassSetCount * 2 ); - - otvalid->nesting_level++; - func = otvalid->func[otvalid->nesting_level]; - otvalid->extra1 = otvalid->lookup_count; - - for ( ; ClassSetCount > 0; ClassSetCount-- ) - { - FT_UInt offset = FT_NEXT_USHORT( p ); - - - if ( offset ) - func( table + offset, otvalid ); - } - - otvalid->nesting_level--; - - OTV_EXIT; - } - - - /* uses otvalid->lookup_count */ - - FT_LOCAL_DEF( void ) - otv_u_x_y_Ox_sy( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt GlyphCount, Count, count1; - - - OTV_ENTER; - - p += 2; /* skip Format */ - - OTV_LIMIT_CHECK( 4 ); - GlyphCount = FT_NEXT_USHORT( p ); - Count = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount )); - OTV_TRACE(( " (Count = %d)\n", Count )); - - OTV_LIMIT_CHECK( GlyphCount * 2 + Count * 4 ); - - for ( count1 = GlyphCount; count1 > 0; count1-- ) - otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 ); - - for ( ; Count > 0; Count-- ) - { - if ( FT_NEXT_USHORT( p ) >= GlyphCount ) - FT_INVALID_DATA; - - if ( FT_NEXT_USHORT( p ) >= otvalid->lookup_count ) - FT_INVALID_DATA; - } - - OTV_EXIT; - } - - - /* sets otvalid->extra1 (valid->lookup_count) */ - - FT_LOCAL_DEF( void ) - otv_u_O_O_O_O_x_Onx( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Coverage; - FT_UInt BacktrackClassDef, InputClassDef, LookaheadClassDef; - FT_UInt ChainClassSetCount; - OTV_Validate_Func func; - - - OTV_ENTER; - - p += 2; /* skip Format */ - - OTV_LIMIT_CHECK( 10 ); - Coverage = FT_NEXT_USHORT( p ); - BacktrackClassDef = FT_NEXT_USHORT( p ); - InputClassDef = FT_NEXT_USHORT( p ); - LookaheadClassDef = FT_NEXT_USHORT( p ); - ChainClassSetCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (ChainClassSetCount = %d)\n", ChainClassSetCount )); - - otv_Coverage_validate( table + Coverage, otvalid, -1 ); - - otv_ClassDef_validate( table + BacktrackClassDef, otvalid ); - otv_ClassDef_validate( table + InputClassDef, otvalid ); - otv_ClassDef_validate( table + LookaheadClassDef, otvalid ); - - OTV_LIMIT_CHECK( ChainClassSetCount * 2 ); - - otvalid->nesting_level++; - func = otvalid->func[otvalid->nesting_level]; - otvalid->extra1 = otvalid->lookup_count; - - for ( ; ChainClassSetCount > 0; ChainClassSetCount-- ) - { - FT_UInt offset = FT_NEXT_USHORT( p ); - - - if ( offset ) - func( table + offset, otvalid ); - } - - otvalid->nesting_level--; - - OTV_EXIT; - } - - - /* uses otvalid->lookup_count */ - - FT_LOCAL_DEF( void ) - otv_u_x_Ox_y_Oy_z_Oz_p_sp( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt BacktrackGlyphCount, InputGlyphCount, LookaheadGlyphCount; - FT_UInt count1, count2; - - - OTV_ENTER; - - p += 2; /* skip Format */ - - OTV_LIMIT_CHECK( 2 ); - BacktrackGlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (BacktrackGlyphCount = %d)\n", BacktrackGlyphCount )); - - OTV_LIMIT_CHECK( BacktrackGlyphCount * 2 + 2 ); - - for ( ; BacktrackGlyphCount > 0; BacktrackGlyphCount-- ) - otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 ); - - InputGlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (InputGlyphCount = %d)\n", InputGlyphCount )); - - OTV_LIMIT_CHECK( InputGlyphCount * 2 + 2 ); - - for ( count1 = InputGlyphCount; count1 > 0; count1-- ) - otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 ); - - LookaheadGlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (LookaheadGlyphCount = %d)\n", LookaheadGlyphCount )); - - OTV_LIMIT_CHECK( LookaheadGlyphCount * 2 + 2 ); - - for ( ; LookaheadGlyphCount > 0; LookaheadGlyphCount-- ) - otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 ); - - count2 = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (Count = %d)\n", count2 )); - - OTV_LIMIT_CHECK( count2 * 4 ); - - for ( ; count2 > 0; count2-- ) - { - if ( FT_NEXT_USHORT( p ) >= InputGlyphCount ) - FT_INVALID_DATA; - - if ( FT_NEXT_USHORT( p ) >= otvalid->lookup_count ) - FT_INVALID_DATA; - } - - OTV_EXIT; - } - - - FT_LOCAL_DEF( FT_UInt ) - otv_GSUBGPOS_get_Lookup_count( FT_Bytes table ) - { - FT_Bytes p = table + 8; - - - return otv_LookupList_get_count( table + FT_NEXT_USHORT( p ) ); - } - - - FT_LOCAL_DEF( FT_UInt ) - otv_GSUBGPOS_have_MarkAttachmentType_flag( FT_Bytes table ) - { - FT_Bytes p, lookup; - FT_UInt count; - - - if ( !table ) - return 0; - - /* LookupList */ - p = table + 8; - table += FT_NEXT_USHORT( p ); - - /* LookupCount */ - p = table; - count = FT_NEXT_USHORT( p ); - - for ( ; count > 0; count-- ) - { - FT_Bytes oldp; - - - /* Lookup */ - lookup = table + FT_NEXT_USHORT( p ); - - oldp = p; - - /* LookupFlag */ - p = lookup + 2; - if ( FT_NEXT_USHORT( p ) & 0xFF00U ) - return 1; - - p = oldp; - } - - return 0; - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.h b/sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.h deleted file mode 100644 index bfcc5b974a3..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvcommn.h +++ /dev/null @@ -1,467 +0,0 @@ -/**************************************************************************** - * - * 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_ -#define OTVCOMMN_H_ - - -#include -#include "otvalid.h" -#include FT_INTERNAL_DEBUG_H - - -FT_BEGIN_HEADER - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** VALIDATION *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - typedef struct OTV_ValidatorRec_* OTV_Validator; - - typedef void (*OTV_Validate_Func)( FT_Bytes table, - OTV_Validator otvalid ); - - typedef struct OTV_ValidatorRec_ - { - FT_Validator root; - FT_UInt type_count; - OTV_Validate_Func* type_funcs; - - FT_UInt lookup_count; - FT_UInt glyph_count; - - FT_UInt nesting_level; - - OTV_Validate_Func func[3]; - - FT_UInt extra1; /* for passing parameters */ - FT_UInt extra2; - FT_Bytes extra3; - -#ifdef FT_DEBUG_LEVEL_TRACE - FT_UInt debug_indent; - const FT_String* debug_function_name[3]; -#endif - - } OTV_ValidatorRec; - - -#undef FT_INVALID_ -#define FT_INVALID_( _error ) \ - ft_validator_error( otvalid->root, FT_THROW( _error ) ) - -#define OTV_OPTIONAL_TABLE( _table ) FT_UShort _table; \ - FT_Bytes _table ## _p - -#define OTV_OPTIONAL_TABLE32( _table ) FT_ULong _table; \ - FT_Bytes _table ## _p - -#define OTV_OPTIONAL_OFFSET( _offset ) \ - FT_BEGIN_STMNT \ - _offset ## _p = p; \ - _offset = FT_NEXT_USHORT( p ); \ - FT_END_STMNT - -#define OTV_OPTIONAL_OFFSET32( _offset ) \ - FT_BEGIN_STMNT \ - _offset ## _p = p; \ - _offset = FT_NEXT_ULONG( p ); \ - FT_END_STMNT - -#define OTV_LIMIT_CHECK( _count ) \ - FT_BEGIN_STMNT \ - if ( p + (_count) > otvalid->root->limit ) \ - FT_INVALID_TOO_SHORT; \ - FT_END_STMNT - -#define OTV_SIZE_CHECK( _size ) \ - FT_BEGIN_STMNT \ - if ( _size > 0 && _size < table_size ) \ - { \ - if ( otvalid->root->level == FT_VALIDATE_PARANOID ) \ - FT_INVALID_OFFSET; \ - else \ - { \ - /* strip off `const' */ \ - FT_Byte* pp = (FT_Byte*)_size ## _p; \ - \ - \ - FT_TRACE3(( "\n" \ - "Invalid offset to optional table `%s'" \ - " set to zero.\n" \ - "\n", #_size )); \ - \ - _size = pp[0] = pp[1] = 0; \ - } \ - } \ - FT_END_STMNT - -#define OTV_SIZE_CHECK32( _size ) \ - FT_BEGIN_STMNT \ - if ( _size > 0 && _size < table_size ) \ - { \ - if ( otvalid->root->level == FT_VALIDATE_PARANOID ) \ - FT_INVALID_OFFSET; \ - else \ - { \ - /* strip off `const' */ \ - FT_Byte* pp = (FT_Byte*)_size ## _p; \ - \ - \ - FT_TRACE3(( "\n" \ - "Invalid offset to optional table `%s'" \ - " set to zero.\n" \ - "\n", #_size )); \ - \ - _size = pp[0] = pp[1] = pp[2] = pp[3] = 0; \ - } \ - } \ - FT_END_STMNT - - -#define OTV_NAME_(x) #x -#define OTV_NAME(x) OTV_NAME_(x) - -#define OTV_FUNC_(x) x##Func -#define OTV_FUNC(x) OTV_FUNC_(x) - -#ifdef FT_DEBUG_LEVEL_TRACE - -#define OTV_NEST1( x ) \ - FT_BEGIN_STMNT \ - otvalid->nesting_level = 0; \ - otvalid->func[0] = OTV_FUNC( x ); \ - otvalid->debug_function_name[0] = OTV_NAME( x ); \ - FT_END_STMNT - -#define OTV_NEST2( x, y ) \ - FT_BEGIN_STMNT \ - otvalid->nesting_level = 0; \ - otvalid->func[0] = OTV_FUNC( x ); \ - otvalid->func[1] = OTV_FUNC( y ); \ - otvalid->debug_function_name[0] = OTV_NAME( x ); \ - otvalid->debug_function_name[1] = OTV_NAME( y ); \ - FT_END_STMNT - -#define OTV_NEST3( x, y, z ) \ - FT_BEGIN_STMNT \ - otvalid->nesting_level = 0; \ - otvalid->func[0] = OTV_FUNC( x ); \ - otvalid->func[1] = OTV_FUNC( y ); \ - otvalid->func[2] = OTV_FUNC( z ); \ - otvalid->debug_function_name[0] = OTV_NAME( x ); \ - otvalid->debug_function_name[1] = OTV_NAME( y ); \ - otvalid->debug_function_name[2] = OTV_NAME( z ); \ - FT_END_STMNT - -#define OTV_INIT otvalid->debug_indent = 0 - -#define OTV_ENTER \ - FT_BEGIN_STMNT \ - otvalid->debug_indent += 2; \ - FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \ - FT_TRACE4(( "%s table\n", \ - otvalid->debug_function_name[otvalid->nesting_level] )); \ - FT_END_STMNT - -#define OTV_NAME_ENTER( name ) \ - FT_BEGIN_STMNT \ - otvalid->debug_indent += 2; \ - FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \ - FT_TRACE4(( "%s table\n", name )); \ - FT_END_STMNT - -#define OTV_EXIT otvalid->debug_indent -= 2 - -#define OTV_TRACE( s ) \ - FT_BEGIN_STMNT \ - FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \ - FT_TRACE4( s ); \ - FT_END_STMNT - -#else /* !FT_DEBUG_LEVEL_TRACE */ - -#define OTV_NEST1( x ) \ - FT_BEGIN_STMNT \ - otvalid->nesting_level = 0; \ - otvalid->func[0] = OTV_FUNC( x ); \ - FT_END_STMNT - -#define OTV_NEST2( x, y ) \ - FT_BEGIN_STMNT \ - otvalid->nesting_level = 0; \ - otvalid->func[0] = OTV_FUNC( x ); \ - otvalid->func[1] = OTV_FUNC( y ); \ - FT_END_STMNT - -#define OTV_NEST3( x, y, z ) \ - FT_BEGIN_STMNT \ - otvalid->nesting_level = 0; \ - otvalid->func[0] = OTV_FUNC( x ); \ - otvalid->func[1] = OTV_FUNC( y ); \ - otvalid->func[2] = OTV_FUNC( z ); \ - FT_END_STMNT - -#define OTV_INIT do { } while ( 0 ) -#define OTV_ENTER do { } while ( 0 ) -#define OTV_NAME_ENTER( name ) do { } while ( 0 ) -#define OTV_EXIT do { } while ( 0 ) - -#define OTV_TRACE( s ) do { } while ( 0 ) - -#endif /* !FT_DEBUG_LEVEL_TRACE */ - - -#define OTV_RUN otvalid->func[0] - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** COVERAGE TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - otv_Coverage_validate( FT_Bytes table, - OTV_Validator otvalid, - FT_Int expected_count ); - - /* return first covered glyph */ - FT_LOCAL( FT_UInt ) - otv_Coverage_get_first( FT_Bytes table ); - - /* return last covered glyph */ - FT_LOCAL( FT_UInt ) - otv_Coverage_get_last( FT_Bytes table ); - - /* return number of covered glyphs */ - FT_LOCAL( FT_UInt ) - otv_Coverage_get_count( FT_Bytes table ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** CLASS DEFINITION TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - otv_ClassDef_validate( FT_Bytes table, - OTV_Validator otvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** DEVICE TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - otv_Device_validate( FT_Bytes table, - OTV_Validator otvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** LOOKUPS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - otv_Lookup_validate( FT_Bytes table, - OTV_Validator otvalid ); - - FT_LOCAL( void ) - otv_LookupList_validate( FT_Bytes table, - OTV_Validator otvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** FEATURES *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - otv_Feature_validate( FT_Bytes table, - OTV_Validator otvalid ); - - /* lookups must already be validated */ - FT_LOCAL( void ) - otv_FeatureList_validate( FT_Bytes table, - FT_Bytes lookups, - OTV_Validator otvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** LANGUAGE SYSTEM *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - otv_LangSys_validate( FT_Bytes table, - OTV_Validator otvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** SCRIPTS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - FT_LOCAL( void ) - otv_Script_validate( FT_Bytes table, - OTV_Validator otvalid ); - - /* features must already be validated */ - FT_LOCAL( void ) - otv_ScriptList_validate( FT_Bytes table, - FT_Bytes features, - OTV_Validator otvalid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define ChainPosClassSetFunc otv_x_Ox -#define ChainPosRuleSetFunc otv_x_Ox -#define ChainSubClassSetFunc otv_x_Ox -#define ChainSubRuleSetFunc otv_x_Ox -#define JstfLangSysFunc otv_x_Ox -#define JstfMaxFunc otv_x_Ox -#define LigGlyphFunc otv_x_Ox -#define LigatureArrayFunc otv_x_Ox -#define LigatureSetFunc otv_x_Ox -#define PosClassSetFunc otv_x_Ox -#define PosRuleSetFunc otv_x_Ox -#define SubClassSetFunc otv_x_Ox -#define SubRuleSetFunc otv_x_Ox - - FT_LOCAL( void ) - otv_x_Ox ( FT_Bytes table, - OTV_Validator otvalid ); - -#define AlternateSubstFormat1Func otv_u_C_x_Ox -#define ChainContextPosFormat1Func otv_u_C_x_Ox -#define ChainContextSubstFormat1Func otv_u_C_x_Ox -#define ContextPosFormat1Func otv_u_C_x_Ox -#define ContextSubstFormat1Func otv_u_C_x_Ox -#define LigatureSubstFormat1Func otv_u_C_x_Ox -#define MultipleSubstFormat1Func otv_u_C_x_Ox - - FT_LOCAL( void ) - otv_u_C_x_Ox( FT_Bytes table, - OTV_Validator otvalid ); - -#define AlternateSetFunc otv_x_ux -#define AttachPointFunc otv_x_ux -#define ExtenderGlyphFunc otv_x_ux -#define JstfGPOSModListFunc otv_x_ux -#define JstfGSUBModListFunc otv_x_ux -#define SequenceFunc otv_x_ux - - FT_LOCAL( void ) - otv_x_ux( FT_Bytes table, - OTV_Validator otvalid ); - -#define PosClassRuleFunc otv_x_y_ux_sy -#define PosRuleFunc otv_x_y_ux_sy -#define SubClassRuleFunc otv_x_y_ux_sy -#define SubRuleFunc otv_x_y_ux_sy - - FT_LOCAL( void ) - otv_x_y_ux_sy( FT_Bytes table, - OTV_Validator otvalid ); - -#define ChainPosClassRuleFunc otv_x_ux_y_uy_z_uz_p_sp -#define ChainPosRuleFunc otv_x_ux_y_uy_z_uz_p_sp -#define ChainSubClassRuleFunc otv_x_ux_y_uy_z_uz_p_sp -#define ChainSubRuleFunc otv_x_ux_y_uy_z_uz_p_sp - - FT_LOCAL( void ) - otv_x_ux_y_uy_z_uz_p_sp( FT_Bytes table, - OTV_Validator otvalid ); - -#define ContextPosFormat2Func otv_u_O_O_x_Onx -#define ContextSubstFormat2Func otv_u_O_O_x_Onx - - FT_LOCAL( void ) - otv_u_O_O_x_Onx( FT_Bytes table, - OTV_Validator otvalid ); - -#define ContextPosFormat3Func otv_u_x_y_Ox_sy -#define ContextSubstFormat3Func otv_u_x_y_Ox_sy - - FT_LOCAL( void ) - otv_u_x_y_Ox_sy( FT_Bytes table, - OTV_Validator otvalid ); - -#define ChainContextPosFormat2Func otv_u_O_O_O_O_x_Onx -#define ChainContextSubstFormat2Func otv_u_O_O_O_O_x_Onx - - FT_LOCAL( void ) - otv_u_O_O_O_O_x_Onx( FT_Bytes table, - OTV_Validator otvalid ); - -#define ChainContextPosFormat3Func otv_u_x_Ox_y_Oy_z_Oz_p_sp -#define ChainContextSubstFormat3Func otv_u_x_Ox_y_Oy_z_Oz_p_sp - - FT_LOCAL( void ) - otv_u_x_Ox_y_Oy_z_Oz_p_sp( FT_Bytes table, - OTV_Validator otvalid ); - - - FT_LOCAL( FT_UInt ) - otv_GSUBGPOS_get_Lookup_count( FT_Bytes table ); - - FT_LOCAL( FT_UInt ) - otv_GSUBGPOS_have_MarkAttachmentType_flag( FT_Bytes table ); - - /* */ - -FT_END_HEADER - -#endif /* OTVCOMMN_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otverror.h b/sdk/lib/3rdparty/freetype/src/otvalid/otverror.h deleted file mode 100644 index a7d35acf1ab..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otverror.h +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * 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_ - -#include FT_MODULE_ERRORS_H - -#undef FTERRORS_H_ - -#undef FT_ERR_PREFIX -#define FT_ERR_PREFIX OTV_Err_ -#define FT_ERR_BASE FT_Mod_Err_OTvalid - -#include FT_ERRORS_H - -#endif /* OTVERROR_H_ */ - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvgdef.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvgdef.c deleted file mode 100644 index 2529b544d2a..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvgdef.c +++ /dev/null @@ -1,303 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvgdef - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define AttachListFunc otv_O_x_Ox -#define LigCaretListFunc otv_O_x_Ox - - /* sets valid->extra1 (0) */ - - static void - otv_O_x_Ox( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_Bytes Coverage; - FT_UInt GlyphCount; - OTV_Validate_Func func; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 4 ); - Coverage = table + FT_NEXT_USHORT( p ); - GlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount )); - - otv_Coverage_validate( Coverage, otvalid, (FT_Int)GlyphCount ); - if ( GlyphCount != otv_Coverage_get_count( Coverage ) ) - FT_INVALID_DATA; - - OTV_LIMIT_CHECK( GlyphCount * 2 ); - - otvalid->nesting_level++; - func = otvalid->func[otvalid->nesting_level]; - otvalid->extra1 = 0; - - for ( ; GlyphCount > 0; GlyphCount-- ) - func( table + FT_NEXT_USHORT( p ), otvalid ); - - otvalid->nesting_level--; - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** LIGATURE CARETS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define CaretValueFunc otv_CaretValue_validate - - static void - otv_CaretValue_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt CaretValueFormat; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 4 ); - - CaretValueFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format = %d)\n", CaretValueFormat )); - - switch ( CaretValueFormat ) - { - case 1: /* CaretValueFormat1 */ - /* skip Coordinate, no test */ - break; - - case 2: /* CaretValueFormat2 */ - /* skip CaretValuePoint, no test */ - break; - - case 3: /* CaretValueFormat3 */ - p += 2; /* skip Coordinate */ - - OTV_LIMIT_CHECK( 2 ); - - /* DeviceTable */ - otv_Device_validate( table + FT_NEXT_USHORT( p ), otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MARK GLYPH SETS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_MarkGlyphSets_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt MarkGlyphSetCount; - - - OTV_NAME_ENTER( "MarkGlyphSets" ); - - p += 2; /* skip Format */ - - OTV_LIMIT_CHECK( 2 ); - MarkGlyphSetCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (MarkGlyphSetCount = %d)\n", MarkGlyphSetCount )); - - OTV_LIMIT_CHECK( MarkGlyphSetCount * 4 ); /* CoverageOffsets */ - - for ( ; MarkGlyphSetCount > 0; MarkGlyphSetCount-- ) - otv_Coverage_validate( table + FT_NEXT_ULONG( p ), otvalid, -1 ); - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GDEF TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->glyph_count */ - - FT_LOCAL_DEF( void ) - otv_GDEF_validate( FT_Bytes table, - FT_Bytes gsub, - FT_Bytes gpos, - FT_UInt glyph_count, - FT_Validator ftvalid ) - { - OTV_ValidatorRec otvalidrec; - OTV_Validator otvalid = &otvalidrec; - FT_Bytes p = table; - FT_UInt table_size; - FT_UShort version; - FT_Bool need_MarkAttachClassDef = 1; - - OTV_OPTIONAL_TABLE( GlyphClassDef ); - OTV_OPTIONAL_TABLE( AttachListOffset ); - OTV_OPTIONAL_TABLE( LigCaretListOffset ); - OTV_OPTIONAL_TABLE( MarkAttachClassDef ); - OTV_OPTIONAL_TABLE( MarkGlyphSetsDef ); - - OTV_OPTIONAL_TABLE32( itemVarStore ); - - - otvalid->root = ftvalid; - - FT_TRACE3(( "validating GDEF table\n" )); - OTV_INIT; - - OTV_LIMIT_CHECK( 4 ); - - if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */ - FT_INVALID_FORMAT; - - version = FT_NEXT_USHORT( p ); /* minorVersion */ - - table_size = 10; - switch ( version ) - { - case 0: - /* MarkAttachClassDef has been added to the OpenType */ - /* specification without increasing GDEF's version, */ - /* so we use this ugly hack to find out whether the */ - /* table is needed actually. */ - - need_MarkAttachClassDef = FT_BOOL( - otv_GSUBGPOS_have_MarkAttachmentType_flag( gsub ) || - otv_GSUBGPOS_have_MarkAttachmentType_flag( gpos ) ); - - if ( need_MarkAttachClassDef ) - { - OTV_LIMIT_CHECK( 8 ); - table_size += 2; - } - else - OTV_LIMIT_CHECK( 6 ); /* OpenType < 1.2 */ - - break; - - case 2: - OTV_LIMIT_CHECK( 10 ); - table_size += 4; - break; - - case 3: - OTV_LIMIT_CHECK( 14 ); - table_size += 8; - break; - - default: - FT_INVALID_FORMAT; - } - - otvalid->glyph_count = glyph_count; - - OTV_OPTIONAL_OFFSET( GlyphClassDef ); - OTV_SIZE_CHECK( GlyphClassDef ); - if ( GlyphClassDef ) - otv_ClassDef_validate( table + GlyphClassDef, otvalid ); - - OTV_OPTIONAL_OFFSET( AttachListOffset ); - OTV_SIZE_CHECK( AttachListOffset ); - if ( AttachListOffset ) - { - OTV_NEST2( AttachList, AttachPoint ); - OTV_RUN( table + AttachListOffset, otvalid ); - } - - OTV_OPTIONAL_OFFSET( LigCaretListOffset ); - OTV_SIZE_CHECK( LigCaretListOffset ); - if ( LigCaretListOffset ) - { - OTV_NEST3( LigCaretList, LigGlyph, CaretValue ); - OTV_RUN( table + LigCaretListOffset, otvalid ); - } - - if ( need_MarkAttachClassDef ) - { - OTV_OPTIONAL_OFFSET( MarkAttachClassDef ); - OTV_SIZE_CHECK( MarkAttachClassDef ); - if ( MarkAttachClassDef ) - otv_ClassDef_validate( table + MarkAttachClassDef, otvalid ); - } - - if ( version > 0 ) - { - OTV_OPTIONAL_OFFSET( MarkGlyphSetsDef ); - OTV_SIZE_CHECK( MarkGlyphSetsDef ); - if ( MarkGlyphSetsDef ) - otv_MarkGlyphSets_validate( table + MarkGlyphSetsDef, otvalid ); - } - - if ( version > 2 ) - { - OTV_OPTIONAL_OFFSET32( itemVarStore ); - OTV_SIZE_CHECK32( itemVarStore ); - if ( itemVarStore ) - OTV_TRACE(( " [omitting itemVarStore validation]\n" )); /* XXX */ - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvgpos.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvgpos.c deleted file mode 100644 index f3bddeac6cc..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvgpos.c +++ /dev/null @@ -1,1051 +0,0 @@ -/**************************************************************************** - * - * 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" -#include "otvcommn.h" -#include "otvgpos.h" - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvgpos - - - static void - otv_Anchor_validate( FT_Bytes table, - OTV_Validator valid ); - - static void - otv_MarkArray_validate( FT_Bytes table, - OTV_Validator valid ); - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** UTILITY FUNCTIONS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define BaseArrayFunc otv_x_sxy -#define LigatureAttachFunc otv_x_sxy -#define Mark2ArrayFunc otv_x_sxy - - /* uses valid->extra1 (counter) */ - /* uses valid->extra2 (boolean to handle NULL anchor field) */ - - static void - otv_x_sxy( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Count, count1, table_size; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 2 ); - - Count = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (Count = %d)\n", Count )); - - OTV_LIMIT_CHECK( Count * otvalid->extra1 * 2 ); - - table_size = Count * otvalid->extra1 * 2 + 2; - - for ( ; Count > 0; Count-- ) - for ( count1 = otvalid->extra1; count1 > 0; count1-- ) - { - OTV_OPTIONAL_TABLE( anchor_offset ); - - - OTV_OPTIONAL_OFFSET( anchor_offset ); - - if ( otvalid->extra2 ) - { - OTV_SIZE_CHECK( anchor_offset ); - if ( anchor_offset ) - otv_Anchor_validate( table + anchor_offset, otvalid ); - } - else - otv_Anchor_validate( table + anchor_offset, otvalid ); - } - - OTV_EXIT; - } - - -#define MarkBasePosFormat1Func otv_u_O_O_u_O_O -#define MarkLigPosFormat1Func otv_u_O_O_u_O_O -#define MarkMarkPosFormat1Func otv_u_O_O_u_O_O - - /* sets otvalid->extra1 (class count) */ - - static void - otv_u_O_O_u_O_O( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt Coverage1, Coverage2, ClassCount; - FT_UInt Array1, Array2; - OTV_Validate_Func func; - - - OTV_ENTER; - - p += 2; /* skip PosFormat */ - - OTV_LIMIT_CHECK( 10 ); - Coverage1 = FT_NEXT_USHORT( p ); - Coverage2 = FT_NEXT_USHORT( p ); - ClassCount = FT_NEXT_USHORT( p ); - Array1 = FT_NEXT_USHORT( p ); - Array2 = FT_NEXT_USHORT( p ); - - otv_Coverage_validate( table + Coverage1, otvalid, -1 ); - otv_Coverage_validate( table + Coverage2, otvalid, -1 ); - - otv_MarkArray_validate( table + Array1, otvalid ); - - otvalid->nesting_level++; - func = otvalid->func[otvalid->nesting_level]; - otvalid->extra1 = ClassCount; - - func( table + Array2, otvalid ); - - otvalid->nesting_level--; - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** VALUE RECORDS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static FT_UInt - otv_value_length( FT_UInt format ) - { - FT_UInt count; - - - count = ( ( format & 0xAA ) >> 1 ) + ( format & 0x55 ); - count = ( ( count & 0xCC ) >> 2 ) + ( count & 0x33 ); - count = ( ( count & 0xF0 ) >> 4 ) + ( count & 0x0F ); - - return count * 2; - } - - - /* uses otvalid->extra3 (pointer to base table) */ - - static void - otv_ValueRecord_validate( FT_Bytes table, - FT_UInt format, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt count; - -#ifdef FT_DEBUG_LEVEL_TRACE - FT_Int loop; - FT_ULong res = 0; - - - OTV_NAME_ENTER( "ValueRecord" ); - - /* display `format' in dual representation */ - for ( loop = 7; loop >= 0; loop-- ) - { - res <<= 4; - res += ( format >> loop ) & 1; - } - - OTV_TRACE(( " (format 0b%08lx)\n", res )); -#endif - - if ( format >= 0x100 ) - FT_INVALID_FORMAT; - - for ( count = 4; count > 0; count-- ) - { - if ( format & 1 ) - { - /* XPlacement, YPlacement, XAdvance, YAdvance */ - OTV_LIMIT_CHECK( 2 ); - p += 2; - } - - format >>= 1; - } - - for ( count = 4; count > 0; count-- ) - { - if ( format & 1 ) - { - FT_PtrDist table_size; - - OTV_OPTIONAL_TABLE( device ); - - - /* XPlaDevice, YPlaDevice, XAdvDevice, YAdvDevice */ - OTV_LIMIT_CHECK( 2 ); - OTV_OPTIONAL_OFFSET( device ); - - table_size = p - otvalid->extra3; - - OTV_SIZE_CHECK( device ); - if ( device ) - otv_Device_validate( otvalid->extra3 + device, otvalid ); - } - format >>= 1; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** ANCHORS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_Anchor_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt AnchorFormat; - - - OTV_NAME_ENTER( "Anchor"); - - OTV_LIMIT_CHECK( 6 ); - AnchorFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", AnchorFormat )); - - p += 4; /* skip XCoordinate and YCoordinate */ - - switch ( AnchorFormat ) - { - case 1: - break; - - case 2: - OTV_LIMIT_CHECK( 2 ); /* AnchorPoint */ - break; - - case 3: - { - FT_UInt table_size; - - OTV_OPTIONAL_TABLE( XDeviceTable ); - OTV_OPTIONAL_TABLE( YDeviceTable ); - - - OTV_LIMIT_CHECK( 4 ); - OTV_OPTIONAL_OFFSET( XDeviceTable ); - OTV_OPTIONAL_OFFSET( YDeviceTable ); - - table_size = 6 + 4; - - OTV_SIZE_CHECK( XDeviceTable ); - if ( XDeviceTable ) - otv_Device_validate( table + XDeviceTable, otvalid ); - - OTV_SIZE_CHECK( YDeviceTable ); - if ( YDeviceTable ) - otv_Device_validate( table + YDeviceTable, otvalid ); - } - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MARK ARRAYS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_MarkArray_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt MarkCount; - - - OTV_NAME_ENTER( "MarkArray" ); - - OTV_LIMIT_CHECK( 2 ); - MarkCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (MarkCount = %d)\n", MarkCount )); - - OTV_LIMIT_CHECK( MarkCount * 4 ); - - /* MarkRecord */ - for ( ; MarkCount > 0; MarkCount-- ) - { - p += 2; /* skip Class */ - /* MarkAnchor */ - otv_Anchor_validate( table + FT_NEXT_USHORT( p ), otvalid ); - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 1 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra3 (pointer to base table) */ - - static void - otv_SinglePos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "SinglePos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - otvalid->extra3 = table; - - switch ( PosFormat ) - { - case 1: /* SinglePosFormat1 */ - { - FT_UInt Coverage, ValueFormat; - - - OTV_LIMIT_CHECK( 4 ); - Coverage = FT_NEXT_USHORT( p ); - ValueFormat = FT_NEXT_USHORT( p ); - - otv_Coverage_validate( table + Coverage, otvalid, -1 ); - otv_ValueRecord_validate( p, ValueFormat, otvalid ); /* Value */ - } - break; - - case 2: /* SinglePosFormat2 */ - { - FT_UInt Coverage, ValueFormat, ValueCount, len_value; - - - OTV_LIMIT_CHECK( 6 ); - Coverage = FT_NEXT_USHORT( p ); - ValueFormat = FT_NEXT_USHORT( p ); - ValueCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (ValueCount = %d)\n", ValueCount )); - - len_value = otv_value_length( ValueFormat ); - - otv_Coverage_validate( table + Coverage, - otvalid, - (FT_Int)ValueCount ); - - OTV_LIMIT_CHECK( ValueCount * len_value ); - - /* Value */ - for ( ; ValueCount > 0; ValueCount-- ) - { - otv_ValueRecord_validate( p, ValueFormat, otvalid ); - p += len_value; - } - } - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 2 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra3 (pointer to base table) */ - - static void - otv_PairSet_validate( FT_Bytes table, - FT_UInt format1, - FT_UInt format2, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt value_len1, value_len2, PairValueCount; - - - OTV_NAME_ENTER( "PairSet" ); - - otvalid->extra3 = table; - - OTV_LIMIT_CHECK( 2 ); - PairValueCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (PairValueCount = %d)\n", PairValueCount )); - - value_len1 = otv_value_length( format1 ); - value_len2 = otv_value_length( format2 ); - - OTV_LIMIT_CHECK( PairValueCount * ( value_len1 + value_len2 + 2 ) ); - - /* PairValueRecord */ - for ( ; PairValueCount > 0; PairValueCount-- ) - { - p += 2; /* skip SecondGlyph */ - - if ( format1 ) - otv_ValueRecord_validate( p, format1, otvalid ); /* Value1 */ - p += value_len1; - - if ( format2 ) - otv_ValueRecord_validate( p, format2, otvalid ); /* Value2 */ - p += value_len2; - } - - OTV_EXIT; - } - - - /* sets otvalid->extra3 (pointer to base table) */ - - static void - otv_PairPos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "PairPos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: /* PairPosFormat1 */ - { - FT_UInt Coverage, ValueFormat1, ValueFormat2, PairSetCount; - - - OTV_LIMIT_CHECK( 8 ); - Coverage = FT_NEXT_USHORT( p ); - ValueFormat1 = FT_NEXT_USHORT( p ); - ValueFormat2 = FT_NEXT_USHORT( p ); - PairSetCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (PairSetCount = %d)\n", PairSetCount )); - - otv_Coverage_validate( table + Coverage, otvalid, -1 ); - - OTV_LIMIT_CHECK( PairSetCount * 2 ); - - /* PairSetOffset */ - for ( ; PairSetCount > 0; PairSetCount-- ) - otv_PairSet_validate( table + FT_NEXT_USHORT( p ), - ValueFormat1, ValueFormat2, otvalid ); - } - break; - - case 2: /* PairPosFormat2 */ - { - FT_UInt Coverage, ValueFormat1, ValueFormat2, ClassDef1, ClassDef2; - FT_UInt ClassCount1, ClassCount2, len_value1, len_value2, count; - - - OTV_LIMIT_CHECK( 14 ); - Coverage = FT_NEXT_USHORT( p ); - ValueFormat1 = FT_NEXT_USHORT( p ); - ValueFormat2 = FT_NEXT_USHORT( p ); - ClassDef1 = FT_NEXT_USHORT( p ); - ClassDef2 = FT_NEXT_USHORT( p ); - ClassCount1 = FT_NEXT_USHORT( p ); - ClassCount2 = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (ClassCount1 = %d)\n", ClassCount1 )); - OTV_TRACE(( " (ClassCount2 = %d)\n", ClassCount2 )); - - len_value1 = otv_value_length( ValueFormat1 ); - len_value2 = otv_value_length( ValueFormat2 ); - - otv_Coverage_validate( table + Coverage, otvalid, -1 ); - otv_ClassDef_validate( table + ClassDef1, otvalid ); - otv_ClassDef_validate( table + ClassDef2, otvalid ); - - OTV_LIMIT_CHECK( ClassCount1 * ClassCount2 * - ( len_value1 + len_value2 ) ); - - otvalid->extra3 = table; - - /* Class1Record */ - for ( ; ClassCount1 > 0; ClassCount1-- ) - { - /* Class2Record */ - for ( count = ClassCount2; count > 0; count-- ) - { - if ( ValueFormat1 ) - /* Value1 */ - otv_ValueRecord_validate( p, ValueFormat1, otvalid ); - p += len_value1; - - if ( ValueFormat2 ) - /* Value2 */ - otv_ValueRecord_validate( p, ValueFormat2, otvalid ); - p += len_value2; - } - } - } - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 3 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_CursivePos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "CursivePos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: /* CursivePosFormat1 */ - { - FT_UInt table_size; - FT_UInt Coverage, EntryExitCount; - - OTV_OPTIONAL_TABLE( EntryAnchor ); - OTV_OPTIONAL_TABLE( ExitAnchor ); - - - OTV_LIMIT_CHECK( 4 ); - Coverage = FT_NEXT_USHORT( p ); - EntryExitCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (EntryExitCount = %d)\n", EntryExitCount )); - - otv_Coverage_validate( table + Coverage, - otvalid, - (FT_Int)EntryExitCount ); - - OTV_LIMIT_CHECK( EntryExitCount * 4 ); - - table_size = EntryExitCount * 4 + 4; - - /* EntryExitRecord */ - for ( ; EntryExitCount > 0; EntryExitCount-- ) - { - OTV_OPTIONAL_OFFSET( EntryAnchor ); - OTV_OPTIONAL_OFFSET( ExitAnchor ); - - OTV_SIZE_CHECK( EntryAnchor ); - if ( EntryAnchor ) - otv_Anchor_validate( table + EntryAnchor, otvalid ); - - OTV_SIZE_CHECK( ExitAnchor ); - if ( ExitAnchor ) - otv_Anchor_validate( table + ExitAnchor, otvalid ); - } - } - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 4 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* UNDOCUMENTED (in OpenType 1.5): */ - /* BaseRecord tables can contain NULL pointers. */ - - /* sets otvalid->extra2 (1) */ - - static void - otv_MarkBasePos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "MarkBasePos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: - otvalid->extra2 = 1; - OTV_NEST2( MarkBasePosFormat1, BaseArray ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 5 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra2 (1) */ - - static void - otv_MarkLigPos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "MarkLigPos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: - otvalid->extra2 = 1; - OTV_NEST3( MarkLigPosFormat1, LigatureArray, LigatureAttach ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 6 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra2 (0) */ - - static void - otv_MarkMarkPos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "MarkMarkPos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: - otvalid->extra2 = 0; - OTV_NEST2( MarkMarkPosFormat1, Mark2Array ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 7 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra1 (lookup count) */ - - static void - otv_ContextPos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "ContextPos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - otvalid->extra1 = otvalid->lookup_count; - OTV_NEST3( ContextPosFormat1, PosRuleSet, PosRule ); - OTV_RUN( table, otvalid ); - break; - - case 2: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - OTV_NEST3( ContextPosFormat2, PosClassSet, PosClassRule ); - OTV_RUN( table, otvalid ); - break; - - case 3: - OTV_NEST1( ContextPosFormat3 ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 8 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra1 (lookup count) */ - - static void - otv_ChainContextPos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "ChainContextPos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - otvalid->extra1 = otvalid->lookup_count; - OTV_NEST3( ChainContextPosFormat1, - ChainPosRuleSet, ChainPosRule ); - OTV_RUN( table, otvalid ); - break; - - case 2: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - OTV_NEST3( ChainContextPosFormat2, - ChainPosClassSet, ChainPosClassRule ); - OTV_RUN( table, otvalid ); - break; - - case 3: - OTV_NEST1( ChainContextPosFormat3 ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS LOOKUP TYPE 9 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* uses otvalid->type_funcs */ - - static void - otv_ExtensionPos_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt PosFormat; - - - OTV_NAME_ENTER( "ExtensionPos" ); - - OTV_LIMIT_CHECK( 2 ); - PosFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", PosFormat )); - - switch ( PosFormat ) - { - case 1: /* ExtensionPosFormat1 */ - { - FT_UInt ExtensionLookupType; - FT_ULong ExtensionOffset; - OTV_Validate_Func validate; - - - OTV_LIMIT_CHECK( 6 ); - ExtensionLookupType = FT_NEXT_USHORT( p ); - ExtensionOffset = FT_NEXT_ULONG( p ); - - if ( ExtensionLookupType == 0 || ExtensionLookupType >= 9 ) - FT_INVALID_DATA; - - validate = otvalid->type_funcs[ExtensionLookupType - 1]; - validate( table + ExtensionOffset, otvalid ); - } - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - static const OTV_Validate_Func otv_gpos_validate_funcs[9] = - { - otv_SinglePos_validate, - otv_PairPos_validate, - otv_CursivePos_validate, - otv_MarkBasePos_validate, - otv_MarkLigPos_validate, - otv_MarkMarkPos_validate, - otv_ContextPos_validate, - otv_ChainContextPos_validate, - otv_ExtensionPos_validate - }; - - - /* sets otvalid->type_count */ - /* sets otvalid->type_funcs */ - - FT_LOCAL_DEF( void ) - otv_GPOS_subtable_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - otvalid->type_count = 9; - otvalid->type_funcs = (OTV_Validate_Func*)otv_gpos_validate_funcs; - - otv_Lookup_validate( table, otvalid ); - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GPOS TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->glyph_count */ - - FT_LOCAL_DEF( void ) - otv_GPOS_validate( FT_Bytes table, - FT_UInt glyph_count, - FT_Validator ftvalid ) - { - OTV_ValidatorRec validrec; - OTV_Validator otvalid = &validrec; - FT_Bytes p = table; - FT_UInt table_size; - FT_UShort version; - FT_UInt ScriptList, FeatureList, LookupList; - - OTV_OPTIONAL_TABLE32( featureVariations ); - - - otvalid->root = ftvalid; - - FT_TRACE3(( "validating GPOS table\n" )); - OTV_INIT; - - OTV_LIMIT_CHECK( 4 ); - - if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */ - FT_INVALID_FORMAT; - - version = FT_NEXT_USHORT( p ); /* minorVersion */ - - table_size = 10; - switch ( version ) - { - case 0: - OTV_LIMIT_CHECK( 6 ); - break; - - case 1: - OTV_LIMIT_CHECK( 10 ); - table_size += 4; - break; - - default: - FT_INVALID_FORMAT; - } - - ScriptList = FT_NEXT_USHORT( p ); - FeatureList = FT_NEXT_USHORT( p ); - LookupList = FT_NEXT_USHORT( p ); - - otvalid->type_count = 9; - otvalid->type_funcs = (OTV_Validate_Func*)otv_gpos_validate_funcs; - otvalid->glyph_count = glyph_count; - - otv_LookupList_validate( table + LookupList, - otvalid ); - otv_FeatureList_validate( table + FeatureList, table + LookupList, - otvalid ); - otv_ScriptList_validate( table + ScriptList, table + FeatureList, - otvalid ); - - if ( version > 0 ) - { - OTV_OPTIONAL_OFFSET32( featureVariations ); - OTV_SIZE_CHECK32( featureVariations ); - if ( featureVariations ) - OTV_TRACE(( " [omitting featureVariations validation]\n" )); /* XXX */ - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvgsub.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvgsub.c deleted file mode 100644 index 97da997d3da..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvgsub.c +++ /dev/null @@ -1,617 +0,0 @@ -/**************************************************************************** - * - * 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. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvgsub - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 1 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* uses otvalid->glyph_count */ - - static void - otv_SingleSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt SubstFormat; - - - OTV_NAME_ENTER( "SingleSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: /* SingleSubstFormat1 */ - { - FT_Bytes Coverage; - FT_Int DeltaGlyphID; - FT_Long idx; - - - OTV_LIMIT_CHECK( 4 ); - Coverage = table + FT_NEXT_USHORT( p ); - DeltaGlyphID = FT_NEXT_SHORT( p ); - - otv_Coverage_validate( Coverage, otvalid, -1 ); - - idx = (FT_Long)otv_Coverage_get_first( Coverage ) + DeltaGlyphID; - if ( idx < 0 ) - FT_INVALID_DATA; - - idx = (FT_Long)otv_Coverage_get_last( Coverage ) + DeltaGlyphID; - if ( (FT_UInt)idx >= otvalid->glyph_count ) - FT_INVALID_DATA; - } - break; - - case 2: /* SingleSubstFormat2 */ - { - FT_UInt Coverage, GlyphCount; - - - OTV_LIMIT_CHECK( 4 ); - Coverage = FT_NEXT_USHORT( p ); - GlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount )); - - otv_Coverage_validate( table + Coverage, - otvalid, - (FT_Int)GlyphCount ); - - OTV_LIMIT_CHECK( GlyphCount * 2 ); - - /* Substitute */ - for ( ; GlyphCount > 0; GlyphCount-- ) - if ( FT_NEXT_USHORT( p ) >= otvalid->glyph_count ) - FT_INVALID_GLYPH_ID; - } - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 2 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra1 (glyph count) */ - - static void - otv_MultipleSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt SubstFormat; - - - OTV_NAME_ENTER( "MultipleSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: - otvalid->extra1 = otvalid->glyph_count; - OTV_NEST2( MultipleSubstFormat1, Sequence ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 3 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra1 (glyph count) */ - - static void - otv_AlternateSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt SubstFormat; - - - OTV_NAME_ENTER( "AlternateSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: - otvalid->extra1 = otvalid->glyph_count; - OTV_NEST2( AlternateSubstFormat1, AlternateSet ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 4 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - -#define LigatureFunc otv_Ligature_validate - - /* uses otvalid->glyph_count */ - - static void - otv_Ligature_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt LigatureGlyph, CompCount; - - - OTV_ENTER; - - OTV_LIMIT_CHECK( 4 ); - LigatureGlyph = FT_NEXT_USHORT( p ); - if ( LigatureGlyph >= otvalid->glyph_count ) - FT_INVALID_DATA; - - CompCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (CompCount = %d)\n", CompCount )); - - if ( CompCount == 0 ) - FT_INVALID_DATA; - - CompCount--; - - OTV_LIMIT_CHECK( CompCount * 2 ); /* Component */ - - /* no need to check the Component glyph indices */ - - OTV_EXIT; - } - - - static void - otv_LigatureSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt SubstFormat; - - - OTV_NAME_ENTER( "LigatureSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: - OTV_NEST3( LigatureSubstFormat1, LigatureSet, Ligature ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 5 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra1 (lookup count) */ - - static void - otv_ContextSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt SubstFormat; - - - OTV_NAME_ENTER( "ContextSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - otvalid->extra1 = otvalid->lookup_count; - OTV_NEST3( ContextSubstFormat1, SubRuleSet, SubRule ); - OTV_RUN( table, otvalid ); - break; - - case 2: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - OTV_NEST3( ContextSubstFormat2, SubClassSet, SubClassRule ); - OTV_RUN( table, otvalid ); - break; - - case 3: - OTV_NEST1( ContextSubstFormat3 ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 6 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->extra1 (lookup count) */ - - static void - otv_ChainContextSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt SubstFormat; - - - OTV_NAME_ENTER( "ChainContextSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - otvalid->extra1 = otvalid->lookup_count; - OTV_NEST3( ChainContextSubstFormat1, - ChainSubRuleSet, ChainSubRule ); - OTV_RUN( table, otvalid ); - break; - - case 2: - /* no need to check glyph indices/classes used as input for these */ - /* context rules since even invalid glyph indices/classes return */ - /* meaningful results */ - - OTV_NEST3( ChainContextSubstFormat2, - ChainSubClassSet, ChainSubClassRule ); - OTV_RUN( table, otvalid ); - break; - - case 3: - OTV_NEST1( ChainContextSubstFormat3 ); - OTV_RUN( table, otvalid ); - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 7 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* uses otvalid->type_funcs */ - - static void - otv_ExtensionSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt SubstFormat; - - - OTV_NAME_ENTER( "ExtensionSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: /* ExtensionSubstFormat1 */ - { - FT_UInt ExtensionLookupType; - FT_ULong ExtensionOffset; - OTV_Validate_Func validate; - - - OTV_LIMIT_CHECK( 6 ); - ExtensionLookupType = FT_NEXT_USHORT( p ); - ExtensionOffset = FT_NEXT_ULONG( p ); - - if ( ExtensionLookupType == 0 || - ExtensionLookupType == 7 || - ExtensionLookupType > 8 ) - FT_INVALID_DATA; - - validate = otvalid->type_funcs[ExtensionLookupType - 1]; - validate( table + ExtensionOffset, otvalid ); - } - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB LOOKUP TYPE 8 *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* uses otvalid->glyph_count */ - - static void - otv_ReverseChainSingleSubst_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table, Coverage; - FT_UInt SubstFormat; - FT_UInt BacktrackGlyphCount, LookaheadGlyphCount, GlyphCount; - - - OTV_NAME_ENTER( "ReverseChainSingleSubst" ); - - OTV_LIMIT_CHECK( 2 ); - SubstFormat = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (format %d)\n", SubstFormat )); - - switch ( SubstFormat ) - { - case 1: /* ReverseChainSingleSubstFormat1 */ - OTV_LIMIT_CHECK( 4 ); - Coverage = table + FT_NEXT_USHORT( p ); - BacktrackGlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (BacktrackGlyphCount = %d)\n", BacktrackGlyphCount )); - - otv_Coverage_validate( Coverage, otvalid, -1 ); - - OTV_LIMIT_CHECK( BacktrackGlyphCount * 2 + 2 ); - - for ( ; BacktrackGlyphCount > 0; BacktrackGlyphCount-- ) - otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 ); - - LookaheadGlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (LookaheadGlyphCount = %d)\n", LookaheadGlyphCount )); - - OTV_LIMIT_CHECK( LookaheadGlyphCount * 2 + 2 ); - - for ( ; LookaheadGlyphCount > 0; LookaheadGlyphCount-- ) - otv_Coverage_validate( table + FT_NEXT_USHORT( p ), otvalid, -1 ); - - GlyphCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount )); - - if ( GlyphCount != otv_Coverage_get_count( Coverage ) ) - FT_INVALID_DATA; - - OTV_LIMIT_CHECK( GlyphCount * 2 ); - - /* Substitute */ - for ( ; GlyphCount > 0; GlyphCount-- ) - if ( FT_NEXT_USHORT( p ) >= otvalid->glyph_count ) - FT_INVALID_DATA; - - break; - - default: - FT_INVALID_FORMAT; - } - - OTV_EXIT; - } - - - static const OTV_Validate_Func otv_gsub_validate_funcs[8] = - { - otv_SingleSubst_validate, - otv_MultipleSubst_validate, - otv_AlternateSubst_validate, - otv_LigatureSubst_validate, - otv_ContextSubst_validate, - otv_ChainContextSubst_validate, - otv_ExtensionSubst_validate, - otv_ReverseChainSingleSubst_validate - }; - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** GSUB TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->type_count */ - /* sets otvalid->type_funcs */ - /* sets otvalid->glyph_count */ - - FT_LOCAL_DEF( void ) - otv_GSUB_validate( FT_Bytes table, - FT_UInt glyph_count, - FT_Validator ftvalid ) - { - OTV_ValidatorRec otvalidrec; - OTV_Validator otvalid = &otvalidrec; - FT_Bytes p = table; - FT_UInt table_size; - FT_UShort version; - FT_UInt ScriptList, FeatureList, LookupList; - - OTV_OPTIONAL_TABLE32( featureVariations ); - - - otvalid->root = ftvalid; - - FT_TRACE3(( "validating GSUB table\n" )); - OTV_INIT; - - OTV_LIMIT_CHECK( 4 ); - - if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */ - FT_INVALID_FORMAT; - - version = FT_NEXT_USHORT( p ); /* minorVersion */ - - table_size = 10; - switch ( version ) - { - case 0: - OTV_LIMIT_CHECK( 6 ); - break; - - case 1: - OTV_LIMIT_CHECK( 10 ); - table_size += 4; - break; - - default: - FT_INVALID_FORMAT; - } - - ScriptList = FT_NEXT_USHORT( p ); - FeatureList = FT_NEXT_USHORT( p ); - LookupList = FT_NEXT_USHORT( p ); - - otvalid->type_count = 8; - otvalid->type_funcs = (OTV_Validate_Func*)otv_gsub_validate_funcs; - otvalid->glyph_count = glyph_count; - - otv_LookupList_validate( table + LookupList, - otvalid ); - otv_FeatureList_validate( table + FeatureList, table + LookupList, - otvalid ); - otv_ScriptList_validate( table + ScriptList, table + FeatureList, - otvalid ); - - if ( version > 0 ) - { - OTV_OPTIONAL_OFFSET32( featureVariations ); - OTV_SIZE_CHECK32( featureVariations ); - if ( featureVariations ) - OTV_TRACE(( " [omitting featureVariations validation]\n" )); /* XXX */ - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvjstf.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvjstf.c deleted file mode 100644 index d4e6d871787..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvjstf.c +++ /dev/null @@ -1,259 +0,0 @@ -/**************************************************************************** - * - * 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" -#include "otvcommn.h" -#include "otvgpos.h" - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvjstf - - -#define JstfPriorityFunc otv_JstfPriority_validate -#define JstfLookupFunc otv_GPOS_subtable_validate - - /* uses otvalid->extra1 (GSUB lookup count) */ - /* uses otvalid->extra2 (GPOS lookup count) */ - /* sets otvalid->extra1 (counter) */ - - static void - otv_JstfPriority_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt table_size; - FT_UInt gsub_lookup_count, gpos_lookup_count; - - OTV_OPTIONAL_TABLE( ShrinkageEnableGSUB ); - OTV_OPTIONAL_TABLE( ShrinkageDisableGSUB ); - OTV_OPTIONAL_TABLE( ShrinkageEnableGPOS ); - OTV_OPTIONAL_TABLE( ShrinkageDisableGPOS ); - OTV_OPTIONAL_TABLE( ExtensionEnableGSUB ); - OTV_OPTIONAL_TABLE( ExtensionDisableGSUB ); - OTV_OPTIONAL_TABLE( ExtensionEnableGPOS ); - OTV_OPTIONAL_TABLE( ExtensionDisableGPOS ); - OTV_OPTIONAL_TABLE( ShrinkageJstfMax ); - OTV_OPTIONAL_TABLE( ExtensionJstfMax ); - - - OTV_ENTER; - OTV_TRACE(( "JstfPriority table\n" )); - - OTV_LIMIT_CHECK( 20 ); - - gsub_lookup_count = otvalid->extra1; - gpos_lookup_count = otvalid->extra2; - - table_size = 20; - - otvalid->extra1 = gsub_lookup_count; - - OTV_OPTIONAL_OFFSET( ShrinkageEnableGSUB ); - OTV_SIZE_CHECK( ShrinkageEnableGSUB ); - if ( ShrinkageEnableGSUB ) - otv_x_ux( table + ShrinkageEnableGSUB, otvalid ); - - OTV_OPTIONAL_OFFSET( ShrinkageDisableGSUB ); - OTV_SIZE_CHECK( ShrinkageDisableGSUB ); - if ( ShrinkageDisableGSUB ) - otv_x_ux( table + ShrinkageDisableGSUB, otvalid ); - - otvalid->extra1 = gpos_lookup_count; - - OTV_OPTIONAL_OFFSET( ShrinkageEnableGPOS ); - OTV_SIZE_CHECK( ShrinkageEnableGPOS ); - if ( ShrinkageEnableGPOS ) - otv_x_ux( table + ShrinkageEnableGPOS, otvalid ); - - OTV_OPTIONAL_OFFSET( ShrinkageDisableGPOS ); - OTV_SIZE_CHECK( ShrinkageDisableGPOS ); - if ( ShrinkageDisableGPOS ) - otv_x_ux( table + ShrinkageDisableGPOS, otvalid ); - - OTV_OPTIONAL_OFFSET( ShrinkageJstfMax ); - OTV_SIZE_CHECK( ShrinkageJstfMax ); - if ( ShrinkageJstfMax ) - { - /* XXX: check lookup types? */ - OTV_NEST2( JstfMax, JstfLookup ); - OTV_RUN( table + ShrinkageJstfMax, otvalid ); - } - - otvalid->extra1 = gsub_lookup_count; - - OTV_OPTIONAL_OFFSET( ExtensionEnableGSUB ); - OTV_SIZE_CHECK( ExtensionEnableGSUB ); - if ( ExtensionEnableGSUB ) - otv_x_ux( table + ExtensionEnableGSUB, otvalid ); - - OTV_OPTIONAL_OFFSET( ExtensionDisableGSUB ); - OTV_SIZE_CHECK( ExtensionDisableGSUB ); - if ( ExtensionDisableGSUB ) - otv_x_ux( table + ExtensionDisableGSUB, otvalid ); - - otvalid->extra1 = gpos_lookup_count; - - OTV_OPTIONAL_OFFSET( ExtensionEnableGPOS ); - OTV_SIZE_CHECK( ExtensionEnableGPOS ); - if ( ExtensionEnableGPOS ) - otv_x_ux( table + ExtensionEnableGPOS, otvalid ); - - OTV_OPTIONAL_OFFSET( ExtensionDisableGPOS ); - OTV_SIZE_CHECK( ExtensionDisableGPOS ); - if ( ExtensionDisableGPOS ) - otv_x_ux( table + ExtensionDisableGPOS, otvalid ); - - OTV_OPTIONAL_OFFSET( ExtensionJstfMax ); - OTV_SIZE_CHECK( ExtensionJstfMax ); - if ( ExtensionJstfMax ) - { - /* XXX: check lookup types? */ - OTV_NEST2( JstfMax, JstfLookup ); - OTV_RUN( table + ExtensionJstfMax, otvalid ); - } - - otvalid->extra1 = gsub_lookup_count; - otvalid->extra2 = gpos_lookup_count; - - OTV_EXIT; - } - - - /* sets otvalid->extra (glyph count) */ - /* sets otvalid->func1 (otv_JstfPriority_validate) */ - - static void - otv_JstfScript_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt table_size; - FT_UInt JstfLangSysCount; - - OTV_OPTIONAL_TABLE( ExtGlyph ); - OTV_OPTIONAL_TABLE( DefJstfLangSys ); - - - OTV_NAME_ENTER( "JstfScript" ); - - OTV_LIMIT_CHECK( 6 ); - OTV_OPTIONAL_OFFSET( ExtGlyph ); - OTV_OPTIONAL_OFFSET( DefJstfLangSys ); - JstfLangSysCount = FT_NEXT_USHORT( p ); - - OTV_TRACE(( " (JstfLangSysCount = %d)\n", JstfLangSysCount )); - - table_size = JstfLangSysCount * 6 + 6; - - OTV_SIZE_CHECK( ExtGlyph ); - if ( ExtGlyph ) - { - otvalid->extra1 = otvalid->glyph_count; - OTV_NEST1( ExtenderGlyph ); - OTV_RUN( table + ExtGlyph, otvalid ); - } - - OTV_SIZE_CHECK( DefJstfLangSys ); - if ( DefJstfLangSys ) - { - OTV_NEST2( JstfLangSys, JstfPriority ); - OTV_RUN( table + DefJstfLangSys, otvalid ); - } - - OTV_LIMIT_CHECK( 6 * JstfLangSysCount ); - - /* JstfLangSysRecord */ - OTV_NEST2( JstfLangSys, JstfPriority ); - for ( ; JstfLangSysCount > 0; JstfLangSysCount-- ) - { - p += 4; /* skip JstfLangSysTag */ - - OTV_RUN( table + FT_NEXT_USHORT( p ), otvalid ); - } - - OTV_EXIT; - } - - - /* sets otvalid->extra1 (GSUB lookup count) */ - /* sets otvalid->extra2 (GPOS lookup count) */ - /* sets otvalid->glyph_count */ - - FT_LOCAL_DEF( void ) - otv_JSTF_validate( FT_Bytes table, - FT_Bytes gsub, - FT_Bytes gpos, - FT_UInt glyph_count, - FT_Validator ftvalid ) - { - OTV_ValidatorRec otvalidrec; - OTV_Validator otvalid = &otvalidrec; - FT_Bytes p = table; - FT_UInt JstfScriptCount; - - - otvalid->root = ftvalid; - - - FT_TRACE3(( "validating JSTF table\n" )); - OTV_INIT; - - OTV_LIMIT_CHECK( 6 ); - - if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */ - FT_INVALID_FORMAT; - - JstfScriptCount = FT_NEXT_USHORT( p ); - - FT_TRACE3(( " (JstfScriptCount = %d)\n", JstfScriptCount )); - - OTV_LIMIT_CHECK( JstfScriptCount * 6 ); - - if ( gsub ) - otvalid->extra1 = otv_GSUBGPOS_get_Lookup_count( gsub ); - else - otvalid->extra1 = 0; - - if ( gpos ) - otvalid->extra2 = otv_GSUBGPOS_get_Lookup_count( gpos ); - else - otvalid->extra2 = 0; - - otvalid->glyph_count = glyph_count; - - /* JstfScriptRecord */ - for ( ; JstfScriptCount > 0; JstfScriptCount-- ) - { - p += 4; /* skip JstfScriptTag */ - - /* JstfScript */ - otv_JstfScript_validate( table + FT_NEXT_USHORT( p ), otvalid ); - } - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvmath.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvmath.c deleted file mode 100644 index 3aaf0ec0ec5..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvmath.c +++ /dev/null @@ -1,453 +0,0 @@ -/**************************************************************************** - * - * 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" -#include "otvcommn.h" -#include "otvgpos.h" - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvmath - - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MATH TYPOGRAPHIC CONSTANTS *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_MathConstants_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt i; - FT_UInt table_size; - - OTV_OPTIONAL_TABLE( DeviceTableOffset ); - - - OTV_NAME_ENTER( "MathConstants" ); - - /* 56 constants, 51 have device tables */ - OTV_LIMIT_CHECK( 2 * ( 56 + 51 ) ); - table_size = 2 * ( 56 + 51 ); - - p += 4 * 2; /* First 4 constants have no device tables */ - for ( i = 0; i < 51; i++ ) - { - p += 2; /* skip the value */ - OTV_OPTIONAL_OFFSET( DeviceTableOffset ); - OTV_SIZE_CHECK( DeviceTableOffset ); - if ( DeviceTableOffset ) - otv_Device_validate( table + DeviceTableOffset, otvalid ); - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MATH ITALICS CORRECTION *****/ - /***** MATH TOP ACCENT ATTACHMENT *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_MathItalicsCorrectionInfo_validate( FT_Bytes table, - OTV_Validator otvalid, - FT_Int isItalic ) - { - FT_Bytes p = table; - FT_UInt i, cnt, table_size; - - OTV_OPTIONAL_TABLE( Coverage ); - OTV_OPTIONAL_TABLE( DeviceTableOffset ); - - FT_UNUSED( isItalic ); /* only used if tracing is active */ - - - OTV_NAME_ENTER( isItalic ? "MathItalicsCorrectionInfo" - : "MathTopAccentAttachment" ); - - OTV_LIMIT_CHECK( 4 ); - - OTV_OPTIONAL_OFFSET( Coverage ); - cnt = FT_NEXT_USHORT( p ); - - OTV_LIMIT_CHECK( 4 * cnt ); - table_size = 4 + 4 * cnt; - - OTV_SIZE_CHECK( Coverage ); - otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt ); - - for ( i = 0; i < cnt; i++ ) - { - p += 2; /* Skip the value */ - OTV_OPTIONAL_OFFSET( DeviceTableOffset ); - OTV_SIZE_CHECK( DeviceTableOffset ); - if ( DeviceTableOffset ) - otv_Device_validate( table + DeviceTableOffset, otvalid ); - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MATH KERNING *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_MathKern_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt i, cnt, table_size; - - OTV_OPTIONAL_TABLE( DeviceTableOffset ); - - - /* OTV_NAME_ENTER( "MathKern" );*/ - - OTV_LIMIT_CHECK( 2 ); - - cnt = FT_NEXT_USHORT( p ); - - OTV_LIMIT_CHECK( 4 * cnt + 2 ); - table_size = 4 + 4 * cnt; - - /* Heights */ - for ( i = 0; i < cnt; i++ ) - { - p += 2; /* Skip the value */ - OTV_OPTIONAL_OFFSET( DeviceTableOffset ); - OTV_SIZE_CHECK( DeviceTableOffset ); - if ( DeviceTableOffset ) - otv_Device_validate( table + DeviceTableOffset, otvalid ); - } - - /* One more Kerning value */ - for ( i = 0; i < cnt + 1; i++ ) - { - p += 2; /* Skip the value */ - OTV_OPTIONAL_OFFSET( DeviceTableOffset ); - OTV_SIZE_CHECK( DeviceTableOffset ); - if ( DeviceTableOffset ) - otv_Device_validate( table + DeviceTableOffset, otvalid ); - } - - OTV_EXIT; - } - - - static void - otv_MathKernInfo_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt i, j, cnt, table_size; - - OTV_OPTIONAL_TABLE( Coverage ); - OTV_OPTIONAL_TABLE( MKRecordOffset ); - - - OTV_NAME_ENTER( "MathKernInfo" ); - - OTV_LIMIT_CHECK( 4 ); - - OTV_OPTIONAL_OFFSET( Coverage ); - cnt = FT_NEXT_USHORT( p ); - - OTV_LIMIT_CHECK( 8 * cnt ); - table_size = 4 + 8 * cnt; - - OTV_SIZE_CHECK( Coverage ); - otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt ); - - for ( i = 0; i < cnt; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - OTV_OPTIONAL_OFFSET( MKRecordOffset ); - OTV_SIZE_CHECK( MKRecordOffset ); - if ( MKRecordOffset ) - otv_MathKern_validate( table + MKRecordOffset, otvalid ); - } - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MATH GLYPH INFO *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_MathGlyphInfo_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt MathItalicsCorrectionInfo, MathTopAccentAttachment; - FT_UInt ExtendedShapeCoverage, MathKernInfo; - - - OTV_NAME_ENTER( "MathGlyphInfo" ); - - OTV_LIMIT_CHECK( 8 ); - - MathItalicsCorrectionInfo = FT_NEXT_USHORT( p ); - MathTopAccentAttachment = FT_NEXT_USHORT( p ); - ExtendedShapeCoverage = FT_NEXT_USHORT( p ); - MathKernInfo = FT_NEXT_USHORT( p ); - - if ( MathItalicsCorrectionInfo ) - otv_MathItalicsCorrectionInfo_validate( - table + MathItalicsCorrectionInfo, otvalid, TRUE ); - - /* Italic correction and Top Accent Attachment have the same format */ - if ( MathTopAccentAttachment ) - otv_MathItalicsCorrectionInfo_validate( - table + MathTopAccentAttachment, otvalid, FALSE ); - - if ( ExtendedShapeCoverage ) - { - OTV_NAME_ENTER( "ExtendedShapeCoverage" ); - otv_Coverage_validate( table + ExtendedShapeCoverage, otvalid, -1 ); - OTV_EXIT; - } - - if ( MathKernInfo ) - otv_MathKernInfo_validate( table + MathKernInfo, otvalid ); - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MATH GLYPH CONSTRUCTION *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - static void - otv_GlyphAssembly_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt pcnt, table_size; - FT_UInt i; - - OTV_OPTIONAL_TABLE( DeviceTableOffset ); - - - /* OTV_NAME_ENTER( "GlyphAssembly" ); */ - - OTV_LIMIT_CHECK( 6 ); - - p += 2; /* Skip the Italics Correction value */ - OTV_OPTIONAL_OFFSET( DeviceTableOffset ); - pcnt = FT_NEXT_USHORT( p ); - - OTV_LIMIT_CHECK( 8 * pcnt ); - table_size = 6 + 8 * pcnt; - - OTV_SIZE_CHECK( DeviceTableOffset ); - if ( DeviceTableOffset ) - otv_Device_validate( table + DeviceTableOffset, otvalid ); - - for ( i = 0; i < pcnt; i++ ) - { - FT_UInt gid; - - - gid = FT_NEXT_USHORT( p ); - if ( gid >= otvalid->glyph_count ) - FT_INVALID_GLYPH_ID; - p += 2*4; /* skip the Start, End, Full, and Flags fields */ - } - - /* OTV_EXIT; */ - } - - - static void - otv_MathGlyphConstruction_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt vcnt, table_size; - FT_UInt i; - - OTV_OPTIONAL_TABLE( GlyphAssembly ); - - - /* OTV_NAME_ENTER( "MathGlyphConstruction" ); */ - - OTV_LIMIT_CHECK( 4 ); - - OTV_OPTIONAL_OFFSET( GlyphAssembly ); - vcnt = FT_NEXT_USHORT( p ); - - OTV_LIMIT_CHECK( 4 * vcnt ); - table_size = 4 + 4 * vcnt; - - for ( i = 0; i < vcnt; i++ ) - { - FT_UInt gid; - - - gid = FT_NEXT_USHORT( p ); - if ( gid >= otvalid->glyph_count ) - FT_INVALID_GLYPH_ID; - p += 2; /* skip the size */ - } - - OTV_SIZE_CHECK( GlyphAssembly ); - if ( GlyphAssembly ) - otv_GlyphAssembly_validate( table+GlyphAssembly, otvalid ); - - /* OTV_EXIT; */ - } - - - static void - otv_MathVariants_validate( FT_Bytes table, - OTV_Validator otvalid ) - { - FT_Bytes p = table; - FT_UInt vcnt, hcnt, i, table_size; - - OTV_OPTIONAL_TABLE( VCoverage ); - OTV_OPTIONAL_TABLE( HCoverage ); - OTV_OPTIONAL_TABLE( Offset ); - - - OTV_NAME_ENTER( "MathVariants" ); - - OTV_LIMIT_CHECK( 10 ); - - p += 2; /* Skip the MinConnectorOverlap constant */ - OTV_OPTIONAL_OFFSET( VCoverage ); - OTV_OPTIONAL_OFFSET( HCoverage ); - vcnt = FT_NEXT_USHORT( p ); - hcnt = FT_NEXT_USHORT( p ); - - OTV_LIMIT_CHECK( 2 * vcnt + 2 * hcnt ); - table_size = 10 + 2 * vcnt + 2 * hcnt; - - OTV_SIZE_CHECK( VCoverage ); - if ( VCoverage ) - otv_Coverage_validate( table + VCoverage, otvalid, (FT_Int)vcnt ); - - OTV_SIZE_CHECK( HCoverage ); - if ( HCoverage ) - otv_Coverage_validate( table + HCoverage, otvalid, (FT_Int)hcnt ); - - for ( i = 0; i < vcnt; i++ ) - { - OTV_OPTIONAL_OFFSET( Offset ); - OTV_SIZE_CHECK( Offset ); - otv_MathGlyphConstruction_validate( table + Offset, otvalid ); - } - - for ( i = 0; i < hcnt; i++ ) - { - OTV_OPTIONAL_OFFSET( Offset ); - OTV_SIZE_CHECK( Offset ); - otv_MathGlyphConstruction_validate( table + Offset, otvalid ); - } - - OTV_EXIT; - } - - - /*************************************************************************/ - /*************************************************************************/ - /***** *****/ - /***** MATH TABLE *****/ - /***** *****/ - /*************************************************************************/ - /*************************************************************************/ - - /* sets otvalid->glyph_count */ - - FT_LOCAL_DEF( void ) - otv_MATH_validate( FT_Bytes table, - FT_UInt glyph_count, - FT_Validator ftvalid ) - { - OTV_ValidatorRec otvalidrec; - OTV_Validator otvalid = &otvalidrec; - FT_Bytes p = table; - FT_UInt MathConstants, MathGlyphInfo, MathVariants; - - - otvalid->root = ftvalid; - - FT_TRACE3(( "validating MATH table\n" )); - OTV_INIT; - - OTV_LIMIT_CHECK( 10 ); - - if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */ - FT_INVALID_FORMAT; - - MathConstants = FT_NEXT_USHORT( p ); - MathGlyphInfo = FT_NEXT_USHORT( p ); - MathVariants = FT_NEXT_USHORT( p ); - - otvalid->glyph_count = glyph_count; - - otv_MathConstants_validate( table + MathConstants, - otvalid ); - otv_MathGlyphInfo_validate( table + MathGlyphInfo, - otvalid ); - otv_MathVariants_validate ( table + MathVariants, - otvalid ); - - FT_TRACE4(( "\n" )); - } - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvmod.c b/sdk/lib/3rdparty/freetype/src/otvalid/otvmod.c deleted file mode 100644 index f417bd220f5..00000000000 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvmod.c +++ /dev/null @@ -1,282 +0,0 @@ -/**************************************************************************** - * - * 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 -#include FT_TRUETYPE_TABLES_H -#include FT_TRUETYPE_TAGS_H -#include FT_OPENTYPE_VALIDATE_H -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_OPENTYPE_VALIDATE_H - -#include "otvmod.h" -#include "otvalid.h" -#include "otvcommn.h" - - - /************************************************************************** - * - * The macro FT_COMPONENT is used in trace mode. It is an implicit - * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log - * messages during execution. - */ -#undef FT_COMPONENT -#define FT_COMPONENT otvmodule - - - static FT_Error - otv_load_table( FT_Face face, - FT_Tag tag, - FT_Byte* volatile* table, - FT_ULong* table_len ) - { - FT_Error error; - FT_Memory memory = FT_FACE_MEMORY( face ); - - - error = FT_Load_Sfnt_Table( face, tag, 0, NULL, table_len ); - if ( FT_ERR_EQ( error, Table_Missing ) ) - return FT_Err_Ok; - if ( error ) - goto Exit; - - if ( FT_ALLOC( *table, *table_len ) ) - goto Exit; - - error = FT_Load_Sfnt_Table( face, tag, 0, *table, table_len ); - - Exit: - return error; - } - - - static FT_Error - otv_validate( FT_Face volatile face, - FT_UInt ot_flags, - FT_Bytes *ot_base, - FT_Bytes *ot_gdef, - FT_Bytes *ot_gpos, - FT_Bytes *ot_gsub, - FT_Bytes *ot_jstf ) - { - FT_Error error = FT_Err_Ok; - FT_Byte* volatile base; - FT_Byte* volatile gdef; - FT_Byte* volatile gpos; - FT_Byte* volatile gsub; - FT_Byte* volatile jstf; - FT_Byte* volatile math; - FT_ULong len_base, len_gdef, len_gpos, len_gsub, len_jstf; - FT_ULong len_math; - FT_UInt num_glyphs = (FT_UInt)face->num_glyphs; - FT_ValidatorRec volatile valid; - - - base = gdef = gpos = gsub = jstf = math = NULL; - len_base = len_gdef = len_gpos = len_gsub = len_jstf = len_math = 0; - - /* - * XXX: OpenType tables cannot handle 32-bit glyph index, - * although broken TrueType can have 32-bit glyph index. - */ - if ( face->num_glyphs > 0xFFFFL ) - { - FT_TRACE1(( "otv_validate: Invalid glyphs index (0x0000FFFF - 0x%08x) ", - face->num_glyphs )); - FT_TRACE1(( "are not handled by OpenType tables\n" )); - num_glyphs = 0xFFFF; - } - - /* load tables */ - - if ( ot_flags & FT_VALIDATE_BASE ) - { - error = otv_load_table( face, TTAG_BASE, &base, &len_base ); - if ( error ) - goto Exit; - } - - if ( ot_flags & FT_VALIDATE_GDEF ) - { - error = otv_load_table( face, TTAG_GDEF, &gdef, &len_gdef ); - if ( error ) - goto Exit; - } - - if ( ot_flags & FT_VALIDATE_GPOS ) - { - error = otv_load_table( face, TTAG_GPOS, &gpos, &len_gpos ); - if ( error ) - goto Exit; - } - - if ( ot_flags & FT_VALIDATE_GSUB ) - { - error = otv_load_table( face, TTAG_GSUB, &gsub, &len_gsub ); - if ( error ) - goto Exit; - } - - if ( ot_flags & FT_VALIDATE_JSTF ) - { - error = otv_load_table( face, TTAG_JSTF, &jstf, &len_jstf ); - if ( error ) - goto Exit; - } - - if ( ot_flags & FT_VALIDATE_MATH ) - { - error = otv_load_table( face, TTAG_MATH, &math, &len_math ); - if ( error ) - goto Exit; - } - - /* validate tables */ - - if ( base ) - { - ft_validator_init( &valid, base, base + len_base, FT_VALIDATE_DEFAULT ); - if ( ft_setjmp( valid.jump_buffer ) == 0 ) - otv_BASE_validate( base, &valid ); - error = valid.error; - if ( error ) - goto Exit; - } - - if ( gpos ) - { - ft_validator_init( &valid, gpos, gpos + len_gpos, FT_VALIDATE_DEFAULT ); - if ( ft_setjmp( valid.jump_buffer ) == 0 ) - otv_GPOS_validate( gpos, num_glyphs, &valid ); - error = valid.error; - if ( error ) - goto Exit; - } - - if ( gsub ) - { - ft_validator_init( &valid, gsub, gsub + len_gsub, FT_VALIDATE_DEFAULT ); - if ( ft_setjmp( valid.jump_buffer ) == 0 ) - otv_GSUB_validate( gsub, num_glyphs, &valid ); - error = valid.error; - if ( error ) - goto Exit; - } - - if ( gdef ) - { - ft_validator_init( &valid, gdef, gdef + len_gdef, FT_VALIDATE_DEFAULT ); - if ( ft_setjmp( valid.jump_buffer ) == 0 ) - otv_GDEF_validate( gdef, gsub, gpos, num_glyphs, &valid ); - error = valid.error; - if ( error ) - goto Exit; - } - - if ( jstf ) - { - ft_validator_init( &valid, jstf, jstf + len_jstf, FT_VALIDATE_DEFAULT ); - if ( ft_setjmp( valid.jump_buffer ) == 0 ) - otv_JSTF_validate( jstf, gsub, gpos, num_glyphs, &valid ); - error = valid.error; - if ( error ) - goto Exit; - } - - if ( math ) - { - ft_validator_init( &valid, math, math + len_math, FT_VALIDATE_DEFAULT ); - if ( ft_setjmp( valid.jump_buffer ) == 0 ) - otv_MATH_validate( math, num_glyphs, &valid ); - error = valid.error; - if ( error ) - goto Exit; - } - - *ot_base = (FT_Bytes)base; - *ot_gdef = (FT_Bytes)gdef; - *ot_gpos = (FT_Bytes)gpos; - *ot_gsub = (FT_Bytes)gsub; - *ot_jstf = (FT_Bytes)jstf; - - Exit: - if ( error ) - { - FT_Memory memory = FT_FACE_MEMORY( face ); - - - FT_FREE( base ); - FT_FREE( gdef ); - FT_FREE( gpos ); - FT_FREE( gsub ); - FT_FREE( jstf ); - } - - { - FT_Memory memory = FT_FACE_MEMORY( face ); - - - FT_FREE( math ); /* Can't return this as API is frozen */ - } - - return error; - } - - - static - const FT_Service_OTvalidateRec otvalid_interface = - { - otv_validate /* validate */ - }; - - - static - const FT_ServiceDescRec otvalid_services[] = - { - { FT_SERVICE_ID_OPENTYPE_VALIDATE, &otvalid_interface }, - { NULL, NULL } - }; - - - static FT_Pointer - otvalid_get_service( FT_Module module, - const char* service_id ) - { - FT_UNUSED( module ); - - return ft_service_list_lookup( otvalid_services, service_id ); - } - - - FT_CALLBACK_TABLE_DEF - const FT_Module_Class otv_module_class = - { - 0, - sizeof ( FT_ModuleRec ), - "otvalid", - 0x10000L, - 0x20000L, - - NULL, /* module-specific interface */ - - (FT_Module_Constructor)NULL, /* module_init */ - (FT_Module_Destructor) NULL, /* module_done */ - (FT_Module_Requester) otvalid_get_service /* get_interface */ - }; - - -/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcf.c b/sdk/lib/3rdparty/freetype/src/pcf/pcf.c index 8ffd6e280b7..6b30fb249a7 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcf.c +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcf.c @@ -26,7 +26,6 @@ THE SOFTWARE. #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "pcfdrivr.c" #include "pcfread.c" diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcf.h b/sdk/lib/3rdparty/freetype/src/pcf/pcf.h index 529dd3adf86..3134cc355b3 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcf.h +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcf.h @@ -29,9 +29,8 @@ THE SOFTWARE. #define PCF_H_ -#include -#include FT_INTERNAL_DRIVER_H -#include FT_INTERNAL_STREAM_H +#include +#include FT_BEGIN_HEADER @@ -99,7 +98,8 @@ 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; diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.c b/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.c index 54bbb9d119c..e9dd51752eb 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.c +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.c @@ -25,17 +25,16 @@ THE SOFTWARE. */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_OBJECTS_H -#include FT_GZIP_H -#include FT_LZW_H -#include FT_BZIP2_H -#include FT_ERRORS_H -#include FT_BDF_H -#include FT_TRUETYPE_IDS_H +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "pcf.h" #include "pcfdrivr.h" @@ -47,10 +46,10 @@ THE SOFTWARE. #undef FT_COMPONENT #define FT_COMPONENT pcfread -#include FT_SERVICE_BDF_H -#include FT_SERVICE_FONT_FORMAT_H -#include FT_SERVICE_PROPERTIES_H -#include FT_DRIVER_H +#include +#include +#include +#include /************************************************************************** @@ -122,9 +121,9 @@ THE SOFTWARE. charcodeCol > enc->lastCol ) return 0; - return (FT_UInt)enc->offset[ ( charcodeRow - enc->firstRow ) * - ( enc->lastCol - enc->firstCol + 1 ) + - charcodeCol - enc->firstCol ]; + return (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) * + ( enc->lastCol - enc->firstCol + 1 ) + + charcodeCol - enc->firstCol]; } @@ -137,7 +136,7 @@ THE SOFTWARE. FT_UInt32 charcode = *acharcode; FT_UShort charcodeRow; FT_UShort charcodeCol; - FT_Int result = 0; + FT_UInt result = 0; while ( charcode < (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) ) @@ -160,9 +159,9 @@ THE SOFTWARE. charcode = (FT_UInt32)( charcodeRow * 256 + charcodeCol ); - result = (FT_UInt)enc->offset[ ( charcodeRow - enc->firstRow ) * - ( enc->lastCol - enc->firstCol + 1 ) + - charcodeCol - enc->firstCol ]; + result = (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) * + ( enc->lastCol - enc->firstCol + 1 ) + + charcodeCol - enc->firstCol]; if ( result != 0xFFFFU ) break; } @@ -607,8 +606,9 @@ THE SOFTWARE. if ( prop->value.l > 0x7FFFFFFFL || prop->value.l < ( -1 - 0x7FFFFFFFL ) ) { - FT_TRACE1(( "pcf_get_bdf_property:" )); - FT_TRACE1(( " too large integer 0x%x is truncated\n" )); + FT_TRACE1(( "pcf_get_bdf_property:" + " too large integer 0x%lx is truncated\n", + prop->value.l )); } /* diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.h b/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.h index 73db0823d25..d4653937434 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.h +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcfdrivr.h @@ -28,8 +28,7 @@ THE SOFTWARE. #ifndef PCFDRIVR_H_ #define PCFDRIVR_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcferror.h b/sdk/lib/3rdparty/freetype/src/pcf/pcferror.h index 2e69d1d2198..8b9e9902a36 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcferror.h +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcferror.h @@ -25,7 +25,7 @@ #ifndef PCFERROR_H_ #define PCFERROR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -33,7 +33,7 @@ #define FT_ERR_PREFIX PCF_Err_ #define FT_ERR_BASE FT_Mod_Err_PCF -#include FT_ERRORS_H +#include #endif /* PCFERROR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcfread.c b/sdk/lib/3rdparty/freetype/src/pcf/pcfread.c index 71143ecfb54..8817682cdfb 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcfread.c +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcfread.c @@ -25,11 +25,10 @@ THE SOFTWARE. */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_OBJECTS_H +#include +#include +#include #include "pcf.h" #include "pcfread.h" @@ -122,7 +121,7 @@ THE SOFTWARE. toc->count > 9 ) { FT_TRACE0(( "pcf_read_TOC: adjusting number of tables" - " (from %d to %d)\n", + " (from %ld to %ld)\n", toc->count, FT_MIN( stream->size >> 4, 9 ) )); toc->count = FT_MIN( stream->size >> 4, 9 ); @@ -242,7 +241,7 @@ THE SOFTWARE. if ( tables[i].type == (FT_UInt)( 1 << j ) ) name = tableNames[j]; - FT_TRACE4(( " %d: type=%s, format=0x%X," + FT_TRACE4(( " %d: type=%s, format=0x%lX," " size=%ld (0x%lX), offset=%ld (0x%lX)\n", i, name, tables[i].format, @@ -661,7 +660,7 @@ THE SOFTWARE. { properties[i].value.l = props[i].value; - FT_TRACE4(( " %d\n", properties[i].value.l )); + FT_TRACE4(( " %ld\n", properties[i].value.l )); } } @@ -743,33 +742,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 ); @@ -792,7 +797,7 @@ THE SOFTWARE. metrics->descent = 0; FT_TRACE0(( "pcf_get_metrics:" - " invalid metrics for glyph %d\n", i )); + " invalid metrics for glyph %ld\n", i )); } } @@ -808,12 +813,10 @@ THE SOFTWARE. pcf_get_bitmaps( FT_Stream stream, PCF_Face face ) { - FT_Error error; - FT_Memory memory = FT_FACE( face )->memory; - FT_ULong* offsets = NULL; - FT_ULong 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 +862,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_ULONG( offsets[i] ); + (void)FT_READ_ULONG( offset ); else - (void)FT_READ_ULONG_LE( offsets[i] ); + (void)FT_READ_ULONG_LE( offset ); FT_TRACE5(( " bitmap %lu: offset %lu (0x%lX)\n", - i, offsets[i], offsets[i] )); + i, offset, offset )); + + /* 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; @@ -899,35 +917,20 @@ THE SOFTWARE. sizebitmaps = bitmapSizes[PCF_GLYPH_PAD_INDEX( format )]; - FT_TRACE4(( " %ld-bit padding implies a size of %lu\n", + FT_TRACE4(( " %d-bit padding implies a size of %lu\n", 8 << i, bitmapSizes[i] )); } - FT_TRACE4(( " %lu bitmaps, using %ld-bit padding\n", + FT_TRACE4(( " %lu bitmaps, using %d-bit padding\n", nbitmaps, 8 << PCF_GLYPH_PAD_INDEX( format ) )); 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] > size ) - { - FT_TRACE0(( "pcf_get_bitmaps:" - " invalid offset to bitmap data of glyph %lu\n", i )); - } - else - face->metrics[i].bits = stream->pos + offsets[i]; - } - face->bitmapsFormat = format; Bail: - FT_FREE( offsets ); return error; } @@ -1062,41 +1065,52 @@ THE SOFTWARE. defaultCharCol = enc->firstCol; } - /* FreeType mandates that glyph index 0 is the `undefined glyph', */ - /* which PCF calls the `default character'. For this reason, we */ - /* swap the positions of glyph index 0 and the index corresponding */ - /* to `defaultChar' in case they are different. */ - - /* `stream->cursor' still points at the beginning of the frame; */ - /* we can thus easily get the offset to the default character */ + /* + * 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 ); + ( 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 >= face->nmetrics ) + if ( defaultCharEncodingOffset == 0xFFFF ) { FT_TRACE0(( "pcf_get_encodings:" - " Invalid glyph index for default character," - " setting to zero\n" )); - defaultCharEncodingOffset = 0; + " No glyph for default character,\n" + " " + " setting it to the first glyph of the font\n" )); + defaultCharEncodingOffset = 1; } - - if ( defaultCharEncodingOffset ) + else { - /* do the swapping */ - PCF_MetricRec tmp = face->metrics[defaultCharEncodingOffset]; + defaultCharEncodingOffset++; - - face->metrics[defaultCharEncodingOffset] = face->metrics[0]; - face->metrics[0] = tmp; + 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++ ) { @@ -1111,15 +1125,9 @@ THE SOFTWARE. else encodingOffset = FT_GET_USHORT_LE(); - if ( encodingOffset != 0xFFFFU ) - { - if ( encodingOffset == defaultCharEncodingOffset ) - encodingOffset = 0; - else if ( encodingOffset == 0 ) - encodingOffset = defaultCharEncodingOffset; - } - - *offset++ = encodingOffset; + /* everything is off by 1 due to the artificial glyph 0 */ + *offset++ = encodingOffset == 0xFFFF ? 0xFFFF + : encodingOffset + 1; } } FT_Stream_ExitFrame( stream ); @@ -1243,13 +1251,13 @@ THE SOFTWARE. if ( FT_ABS( accel->fontAscent ) > 0x7FFF ) { accel->fontAscent = accel->fontAscent < 0 ? -0x7FFF : 0x7FFF; - FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %d\n", + FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %ld\n", accel->fontAscent )); } if ( FT_ABS( accel->fontDescent ) > 0x7FFF ) { accel->fontDescent = accel->fontDescent < 0 ? -0x7FFF : 0x7FFF; - FT_TRACE0(( "pfc_get_accel: clamping font descent to value %d\n", + FT_TRACE0(( "pfc_get_accel: clamping font descent to value %ld\n", accel->fontDescent )); } @@ -1303,9 +1311,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; @@ -1317,8 +1324,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" ); @@ -1326,20 +1333,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++ ) { @@ -1353,7 +1360,7 @@ THE SOFTWARE. if ( len == 0 ) { - strings[0] = (char*)"Regular"; + strings[0] = "Regular"; lengths[0] = ft_strlen( strings[0] ); len = lengths[0] + 1; } @@ -1369,7 +1376,7 @@ THE SOFTWARE. for ( nn = 0; nn < 4; nn++ ) { - char* src = strings[nn]; + const char* src = strings[nn]; len = lengths[nn]; @@ -1623,7 +1630,7 @@ THE SOFTWARE. if ( FT_ABS( prop->value.l ) > 0x504C2L ) /* 0x7FFF * 72270/7200 */ { bsize->size = 0x7FFF; - FT_TRACE0(( "pcf_load_font: clamping point size to value %d\n", + FT_TRACE0(( "pcf_load_font: clamping point size to value %ld\n", bsize->size )); } else @@ -1642,7 +1649,7 @@ THE SOFTWARE. if ( FT_ABS( prop->value.l ) > 0x7FFF ) { bsize->y_ppem = 0x7FFF << 6; - FT_TRACE0(( "pcf_load_font: clamping pixel size to value %d\n", + FT_TRACE0(( "pcf_load_font: clamping pixel size to value %ld\n", bsize->y_ppem )); } else diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcfread.h b/sdk/lib/3rdparty/freetype/src/pcf/pcfread.h index bed30e50300..a54648fbf98 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcfread.h +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcfread.h @@ -29,7 +29,6 @@ THE SOFTWARE. #define PCFREAD_H_ -#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.c b/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.c index 045c42d60f3..5d3c00791f9 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.c +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.c @@ -32,7 +32,6 @@ in this Software without prior written authorization from The Open Group. /* Modified for use with FreeType */ -#include #include "pcfutil.h" diff --git a/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.h b/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.h index be986e756b7..a197c155951 100644 --- a/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.h +++ b/sdk/lib/3rdparty/freetype/src/pcf/pcfutil.h @@ -31,7 +31,7 @@ THE SOFTWARE. #include #include FT_CONFIG_CONFIG_H - +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfr.c b/sdk/lib/3rdparty/freetype/src/pfr/pfr.c index 6d885ea47f6..9264c77df2f 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfr.c +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfr.c @@ -4,7 +4,7 @@ * * FreeType PFR driver component. * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "pfrcmap.c" #include "pfrdrivr.c" diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.c b/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.c index bfa1b9ea05a..ebc7b843935 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.c +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.c @@ -4,7 +4,7 @@ * * FreeType PFR cmap handling (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,8 +16,7 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include #include "pfrcmap.h" #include "pfrobjs.h" diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.h index 1e203a0514d..a6d920c30b3 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrcmap.h @@ -4,7 +4,7 @@ * * FreeType PFR cmap handling (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef PFRCMAP_H_ #define PFRCMAP_H_ -#include -#include FT_INTERNAL_OBJECTS_H +#include #include "pfrtypes.h" diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.c b/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.c index f67eebf1189..b14320875a1 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.c +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.c @@ -4,7 +4,7 @@ * * FreeType PFR driver interface (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_SERVICE_PFR_H -#include FT_SERVICE_FONT_FORMAT_H +#include +#include +#include +#include #include "pfrdrivr.h" #include "pfrobjs.h" diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.h index 33b7b9413f2..7646b4d1bde 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrdrivr.h @@ -4,7 +4,7 @@ * * High-level Type PFR driver interface (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define PFRDRIVR_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrerror.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrerror.h index 4829cfc0000..33460ef4fd5 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrerror.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrerror.h @@ -4,7 +4,7 @@ * * PFR error codes (specification only). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,7 +25,7 @@ #ifndef PFRERROR_H_ #define PFRERROR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -33,7 +33,7 @@ #define FT_ERR_PREFIX PFR_Err_ #define FT_ERR_BASE FT_Mod_Err_PFR -#include FT_ERRORS_H +#include #endif /* PFRERROR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.c b/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.c index 6ef5856a8dc..aa640c3b07f 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.c +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.c @@ -4,7 +4,7 @@ * * FreeType PFR glyph loader (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,7 @@ #include "pfrgload.h" #include "pfrsbit.h" #include "pfrload.h" /* for macro definitions */ -#include FT_INTERNAL_DEBUG_H +#include #include "pfrerror.h" @@ -451,7 +451,7 @@ case 1: /* 16-bit absolute value */ PFR_CHECK( 2 ); cur->x = PFR_NEXT_SHORT( p ); - FT_TRACE7(( " x.%d", cur->x )); + FT_TRACE7(( " x.%ld", cur->x )); break; case 2: /* 8-bit delta */ @@ -481,7 +481,7 @@ case 1: /* 16-bit absolute value */ PFR_CHECK( 2 ); cur->y = PFR_NEXT_SHORT( p ); - FT_TRACE7(( " y.%d", cur->y )); + FT_TRACE7(( " y.%ld", cur->y )); break; case 2: /* 8-bit delta */ diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.h index d0e1420b671..f356b4c75b0 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrgload.h @@ -4,7 +4,7 @@ * * FreeType PFR glyph loader (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrload.c b/sdk/lib/3rdparty/freetype/src/pfr/pfrload.c index ccf0b7e1f89..a2832e55c7f 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrload.c +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrload.c @@ -4,7 +4,7 @@ * * FreeType PFR loader (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,8 +17,8 @@ #include "pfrload.h" -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H +#include +#include #include "pfrerror.h" diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrload.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrload.h index 2e7ffd01270..7615b9ce148 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrload.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrload.h @@ -4,7 +4,7 @@ * * FreeType PFR loader (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,7 @@ #define PFRLOAD_H_ #include "pfrobjs.h" -#include FT_INTERNAL_STREAM_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.c b/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.c index e103a3f6f28..918e7fd4960 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.c +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.c @@ -4,7 +4,7 @@ * * FreeType PFR object methods (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,10 +21,10 @@ #include "pfrgload.h" #include "pfrcmap.h" #include "pfrsbit.h" -#include FT_OUTLINE_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H -#include FT_TRUETYPE_IDS_H +#include +#include +#include +#include #include "pfrerror.h" @@ -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/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.h index 39cffd07c5c..808822f1c4f 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrobjs.h @@ -4,7 +4,7 @@ * * FreeType PFR object methods (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.c b/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.c index 00a9616455d..a6691e6d183 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.c +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.c @@ -4,7 +4,7 @@ * * FreeType PFR bitmap loader (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 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 "pfrsbit.h" #include "pfrload.h" -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H +#include +#include #include "pfrerror.h" @@ -745,7 +745,7 @@ ypos + (FT_Long)ysize < FT_INT_MIN ) { FT_TRACE1(( "pfr_slot_load_bitmap:" )); - FT_TRACE1(( "huge bitmap glyph %dx%d over FT_GlyphSlot\n", + FT_TRACE1(( "huge bitmap glyph %ldx%ld over FT_GlyphSlot\n", xpos, ypos )); error = FT_THROW( Invalid_Pixel_Size ); } diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.h index 6568b90943f..8cb0de0d25d 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrsbit.h @@ -4,7 +4,7 @@ * * FreeType PFR bitmap loader (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/pfr/pfrtypes.h b/sdk/lib/3rdparty/freetype/src/pfr/pfrtypes.h index 6a5f9d571b4..06fb82d51a3 100644 --- a/sdk/lib/3rdparty/freetype/src/pfr/pfrtypes.h +++ b/sdk/lib/3rdparty/freetype/src/pfr/pfrtypes.h @@ -4,7 +4,7 @@ * * FreeType PFR data structures (specification only). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,8 +19,7 @@ #ifndef PFRTYPES_H_ #define PFRTYPES_H_ -#include -#include FT_INTERNAL_OBJECTS_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/afmparse.c b/sdk/lib/3rdparty/freetype/src/psaux/afmparse.c index 49225a9f78e..2d6a0d9a121 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/afmparse.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/afmparse.c @@ -4,7 +4,7 @@ * * AFM parser (body). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -15,10 +15,9 @@ * */ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include +#include #ifndef T1_CONFIG_OPTION_NO_AFM @@ -953,7 +952,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/sdk/lib/3rdparty/freetype/src/psaux/afmparse.h b/sdk/lib/3rdparty/freetype/src/psaux/afmparse.h index 2ceb77553b2..16a3a3e902d 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/afmparse.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/afmparse.h @@ -4,7 +4,7 @@ * * AFM parser (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define AFMPARSE_H_ -#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.c b/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.c index 17cccf818b4..3d2da1e03ca 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.c @@ -4,7 +4,7 @@ * * PostScript CFF (Type 2) decoding routines (body). * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_SERVICE_H -#include FT_SERVICE_CFF_TABLE_LOAD_H +#include +#include +#include +#include #include "cffdecode.h" #include "psobjs.h" @@ -330,7 +329,7 @@ builder->left_bearing.x = 0; builder->left_bearing.y = 0; - builder->pos_x = adx - asb; + builder->pos_x = SUB_LONG( adx, asb ); builder->pos_y = ady; /* Now load `achar' on top of the base outline. */ @@ -530,6 +529,9 @@ builder->path_begun = 0; + if ( !charstring_base ) + return FT_Err_Ok; + zone->base = charstring_base; limit = zone->limit = charstring_base + charstring_len; ip = zone->cursor = zone->base; diff --git a/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.h b/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.h index a6691979f0c..77a4962698b 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/cffdecode.h @@ -4,7 +4,7 @@ * * PostScript CFF (Type 2) decoding routines (specification). * - * Copyright (C) 2017-2019 by + * Copyright (C) 2017-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define CFFDECODE_H_ -#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psarrst.c b/sdk/lib/3rdparty/freetype/src/psaux/psarrst.c index 011803b4161..8751d275fb9 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psarrst.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psarrst.c @@ -37,7 +37,7 @@ #include "psft.h" -#include FT_INTERNAL_DEBUG_H +#include #include "psglue.h" #include "psarrst.h" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psaux.c b/sdk/lib/3rdparty/freetype/src/psaux/psaux.c index 1db04625514..f4282222a68 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psaux.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psaux.c @@ -4,7 +4,7 @@ * * FreeType auxiliary PostScript driver component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "afmparse.c" #include "psauxmod.c" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psauxerr.h b/sdk/lib/3rdparty/freetype/src/psaux/psauxerr.h index 523e1886c22..8b9a958aec0 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psauxerr.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/psauxerr.h @@ -4,7 +4,7 @@ * * PS auxiliary module error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef PSAUXERR_H_ #define PSAUXERR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX PSaux_Err_ #define FT_ERR_BASE FT_Mod_Err_PSaux -#include FT_ERRORS_H +#include #endif /* PSAUXERR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.c b/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.c index 5df8e690561..e73ba224517 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.c @@ -4,7 +4,7 @@ * * FreeType auxiliary PostScript module implementation (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,7 +16,6 @@ */ -#include #include "psauxmod.h" #include "psobjs.h" #include "t1decode.h" @@ -171,9 +170,9 @@ }; - FT_CALLBACK_TABLE_DEF - const FT_Module_Class psaux_module_class = - { + FT_DEFINE_MODULE( + psaux_module_class, + 0, sizeof ( FT_ModuleRec ), "psaux", @@ -185,7 +184,7 @@ (FT_Module_Constructor)NULL, /* module_init */ (FT_Module_Destructor) NULL, /* module_done */ (FT_Module_Requester) NULL /* get_interface */ - }; + ) /* END */ diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.h b/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.h index a0eda0bfc03..a6bebe4b945 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/psauxmod.h @@ -4,7 +4,7 @@ * * FreeType auxiliary PostScript module implementation (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,10 +20,9 @@ #define PSAUXMOD_H_ -#include -#include FT_MODULE_H +#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include FT_BEGIN_HEADER @@ -35,10 +34,24 @@ FT_BEGIN_HEADER FT_CALLBACK_TABLE const PS_Builder_FuncsRec ps_builder_funcs; +#ifndef T1_CONFIG_OPTION_NO_AFM + FT_CALLBACK_TABLE + const AFM_Parser_FuncsRec afm_parser_funcs; +#endif + + FT_CALLBACK_TABLE + const T1_CMap_ClassesRec t1_cmap_classes; + + FT_CALLBACK_TABLE + const CFF_Decoder_FuncsRec cff_decoder_funcs; + FT_EXPORT_VAR( const FT_Module_Class ) psaux_driver_class; + FT_DECLARE_MODULE( psaux_module_class ) + + FT_END_HEADER #endif /* PSAUXMOD_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psblues.c b/sdk/lib/3rdparty/freetype/src/psaux/psblues.c index 89738ce4749..3878e9bde04 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psblues.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psblues.c @@ -37,7 +37,7 @@ #include "psft.h" -#include FT_INTERNAL_DEBUG_H +#include #include "psblues.h" #include "pshints.h" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psconv.c b/sdk/lib/3rdparty/freetype/src/psaux/psconv.c index c88761681cc..4cf5cd5d881 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psconv.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psconv.c @@ -4,7 +4,7 @@ * * Some convenience conversions (body). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,9 +16,8 @@ */ -#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_DEBUG_H +#include +#include #include "psconv.h" #include "psauxerr.h" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psconv.h b/sdk/lib/3rdparty/freetype/src/psaux/psconv.h index 6b24bf6fc95..833e8273648 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psconv.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/psconv.h @@ -4,7 +4,7 @@ * * Some convenience conversions (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define PSCONV_H_ -#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/pserror.h b/sdk/lib/3rdparty/freetype/src/psaux/pserror.h index b2156b3318b..5738853face 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/pserror.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/pserror.h @@ -40,7 +40,7 @@ #define PSERROR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -49,7 +49,8 @@ #define FT_ERR_BASE FT_Mod_Err_CF2 -#include FT_ERRORS_H +#include +#include #include "psft.h" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psfixed.h b/sdk/lib/3rdparty/freetype/src/psaux/psfixed.h index fd3460f34af..7dff9ef1bd5 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psfixed.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/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/sdk/lib/3rdparty/freetype/src/psaux/psfont.c b/sdk/lib/3rdparty/freetype/src/psaux/psfont.c index bb5faa38f5c..0db1f0c5bc4 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psfont.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psfont.c @@ -36,8 +36,7 @@ */ -#include -#include FT_INTERNAL_CALC_H +#include #include "psft.h" @@ -274,9 +273,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 +280,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, diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psfont.h b/sdk/lib/3rdparty/freetype/src/psaux/psfont.h index 8fbacbb6e34..836fce4e4d3 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psfont.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/psfont.h @@ -40,7 +40,7 @@ #define PSFONT_H_ -#include FT_SERVICE_CFF_TABLE_LOAD_H +#include #include "psft.h" #include "psblues.h" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psft.c b/sdk/lib/3rdparty/freetype/src/psaux/psft.c index 54be4683430..41c16542c17 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psft.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psft.c @@ -37,7 +37,7 @@ #include "psft.h" -#include FT_INTERNAL_DEBUG_H +#include #include "psfont.h" #include "pserror.h" @@ -45,11 +45,11 @@ #include "cffdecode.h" #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_MULTIPLE_MASTERS_H -#include FT_SERVICE_MULTIPLE_MASTERS_H +#include +#include #endif -#include FT_SERVICE_CFF_TABLE_LOAD_H +#include #define CF2_MAX_SIZE cf2_intToFixed( 2000 ) /* max ppem */ @@ -313,7 +313,7 @@ FT_Error error = FT_Err_Ok; CF2_Font font; - FT_Bool is_t1 = decoder->builder.is_t1; + FT_Bool is_t1 = decoder->builder.is_t1; FT_ASSERT( decoder && @@ -385,7 +385,7 @@ FT_ZERO( &buf ); buf.start = buf.ptr = charstring_base; - buf.end = charstring_base + charstring_len; + buf.end = FT_OFFSET( charstring_base, charstring_len ); FT_ZERO( &transform ); @@ -697,7 +697,7 @@ FT_ASSERT( charstring + len >= charstring ); buf->start = charstring; - buf->end = charstring + len; + buf->end = FT_OFFSET( charstring, len ); buf->ptr = buf->start; return FT_Err_Ok; @@ -820,7 +820,7 @@ /* The CID driver stores subroutines with seed bytes. This */ /* case is taken care of when decoder->subrs_len == 0. */ if ( decoder->locals_len ) - buf->end = buf->start + decoder->locals_len[idx]; + buf->end = FT_OFFSET( buf->start, decoder->locals_len[idx] ); else { /* We are using subroutines from a CID font. We must adjust */ diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psft.h b/sdk/lib/3rdparty/freetype/src/psaux/psft.h index 4c930f0d73f..3da454e6012 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psft.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/psft.h @@ -40,17 +40,17 @@ #define PSFT_H_ +#include #include "pstypes.h" - /* TODO: disable asserts for now */ #define CF2_NDEBUG -#include FT_SYSTEM_H +#include #include "psglue.h" -#include FT_INTERNAL_POSTSCRIPT_AUX_H /* for PS_Decoder */ +#include /* for PS_Decoder */ FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/pshints.c b/sdk/lib/3rdparty/freetype/src/psaux/pshints.c index 1cbecd2b193..ce8cfca7154 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/pshints.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/pshints.c @@ -37,7 +37,7 @@ #include "psft.h" -#include FT_INTERNAL_DEBUG_H +#include #include "psglue.h" #include "psfont.h" @@ -310,7 +310,7 @@ CF2_Hint hint = &hintmap->edge[i]; - FT_TRACE6(( " %3d %7.2f %7.2f %5d %s%s%s%s\n", + FT_TRACE6(( " %3ld %7.2f %7.2f %5d %s%s%s%s\n", hint->index, hint->csCoord / 65536.0, hint->dsCoord / ( hint->scale * 1.0 ), diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psintrp.c b/sdk/lib/3rdparty/freetype/src/psaux/psintrp.c index cf3f0d76ada..243fa07a203 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psintrp.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psintrp.c @@ -37,8 +37,8 @@ #include "psft.h" -#include FT_INTERNAL_DEBUG_H -#include FT_SERVICE_CFF_TABLE_LOAD_H +#include +#include #include "psglue.h" #include "psfont.h" @@ -1439,6 +1439,13 @@ lastError = error2; /* pass FreeType error through */ goto exit; } + + /* save the left bearing and width of the SEAC */ + /* glyph as they will be erased by the next load */ + + left_bearing = *decoder->builder.left_bearing; + advance = *decoder->builder.advance; + cf2_interpT2CharString( font, &component, callbacks, @@ -1449,11 +1456,14 @@ &dummyWidth ); cf2_freeT1SeacComponent( decoder, &component ); - /* save the left bearing and width of the base */ - /* character as they will be erased by the next load */ + /* If the SEAC glyph doesn't have a (H)SBW of its */ + /* own use the values from the base glyph. */ - left_bearing = *decoder->builder.left_bearing; - advance = *decoder->builder.advance; + if ( !haveWidth ) + { + left_bearing = *decoder->builder.left_bearing; + advance = *decoder->builder.advance; + } decoder->builder.left_bearing->x = 0; decoder->builder.left_bearing->y = 0; @@ -1479,8 +1489,8 @@ &dummyWidth ); cf2_freeT1SeacComponent( decoder, &component ); - /* restore the left side bearing and */ - /* advance width of the base character */ + /* restore the left side bearing and advance width */ + /* of the SEAC glyph or base character (saved above) */ *decoder->builder.left_bearing = left_bearing; *decoder->builder.advance = advance; @@ -2632,7 +2642,6 @@ CF2_HintMaskRec counterMask; #endif - cf2_hintmap_init( &counterHintMap, font, &glyphPath.initialHintMap, @@ -3063,7 +3072,6 @@ free(glyphPath_allocated); #undef glyphPath #endif - return; } diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psobjs.c b/sdk/lib/3rdparty/freetype/src/psaux/psobjs.c index e2168a33240..defc4d4fcee 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psobjs.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psobjs.c @@ -4,7 +4,7 @@ * * Auxiliary functions for PostScript fonts (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H -#include FT_DRIVER_H +#include +#include +#include +#include #include "psobjs.h" #include "psconv.h" @@ -174,10 +173,10 @@ * 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 ) { @@ -214,7 +213,7 @@ } /* add the object to the base block and adjust offset */ - table->elements[idx] = table->block + table->cursor; + table->elements[idx] = FT_OFFSET( table->block, table->cursor ); table->lengths [idx] = length; FT_MEM_COPY( table->block + table->cursor, object, length ); @@ -1233,7 +1232,7 @@ bbox->xMax = FT_RoundFix( temp[2] ); bbox->yMax = FT_RoundFix( temp[3] ); - FT_TRACE4(( " [%d %d %d %d]", + FT_TRACE4(( " [%ld %ld %ld %ld]", bbox->xMin / 65536, bbox->yMin / 65536, bbox->xMax / 65536, @@ -1287,7 +1286,7 @@ bbox->xMax = FT_RoundFix( temp[i + 2 * max_objects] ); bbox->yMax = FT_RoundFix( temp[i + 3 * max_objects] ); - FT_TRACE4(( " [%d %d %d %d]", + FT_TRACE4(( " [%ld %ld %ld %ld]", bbox->xMin / 65536, bbox->yMin / 65536, bbox->xMax / 65536, @@ -2577,7 +2576,7 @@ FT_UShort seed ) { PS_Conv_EexecDecode( &buffer, - buffer + length, + FT_OFFSET( buffer, length ), buffer, length, &seed ); diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psobjs.h b/sdk/lib/3rdparty/freetype/src/psaux/psobjs.h index 9466a1d0754..fdad672b6d2 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psobjs.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/psobjs.h @@ -4,7 +4,7 @@ * * Auxiliary functions for PostScript fonts (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define PSOBJS_H_ -#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_CFF_OBJECTS_TYPES_H +#include +#include FT_BEGIN_HEADER @@ -53,10 +52,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/sdk/lib/3rdparty/freetype/src/psaux/psread.c b/sdk/lib/3rdparty/freetype/src/psaux/psread.c index 86bfc03c6e5..7f657f2cdc0 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psread.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psread.c @@ -37,7 +37,7 @@ #include "psft.h" -#include FT_INTERNAL_DEBUG_H +#include #include "psglue.h" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psstack.c b/sdk/lib/3rdparty/freetype/src/psaux/psstack.c index 6659068001c..7ae5256ef19 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psstack.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/psstack.c @@ -37,7 +37,7 @@ #include "psft.h" -#include FT_INTERNAL_DEBUG_H +#include #include "psglue.h" #include "psfont.h" @@ -59,12 +59,12 @@ CF2_Stack stack = NULL; - if ( !FT_NEW( stack ) ) - { - /* initialize the structure; FT_NEW zeroes it */ - stack->memory = memory; - stack->error = e; - } + if ( FT_NEW( stack ) ) + return NULL; + + /* initialize the structure; FT_NEW zeroes it */ + stack->memory = memory; + stack->error = e; /* allocate the stack buffer */ if ( FT_NEW_ARRAY( stack->buffer, stackSize ) ) diff --git a/sdk/lib/3rdparty/freetype/src/psaux/psstack.h b/sdk/lib/3rdparty/freetype/src/psaux/psstack.h index 18cd39bc6a0..b9ef9edf1b2 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/psstack.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/psstack.h @@ -39,6 +39,7 @@ #ifndef PSSTACK_H_ #define PSSTACK_H_ +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/pstypes.h b/sdk/lib/3rdparty/freetype/src/psaux/pstypes.h index 041287e8d5e..435ef7e1fec 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/pstypes.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/pstypes.h @@ -39,8 +39,7 @@ #ifndef PSTYPES_H_ #define PSTYPES_H_ -#include -#include FT_FREETYPE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.c b/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.c index d62d2d5c816..e21e93ca268 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.c @@ -4,7 +4,7 @@ * * Type 1 character map support (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -18,7 +18,7 @@ #include "t1cmap.h" -#include FT_INTERNAL_DEBUG_H +#include #include "psauxerr.h" diff --git a/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.h b/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.h index d325e7b5a65..031796510f7 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/t1cmap.h @@ -4,7 +4,7 @@ * * Type 1 character map support (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,9 +19,8 @@ #ifndef T1CMAP_H_ #define T1CMAP_H_ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_TYPE1_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psaux/t1decode.c b/sdk/lib/3rdparty/freetype/src/psaux/t1decode.c index c2b3729b539..2ed27ca19ef 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/t1decode.c +++ b/sdk/lib/3rdparty/freetype/src/psaux/t1decode.c @@ -4,7 +4,7 @@ * * PostScript Type 1 decoding routines (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H -#include FT_INTERNAL_HASH_H -#include FT_OUTLINE_H +#include +#include +#include +#include +#include #include "t1decode.h" #include "psobjs.h" @@ -367,6 +366,12 @@ FT_GlyphLoader_Prepare( decoder->builder.loader ); /* prepare loader */ + /* save the left bearing and width of the SEAC */ + /* glyph as they will be erased by the next load */ + + left_bearing = decoder->builder.left_bearing; + advance = decoder->builder.advance; + /* the seac operator must not be nested */ decoder->seac = TRUE; error = t1_decoder_parse_glyph( decoder, (FT_UInt)bchar_index ); @@ -374,11 +379,14 @@ if ( error ) goto Exit; - /* save the left bearing and width of the base character */ - /* as they will be erased by the next load. */ + /* If the SEAC glyph doesn't have a (H)SBW of its */ + /* own use the values from the base glyph. */ - left_bearing = decoder->builder.left_bearing; - advance = decoder->builder.advance; + if ( decoder->builder.parse_state != T1_Parse_Have_Width ) + { + left_bearing = decoder->builder.left_bearing; + advance = decoder->builder.advance; + } decoder->builder.left_bearing.x = 0; decoder->builder.left_bearing.y = 0; @@ -396,8 +404,8 @@ if ( error ) goto Exit; - /* restore the left side bearing and */ - /* advance width of the base character */ + /* restore the left side bearing and advance width */ + /* of the SEAC glyph or base character (saved above) */ decoder->builder.left_bearing = left_bearing; decoder->builder.advance = advance; @@ -650,10 +658,8 @@ if ( value > 32000 || value < -32000 ) { if ( large_int ) - { FT_ERROR(( "t1_decoder_parse_charstrings:" " no `div' after large integer\n" )); - } else large_int = TRUE; } @@ -1231,8 +1237,8 @@ FT_UNUSED( orig_y ); - /* the `metrics_only' indicates that we only want to compute */ - /* the glyph's metrics (lsb + advance width), not load the */ + /* `metrics_only' indicates that we only want to compute the */ + /* glyph's metrics (lsb + advance width) without loading the */ /* rest of it; so exit immediately */ if ( builder->metrics_only ) { @@ -1266,8 +1272,8 @@ x = ADD_LONG( builder->pos_x, top[0] ); y = ADD_LONG( builder->pos_y, top[1] ); - /* the `metrics_only' indicates that we only want to compute */ - /* the glyph's metrics (lsb + advance width), not load the */ + /* `metrics_only' indicates that we only want to compute the */ + /* glyph's metrics (lsb + advance width) without loading the */ /* rest of it; so exit immediately */ if ( builder->metrics_only ) { @@ -1690,6 +1696,7 @@ FT_Byte* ip; FT_Byte* limit; T1_Builder builder = &decoder->builder; + FT_Bool large_int; #ifdef FT_DEBUG_LEVEL_TRACE FT_Bool bol = TRUE; @@ -1707,6 +1714,8 @@ limit = zone->limit = charstring_base + charstring_len; ip = zone->cursor = zone->base; + large_int = FALSE; + /* now, execute loop */ while ( ip < limit ) { @@ -1718,7 +1727,7 @@ #ifdef FT_DEBUG_LEVEL_TRACE if ( bol ) { - FT_TRACE5(( " (%d)", decoder->top - decoder->stack )); + FT_TRACE5(( " (%ld)", decoder->top - decoder->stack )); bol = FALSE; } #endif @@ -1740,8 +1749,6 @@ case 7: case 8: case 9: - case 10: - case 11: case 14: case 15: case 21: @@ -1750,6 +1757,13 @@ case 31: goto No_Width; + case 10: + op = op_callsubr; + break; + case 11: + op = op_return; + break; + case 13: op = op_hsbw; break; @@ -1767,6 +1781,9 @@ case 7: op = op_sbw; break; + case 12: + op = op_div; + break; default: goto No_Width; @@ -1796,13 +1813,19 @@ /* anyway. */ if ( value > 32000 || value < -32000 ) { - FT_ERROR(( "t1_decoder_parse_metrics:" - " large integer found for width\n" )); - goto Syntax_Error; + if ( large_int ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " no `div' after large integer\n" )); + goto Syntax_Error; + } + else + large_int = TRUE; } else { - value = (FT_Int32)( (FT_UInt32)value << 16 ); + if ( !large_int ) + value = (FT_Int32)( (FT_UInt32)value << 16 ); } break; @@ -1827,7 +1850,8 @@ value = -( ( ( ip[-2] - 251 ) * 256 ) + ip[-1] + 108 ); } - value = (FT_Int32)( (FT_UInt32)value << 16 ); + if ( !large_int ) + value = (FT_Int32)( (FT_UInt32)value << 16 ); } else { @@ -1837,6 +1861,13 @@ } } + if ( large_int && !( op == op_none || op == op_div ) ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " no `div' after large integer\n" )); + goto Syntax_Error; + } + /********************************************************************** * * Push value on stack, or process operator @@ -1851,6 +1882,9 @@ } #ifdef FT_DEBUG_LEVEL_TRACE + if ( large_int ) + FT_TRACE4(( " %d", value )); + else FT_TRACE4(( " %d", value / 65536 )); #endif @@ -1869,11 +1903,21 @@ #ifdef FT_DEBUG_LEVEL_TRACE - if ( top - decoder->stack != num_args ) - FT_TRACE0(( "t1_decoder_parse_metrics:" - " too much operands on the stack" - " (seen %d, expected %d)\n", - top - decoder->stack, num_args )); + switch ( op ) + { + case op_callsubr: + case op_div: + case op_return: + break; + + default: + if ( top - decoder->stack != num_args ) + FT_TRACE0(( "t1_decoder_parse_metrics:" + " too much operands on the stack" + " (seen %ld, expected %d)\n", + top - decoder->stack, num_args )); + break; + } #endif /* FT_DEBUG_LEVEL_TRACE */ @@ -1893,8 +1937,8 @@ builder->advance.y = 0; /* we only want to compute the glyph's metrics */ - /* (lsb + advance width), not load the rest of */ - /* it; so exit immediately */ + /* (lsb + advance width) without loading the */ + /* rest of it; so exit immediately */ FT_TRACE4(( "\n" )); return FT_Err_Ok; @@ -1912,17 +1956,116 @@ builder->advance.y = top[3]; /* we only want to compute the glyph's metrics */ - /* (lsb + advance width), not load the rest of */ - /* it; so exit immediately */ + /* (lsb + advance width), without loading the */ + /* rest of it; so exit immediately */ FT_TRACE4(( "\n" )); return FT_Err_Ok; + case op_div: + FT_TRACE4(( " div" )); + + /* if `large_int' is set, we divide unscaled numbers; */ + /* otherwise, we divide numbers in 16.16 format -- */ + /* in both cases, it is the same operation */ + *top = FT_DivFix( top[0], top[1] ); + top++; + + large_int = FALSE; + break; + + case op_callsubr: + { + FT_Int idx; + + + FT_TRACE4(( " callsubr" )); + + idx = Fix2Int( top[0] ); + + if ( decoder->subrs_hash ) + { + size_t* val = ft_hash_num_lookup( idx, + decoder->subrs_hash ); + + + if ( val ) + idx = *val; + else + idx = -1; + } + + if ( idx < 0 || idx >= decoder->num_subrs ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " invalid subrs index\n" )); + goto Syntax_Error; + } + + if ( zone - decoder->zones >= T1_MAX_SUBRS_CALLS ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " too many nested subrs\n" )); + goto Syntax_Error; + } + + zone->cursor = ip; /* save current instruction pointer */ + + zone++; + + /* The Type 1 driver stores subroutines without the seed bytes. */ + /* The CID driver stores subroutines with seed bytes. This */ + /* case is taken care of when decoder->subrs_len == 0. */ + zone->base = decoder->subrs[idx]; + + if ( decoder->subrs_len ) + zone->limit = zone->base + decoder->subrs_len[idx]; + else + { + /* We are using subroutines from a CID font. We must adjust */ + /* for the seed bytes. */ + zone->base += ( decoder->lenIV >= 0 ? decoder->lenIV : 0 ); + zone->limit = decoder->subrs[idx + 1]; + } + + zone->cursor = zone->base; + + if ( !zone->base ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " invoking empty subrs\n" )); + goto Syntax_Error; + } + + decoder->zone = zone; + ip = zone->base; + limit = zone->limit; + break; + } + + case op_return: + FT_TRACE4(( " return" )); + + if ( zone <= decoder->zones ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " unexpected return\n" )); + goto Syntax_Error; + } + + zone--; + ip = zone->cursor; + limit = zone->limit; + decoder->zone = zone; + break; + default: FT_ERROR(( "t1_decoder_parse_metrics:" " unhandled opcode %d\n", op )); goto Syntax_Error; } + decoder->top = top; + } /* general operator processing */ } /* while ip < limit */ diff --git a/sdk/lib/3rdparty/freetype/src/psaux/t1decode.h b/sdk/lib/3rdparty/freetype/src/psaux/t1decode.h index 1b5d6263d37..b793504ac6a 100644 --- a/sdk/lib/3rdparty/freetype/src/psaux/t1decode.h +++ b/sdk/lib/3rdparty/freetype/src/psaux/t1decode.h @@ -4,7 +4,7 @@ * * PostScript Type 1 decoding routines (specification). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define T1DECODE_H_ -#include -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_TYPE1_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.c b/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.c index 0c5ae626999..920b9a74b5f 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.c +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.c @@ -4,7 +4,7 @@ * * PostScript hinting algorithm (body). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used @@ -16,10 +16,9 @@ */ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H +#include +#include +#include #include "pshalgo.h" #include "pshnterr.h" diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.h b/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.h index 6859e95cd2d..5367a5d1648 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.h +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshalgo.h @@ -4,7 +4,7 @@ * * PostScript hinting algorithm (specification). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.c b/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.c index b021e6e42a3..cdc1c3af0e9 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.c +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.c @@ -5,7 +5,7 @@ * PostScript hinter global hinting management (body). * Inspired by the new auto-hinter module. * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used @@ -17,10 +17,9 @@ */ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_CALC_H +#include +#include +#include #include "pshglob.h" #ifdef DEBUG_HINTER diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.h b/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.h index 0049d4c0bc8..8181324e5ee 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.h +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshglob.h @@ -4,7 +4,7 @@ * * PostScript hinter global hinting management. * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,8 @@ #define PSHGLOB_H_ -#include FT_FREETYPE_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshinter.c b/sdk/lib/3rdparty/freetype/src/pshinter/pshinter.c index 16c3a0a1177..3cca0ad7c23 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshinter.c +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshinter.c @@ -4,7 +4,7 @@ * * FreeType PostScript Hinting module * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "pshalgo.c" #include "pshglob.c" diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.c b/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.c index 2d36ea2a6a6..e0abd386f9f 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.c +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.c @@ -4,7 +4,7 @@ * * FreeType PostScript hinter module implementation (body). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,10 @@ */ -#include -#include FT_INTERNAL_OBJECTS_H +#include #include "pshrec.h" #include "pshalgo.h" +#include "pshmod.h" /* the Postscript Hinter module structure */ diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.h b/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.h index ea8771308af..2a6eb1c4697 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.h +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshmod.h @@ -4,7 +4,7 @@ * * PostScript hinter module interface (specification). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define PSHMOD_H_ -#include -#include FT_MODULE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshnterr.h b/sdk/lib/3rdparty/freetype/src/pshinter/pshnterr.h index fb9dbca2b1f..d67955c4102 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshnterr.h +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshnterr.h @@ -4,7 +4,7 @@ * * PS Hinter error codes (specification only). * - * Copyright (C) 2003-2019 by + * Copyright (C) 2003-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,7 +25,7 @@ #ifndef PSHNTERR_H_ #define PSHNTERR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -33,7 +33,7 @@ #define FT_ERR_PREFIX PSH_Err_ #define FT_ERR_BASE FT_Mod_Err_PShinter -#include FT_ERRORS_H +#include #endif /* PSHNTERR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.c b/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.c index 9dd09efe4ca..bddccf2a6eb 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.c +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.c @@ -4,7 +4,7 @@ * * FreeType PostScript hints recorder (body). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_FREETYPE_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H +#include +#include +#include +#include #include "pshrec.h" #include "pshalgo.h" @@ -875,7 +874,7 @@ if ( error ) { FT_ERROR(( "ps_hints_stem: could not add stem" - " (%d,%d) to hints table\n", stems[0], stems[1] )); + " (%ld,%ld) to hints table\n", stems[0], stems[1] )); hints->error = error; return; diff --git a/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.h b/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.h index 02cc2102ec3..b13c7be13ce 100644 --- a/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.h +++ b/sdk/lib/3rdparty/freetype/src/pshinter/pshrec.h @@ -4,7 +4,7 @@ * * Postscript (Type1/Type2) hints recorder (specification). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -32,8 +32,7 @@ #define PSHREC_H_ -#include -#include FT_INTERNAL_POSTSCRIPT_HINTS_H +#include #include "pshglob.h" diff --git a/sdk/lib/3rdparty/freetype/src/psnames/psmodule.c b/sdk/lib/3rdparty/freetype/src/psnames/psmodule.c index 0ec440e67b4..b38f9d3b1cd 100644 --- a/sdk/lib/3rdparty/freetype/src/psnames/psmodule.c +++ b/sdk/lib/3rdparty/freetype/src/psnames/psmodule.c @@ -4,7 +4,7 @@ * * psnames module implementation (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H +#include +#include +#include #include "psmodule.h" diff --git a/sdk/lib/3rdparty/freetype/src/psnames/psmodule.h b/sdk/lib/3rdparty/freetype/src/psnames/psmodule.h index 0df9a7d889c..c85a9ecad7a 100644 --- a/sdk/lib/3rdparty/freetype/src/psnames/psmodule.h +++ b/sdk/lib/3rdparty/freetype/src/psnames/psmodule.h @@ -4,7 +4,7 @@ * * High-level psnames module interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define PSMODULE_H_ -#include -#include FT_MODULE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/psnames/psnamerr.h b/sdk/lib/3rdparty/freetype/src/psnames/psnamerr.h index 67ab1765d38..154c701d040 100644 --- a/sdk/lib/3rdparty/freetype/src/psnames/psnamerr.h +++ b/sdk/lib/3rdparty/freetype/src/psnames/psnamerr.h @@ -4,7 +4,7 @@ * * PS names module error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef PSNAMERR_H_ #define PSNAMERR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX PSnames_Err_ #define FT_ERR_BASE FT_Mod_Err_PSnames -#include FT_ERRORS_H +#include #endif /* PSNAMERR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/psnames/psnames.c b/sdk/lib/3rdparty/freetype/src/psnames/psnames.c index 4722f988317..cff36851baa 100644 --- a/sdk/lib/3rdparty/freetype/src/psnames/psnames.c +++ b/sdk/lib/3rdparty/freetype/src/psnames/psnames.c @@ -4,7 +4,7 @@ * * FreeType psnames module component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "psmodule.c" diff --git a/sdk/lib/3rdparty/freetype/src/psnames/pstables.h b/sdk/lib/3rdparty/freetype/src/psnames/pstables.h index c0139bbc601..c215f16ffcf 100644 --- a/sdk/lib/3rdparty/freetype/src/psnames/pstables.h +++ b/sdk/lib/3rdparty/freetype/src/psnames/pstables.h @@ -4,7 +4,7 @@ * * PostScript glyph names. * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/raster/ftmisc.h b/sdk/lib/3rdparty/freetype/src/raster/ftmisc.h index a246569e3be..6efe4a9a5a2 100644 --- a/sdk/lib/3rdparty/freetype/src/raster/ftmisc.h +++ b/sdk/lib/3rdparty/freetype/src/raster/ftmisc.h @@ -5,7 +5,7 @@ * Miscellaneous macros for stand-alone rasterizer (specification * only). * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used diff --git a/sdk/lib/3rdparty/freetype/src/raster/ftraster.c b/sdk/lib/3rdparty/freetype/src/raster/ftraster.c index 6287ddccf16..2a1a000680b 100644 --- a/sdk/lib/3rdparty/freetype/src/raster/ftraster.c +++ b/sdk/lib/3rdparty/freetype/src/raster/ftraster.c @@ -4,7 +4,7 @@ * * The FreeType glyph rasterizer (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -62,10 +62,9 @@ #else /* !STANDALONE_ */ -#include #include "ftraster.h" -#include FT_INTERNAL_CALC_H /* for FT_MulDiv and FT_MulDiv_No_Round */ -#include FT_OUTLINE_H /* for FT_Outline_Get_CBox */ +#include /* for FT_MulDiv and FT_MulDiv_No_Round */ +#include /* for FT_Outline_Get_CBox */ #endif /* !STANDALONE_ */ @@ -226,8 +225,8 @@ #else /* !STANDALONE_ */ -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H /* for FT_TRACE, FT_ERROR, and FT_THROW */ +#include +#include /* for FT_TRACE, FT_ERROR, and FT_THROW */ #include "rasterrs.h" @@ -399,7 +398,7 @@ #define RAS_ARGS /* void */ -#define RAS_ARG /* void */ +#define RAS_ARG void #define RAS_VARS /* void */ #define RAS_VAR /* void */ @@ -460,6 +459,11 @@ #define IS_TOP_OVERSHOOT( x ) \ (Bool)( x - FLOOR( x ) >= ras.precision_half ) + /* Smart dropout rounding to find which pixel is closer to span ends. */ + /* To mimick Windows, symmetric cases break down indepenently of the */ + /* precision. */ +#define SMART( p, q ) FLOOR( ( (p) + (q) + ras.precision * 63 / 64 ) >> 1 ) + #if FT_RENDER_POOL_SIZE > 2048 #define FT_MAX_BLACK_POOL ( FT_RENDER_POOL_SIZE / sizeof ( Long ) ) #else @@ -546,8 +550,7 @@ #ifdef FT_STATIC_RASTER - static black_TWorker cur_ras; -#define ras cur_ras + static black_TWorker ras; #else /* !FT_STATIC_RASTER */ @@ -661,7 +664,6 @@ return FAILURE; } - ras.cProfile->flags = 0; ras.cProfile->start = 0; ras.cProfile->height = 0; ras.cProfile->offset = ras.top; @@ -676,13 +678,13 @@ if ( overshoot ) ras.cProfile->flags |= Overshoot_Bottom; - FT_TRACE6(( " new ascending profile = %p\n", ras.cProfile )); + FT_TRACE6(( " new ascending profile = %p\n", (void *)ras.cProfile )); break; case Descending_State: if ( overshoot ) ras.cProfile->flags |= Overshoot_Top; - FT_TRACE6(( " new descending profile = %p\n", ras.cProfile )); + FT_TRACE6(( " new descending profile = %p\n", (void *)ras.cProfile )); break; default: @@ -739,7 +741,7 @@ FT_TRACE6(( " ending profile %p, start = %ld, height = %ld\n", - ras.cProfile, ras.cProfile->start, h )); + (void *)ras.cProfile, ras.cProfile->start, h )); ras.cProfile->height = h; if ( overshoot ) @@ -914,16 +916,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; /* hand optimized. gcc doesn't seem to be too good at common */ /* expression substitution and instruction scheduling ;-) */ @@ -947,28 +951,32 @@ 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; } @@ -2238,11 +2246,10 @@ /* in high-precision mode, we need 12 digits after the comma to */ /* represent multiples of 1/(1<<12) = 1/4096 */ - FT_TRACE7(( " y=%d x=[%.12f;%.12f], drop-out=%d", + FT_TRACE7(( " y=%d x=[% .12f;% .12f]", y, x1 / (double)ras.precision, - x2 / (double)ras.precision, - dropOutControl )); + x2 / (double)ras.precision )); /* Drop-out control */ @@ -2270,7 +2277,7 @@ if ( e2 >= ras.bWidth ) e2 = ras.bWidth - 1; - FT_TRACE7(( " -> x=[%d;%d]", e1, e2 )); + FT_TRACE7(( " -> x=[%ld;%ld]", e1, e2 )); c1 = (Short)( e1 >> 3 ); c2 = (Short)( e2 >> 3 ); @@ -2312,7 +2319,7 @@ Short c1, f1; - FT_TRACE7(( " y=%d x=[%.12f;%.12f]", + FT_TRACE7(( " y=%d x=[% .12f;% .12f]", y, x1 / (double)ras.precision, x2 / (double)ras.precision )); @@ -2349,8 +2356,6 @@ Int dropOutControl = left->flags & 7; - FT_TRACE7(( ", drop-out=%d", dropOutControl )); - if ( e1 == e2 + ras.precision ) { switch ( dropOutControl ) @@ -2360,7 +2365,7 @@ break; case 4: /* smart drop-outs including stubs */ - pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half ); + pxl = SMART( x1, x2 ); break; case 1: /* simple drop-outs excluding stubs */ @@ -2409,7 +2414,7 @@ if ( dropOutControl == 1 ) pxl = e2; else - pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half ); + pxl = SMART( x1, x2 ); break; default: /* modes 2, 3, 6, 7 */ @@ -2444,7 +2449,7 @@ if ( e1 >= 0 && e1 < ras.bWidth ) { - FT_TRACE7(( " -> x=%d (drop-out)", e1 )); + FT_TRACE7(( " -> x=%ld", e1 )); c1 = (Short)( e1 >> 3 ); f1 = (Short)( e1 & 7 ); @@ -2453,7 +2458,7 @@ } Exit: - FT_TRACE7(( "\n" )); + FT_TRACE7(( " dropout=%d\n", left->flags & 7 )); } @@ -2491,44 +2496,68 @@ PProfile left, PProfile right ) { + Long e1, e2; + FT_UNUSED( left ); FT_UNUSED( right ); - if ( x2 - x1 < ras.precision ) + FT_TRACE7(( " x=%d y=[% .12f;% .12f]", + y, + x1 / (double)ras.precision, + x2 / (double)ras.precision )); + + /* We should not need this procedure but the vertical sweep */ + /* mishandles horizontal lines through pixel centers. So we */ + /* have to check perfectly aligned span edges here. */ + /* */ + /* XXX: Can we handle horizontal lines better and drop this? */ + + e1 = CEILING( x1 ); + + if ( x1 == e1 ) { - Long e1, e2; + e1 = TRUNC( e1 ); - - FT_TRACE7(( " x=%d y=[%.12f;%.12f]", - y, - x1 / (double)ras.precision, - x2 / (double)ras.precision )); - - e1 = CEILING( x1 ); - e2 = FLOOR ( x2 ); - - if ( e1 == e2 ) + if ( e1 >= 0 && (ULong)e1 < ras.target.rows ) { - e1 = TRUNC( e1 ); - - if ( e1 >= 0 && (ULong)e1 < ras.target.rows ) - { - Byte f1; - PByte bits; + Byte f1; + PByte bits; - FT_TRACE7(( " -> y=%d (drop-out)", e1 )); + bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch; + f1 = (Byte)( 0x80 >> ( y & 7 ) ); - bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch; - f1 = (Byte)( 0x80 >> ( y & 7 ) ); + FT_TRACE7(( bits[0] & f1 ? " redundant" + : " -> y=%ld edge", e1 )); - bits[0] |= f1; - } + bits[0] |= f1; } - - FT_TRACE7(( "\n" )); } + + e2 = FLOOR ( x2 ); + + if ( x2 == e2 ) + { + e2 = TRUNC( e2 ); + + if ( e2 >= 0 && (ULong)e2 < ras.target.rows ) + { + Byte f1; + PByte bits; + + + bits = ras.bOrigin + ( y >> 3 ) - e2 * ras.target.pitch; + f1 = (Byte)( 0x80 >> ( y & 7 ) ); + + FT_TRACE7(( bits[0] & f1 ? " redundant" + : " -> y=%ld edge", e2 )); + + bits[0] |= f1; + } + } + + FT_TRACE7(( "\n" )); } @@ -2544,7 +2573,7 @@ Byte f1; - FT_TRACE7(( " x=%d y=[%.12f;%.12f]", + FT_TRACE7(( " x=%d y=[% .12f;% .12f]", y, x1 / (double)ras.precision, x2 / (double)ras.precision )); @@ -2570,8 +2599,6 @@ Int dropOutControl = left->flags & 7; - FT_TRACE7(( ", dropout=%d", dropOutControl )); - if ( e1 == e2 + ras.precision ) { switch ( dropOutControl ) @@ -2581,7 +2608,7 @@ break; case 4: /* smart drop-outs including stubs */ - pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half ); + pxl = SMART( x1, x2 ); break; case 1: /* simple drop-outs excluding stubs */ @@ -2605,7 +2632,7 @@ if ( dropOutControl == 1 ) pxl = e2; else - pxl = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half ); + pxl = SMART( x1, x2 ); break; default: /* modes 2, 3, 6, 7 */ @@ -2641,7 +2668,7 @@ if ( e1 >= 0 && (ULong)e1 < ras.target.rows ) { - FT_TRACE7(( " -> y=%d (drop-out)", e1 )); + FT_TRACE7(( " -> y=%ld", e1 )); bits = ras.bOrigin + ( y >> 3 ) - e1 * ras.target.pitch; f1 = (Byte)( 0x80 >> ( y & 7 ) ); @@ -2650,7 +2677,7 @@ } Exit: - FT_TRACE7(( "\n" )); + FT_TRACE7(( " dropout=%d\n", left->flags & 7 )); } @@ -2784,7 +2811,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; @@ -2885,7 +2912,7 @@ P_Left = draw_left; P_Right = draw_right; - while ( P_Left ) + while ( P_Left && P_Right ) { if ( P_Left->countL ) { @@ -3267,7 +3294,9 @@ return FT_THROW( Out_Of_Memory ); } #else +#ifndef FT_STATIC_RASTER black_TWorker worker[1]; +#endif Long buffer[FT_MAX_BLACK_POOL]; #endif @@ -3309,11 +3338,11 @@ ras.outline = *outline; ras.target = *target_map; - worker->buff = buffer; + ras.buff = buffer; #ifdef __REACTOS__ worker->sizeBuff = &buffer[FT_MAX_BLACK_POOL]; #else - worker->sizeBuff = (&buffer)[1]; /* Points to right after buffer. */ + ras.sizeBuff = (&buffer)[1]; /* Points to right after buffer. */ #endif #ifdef __REACTOS__ diff --git a/sdk/lib/3rdparty/freetype/src/raster/ftraster.h b/sdk/lib/3rdparty/freetype/src/raster/ftraster.h index 50d34201a1c..1b2ee3c0167 100644 --- a/sdk/lib/3rdparty/freetype/src/raster/ftraster.h +++ b/sdk/lib/3rdparty/freetype/src/raster/ftraster.h @@ -4,7 +4,7 @@ * * The FreeType glyph rasterizer (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used @@ -22,8 +22,9 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_IMAGE_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/raster/ftrend1.c b/sdk/lib/3rdparty/freetype/src/raster/ftrend1.c index 62c727182a4..57fed9bc14c 100644 --- a/sdk/lib/3rdparty/freetype/src/raster/ftrend1.c +++ b/sdk/lib/3rdparty/freetype/src/raster/ftrend1.c @@ -4,7 +4,7 @@ * * The FreeType glyph rasterizer interface (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_OUTLINE_H +#include +#include +#include #include "ftrend1.h" #include "ftraster.h" diff --git a/sdk/lib/3rdparty/freetype/src/raster/ftrend1.h b/sdk/lib/3rdparty/freetype/src/raster/ftrend1.h index 82ecac686c1..3f6be536755 100644 --- a/sdk/lib/3rdparty/freetype/src/raster/ftrend1.h +++ b/sdk/lib/3rdparty/freetype/src/raster/ftrend1.h @@ -4,7 +4,7 @@ * * The FreeType glyph rasterizer interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTREND1_H_ -#include -#include FT_RENDER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/raster/raster.c b/sdk/lib/3rdparty/freetype/src/raster/raster.c index e3ac9e566a3..cd37943bf60 100644 --- a/sdk/lib/3rdparty/freetype/src/raster/raster.c +++ b/sdk/lib/3rdparty/freetype/src/raster/raster.c @@ -4,7 +4,7 @@ * * FreeType monochrome rasterer module component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "ftraster.c" #include "ftrend1.c" diff --git a/sdk/lib/3rdparty/freetype/src/raster/rasterrs.h b/sdk/lib/3rdparty/freetype/src/raster/rasterrs.h index 72664073657..a29651a6c54 100644 --- a/sdk/lib/3rdparty/freetype/src/raster/rasterrs.h +++ b/sdk/lib/3rdparty/freetype/src/raster/rasterrs.h @@ -4,7 +4,7 @@ * * monochrome renderer error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef RASTERRS_H_ #define RASTERRS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX Raster_Err_ #define FT_ERR_BASE FT_Mod_Err_Raster -#include FT_ERRORS_H +#include #endif /* RASTERRS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.c b/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.c index ca85d9751f0..f55016122c1 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.c @@ -4,7 +4,7 @@ * * PNG Bitmap glyph support. * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * Google, Inc. * Written by Stuart Gill and Behdad Esfahbod. * @@ -17,10 +17,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H +#include +#include +#include #include FT_CONFIG_STANDARD_LIBRARY_H @@ -61,13 +60,19 @@ /* predates clang; the `__BYTE_ORDER__' preprocessor symbol was */ /* introduced in gcc 4.6 and clang 3.2, respectively. */ /* `__builtin_shuffle' for gcc was introduced in gcc 4.7.0. */ -#if ( ( defined( __GNUC__ ) && \ + /* */ + /* Intel compilers do not currently support __builtin_shuffle; */ + + /* The Intel check must be first. */ +#if !defined( __INTEL_COMPILER ) && \ + ( ( defined( __GNUC__ ) && \ ( ( __GNUC__ >= 5 ) || \ ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) ) || \ ( defined( __clang__ ) && \ ( ( __clang_major__ >= 4 ) || \ ( ( __clang_major__ == 3 ) && ( __clang_minor__ >= 2 ) ) ) ) ) && \ defined( __OPTIMIZE__ ) && \ + defined( __SSE__ ) && \ __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #ifdef __clang__ @@ -327,6 +332,13 @@ if ( populate_map_and_metrics ) { + /* reject too large bitmaps similarly to the rasterizer */ + if ( imgHeight > 0x7FFF || imgWidth > 0x7FFF ) + { + error = FT_THROW( Array_Too_Large ); + goto DestroyExit; + } + metrics->width = (FT_UShort)imgWidth; metrics->height = (FT_UShort)imgHeight; @@ -335,13 +347,6 @@ map->pixel_mode = FT_PIXEL_MODE_BGRA; map->pitch = (int)( map->width * 4 ); map->num_grays = 256; - - /* reject too large bitmaps similarly to the rasterizer */ - if ( map->rows > 0x7FFF || map->width > 0x7FFF ) - { - error = FT_THROW( Array_Too_Large ); - goto DestroyExit; - } } /* convert palette/gray image to rgb */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.h b/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.h index 06c6f6b20e7..2d6e83d69b0 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/pngshim.h @@ -4,7 +4,7 @@ * * PNG Bitmap glyph support. * - * Copyright (C) 2013-2019 by + * Copyright (C) 2013-2020 by * Google, Inc. * Written by Stuart Gill and Behdad Esfahbod. * @@ -21,7 +21,6 @@ #define PNGSHIM_H_ -#include #include "ttload.h" diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.c b/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.c index c467ff4d370..0460339a74f 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.c @@ -4,7 +4,7 @@ * * High-level SFNT driver interface (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_SFNT_H -#include FT_INTERNAL_OBJECTS_H -#include FT_TRUETYPE_IDS_H +#include +#include +#include +#include #include "sfdriver.h" #include "ttload.h" @@ -43,21 +42,21 @@ #ifdef TT_CONFIG_OPTION_BDF #include "ttbdf.h" -#include FT_SERVICE_BDF_H +#include #endif #include "ttcmap.h" #include "ttkern.h" #include "ttmtx.h" -#include FT_SERVICE_GLYPH_DICT_H -#include FT_SERVICE_POSTSCRIPT_NAME_H -#include FT_SERVICE_SFNT_H -#include FT_SERVICE_TT_CMAP_H +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_MULTIPLE_MASTERS_H -#include FT_SERVICE_MULTIPLE_MASTERS_H +#include +#include #endif @@ -182,8 +181,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; @@ -195,7 +194,7 @@ else if ( (FT_ULong)face->num_glyphs < FT_UINT_MAX ) max_gid = (FT_UInt)face->num_glyphs; else - FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n", + FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08lx\n", FT_UINT_MAX, face->num_glyphs )); for ( i = 0; i < max_gid; i++ ) @@ -375,47 +374,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; diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.h b/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.h index 8c174634b37..1ac2706325f 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfdriver.h @@ -4,7 +4,7 @@ * * High-level SFNT driver interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define SFDRIVER_H_ -#include -#include FT_MODULE_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sferrors.h b/sdk/lib/3rdparty/freetype/src/sfnt/sferrors.h index 43e148d2954..55c3e76b666 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/sferrors.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sferrors.h @@ -4,7 +4,7 @@ * * SFNT error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,7 +25,7 @@ #ifndef SFERRORS_H_ #define SFERRORS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -33,7 +33,7 @@ #define FT_ERR_PREFIX SFNT_Err_ #define FT_ERR_BASE FT_Mod_Err_SFNT -#include FT_ERRORS_H +#include #endif /* SFERRORS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfnt.c b/sdk/lib/3rdparty/freetype/src/sfnt/sfnt.c index 5a503f30c54..471239ff0ba 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/sfnt.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfnt.c @@ -4,7 +4,7 @@ * * Single object library component. * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,11 +17,12 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "pngshim.c" #include "sfdriver.c" #include "sfobjs.c" +#include "sfwoff.c" +#include "sfwoff2.c" #include "ttbdf.c" #include "ttcmap.c" #include "ttcolr.c" @@ -32,6 +33,7 @@ #include "ttmtx.c" #include "ttpost.c" #include "ttsbit.c" +#include "woff2tags.c" /* END */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.c b/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.c index 0b43d251b87..39460be2e6c 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.c @@ -4,7 +4,7 @@ * * SFNT object management (base). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,22 +16,22 @@ */ -#include #include "sfobjs.h" #include "ttload.h" #include "ttcmap.h" #include "ttkern.h" -#include FT_INTERNAL_SFNT_H -#include FT_INTERNAL_DEBUG_H -#include FT_TRUETYPE_IDS_H -#include FT_TRUETYPE_TAGS_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_SFNT_NAMES_H -#include FT_GZIP_H +#include "sfwoff.h" +#include "sfwoff2.h" +#include +#include +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_SERVICE_MULTIPLE_MASTERS_H -#include FT_SERVICE_METRICS_VARIATIONS_H +#include +#include #endif #include "sferrors.h" @@ -337,408 +337,13 @@ } -#define WRITE_USHORT( p, v ) \ - do \ - { \ - *(p)++ = (FT_Byte)( (v) >> 8 ); \ - *(p)++ = (FT_Byte)( (v) >> 0 ); \ - \ - } while ( 0 ) - -#define WRITE_ULONG( p, v ) \ - do \ - { \ - *(p)++ = (FT_Byte)( (v) >> 24 ); \ - *(p)++ = (FT_Byte)( (v) >> 16 ); \ - *(p)++ = (FT_Byte)( (v) >> 8 ); \ - *(p)++ = (FT_Byte)( (v) >> 0 ); \ - \ - } while ( 0 ) - - - static void - sfnt_stream_close( FT_Stream stream ) - { - FT_Memory memory = stream->memory; - - - FT_FREE( stream->base ); - - stream->size = 0; - stream->base = NULL; - stream->close = NULL; - } - - - FT_CALLBACK_DEF( int ) - compare_offsets( const void* a, - const void* b ) - { - WOFF_Table table1 = *(WOFF_Table*)a; - WOFF_Table table2 = *(WOFF_Table*)b; - - FT_ULong offset1 = table1->Offset; - FT_ULong offset2 = table2->Offset; - - - if ( offset1 > offset2 ) - return 1; - else if ( offset1 < offset2 ) - return -1; - else - return 0; - } - - - /* Replace `face->root.stream' with a stream containing the extracted */ - /* SFNT of a WOFF font. */ - - static FT_Error - woff_open_font( FT_Stream stream, - TT_Face face ) - { - FT_Memory memory = stream->memory; - FT_Error error = FT_Err_Ok; - - WOFF_HeaderRec woff; - WOFF_Table tables = NULL; - WOFF_Table* indices = NULL; - - FT_ULong woff_offset; - - FT_Byte* sfnt = NULL; - FT_Stream sfnt_stream = NULL; - - FT_Byte* sfnt_header; - FT_ULong sfnt_offset; - - FT_Int nn; - FT_ULong old_tag = 0; - - static const FT_Frame_Field woff_header_fields[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE WOFF_HeaderRec - - FT_FRAME_START( 44 ), - FT_FRAME_ULONG ( signature ), - FT_FRAME_ULONG ( flavor ), - FT_FRAME_ULONG ( length ), - FT_FRAME_USHORT( num_tables ), - FT_FRAME_USHORT( reserved ), - FT_FRAME_ULONG ( totalSfntSize ), - FT_FRAME_USHORT( majorVersion ), - FT_FRAME_USHORT( minorVersion ), - FT_FRAME_ULONG ( metaOffset ), - FT_FRAME_ULONG ( metaLength ), - FT_FRAME_ULONG ( metaOrigLength ), - FT_FRAME_ULONG ( privOffset ), - FT_FRAME_ULONG ( privLength ), - FT_FRAME_END - }; - - - FT_ASSERT( stream == face->root.stream ); - FT_ASSERT( FT_STREAM_POS() == 0 ); - - if ( FT_STREAM_READ_FIELDS( woff_header_fields, &woff ) ) - return error; - - /* Make sure we don't recurse back here or hit TTC code. */ - if ( woff.flavor == TTAG_wOFF || woff.flavor == TTAG_ttcf ) - return FT_THROW( Invalid_Table ); - - /* Miscellaneous checks. */ - if ( woff.length != stream->size || - woff.num_tables == 0 || - 44 + woff.num_tables * 20UL >= woff.length || - 12 + woff.num_tables * 16UL >= woff.totalSfntSize || - ( woff.totalSfntSize & 3 ) != 0 || - ( woff.metaOffset == 0 && ( woff.metaLength != 0 || - woff.metaOrigLength != 0 ) ) || - ( woff.metaLength != 0 && woff.metaOrigLength == 0 ) || - ( woff.privOffset == 0 && woff.privLength != 0 ) ) - { - FT_ERROR(( "woff_font_open: invalid WOFF header\n" )); - return FT_THROW( Invalid_Table ); - } - - /* Don't trust `totalSfntSize' before thorough checks. */ - if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) || - FT_NEW( sfnt_stream ) ) - goto Exit; - - sfnt_header = sfnt; - - /* Write sfnt header. */ - { - FT_UInt searchRange, entrySelector, rangeShift, x; - - - x = woff.num_tables; - entrySelector = 0; - while ( x ) - { - x >>= 1; - entrySelector += 1; - } - entrySelector--; - - searchRange = ( 1 << entrySelector ) * 16; - rangeShift = woff.num_tables * 16 - searchRange; - - WRITE_ULONG ( sfnt_header, woff.flavor ); - WRITE_USHORT( sfnt_header, woff.num_tables ); - WRITE_USHORT( sfnt_header, searchRange ); - WRITE_USHORT( sfnt_header, entrySelector ); - WRITE_USHORT( sfnt_header, rangeShift ); - } - - /* While the entries in the sfnt header must be sorted by the */ - /* tag value, the tables themselves are not. We thus have to */ - /* sort them by offset and check that they don't overlap. */ - - if ( FT_NEW_ARRAY( tables, woff.num_tables ) || - FT_NEW_ARRAY( indices, woff.num_tables ) ) - goto Exit; - - FT_TRACE2(( "\n" - " tag offset compLen origLen checksum\n" - " -------------------------------------------\n" )); - - if ( FT_FRAME_ENTER( 20L * woff.num_tables ) ) - goto Exit; - - for ( nn = 0; nn < woff.num_tables; nn++ ) - { - WOFF_Table table = tables + nn; - - table->Tag = FT_GET_TAG4(); - table->Offset = FT_GET_ULONG(); - table->CompLength = FT_GET_ULONG(); - table->OrigLength = FT_GET_ULONG(); - table->CheckSum = FT_GET_ULONG(); - - FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx %08lx\n", - (FT_Char)( table->Tag >> 24 ), - (FT_Char)( table->Tag >> 16 ), - (FT_Char)( table->Tag >> 8 ), - (FT_Char)( table->Tag ), - table->Offset, - table->CompLength, - table->OrigLength, - table->CheckSum )); - - if ( table->Tag <= old_tag ) - { - FT_FRAME_EXIT(); - - FT_ERROR(( "woff_font_open: table tags are not sorted\n" )); - error = FT_THROW( Invalid_Table ); - goto Exit; - } - - old_tag = table->Tag; - indices[nn] = table; - } - - FT_FRAME_EXIT(); - - /* Sort by offset. */ - - ft_qsort( indices, - woff.num_tables, - sizeof ( WOFF_Table ), - compare_offsets ); - - /* Check offsets and lengths. */ - - woff_offset = 44 + woff.num_tables * 20L; - sfnt_offset = 12 + woff.num_tables * 16L; - - for ( nn = 0; nn < woff.num_tables; nn++ ) - { - WOFF_Table table = indices[nn]; - - - if ( table->Offset != woff_offset || - table->CompLength > woff.length || - table->Offset > woff.length - table->CompLength || - table->OrigLength > woff.totalSfntSize || - sfnt_offset > woff.totalSfntSize - table->OrigLength || - table->CompLength > table->OrigLength ) - { - FT_ERROR(( "woff_font_open: invalid table offsets\n" )); - error = FT_THROW( Invalid_Table ); - goto Exit; - } - - table->OrigOffset = sfnt_offset; - - /* The offsets must be multiples of 4. */ - woff_offset += ( table->CompLength + 3 ) & ~3U; - sfnt_offset += ( table->OrigLength + 3 ) & ~3U; - } - - /* - * Final checks! - * - * We don't decode and check the metadata block. - * We don't check table checksums either. - * But other than those, I think we implement all - * `MUST' checks from the spec. - */ - - if ( woff.metaOffset ) - { - if ( woff.metaOffset != woff_offset || - woff.metaOffset + woff.metaLength > woff.length ) - { - FT_ERROR(( "woff_font_open:" - " invalid `metadata' offset or length\n" )); - error = FT_THROW( Invalid_Table ); - goto Exit; - } - - /* We have padding only ... */ - woff_offset += woff.metaLength; - } - - if ( woff.privOffset ) - { - /* ... if it isn't the last block. */ - woff_offset = ( woff_offset + 3 ) & ~3U; - - if ( woff.privOffset != woff_offset || - woff.privOffset + woff.privLength > woff.length ) - { - FT_ERROR(( "woff_font_open: invalid `private' offset or length\n" )); - error = FT_THROW( Invalid_Table ); - goto Exit; - } - - /* No padding for the last block. */ - woff_offset += woff.privLength; - } - - if ( sfnt_offset != woff.totalSfntSize || - woff_offset != woff.length ) - { - FT_ERROR(( "woff_font_open: invalid `sfnt' table structure\n" )); - error = FT_THROW( Invalid_Table ); - goto Exit; - } - - /* Now use `totalSfntSize'. */ - if ( FT_REALLOC( sfnt, - 12 + woff.num_tables * 16UL, - woff.totalSfntSize ) ) - goto Exit; - - sfnt_header = sfnt + 12; - - /* Write the tables. */ - - for ( nn = 0; nn < woff.num_tables; nn++ ) - { - WOFF_Table table = tables + nn; - - - /* Write SFNT table entry. */ - WRITE_ULONG( sfnt_header, table->Tag ); - WRITE_ULONG( sfnt_header, table->CheckSum ); - WRITE_ULONG( sfnt_header, table->OrigOffset ); - WRITE_ULONG( sfnt_header, table->OrigLength ); - - /* Write table data. */ - if ( FT_STREAM_SEEK( table->Offset ) || - FT_FRAME_ENTER( table->CompLength ) ) - goto Exit; - - if ( table->CompLength == table->OrigLength ) - { - /* Uncompressed data; just copy. */ - ft_memcpy( sfnt + table->OrigOffset, - stream->cursor, - table->OrigLength ); - } - else - { -#ifdef FT_CONFIG_OPTION_USE_ZLIB - - /* Uncompress with zlib. */ - FT_ULong output_len = table->OrigLength; - - - error = FT_Gzip_Uncompress( memory, - sfnt + table->OrigOffset, &output_len, - stream->cursor, table->CompLength ); - if ( error ) - goto Exit; - if ( output_len != table->OrigLength ) - { - FT_ERROR(( "woff_font_open: compressed table length mismatch\n" )); - error = FT_THROW( Invalid_Table ); - goto Exit; - } - -#else /* !FT_CONFIG_OPTION_USE_ZLIB */ - - error = FT_THROW( Unimplemented_Feature ); - goto Exit; - -#endif /* !FT_CONFIG_OPTION_USE_ZLIB */ - } - - FT_FRAME_EXIT(); - - /* We don't check whether the padding bytes in the WOFF file are */ - /* actually '\0'. For the output, however, we do set them properly. */ - sfnt_offset = table->OrigOffset + table->OrigLength; - while ( sfnt_offset & 3 ) - { - sfnt[sfnt_offset] = '\0'; - sfnt_offset++; - } - } - - /* Ok! Finally ready. Swap out stream and return. */ - FT_Stream_OpenMemory( sfnt_stream, sfnt, woff.totalSfntSize ); - sfnt_stream->memory = stream->memory; - sfnt_stream->close = sfnt_stream_close; - - FT_Stream_Free( - face->root.stream, - ( face->root.face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 ); - - face->root.stream = sfnt_stream; - - face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM; - - Exit: - FT_FREE( tables ); - FT_FREE( indices ); - - if ( error ) - { - FT_FREE( sfnt ); - FT_Stream_Close( sfnt_stream ); - FT_FREE( sfnt_stream ); - } - - return error; - } - - -#undef WRITE_USHORT -#undef WRITE_ULONG - - /* Fill in face->ttc_header. If the font is not a TTC, it is */ /* synthesized into a TTC with one offset table. */ static FT_Error sfnt_open_font( FT_Stream stream, - TT_Face face ) + TT_Face face, + FT_Int* face_instance_index, + FT_Long* woff2_num_faces ) { FT_Memory memory = stream->memory; FT_Error error; @@ -782,6 +387,25 @@ goto retry; } + if ( tag == TTAG_wOF2 ) + { + FT_TRACE2(( "sfnt_open_font: file is a WOFF2; synthesizing SFNT\n" )); + + if ( FT_STREAM_SEEK( offset ) ) + return error; + + error = woff2_open_font( stream, + face, + face_instance_index, + woff2_num_faces ); + if ( error ) + return error; + + /* Swap out stream and retry! */ + stream = face->root.stream; + goto retry; + } + if ( tag != 0x00010000UL && tag != TTAG_ttcf && tag != TTAG_OTTO && @@ -858,9 +482,10 @@ FT_Parameter* params ) { FT_Error error; - FT_Library library = face->root.driver->root.library; + FT_Library library = face->root.driver->root.library; SFNT_Service sfnt; FT_Int face_index; + FT_Long woff2_num_faces = 0; /* for now, parameters are unused */ @@ -911,15 +536,18 @@ FT_TRACE2(( "SFNT driver\n" )); - error = sfnt_open_font( stream, face ); + error = sfnt_open_font( stream, + face, + &face_instance_index, + &woff2_num_faces ); if ( error ) return error; /* Stream may have changed in sfnt_open_font. */ stream = face->root.stream; - FT_TRACE2(( "sfnt_init_face: %08p (index %d)\n", - face, + FT_TRACE2(( "sfnt_init_face: %p (index %d)\n", + (void *)face, face_instance_index )); face_index = FT_ABS( face_instance_index ) & 0xFFFF; @@ -1086,6 +714,10 @@ face->root.num_faces = face->ttc_header.count; face->root.face_index = face_instance_index; + /* `num_faces' for a WOFF2 needs to be handled separately. */ + if ( woff2_num_faces ) + face->root.num_faces = woff2_num_faces; + return error; } @@ -1188,7 +820,7 @@ /* it doesn't contain outlines. */ /* */ - FT_TRACE2(( "sfnt_load_face: %08p\n\n", face )); + FT_TRACE2(( "sfnt_load_face: %p\n\n", (void *)face )); /* do we have outlines in there? */ #ifdef FT_CONFIG_OPTION_INCREMENTAL diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.h b/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.h index 17b0d50105e..e8e30420830 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfobjs.h @@ -4,7 +4,7 @@ * * SFNT object management (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define SFOBJS_H_ -#include -#include FT_INTERNAL_SFNT_H -#include FT_INTERNAL_OBJECTS_H +#include +#include FT_BEGIN_HEADER @@ -53,7 +52,7 @@ FT_BEGIN_HEADER FT_END_HEADER -#endif /* SFDRIVER_H_ */ +#endif /* SFOBJS_H_ */ /* END */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.c b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.c new file mode 100644 index 00000000000..f0a32e1e065 --- /dev/null +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.c @@ -0,0 +1,437 @@ +/**************************************************************************** + * + * sfwoff.c + * + * WOFF format management (base). + * + * Copyright (C) 1996-2020 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include "sfwoff.h" +#include +#include +#include +#include + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is 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 Exit1; + if ( output_len != table->OrigLength ) + { + FT_ERROR(( "woff_font_open: compressed table length mismatch\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit1; + } + +#else /* !FT_CONFIG_OPTION_USE_ZLIB */ + + error = FT_THROW( Unimplemented_Feature ); + goto Exit1; + +#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; + + Exit1: + FT_FRAME_EXIT(); + goto Exit; + } + + +#undef WRITE_USHORT +#undef WRITE_ULONG + + +/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvmod.h b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.h similarity index 61% rename from sdk/lib/3rdparty/freetype/src/otvalid/otvmod.h rename to sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.h index 5539de7ec6e..d177ab11600 100644 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvmod.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff.h @@ -1,11 +1,10 @@ /**************************************************************************** * - * otvmod.h + * sfwoff.h * - * FreeType's OpenType validation module implementation - * (specification). + * WOFFF format management (specification). * - * Copyright (C) 2004-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,23 +16,25 @@ */ -#ifndef OTVMOD_H_ -#define OTVMOD_H_ +#ifndef SFWOFF_H_ +#define SFWOFF_H_ -#include -#include FT_MODULE_H +#include +#include FT_BEGIN_HEADER - FT_EXPORT_VAR( const FT_Module_Class ) otv_module_class; + FT_LOCAL( FT_Error ) + woff_open_font( FT_Stream stream, + TT_Face face ); FT_END_HEADER -#endif /* OTVMOD_H_ */ +#endif /* SFWOFF_H_ */ /* END */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.c b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.c new file mode 100644 index 00000000000..5c8202f8237 --- /dev/null +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.c @@ -0,0 +1,2337 @@ +/**************************************************************************** + * + * sfwoff2.c + * + * WOFF2 format management (base). + * + * Copyright (C) 2019-2020 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. + * + */ + +#include "sfwoff2.h" +#include "woff2tags.h" +#include +#include +#include + + +#ifdef FT_CONFIG_OPTION_USE_BROTLI + +#include + +#endif + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT sfwoff2 + + +#define READ_255USHORT( var ) FT_SET_ERROR( Read255UShort( stream, &var ) ) + +#define READ_BASE128( var ) FT_SET_ERROR( ReadBase128( stream, &var ) ) + + /* `var' should be FT_ULong */ +#define ROUND4( var ) ( ( var + 3 ) & ~3UL ) + +#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 ) + +#define WRITE_SHORT( p, v ) \ + do \ + { \ + *(p)++ = (FT_Byte)( (v) >> 8 ); \ + *(p)++ = (FT_Byte)( (v) >> 0 ); \ + \ + } while ( 0 ) + +#define WRITE_SFNT_BUF( buf, s ) \ + write_buf( &sfnt, sfnt_size, &dest_offset, buf, s, memory ) + +#define WRITE_SFNT_BUF_AT( offset, buf, s ) \ + write_buf( &sfnt, sfnt_size, &offset, buf, s, memory ) + +#define N_CONTOUR_STREAM 0 +#define N_POINTS_STREAM 1 +#define FLAG_STREAM 2 +#define GLYPH_STREAM 3 +#define COMPOSITE_STREAM 4 +#define BBOX_STREAM 5 +#define INSTRUCTION_STREAM 6 + + + static void + 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_tags( const void* a, + const void* b ) + { + WOFF2_Table table1 = *(WOFF2_Table*)a; + WOFF2_Table table2 = *(WOFF2_Table*)b; + + FT_ULong tag1 = table1->Tag; + FT_ULong tag2 = table2->Tag; + + + if ( tag1 > tag2 ) + return 1; + else if ( tag1 < tag2 ) + return -1; + else + return 0; + } + + + static FT_Error + Read255UShort( FT_Stream stream, + FT_UShort* value ) + { + const FT_Byte oneMoreByteCode1 = 255; + const FT_Byte oneMoreByteCode2 = 254; + const FT_Byte wordCode = 253; + const FT_UShort lowestUCode = 253; + + FT_Error error = FT_Err_Ok; + FT_Byte code; + FT_Byte result_byte = 0; + FT_UShort result_short = 0; + + + if ( FT_READ_BYTE( code ) ) + return error; + if ( code == wordCode ) + { + /* Read next two bytes and store `FT_UShort' value. */ + if ( FT_READ_USHORT( result_short ) ) + return error; + *value = result_short; + return FT_Err_Ok; + } + else if ( code == oneMoreByteCode1 ) + { + if ( FT_READ_BYTE( result_byte ) ) + return error; + *value = result_byte + lowestUCode; + return FT_Err_Ok; + } + else if ( code == oneMoreByteCode2 ) + { + if ( FT_READ_BYTE( result_byte ) ) + return error; + *value = result_byte + lowestUCode * 2; + return FT_Err_Ok; + } + else + { + *value = code; + return FT_Err_Ok; + } + } + + + static FT_Error + ReadBase128( FT_Stream stream, + FT_ULong* value ) + { + FT_ULong result = 0; + FT_Int i; + FT_Byte code; + FT_Error error = FT_Err_Ok; + + + for ( i = 0; i < 5; ++i ) + { + code = 0; + if ( FT_READ_BYTE( code ) ) + return error; + + /* Leading zeros are invalid. */ + if ( i == 0 && code == 0x80 ) + return FT_THROW( Invalid_Table ); + + /* If any of top seven bits are set then we're about to overflow. */ + if ( result & 0xfe000000 ) + return FT_THROW( Invalid_Table ); + + result = ( result << 7 ) | ( code & 0x7f ); + + /* Spin until most significant bit of data byte is false. */ + if ( ( code & 0x80 ) == 0 ) + { + *value = result; + return FT_Err_Ok; + } + } + + /* Make sure not to exceed the size bound. */ + return FT_THROW( Invalid_Table ); + } + + + /* Extend memory of `dst_bytes' buffer and copy data from `src'. */ + static FT_Error + write_buf( FT_Byte** dst_bytes, + FT_ULong* dst_size, + FT_ULong* offset, + FT_Byte* src, + FT_ULong size, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + /* We are reallocating memory for `dst', so its pointer may change. */ + FT_Byte* dst = *dst_bytes; + + + /* Check whether we are within limits. */ + if ( ( *offset + size ) > WOFF2_DEFAULT_MAX_SIZE ) + return FT_THROW( Array_Too_Large ); + + /* Reallocate `dst'. */ + if ( ( *offset + size ) > *dst_size ) + { + FT_TRACE6(( "Reallocating %lu to %lu.\n", + *dst_size, (*offset + size) )); + if ( FT_REALLOC( dst, + (FT_ULong)( *dst_size ), + (FT_ULong)( *offset + size ) ) ) + goto Exit; + + *dst_size = *offset + size; + } + + /* Copy data. */ + ft_memcpy( dst + *offset, src, size ); + + *offset += size; + /* Set pointer of `dst' to its correct value. */ + *dst_bytes = dst; + + Exit: + return error; + } + + + /* Pad buffer to closest multiple of 4. */ + static FT_Error + pad4( FT_Byte** sfnt_bytes, + FT_ULong* sfnt_size, + FT_ULong* out_offset, + FT_Memory memory ) + { + FT_Byte* sfnt = *sfnt_bytes; + FT_ULong dest_offset = *out_offset; + + FT_Byte zeroes[] = { 0, 0, 0 }; + FT_ULong pad_bytes; + + + if ( dest_offset + 3 < dest_offset ) + return FT_THROW( Invalid_Table ); + + pad_bytes = ROUND4( dest_offset ) - dest_offset; + if ( pad_bytes > 0 ) + { + if ( WRITE_SFNT_BUF( &zeroes[0], pad_bytes ) ) + return FT_THROW( Invalid_Table ); + } + + *sfnt_bytes = sfnt; + *out_offset = dest_offset; + return FT_Err_Ok; + } + + + /* Calculate table checksum of `buf'. */ + static FT_ULong + compute_ULong_sum( FT_Byte* buf, + FT_ULong size ) + { + FT_ULong checksum = 0; + FT_ULong aligned_size = size & ~3UL; + FT_ULong i; + FT_ULong v; + + + for ( i = 0; i < aligned_size; i += 4 ) + checksum += ( (FT_ULong)buf[i ] << 24 ) | + ( (FT_ULong)buf[i + 1] << 16 ) | + ( (FT_ULong)buf[i + 2] << 8 ) | + ( (FT_ULong)buf[i + 3] << 0 ); + + /* If size is not aligned to 4, treat as if it is padded with 0s. */ + if ( size != aligned_size ) + { + v = 0; + for ( i = aligned_size ; i < size; ++i ) + v |= (FT_ULong)buf[i] << ( 24 - 8 * ( i & 3 ) ); + checksum += v; + } + + return checksum; + } + + + static FT_Error + woff2_decompress( FT_Byte* dst, + FT_ULong dst_size, + const FT_Byte* src, + FT_ULong src_size ) + { +#ifdef FT_CONFIG_OPTION_USE_BROTLI + + /* this cast is only of importance on 32bit systems; */ + /* we don't validate it */ + FT_Offset uncompressed_size = (FT_Offset)dst_size; + BrotliDecoderResult result; + + + result = BrotliDecoderDecompress( src_size, + src, + &uncompressed_size, + dst ); + + if ( result != BROTLI_DECODER_RESULT_SUCCESS || + uncompressed_size != dst_size ) + { + FT_ERROR(( "woff2_decompress: Stream length mismatch.\n" )); + return FT_THROW( Invalid_Table ); + } + + FT_TRACE2(( "woff2_decompress: Brotli stream decompressed.\n" )); + return FT_Err_Ok; + +#else /* !FT_CONFIG_OPTION_USE_BROTLI */ + + FT_ERROR(( "woff2_decompress: Brotli support not available.\n" )); + return FT_THROW( Unimplemented_Feature ); + +#endif /* !FT_CONFIG_OPTION_USE_BROTLI */ + } + + + static WOFF2_Table + find_table( WOFF2_Table* tables, + FT_UShort num_tables, + FT_ULong tag ) + { + FT_Int i; + + + for ( i = 0; i < num_tables; i++ ) + { + if ( tables[i]->Tag == tag ) + return tables[i]; + } + return NULL; + } + + + /* Read `numberOfHMetrics' field from `hhea' table. */ + static FT_Error + read_num_hmetrics( FT_Stream stream, + FT_UShort* num_hmetrics ) + { + FT_Error error = FT_Err_Ok; + FT_UShort num_metrics; + + + if ( FT_STREAM_SKIP( 34 ) ) + return FT_THROW( Invalid_Table ); + + if ( FT_READ_USHORT( num_metrics ) ) + return FT_THROW( Invalid_Table ); + + *num_hmetrics = num_metrics; + + return error; + } + + + /* An auxiliary function for overflow-safe addition. */ + static FT_Int + with_sign( FT_Byte flag, + FT_Int base_val ) + { + /* Precondition: 0 <= base_val < 65536 (to avoid overflow). */ + return ( flag & 1 ) ? base_val : -base_val; + } + + + /* An auxiliary function for overflow-safe addition. */ + static FT_Int + safe_int_addition( FT_Int a, + FT_Int b, + FT_Int* result ) + { + if ( ( ( a > 0 ) && ( b > FT_INT_MAX - a ) ) || + ( ( a < 0 ) && ( b < FT_INT_MIN - a ) ) ) + return FT_THROW( Invalid_Table ); + + *result = a + b; + return FT_Err_Ok; + } + + + /* + * Decode variable-length (flag, xCoordinate, yCoordinate) triplet for a + * simple glyph. See + * + * https://www.w3.org/TR/WOFF2/#triplet_decoding + */ + static FT_Error + triplet_decode( const FT_Byte* flags_in, + const FT_Byte* in, + FT_ULong in_size, + FT_ULong n_points, + WOFF2_Point result, + FT_ULong* in_bytes_used ) + { + FT_Int x = 0; + FT_Int y = 0; + FT_Int dx; + FT_Int dy; + FT_Int b0, b1, b2; + + FT_ULong triplet_index = 0; + FT_ULong data_bytes; + + FT_UInt i; + + + if ( n_points > in_size ) + return FT_THROW( Invalid_Table ); + + for ( i = 0; i < n_points; ++i ) + { + FT_Byte flag = flags_in[i]; + FT_Bool on_curve = !( flag >> 7 ); + + + flag &= 0x7f; + if ( flag < 84 ) + data_bytes = 1; + else if ( flag < 120 ) + data_bytes = 2; + else if ( flag < 124 ) + data_bytes = 3; + else + data_bytes = 4; + + /* Overflow checks */ + if ( triplet_index + data_bytes > in_size || + triplet_index + data_bytes < triplet_index ) + return FT_THROW( Invalid_Table ); + + if ( flag < 10 ) + { + dx = 0; + dy = with_sign( flag, + ( ( flag & 14 ) << 7 ) + in[triplet_index] ); + } + else if ( flag < 20 ) + { + dx = with_sign( flag, + ( ( ( flag - 10 ) & 14 ) << 7 ) + + in[triplet_index] ); + dy = 0; + } + else if ( flag < 84 ) + { + b0 = flag - 20; + b1 = in[triplet_index]; + dx = with_sign( flag, + 1 + ( b0 & 0x30 ) + ( b1 >> 4 ) ); + dy = with_sign( flag >> 1, + 1 + ( ( b0 & 0x0c ) << 2 ) + ( b1 & 0x0f ) ); + } + else if ( flag < 120 ) + { + b0 = flag - 84; + dx = with_sign( flag, + 1 + ( ( b0 / 12 ) << 8 ) + in[triplet_index] ); + dy = with_sign( flag >> 1, + 1 + ( ( ( b0 % 12 ) >> 2 ) << 8 ) + + in[triplet_index + 1] ); + } + else if ( flag < 124 ) + { + b2 = in[triplet_index + 1]; + dx = with_sign( flag, + ( in[triplet_index] << 4 ) + ( b2 >> 4 ) ); + dy = with_sign( flag >> 1, + ( ( b2 & 0x0f ) << 8 ) + in[triplet_index + 2] ); + } + else + { + dx = with_sign( flag, + ( in[triplet_index] << 8 ) + + in[triplet_index + 1] ); + dy = with_sign( flag >> 1, + ( in[triplet_index + 2] << 8 ) + + in[triplet_index + 3] ); + } + + triplet_index += data_bytes; + + if ( safe_int_addition( x, dx, &x ) ) + return FT_THROW( Invalid_Table ); + + if ( safe_int_addition( y, dy, &y ) ) + return FT_THROW( Invalid_Table ); + + result[i].x = x; + result[i].y = y; + result[i].on_curve = on_curve; + } + + *in_bytes_used = triplet_index; + return FT_Err_Ok; + } + + + /* Store decoded points in glyph buffer. */ + static FT_Error + store_points( FT_ULong n_points, + const WOFF2_Point points, + FT_UShort n_contours, + FT_UShort instruction_len, + FT_Byte* dst, + FT_ULong dst_size, + FT_ULong* glyph_size ) + { + FT_UInt flag_offset = 10 + ( 2 * n_contours ) + 2 + instruction_len; + FT_Byte last_flag = 0xFFU; + FT_Byte repeat_count = 0; + FT_Int last_x = 0; + FT_Int last_y = 0; + FT_UInt x_bytes = 0; + FT_UInt y_bytes = 0; + FT_UInt xy_bytes; + FT_UInt i; + FT_UInt x_offset; + FT_UInt y_offset; + FT_Byte* pointer; + + + for ( i = 0; i < n_points; ++i ) + { + const WOFF2_PointRec point = points[i]; + + FT_Byte flag = point.on_curve ? GLYF_ON_CURVE : 0; + FT_Int dx = point.x - last_x; + FT_Int dy = point.y - last_y; + + + if ( dx == 0 ) + flag |= GLYF_THIS_X_IS_SAME; + else if ( dx > -256 && dx < 256 ) + { + flag |= GLYF_X_SHORT | ( dx > 0 ? GLYF_THIS_X_IS_SAME : 0 ); + x_bytes += 1; + } + else + x_bytes += 2; + + if ( dy == 0 ) + flag |= GLYF_THIS_Y_IS_SAME; + else if ( dy > -256 && dy < 256 ) + { + flag |= GLYF_Y_SHORT | ( dy > 0 ? GLYF_THIS_Y_IS_SAME : 0 ); + y_bytes += 1; + } + else + y_bytes += 2; + + if ( flag == last_flag && repeat_count != 255 ) + { + dst[flag_offset - 1] |= GLYF_REPEAT; + repeat_count++; + } + else + { + if ( repeat_count != 0 ) + { + if ( flag_offset >= dst_size ) + return FT_THROW( Invalid_Table ); + + dst[flag_offset++] = repeat_count; + } + if ( flag_offset >= dst_size ) + return FT_THROW( Invalid_Table ); + + dst[flag_offset++] = flag; + repeat_count = 0; + } + + last_x = point.x; + last_y = point.y; + last_flag = flag; + } + + if ( repeat_count != 0 ) + { + if ( flag_offset >= dst_size ) + return FT_THROW( Invalid_Table ); + + dst[flag_offset++] = repeat_count; + } + + xy_bytes = x_bytes + y_bytes; + if ( xy_bytes < x_bytes || + flag_offset + xy_bytes < flag_offset || + flag_offset + xy_bytes > dst_size ) + return FT_THROW( Invalid_Table ); + + x_offset = flag_offset; + y_offset = flag_offset + x_bytes; + last_x = 0; + last_y = 0; + + for ( i = 0; i < n_points; ++i ) + { + FT_Int dx = points[i].x - last_x; + FT_Int dy = points[i].y - last_y; + + + if ( dx == 0 ) + ; + else if ( dx > -256 && dx < 256 ) + dst[x_offset++] = (FT_Byte)FT_ABS( dx ); + else + { + pointer = dst + x_offset; + WRITE_SHORT( pointer, dx ); + x_offset += 2; + } + + last_x += dx; + + if ( dy == 0 ) + ; + else if ( dy > -256 && dy < 256 ) + dst[y_offset++] = (FT_Byte)FT_ABS( dy ); + else + { + pointer = dst + y_offset; + WRITE_SHORT( pointer, dy ); + y_offset += 2; + } + + last_y += dy; + } + + *glyph_size = y_offset; + return FT_Err_Ok; + } + + + static void + compute_bbox( FT_ULong n_points, + const WOFF2_Point points, + FT_Byte* dst, + FT_UShort* src_x_min ) + { + FT_Int x_min = 0; + FT_Int y_min = 0; + FT_Int x_max = 0; + FT_Int y_max = 0; + + FT_UInt i; + + FT_ULong offset; + FT_Byte* pointer; + + + if ( n_points > 0 ) + { + x_min = points[0].x; + y_min = points[0].y; + x_max = points[0].x; + y_max = points[0].y; + } + + for ( i = 1; i < n_points; ++i ) + { + FT_Int x = points[i].x; + FT_Int y = points[i].y; + + + x_min = FT_MIN( x, x_min ); + y_min = FT_MIN( y, y_min ); + x_max = FT_MAX( x, x_max ); + y_max = FT_MAX( y, y_max ); + } + + /* Write values to `glyf' record. */ + offset = 2; + pointer = dst + offset; + + WRITE_SHORT( pointer, x_min ); + WRITE_SHORT( pointer, y_min ); + WRITE_SHORT( pointer, x_max ); + WRITE_SHORT( pointer, y_max ); + + *src_x_min = (FT_UShort)x_min; + } + + + static FT_Error + compositeGlyph_size( FT_Stream stream, + FT_ULong offset, + FT_ULong* size, + FT_Bool* have_instructions ) + { + FT_Error error = FT_Err_Ok; + FT_ULong start_offset = offset; + FT_Bool we_have_inst = FALSE; + FT_UShort flags = FLAG_MORE_COMPONENTS; + + + if ( FT_STREAM_SEEK( start_offset ) ) + goto Exit; + while ( flags & FLAG_MORE_COMPONENTS ) + { + FT_ULong arg_size; + + + if ( FT_READ_USHORT( flags ) ) + goto Exit; + we_have_inst |= ( flags & FLAG_WE_HAVE_INSTRUCTIONS ) != 0; + /* glyph index */ + arg_size = 2; + if ( flags & FLAG_ARG_1_AND_2_ARE_WORDS ) + arg_size += 4; + else + arg_size += 2; + + if ( flags & FLAG_WE_HAVE_A_SCALE ) + arg_size += 2; + else if ( flags & FLAG_WE_HAVE_AN_X_AND_Y_SCALE ) + arg_size += 4; + else if ( flags & FLAG_WE_HAVE_A_TWO_BY_TWO ) + arg_size += 8; + + if ( FT_STREAM_SKIP( arg_size ) ) + goto Exit; + } + + *size = FT_STREAM_POS() - start_offset; + *have_instructions = we_have_inst; + + Exit: + return error; + } + + + /* Store loca values (provided by `reconstruct_glyf') to output stream. */ + static FT_Error + store_loca( FT_ULong* loca_values, + FT_ULong loca_values_size, + FT_UShort index_format, + FT_ULong* checksum, + FT_Byte** sfnt_bytes, + FT_ULong* sfnt_size, + FT_ULong* out_offset, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + FT_Byte* sfnt = *sfnt_bytes; + FT_ULong dest_offset = *out_offset; + + FT_Byte* loca_buf = NULL; + FT_Byte* dst = NULL; + + FT_UInt i = 0; + FT_ULong loca_buf_size; + + const FT_ULong offset_size = index_format ? 4 : 2; + + + if ( ( loca_values_size << 2 ) >> 2 != loca_values_size ) + goto Fail; + + loca_buf_size = loca_values_size * offset_size; + if ( FT_NEW_ARRAY( loca_buf, loca_buf_size ) ) + goto Fail; + + dst = loca_buf; + for ( i = 0; i < loca_values_size; i++ ) + { + FT_ULong value = loca_values[i]; + + + if ( index_format ) + WRITE_ULONG( dst, value ); + else + WRITE_USHORT( dst, ( value >> 1 ) ); + } + + *checksum = compute_ULong_sum( loca_buf, loca_buf_size ); + /* Write `loca' table to sfnt buffer. */ + if ( WRITE_SFNT_BUF( loca_buf, loca_buf_size ) ) + goto Fail; + + /* Set pointer `sfnt_bytes' to its correct value. */ + *sfnt_bytes = sfnt; + *out_offset = dest_offset; + + FT_FREE( loca_buf ); + return error; + + Fail: + if ( !error ) + error = FT_THROW( Invalid_Table ); + + FT_FREE( loca_buf ); + + return error; + } + + + static FT_Error + reconstruct_glyf( FT_Stream stream, + FT_ULong* glyf_checksum, + FT_ULong* loca_checksum, + FT_Byte** sfnt_bytes, + FT_ULong* sfnt_size, + FT_ULong* out_offset, + WOFF2_Info info, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + FT_Byte* sfnt = *sfnt_bytes; + + /* current position in stream */ + const FT_ULong pos = FT_STREAM_POS(); + + FT_UInt num_substreams = 7; + + FT_UShort num_glyphs; + FT_UShort index_format; + FT_ULong expected_loca_length; + FT_UInt offset; + FT_UInt i; + FT_ULong points_size; + FT_ULong bitmap_length; + FT_ULong glyph_buf_size; + FT_ULong bbox_bitmap_offset; + + const FT_ULong glyf_start = *out_offset; + FT_ULong dest_offset = *out_offset; + + WOFF2_Substream substreams = NULL; + + FT_ULong* loca_values = NULL; + FT_UShort* n_points_arr = NULL; + FT_Byte* glyph_buf = NULL; + WOFF2_Point points = NULL; + + + if ( FT_NEW_ARRAY( substreams, num_substreams ) ) + goto Fail; + + if ( FT_STREAM_SKIP( 4 ) ) + goto Fail; + if ( FT_READ_USHORT( num_glyphs ) ) + goto Fail; + if ( FT_READ_USHORT( index_format ) ) + goto Fail; + + FT_TRACE4(( "num_glyphs = %u; index_format = %u\n", + num_glyphs, index_format )); + + info->num_glyphs = num_glyphs; + + /* Calculate expected length of loca and compare. */ + /* See https://www.w3.org/TR/WOFF2/#conform-mustRejectLoca */ + /* index_format = 0 => Short version `loca'. */ + /* index_format = 1 => Long version `loca'. */ + expected_loca_length = ( index_format ? 4 : 2 ) * + ( (FT_ULong)num_glyphs + 1 ); + if ( info->loca_table->dst_length != expected_loca_length ) + goto Fail; + + offset = ( 2 + num_substreams ) * 4; + if ( offset > info->glyf_table->TransformLength ) + goto Fail; + + for ( i = 0; i < num_substreams; ++i ) + { + FT_ULong substream_size; + + + if ( FT_READ_ULONG( substream_size ) ) + goto Fail; + if ( substream_size > info->glyf_table->TransformLength - offset ) + goto Fail; + + substreams[i].start = pos + offset; + substreams[i].offset = pos + offset; + substreams[i].size = substream_size; + + FT_TRACE5(( " Substream %d: offset = %lu; size = %lu;\n", + i, substreams[i].offset, substreams[i].size )); + offset += substream_size; + } + + if ( FT_NEW_ARRAY( loca_values, num_glyphs + 1 ) ) + goto Fail; + + points_size = 0; + bbox_bitmap_offset = substreams[BBOX_STREAM].offset; + + /* Size of bboxBitmap = 4 * floor((numGlyphs + 31) / 32) */ + bitmap_length = ( ( num_glyphs + 31U ) >> 5 ) << 2; + substreams[BBOX_STREAM].offset += bitmap_length; + + glyph_buf_size = WOFF2_DEFAULT_GLYPH_BUF; + if ( FT_NEW_ARRAY( glyph_buf, glyph_buf_size ) ) + goto Fail; + + if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) ) + goto Fail; + + for ( i = 0; i < num_glyphs; ++i ) + { + FT_ULong glyph_size = 0; + FT_UShort n_contours = 0; + FT_Bool have_bbox = FALSE; + FT_Byte bbox_bitmap; + FT_ULong bbox_offset; + FT_UShort x_min = 0; + + + /* Set `have_bbox'. */ + bbox_offset = bbox_bitmap_offset + ( i >> 3 ); + if ( FT_STREAM_SEEK( bbox_offset ) || + FT_READ_BYTE( bbox_bitmap ) ) + goto Fail; + if ( bbox_bitmap & ( 0x80 >> ( i & 7 ) ) ) + have_bbox = TRUE; + + /* Read value from `nContourStream'. */ + if ( FT_STREAM_SEEK( substreams[N_CONTOUR_STREAM].offset ) || + FT_READ_USHORT( n_contours ) ) + goto Fail; + substreams[N_CONTOUR_STREAM].offset += 2; + + if ( n_contours == 0xffff ) + { + /* composite glyph */ + FT_Bool have_instructions = FALSE; + FT_UShort instruction_size = 0; + FT_ULong composite_size; + FT_ULong size_needed; + FT_Byte* pointer = NULL; + + + /* Composite glyphs must have explicit bbox. */ + if ( !have_bbox ) + goto Fail; + + if ( compositeGlyph_size( stream, + substreams[COMPOSITE_STREAM].offset, + &composite_size, + &have_instructions) ) + goto Fail; + + if ( have_instructions ) + { + if ( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) || + READ_255USHORT( instruction_size ) ) + goto Fail; + substreams[GLYPH_STREAM].offset = FT_STREAM_POS(); + } + + size_needed = 12 + composite_size + instruction_size; + if ( glyph_buf_size < size_needed ) + { + if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) ) + goto Fail; + glyph_buf_size = size_needed; + } + + pointer = glyph_buf + glyph_size; + WRITE_USHORT( pointer, n_contours ); + glyph_size += 2; + + /* Read x_min for current glyph. */ + if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) || + FT_READ_USHORT( x_min ) ) + goto Fail; + /* No increment here because we read again. */ + + if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) || + FT_STREAM_READ( glyph_buf + glyph_size, 8 ) ) + goto Fail; + + substreams[BBOX_STREAM].offset += 8; + glyph_size += 8; + + if ( FT_STREAM_SEEK( substreams[COMPOSITE_STREAM].offset ) || + FT_STREAM_READ( glyph_buf + glyph_size, composite_size ) ) + goto Fail; + + substreams[COMPOSITE_STREAM].offset += composite_size; + glyph_size += composite_size; + + if ( have_instructions ) + { + pointer = glyph_buf + glyph_size; + WRITE_USHORT( pointer, instruction_size ); + glyph_size += 2; + + if ( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) || + FT_STREAM_READ( glyph_buf + glyph_size, instruction_size ) ) + goto Fail; + + substreams[INSTRUCTION_STREAM].offset += instruction_size; + glyph_size += instruction_size; + } + } + else if ( n_contours > 0 ) + { + /* simple glyph */ + FT_ULong total_n_points = 0; + FT_UShort n_points_contour; + FT_UInt j; + FT_ULong flag_size; + FT_ULong triplet_size; + FT_ULong triplet_bytes_used; + FT_Byte* flags_buf = NULL; + FT_Byte* triplet_buf = NULL; + FT_UShort instruction_size; + FT_ULong size_needed; + FT_Int end_point; + FT_UInt contour_ix; + + FT_Byte* pointer = NULL; + + + if ( FT_NEW_ARRAY( n_points_arr, n_contours ) ) + goto Fail; + + if ( FT_STREAM_SEEK( substreams[N_POINTS_STREAM].offset ) ) + goto Fail; + + for ( j = 0; j < n_contours; ++j ) + { + if ( READ_255USHORT( n_points_contour ) ) + goto Fail; + n_points_arr[j] = n_points_contour; + /* Prevent negative/overflow. */ + if ( total_n_points + n_points_contour < total_n_points ) + goto Fail; + total_n_points += n_points_contour; + } + substreams[N_POINTS_STREAM].offset = FT_STREAM_POS(); + + flag_size = total_n_points; + if ( flag_size > substreams[FLAG_STREAM].size ) + goto Fail; + + flags_buf = stream->base + substreams[FLAG_STREAM].offset; + triplet_buf = stream->base + substreams[GLYPH_STREAM].offset; + + if ( substreams[GLYPH_STREAM].size < + ( substreams[GLYPH_STREAM].offset - + substreams[GLYPH_STREAM].start ) ) + goto Fail; + + triplet_size = substreams[GLYPH_STREAM].size - + ( substreams[GLYPH_STREAM].offset - + substreams[GLYPH_STREAM].start ); + triplet_bytes_used = 0; + + /* Create array to store point information. */ + points_size = total_n_points; + if ( FT_NEW_ARRAY( points, points_size ) ) + goto Fail; + + if ( triplet_decode( flags_buf, + triplet_buf, + triplet_size, + total_n_points, + points, + &triplet_bytes_used ) ) + goto Fail; + + substreams[FLAG_STREAM].offset += flag_size; + substreams[GLYPH_STREAM].offset += triplet_bytes_used; + + if ( FT_STREAM_SEEK( substreams[GLYPH_STREAM].offset ) || + READ_255USHORT( instruction_size ) ) + goto Fail; + + substreams[GLYPH_STREAM].offset = FT_STREAM_POS(); + + if ( total_n_points >= ( 1 << 27 ) ) + goto Fail; + + size_needed = 12 + + ( 2 * n_contours ) + + ( 5 * total_n_points ) + + instruction_size; + if ( glyph_buf_size < size_needed ) + { + if ( FT_RENEW_ARRAY( glyph_buf, glyph_buf_size, size_needed ) ) + goto Fail; + glyph_buf_size = size_needed; + } + + pointer = glyph_buf + glyph_size; + WRITE_USHORT( pointer, n_contours ); + glyph_size += 2; + + if ( have_bbox ) + { + /* Read x_min for current glyph. */ + if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) || + FT_READ_USHORT( x_min ) ) + goto Fail; + /* No increment here because we read again. */ + + if ( FT_STREAM_SEEK( substreams[BBOX_STREAM].offset ) || + FT_STREAM_READ( glyph_buf + glyph_size, 8 ) ) + goto Fail; + substreams[BBOX_STREAM].offset += 8; + } + else + compute_bbox( total_n_points, points, glyph_buf, &x_min ); + + glyph_size = CONTOUR_OFFSET_END_POINT; + + pointer = glyph_buf + glyph_size; + end_point = -1; + + for ( contour_ix = 0; contour_ix < n_contours; ++contour_ix ) + { + end_point += n_points_arr[contour_ix]; + if ( end_point >= 65536 ) + goto Fail; + + WRITE_SHORT( pointer, end_point ); + glyph_size += 2; + } + + WRITE_USHORT( pointer, instruction_size ); + glyph_size += 2; + + if ( FT_STREAM_SEEK( substreams[INSTRUCTION_STREAM].offset ) || + FT_STREAM_READ( glyph_buf + glyph_size, instruction_size ) ) + goto Fail; + + substreams[INSTRUCTION_STREAM].offset += instruction_size; + glyph_size += instruction_size; + + if ( store_points( total_n_points, + points, + n_contours, + instruction_size, + glyph_buf, + glyph_buf_size, + &glyph_size ) ) + goto Fail; + + FT_FREE( points ); + FT_FREE( n_points_arr ); + } + else + { + /* Empty glyph. */ + /* Must not have a bbox. */ + if ( have_bbox ) + { + FT_ERROR(( "Empty glyph has a bbox.\n" )); + goto Fail; + } + } + + loca_values[i] = dest_offset - glyf_start; + + if ( WRITE_SFNT_BUF( glyph_buf, glyph_size ) ) + goto Fail; + + if ( pad4( &sfnt, sfnt_size, &dest_offset, memory ) ) + goto Fail; + + *glyf_checksum += compute_ULong_sum( glyph_buf, glyph_size ); + + /* Store x_mins, may be required to reconstruct `hmtx'. */ + if ( n_contours > 0 ) + info->x_mins[i] = (FT_Short)x_min; + } + + info->glyf_table->dst_length = dest_offset - info->glyf_table->dst_offset; + info->loca_table->dst_offset = dest_offset; + + /* `loca[n]' will be equal to the length of the `glyf' table. */ + loca_values[num_glyphs] = info->glyf_table->dst_length; + + if ( store_loca( loca_values, + num_glyphs + 1, + index_format, + loca_checksum, + &sfnt, + sfnt_size, + &dest_offset, + memory ) ) + goto Fail; + + info->loca_table->dst_length = dest_offset - info->loca_table->dst_offset; + + FT_TRACE4(( " loca table info:\n" )); + FT_TRACE4(( " dst_offset = %lu\n", info->loca_table->dst_offset )); + FT_TRACE4(( " dst_length = %lu\n", info->loca_table->dst_length )); + FT_TRACE4(( " checksum = %09lx\n", *loca_checksum )); + + /* Set pointer `sfnt_bytes' to its correct value. */ + *sfnt_bytes = sfnt; + *out_offset = dest_offset; + + FT_FREE( substreams ); + FT_FREE( loca_values ); + FT_FREE( n_points_arr ); + FT_FREE( glyph_buf ); + FT_FREE( points ); + + return error; + + Fail: + if ( !error ) + error = FT_THROW( Invalid_Table ); + + /* Set pointer `sfnt_bytes' to its correct value. */ + *sfnt_bytes = sfnt; + + FT_FREE( substreams ); + FT_FREE( loca_values ); + FT_FREE( n_points_arr ); + FT_FREE( glyph_buf ); + FT_FREE( points ); + + return error; + } + + + /* Get `x_mins' for untransformed `glyf' table. */ + static FT_Error + get_x_mins( FT_Stream stream, + WOFF2_Table* tables, + FT_UShort num_tables, + WOFF2_Info info, + FT_Memory memory ) + { + FT_UShort num_glyphs; + FT_UShort index_format; + FT_ULong glyf_offset; + FT_UShort glyf_offset_short; + FT_ULong loca_offset; + FT_Int i; + FT_Error error = FT_Err_Ok; + FT_ULong offset_size; + + /* At this point of time those tables might not have been read yet. */ + const WOFF2_Table maxp_table = find_table( tables, num_tables, + TTAG_maxp ); + const WOFF2_Table head_table = find_table( tables, num_tables, + TTAG_head ); + + + if ( !maxp_table ) + { + FT_ERROR(( "`maxp' table is missing.\n" )); + return FT_THROW( Invalid_Table ); + } + + if ( !head_table ) + { + FT_ERROR(( "`head' table is missing.\n" )); + return FT_THROW( Invalid_Table ); + } + + if ( !info->loca_table ) + { + FT_ERROR(( "`loca' table is missing.\n" )); + return FT_THROW( Invalid_Table ); + } + + /* Read `numGlyphs' field from `maxp' table. */ + if ( FT_STREAM_SEEK( maxp_table->src_offset ) || FT_STREAM_SKIP( 8 ) ) + return error; + + if ( FT_READ_USHORT( num_glyphs ) ) + return error; + + info->num_glyphs = num_glyphs; + + /* Read `indexToLocFormat' field from `head' table. */ + if ( FT_STREAM_SEEK( head_table->src_offset ) || + FT_STREAM_SKIP( 50 ) ) + return error; + + if ( FT_READ_USHORT( index_format ) ) + return error; + + offset_size = index_format ? 4 : 2; + + /* Create `x_mins' array. */ + if ( FT_NEW_ARRAY( info->x_mins, num_glyphs ) ) + return error; + + loca_offset = info->loca_table->src_offset; + + for ( i = 0; i < num_glyphs; ++i ) + { + if ( FT_STREAM_SEEK( loca_offset ) ) + return error; + + loca_offset += offset_size; + + if ( index_format ) + { + if ( FT_READ_ULONG( glyf_offset ) ) + return error; + } + else + { + if ( FT_READ_USHORT( glyf_offset_short ) ) + return error; + + glyf_offset = (FT_ULong)( glyf_offset_short ); + glyf_offset = glyf_offset << 1; + } + + glyf_offset += info->glyf_table->src_offset; + + if ( FT_STREAM_SEEK( glyf_offset ) || FT_STREAM_SKIP( 2 ) ) + return error; + + if ( FT_READ_SHORT( info->x_mins[i] ) ) + return error; + } + + return error; + } + + + static FT_Error + reconstruct_hmtx( FT_Stream stream, + FT_UShort num_glyphs, + FT_UShort num_hmetrics, + FT_Short* x_mins, + FT_ULong* checksum, + FT_Byte** sfnt_bytes, + FT_ULong* sfnt_size, + FT_ULong* out_offset, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + FT_Byte* sfnt = *sfnt_bytes; + FT_ULong dest_offset = *out_offset; + + FT_Byte hmtx_flags; + FT_Bool has_proportional_lsbs, has_monospace_lsbs; + FT_ULong hmtx_table_size; + FT_Int i; + + FT_UShort* advance_widths = NULL; + FT_Short* lsbs = NULL; + FT_Byte* hmtx_table = NULL; + FT_Byte* dst = NULL; + + + if ( FT_READ_BYTE( hmtx_flags ) ) + goto Fail; + + has_proportional_lsbs = ( hmtx_flags & 1 ) == 0; + has_monospace_lsbs = ( hmtx_flags & 2 ) == 0; + + /* Bits 2-7 are reserved and MUST be zero. */ + if ( ( hmtx_flags & 0xFC ) != 0 ) + goto Fail; + + /* Are you REALLY transformed? */ + if ( has_proportional_lsbs && has_monospace_lsbs ) + goto Fail; + + /* Cannot have a transformed `hmtx' without `glyf'. */ + if ( ( num_hmetrics > num_glyphs ) || + ( num_hmetrics < 1 ) ) + goto Fail; + + /* Must have at least one entry. */ + if ( num_hmetrics < 1 ) + goto Fail; + + if ( FT_NEW_ARRAY( advance_widths, num_hmetrics ) || + FT_NEW_ARRAY( lsbs, num_glyphs ) ) + goto Fail; + + /* Read `advanceWidth' stream. Always present. */ + for ( i = 0; i < num_hmetrics; i++ ) + { + FT_UShort advance_width; + + + if ( FT_READ_USHORT( advance_width ) ) + goto Fail; + + advance_widths[i] = advance_width; + } + + /* lsb values for proportional glyphs. */ + for ( i = 0; i < num_hmetrics; i++ ) + { + FT_Short lsb; + + + if ( has_proportional_lsbs ) + { + if ( FT_READ_SHORT( lsb ) ) + goto Fail; + } + else + lsb = x_mins[i]; + + lsbs[i] = lsb; + } + + /* lsb values for monospaced glyphs. */ + for ( i = num_hmetrics; i < num_glyphs; i++ ) + { + FT_Short lsb; + + + if ( has_monospace_lsbs ) + { + if ( FT_READ_SHORT( lsb ) ) + goto Fail; + } + else + lsb = x_mins[i]; + + lsbs[i] = lsb; + } + + /* Build the hmtx table. */ + hmtx_table_size = 2 * num_hmetrics + 2 * num_glyphs; + if ( FT_NEW_ARRAY( hmtx_table, hmtx_table_size ) ) + goto Fail; + + dst = hmtx_table; + FT_TRACE6(( "hmtx values: \n" )); + for ( i = 0; i < num_glyphs; i++ ) + { + if ( i < num_hmetrics ) + { + WRITE_SHORT( dst, advance_widths[i] ); + FT_TRACE6(( "%d ", advance_widths[i] )); + } + + WRITE_SHORT( dst, lsbs[i] ); + FT_TRACE6(( "%d ", lsbs[i] )); + } + FT_TRACE6(( "\n" )); + + *checksum = compute_ULong_sum( hmtx_table, hmtx_table_size ); + /* Write `hmtx' table to sfnt buffer. */ + if ( WRITE_SFNT_BUF( hmtx_table, hmtx_table_size ) ) + goto Fail; + + /* Set pointer `sfnt_bytes' to its correct value. */ + *sfnt_bytes = sfnt; + *out_offset = dest_offset; + + FT_FREE( advance_widths ); + FT_FREE( lsbs ); + FT_FREE( hmtx_table ); + + return error; + + Fail: + FT_FREE( advance_widths ); + FT_FREE( lsbs ); + FT_FREE( hmtx_table ); + + if ( !error ) + error = FT_THROW( Invalid_Table ); + + return error; + } + + + static FT_Error + reconstruct_font( FT_Byte* transformed_buf, + FT_ULong transformed_buf_size, + WOFF2_Table* indices, + WOFF2_Header woff2, + WOFF2_Info info, + FT_Byte** sfnt_bytes, + FT_ULong* sfnt_size, + FT_Memory memory ) + { + /* Memory management of `transformed_buf' is handled by the caller. */ + + FT_Error error = FT_Err_Ok; + FT_Stream stream = NULL; + FT_Byte* buf_cursor = NULL; + FT_Byte* table_entry = NULL; + + /* We are reallocating memory for `sfnt', so its pointer may change. */ + FT_Byte* sfnt = *sfnt_bytes; + + FT_UShort num_tables = woff2->num_tables; + FT_ULong dest_offset = 12 + num_tables * 16UL; + + FT_ULong checksum = 0; + FT_ULong loca_checksum = 0; + FT_Int nn = 0; + FT_UShort num_hmetrics = 0; + FT_ULong font_checksum = info->header_checksum; + FT_Bool is_glyf_xform = FALSE; + + FT_ULong table_entry_offset = 12; + + + /* A few table checks before reconstruction. */ + /* `glyf' must be present with `loca'. */ + info->glyf_table = find_table( indices, num_tables, TTAG_glyf ); + info->loca_table = find_table( indices, num_tables, TTAG_loca ); + + if ( ( info->glyf_table == NULL ) ^ ( info->loca_table == NULL ) ) + { + FT_ERROR(( "One of `glyf'/`loca' tables missing.\n" )); + return FT_THROW( Invalid_Table ); + } + + /* Both `glyf' and `loca' must have same transformation. */ + if ( info->glyf_table != NULL ) + { + if ( ( info->glyf_table->flags & WOFF2_FLAGS_TRANSFORM ) != + ( info->loca_table->flags & WOFF2_FLAGS_TRANSFORM ) ) + { + FT_ERROR(( "Transformation mismatch" + " between `glyf' and `loca' table." )); + return FT_THROW( Invalid_Table ); + } + } + + /* Create buffer for table entries. */ + if ( FT_NEW_ARRAY( table_entry, 16 ) ) + goto Fail; + + /* Create a stream for the uncompressed buffer. */ + if ( FT_NEW( stream ) ) + goto Fail; + FT_Stream_OpenMemory( stream, transformed_buf, transformed_buf_size ); + + FT_ASSERT( FT_STREAM_POS() == 0 ); + + /* Reconstruct/copy tables to output stream. */ + for ( nn = 0; nn < num_tables; nn++ ) + { + WOFF2_TableRec table = *( indices[nn] ); + + + FT_TRACE3(( "Seeking to %ld with table size %ld.\n", + table.src_offset, table.src_length )); + FT_TRACE3(( "Table tag: %c%c%c%c.\n", + (FT_Char)( table.Tag >> 24 ), + (FT_Char)( table.Tag >> 16 ), + (FT_Char)( table.Tag >> 8 ), + (FT_Char)( table.Tag ) )); + + if ( FT_STREAM_SEEK( table.src_offset ) ) + goto Fail; + + if ( table.src_offset + table.src_length > transformed_buf_size ) + goto Fail; + + /* Get stream size for fields of `hmtx' table. */ + if ( table.Tag == TTAG_hhea ) + { + if ( read_num_hmetrics( stream, &num_hmetrics ) ) + goto Fail; + } + + info->num_hmetrics = num_hmetrics; + + checksum = 0; + if ( ( table.flags & WOFF2_FLAGS_TRANSFORM ) != WOFF2_FLAGS_TRANSFORM ) + { + /* Check whether `head' is at least 12 bytes. */ + if ( table.Tag == TTAG_head ) + { + if ( table.src_length < 12 ) + goto Fail; + + buf_cursor = transformed_buf + table.src_offset + 8; + /* Set checkSumAdjustment = 0 */ + WRITE_ULONG( buf_cursor, 0 ); + } + + table.dst_offset = dest_offset; + + checksum = compute_ULong_sum( transformed_buf + table.src_offset, + table.src_length ); + FT_TRACE4(( "Checksum = %09lx.\n", checksum )); + + if ( WRITE_SFNT_BUF( transformed_buf + table.src_offset, + table.src_length ) ) + goto Fail; + } + else + { + FT_TRACE3(( "This table is transformed.\n" )); + + if ( table.Tag == TTAG_glyf ) + { + is_glyf_xform = TRUE; + table.dst_offset = dest_offset; + + if ( reconstruct_glyf( stream, + &checksum, + &loca_checksum, + &sfnt, + sfnt_size, + &dest_offset, + info, + memory ) ) + goto Fail; + + FT_TRACE4(( "Checksum = %09lx.\n", checksum )); + } + + else if ( table.Tag == TTAG_loca ) + checksum = loca_checksum; + + else if ( table.Tag == TTAG_hmtx ) + { + /* If glyf is not transformed and hmtx is, handle separately. */ + if ( !is_glyf_xform ) + { + if ( get_x_mins( stream, indices, num_tables, info, memory ) ) + goto Fail; + } + + table.dst_offset = dest_offset; + + if ( reconstruct_hmtx( stream, + info->num_glyphs, + info->num_hmetrics, + info->x_mins, + &checksum, + &sfnt, + sfnt_size, + &dest_offset, + memory ) ) + goto Fail; + } + else + { + /* Unknown transform. */ + FT_ERROR(( "Unknown table transform.\n" )); + goto Fail; + } + } + + font_checksum += checksum; + + buf_cursor = &table_entry[0]; + WRITE_ULONG( buf_cursor, table.Tag ); + WRITE_ULONG( buf_cursor, checksum ); + WRITE_ULONG( buf_cursor, table.dst_offset ); + WRITE_ULONG( buf_cursor, table.dst_length ); + + WRITE_SFNT_BUF_AT( table_entry_offset, table_entry, 16 ); + + /* Update checksum. */ + font_checksum += compute_ULong_sum( table_entry, 16 ); + + if ( pad4( &sfnt, sfnt_size, &dest_offset, memory ) ) + goto Fail; + + /* Sanity check. */ + if ( (FT_ULong)( table.dst_offset + table.dst_length ) > dest_offset ) + { + FT_ERROR(( "Table was partially written.\n" )); + goto Fail; + } + } + + /* Update `head' checkSumAdjustment. */ + info->head_table = find_table( indices, num_tables, TTAG_head ); + if ( !info->head_table ) + { + FT_ERROR(( "`head' table is missing.\n" )); + goto Fail; + } + + if ( info->head_table->dst_length < 12 ) + goto Fail; + + buf_cursor = sfnt + info->head_table->dst_offset + 8; + font_checksum = 0xB1B0AFBA - font_checksum; + + WRITE_ULONG( buf_cursor, font_checksum ); + + FT_TRACE2(( "Final checksum = %09lx.\n", font_checksum )); + + woff2->actual_sfnt_size = dest_offset; + + /* Set pointer of sfnt stream to its correct value. */ + *sfnt_bytes = sfnt; + + FT_FREE( table_entry ); + FT_Stream_Close( stream ); + FT_FREE( stream ); + + return error; + + Fail: + if ( !error ) + error = FT_THROW( Invalid_Table ); + + /* Set pointer of sfnt stream to its correct value. */ + *sfnt_bytes = sfnt; + + FT_FREE( table_entry ); + FT_Stream_Close( stream ); + FT_FREE( stream ); + + return error; + } + + + /* Replace `face->root.stream' with a stream containing the extracted */ + /* SFNT of a WOFF2 font. */ + + FT_LOCAL_DEF( FT_Error ) + woff2_open_font( FT_Stream stream, + TT_Face face, + FT_Int* face_instance_index, + FT_Long* num_faces ) + { + FT_Memory memory = stream->memory; + FT_Error error = FT_Err_Ok; + FT_Int face_index; + + WOFF2_HeaderRec woff2; + WOFF2_InfoRec info = { 0, 0, 0, NULL, NULL, NULL, NULL }; + WOFF2_Table tables = NULL; + WOFF2_Table* indices = NULL; + WOFF2_Table* temp_indices = NULL; + WOFF2_Table last_table; + + FT_Int nn; + FT_ULong j; + FT_ULong flags; + FT_UShort xform_version; + FT_ULong src_offset = 0; + + FT_UInt glyf_index; + FT_UInt loca_index; + FT_UInt32 file_offset; + + FT_Byte* sfnt = NULL; + FT_Stream sfnt_stream = NULL; + FT_Byte* sfnt_header; + FT_ULong sfnt_size; + + FT_Byte* uncompressed_buf = NULL; + + static const FT_Frame_Field woff2_header_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE WOFF2_HeaderRec + + FT_FRAME_START( 48 ), + FT_FRAME_ULONG ( signature ), + FT_FRAME_ULONG ( flavor ), + FT_FRAME_ULONG ( length ), + FT_FRAME_USHORT ( num_tables ), + FT_FRAME_SKIP_BYTES( 2 ), + FT_FRAME_ULONG ( totalSfntSize ), + FT_FRAME_ULONG ( totalCompressedSize ), + FT_FRAME_SKIP_BYTES( 2 * 2 ), + 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 ); + + face_index = FT_ABS( *face_instance_index ) & 0xFFFF; + + /* Read WOFF2 Header. */ + if ( FT_STREAM_READ_FIELDS( woff2_header_fields, &woff2 ) ) + return error; + + FT_TRACE4(( "signature -> 0x%lX\n", woff2.signature )); + FT_TRACE2(( "flavor -> 0x%08lx\n", woff2.flavor )); + FT_TRACE4(( "length -> %lu\n", woff2.length )); + FT_TRACE2(( "num_tables -> %hu\n", woff2.num_tables )); + FT_TRACE4(( "totalSfntSize -> %lu\n", woff2.totalSfntSize )); + FT_TRACE4(( "metaOffset -> %lu\n", woff2.metaOffset )); + FT_TRACE4(( "metaLength -> %lu\n", woff2.metaLength )); + FT_TRACE4(( "privOffset -> %lu\n", woff2.privOffset )); + FT_TRACE4(( "privLength -> %lu\n", woff2.privLength )); + + /* Make sure we don't recurse back here. */ + if ( woff2.flavor == TTAG_wOF2 ) + return FT_THROW( Invalid_Table ); + + /* Miscellaneous checks. */ + if ( woff2.length != stream->size || + woff2.num_tables == 0 || + 48 + woff2.num_tables * 20UL >= woff2.length || + ( woff2.metaOffset == 0 && ( woff2.metaLength != 0 || + woff2.metaOrigLength != 0 ) ) || + ( woff2.metaLength != 0 && woff2.metaOrigLength == 0 ) || + ( woff2.metaOffset >= woff2.length ) || + ( woff2.length - woff2.metaOffset < woff2.metaLength ) || + ( woff2.privOffset == 0 && woff2.privLength != 0 ) || + ( woff2.privOffset >= woff2.length ) || + ( woff2.length - woff2.privOffset < woff2.privLength ) ) + { + FT_ERROR(( "woff2_open_font: invalid WOFF2 header\n" )); + return FT_THROW( Invalid_Table ); + } + + FT_TRACE2(( "woff2_open_font: WOFF2 Header is valid.\n" )); + + woff2.ttc_fonts = NULL; + + /* Read table directory. */ + if ( FT_NEW_ARRAY( tables, woff2.num_tables ) || + FT_NEW_ARRAY( indices, woff2.num_tables ) ) + goto Exit; + + FT_TRACE2(( + "\n" + " tag flags transform origLen transformLen offset\n" + " -----------------------------------------------------------\n" )); + /* " XXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX" */ + + for ( nn = 0; nn < woff2.num_tables; nn++ ) + { + WOFF2_Table table = tables + nn; + + + if ( FT_READ_BYTE( table->FlagByte ) ) + goto Exit; + + if ( ( table->FlagByte & 0x3f ) == 0x3f ) + { + if ( FT_READ_ULONG( table->Tag ) ) + goto Exit; + } + else + { + table->Tag = woff2_known_tags( table->FlagByte & 0x3f ); + if ( !table->Tag ) + { + FT_ERROR(( "woff2_open_font: Unknown table tag." )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + } + + flags = 0; + xform_version = ( table->FlagByte >> 6 ) & 0x03; + + /* 0 means xform for glyph/loca, non-0 for others. */ + if ( table->Tag == TTAG_glyf || table->Tag == TTAG_loca ) + { + if ( xform_version == 0 ) + flags |= WOFF2_FLAGS_TRANSFORM; + } + else if ( xform_version != 0 ) + flags |= WOFF2_FLAGS_TRANSFORM; + + flags |= xform_version; + + if ( READ_BASE128( table->dst_length ) ) + goto Exit; + + table->TransformLength = table->dst_length; + + if ( ( flags & WOFF2_FLAGS_TRANSFORM ) != 0 ) + { + if ( READ_BASE128( table->TransformLength ) ) + goto Exit; + + if ( table->Tag == TTAG_loca && table->TransformLength ) + { + FT_ERROR(( "woff2_open_font: Invalid loca `transformLength'.\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + } + + if ( src_offset + table->TransformLength < src_offset ) + { + FT_ERROR(( "woff2_open_font: invalid WOFF2 table directory.\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + table->src_offset = src_offset; + table->src_length = table->TransformLength; + src_offset += table->TransformLength; + table->flags = flags; + + FT_TRACE2(( " %c%c%c%c %08d %08d %08ld %08ld %08ld\n", + (FT_Char)( table->Tag >> 24 ), + (FT_Char)( table->Tag >> 16 ), + (FT_Char)( table->Tag >> 8 ), + (FT_Char)( table->Tag ), + table->FlagByte & 0x3f, + ( table->FlagByte >> 6 ) & 0x03, + table->dst_length, + table->TransformLength, + table->src_offset )); + + indices[nn] = table; + } + + /* End of last table is uncompressed size. */ + last_table = indices[woff2.num_tables - 1]; + + woff2.uncompressed_size = last_table->src_offset + + last_table->src_length; + if ( woff2.uncompressed_size < last_table->src_offset ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + FT_TRACE2(( "Table directory parsed.\n" )); + + /* Check for and read collection directory. */ + woff2.num_fonts = 1; + woff2.header_version = 0; + + if ( woff2.flavor == TTAG_ttcf ) + { + FT_TRACE2(( "Font is a TTC, reading collection directory.\n" )); + + if ( FT_READ_ULONG( woff2.header_version ) ) + goto Exit; + + if ( woff2.header_version != 0x00010000 && + woff2.header_version != 0x00020000 ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( READ_255USHORT( woff2.num_fonts ) ) + goto Exit; + + if ( !woff2.num_fonts ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + FT_TRACE4(( "Number of fonts in TTC: %d\n", woff2.num_fonts )); + + if ( FT_NEW_ARRAY( woff2.ttc_fonts, woff2.num_fonts ) ) + goto Exit; + + for ( nn = 0; nn < woff2.num_fonts; nn++ ) + { + WOFF2_TtcFont ttc_font = woff2.ttc_fonts + nn; + + + if ( READ_255USHORT( ttc_font->num_tables ) ) + goto Exit; + if ( FT_READ_ULONG( ttc_font->flavor ) ) + goto Exit; + + if ( FT_NEW_ARRAY( ttc_font->table_indices, ttc_font->num_tables ) ) + goto Exit; + + FT_TRACE5(( "Number of tables in font %d: %d\n", + nn, ttc_font->num_tables )); + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( ttc_font->num_tables ) + FT_TRACE6(( " Indices: " )); +#endif + + glyf_index = 0; + loca_index = 0; + + for ( j = 0; j < ttc_font->num_tables; j++ ) + { + FT_UShort table_index; + WOFF2_Table table; + + + if ( READ_255USHORT( table_index ) ) + goto Exit; + + FT_TRACE6(( "%hu ", table_index )); + if ( table_index >= woff2.num_tables ) + { + FT_ERROR(( "woff2_open_font: invalid table index\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + ttc_font->table_indices[j] = table_index; + + table = indices[table_index]; + if ( table->Tag == TTAG_loca ) + loca_index = table_index; + if ( table->Tag == TTAG_glyf ) + glyf_index = table_index; + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( ttc_font->num_tables ) + FT_TRACE6(( "\n" )); +#endif + + /* glyf and loca must be consecutive */ + if ( glyf_index > 0 || loca_index > 0 ) + { + if ( glyf_index > loca_index || + loca_index - glyf_index != 1 ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + } + } + + /* Collection directory reading complete. */ + FT_TRACE2(( "WOFF2 collection directory is valid.\n" )); + } + else + woff2.ttc_fonts = NULL; + + woff2.compressed_offset = FT_STREAM_POS(); + file_offset = ROUND4( woff2.compressed_offset + + woff2.totalCompressedSize ); + + /* Some more checks before we start reading the tables. */ + if ( file_offset > woff2.length ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( woff2.metaOffset ) + { + if ( file_offset != woff2.metaOffset ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + file_offset = ROUND4(woff2.metaOffset + woff2.metaLength); + } + + if ( woff2.privOffset ) + { + if ( file_offset != woff2.privOffset ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + file_offset = ROUND4(woff2.privOffset + woff2.privLength); + } + + if ( file_offset != ( ROUND4( woff2.length ) ) ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* Validate requested face index. */ + *num_faces = woff2.num_fonts; + /* value -(N+1) requests information on index N */ + if ( *face_instance_index < 0 ) + face_index--; + + if ( face_index >= woff2.num_fonts ) + { + if ( *face_instance_index >= 0 ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + else + face_index = 0; + } + + /* Only retain tables of the requested face in a TTC. */ + if ( woff2.header_version ) + { + WOFF2_TtcFont ttc_font = woff2.ttc_fonts + face_index; + + + /* Create a temporary array. */ + if ( FT_NEW_ARRAY( temp_indices, + ttc_font->num_tables ) ) + goto Exit; + + FT_TRACE4(( "Storing tables for TTC face index %d.\n", face_index )); + for ( nn = 0; nn < ttc_font->num_tables; nn++ ) + temp_indices[nn] = indices[ttc_font->table_indices[nn]]; + + /* Resize array to required size. */ + if ( FT_RENEW_ARRAY( indices, + woff2.num_tables, + ttc_font->num_tables ) ) + goto Exit; + + for ( nn = 0; nn < ttc_font->num_tables; nn++ ) + indices[nn] = temp_indices[nn]; + + FT_FREE( temp_indices ); + + /* Change header values. */ + woff2.flavor = ttc_font->flavor; + woff2.num_tables = ttc_font->num_tables; + } + + /* We need to allocate this much at the minimum. */ + sfnt_size = 12 + woff2.num_tables * 16UL; + /* This is what we normally expect. */ + /* Initially trust `totalSfntSize' and change later as required. */ + if ( woff2.totalSfntSize > sfnt_size ) + { + /* However, adjust the value to something reasonable. */ + + /* Factor 64 is heuristic. */ + if ( ( woff2.totalSfntSize >> 6 ) > woff2.length ) + sfnt_size = woff2.length << 6; + else + sfnt_size = woff2.totalSfntSize; + + /* Value 1<<26 = 67108864 is heuristic. */ + if (sfnt_size >= (1 << 26)) + sfnt_size = 1 << 26; + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( sfnt_size != woff2.totalSfntSize ) + FT_TRACE4(( "adjusting estimate of uncompressed font size" + " to %lu bytes\n", + sfnt_size )); +#endif + } + + /* Write sfnt header. */ + if ( FT_ALLOC( sfnt, sfnt_size ) || + FT_NEW( sfnt_stream ) ) + goto Exit; + + sfnt_header = sfnt; + + WRITE_ULONG( sfnt_header, woff2.flavor ); + + if ( woff2.num_tables ) + { + FT_UInt searchRange, entrySelector, rangeShift, x; + + + x = woff2.num_tables; + entrySelector = 0; + while ( x ) + { + x >>= 1; + entrySelector += 1; + } + entrySelector--; + + searchRange = ( 1 << entrySelector ) * 16; + rangeShift = ( woff2.num_tables * 16 ) - searchRange; + + WRITE_USHORT( sfnt_header, woff2.num_tables ); + WRITE_USHORT( sfnt_header, searchRange ); + WRITE_USHORT( sfnt_header, entrySelector ); + WRITE_USHORT( sfnt_header, rangeShift ); + } + + info.header_checksum = compute_ULong_sum( sfnt, 12 ); + + /* Sort tables by tag. */ + ft_qsort( indices, + woff2.num_tables, + sizeof ( WOFF2_Table ), + compare_tags ); + + if ( woff2.uncompressed_size < 1 ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( woff2.uncompressed_size > sfnt_size ) + { + FT_ERROR(( "woff2_open_font: SFNT table lengths are too large.\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* Allocate memory for uncompressed table data. */ + if ( FT_ALLOC( uncompressed_buf, woff2.uncompressed_size ) || + FT_FRAME_ENTER( woff2.totalCompressedSize ) ) + goto Exit; + + /* Uncompress the stream. */ + error = woff2_decompress( uncompressed_buf, + woff2.uncompressed_size, + stream->cursor, + woff2.totalCompressedSize ); + + FT_FRAME_EXIT(); + + if ( error ) + goto Exit; + + error = reconstruct_font( uncompressed_buf, + woff2.uncompressed_size, + indices, + &woff2, + &info, + &sfnt, + &sfnt_size, + memory ); + + if ( error ) + goto Exit; + + /* Resize `sfnt' to actual size of sfnt stream. */ + if ( woff2.actual_sfnt_size < sfnt_size ) + { + FT_TRACE5(( "Trimming sfnt stream from %lu to %lu.\n", + sfnt_size, woff2.actual_sfnt_size )); + if ( FT_REALLOC( sfnt, + (FT_ULong)( sfnt_size ), + (FT_ULong)( woff2.actual_sfnt_size ) ) ) + goto Exit; + } + + /* `reconstruct_font' has done all the work. */ + /* Swap out stream and return. */ + FT_Stream_OpenMemory( sfnt_stream, sfnt, woff2.actual_sfnt_size ); + sfnt_stream->memory = stream->memory; + sfnt_stream->close = 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; + + /* Set face_index to 0 or -1. */ + if ( *face_instance_index >= 0 ) + *face_instance_index = 0; + else + *face_instance_index = -1; + + FT_TRACE2(( "woff2_open_font: SFNT synthesized.\n" )); + + Exit: + FT_FREE( tables ); + FT_FREE( indices ); + FT_FREE( uncompressed_buf ); + FT_FREE( info.x_mins ); + + if ( woff2.ttc_fonts ) + { + WOFF2_TtcFont ttc_font = woff2.ttc_fonts; + + + for ( nn = 0; nn < woff2.num_fonts; nn++ ) + { + FT_FREE( ttc_font->table_indices ); + ttc_font++; + } + + FT_FREE( woff2.ttc_fonts ); + } + + if ( error ) + { + FT_FREE( sfnt ); + if ( sfnt_stream ) + { + FT_Stream_Close( sfnt_stream ); + FT_FREE( sfnt_stream ); + } + } + + return error; + } + + +#undef READ_255USHORT +#undef READ_BASE128 +#undef ROUND4 +#undef WRITE_USHORT +#undef WRITE_ULONG +#undef WRITE_SHORT +#undef WRITE_SFNT_BUF +#undef WRITE_SFNT_BUF_AT + +#undef N_CONTOUR_STREAM +#undef N_POINTS_STREAM +#undef FLAG_STREAM +#undef GLYPH_STREAM +#undef COMPOSITE_STREAM +#undef BBOX_STREAM +#undef INSTRUCTION_STREAM + + +/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.h b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.h new file mode 100644 index 00000000000..798f66bd0af --- /dev/null +++ b/sdk/lib/3rdparty/freetype/src/sfnt/sfwoff2.h @@ -0,0 +1,75 @@ +/**************************************************************************** + * + * sfwoff2.h + * + * WOFFF2 format management (specification). + * + * Copyright (C) 2019-2020 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. + * + */ + + +#ifndef SFWOFF2_H_ +#define SFWOFF2_H_ + + +#include +#include + + +FT_BEGIN_HEADER + + + /* Leave the first byte open to store `flag_byte'. */ +#define WOFF2_FLAGS_TRANSFORM 1 << 8 + +#define WOFF2_SFNT_HEADER_SIZE 12 +#define WOFF2_SFNT_ENTRY_SIZE 16 + + /* Suggested maximum size for output. */ +#define WOFF2_DEFAULT_MAX_SIZE 30 * 1024 * 1024 + + /* 98% of Google Fonts have no glyph above 5k bytes. */ +#define WOFF2_DEFAULT_GLYPH_BUF 5120 + + /* Composite glyph flags. */ + /* See `CompositeGlyph.java' in `sfntly' for full definitions. */ +#define FLAG_ARG_1_AND_2_ARE_WORDS 1 << 0 +#define FLAG_WE_HAVE_A_SCALE 1 << 3 +#define FLAG_MORE_COMPONENTS 1 << 5 +#define FLAG_WE_HAVE_AN_X_AND_Y_SCALE 1 << 6 +#define FLAG_WE_HAVE_A_TWO_BY_TWO 1 << 7 +#define FLAG_WE_HAVE_INSTRUCTIONS 1 << 8 + + /* Simple glyph flags */ +#define GLYF_ON_CURVE 1 << 0 +#define GLYF_X_SHORT 1 << 1 +#define GLYF_Y_SHORT 1 << 2 +#define GLYF_REPEAT 1 << 3 +#define GLYF_THIS_X_IS_SAME 1 << 4 +#define GLYF_THIS_Y_IS_SAME 1 << 5 + + /* Other constants */ +#define CONTOUR_OFFSET_END_POINT 10 + + + FT_LOCAL( FT_Error ) + woff2_open_font( FT_Stream stream, + TT_Face face, + FT_Int* face_index, + FT_Long* num_faces ); + + +FT_END_HEADER + +#endif /* SFWOFF2_H_ */ + + +/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.c index 853599fc43c..a287d3afc47 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.c @@ -4,7 +4,7 @@ * * TrueType and OpenType embedded BDF properties (body). * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,10 +16,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H +#include +#include +#include #include "ttbdf.h" #include "sferrors.h" diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.h index e4164e61fc7..e60c01cb8ba 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttbdf.h @@ -4,7 +4,7 @@ * * TrueType and OpenType embedded BDF properties (specification). * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define TTBDF_H_ -#include #include "ttload.h" -#include FT_BDF_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.c index 2b97a7ba809..70b88452727 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.c @@ -4,7 +4,7 @@ * * TrueType character mapping table (cmap) support (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,14 +16,13 @@ */ -#include -#include FT_INTERNAL_DEBUG_H +#include -#include "sferrors.h" /* must come before FT_INTERNAL_VALIDATE_H */ +#include "sferrors.h" /* must come before `ftvalid.h' */ -#include FT_INTERNAL_VALIDATE_H -#include FT_INTERNAL_STREAM_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H +#include +#include +#include #include "ttload.h" #include "ttcmap.h" #include "ttpost.h" @@ -2383,10 +2382,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; @@ -3676,7 +3672,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 ); @@ -3770,6 +3766,7 @@ static const TT_CMap_Class tt_cmap_classes[] = { +#undef TTCMAPCITEM #define TTCMAPCITEM( a ) &a, #include "ttcmapc.h" NULL, @@ -3782,29 +3779,33 @@ FT_LOCAL_DEF( FT_Error ) tt_face_build_cmaps( TT_Face face ) { - FT_Byte* table = face->cmap_table; - FT_Byte* limit = table + face->cmap_size; + FT_Byte* const table = face->cmap_table; + FT_Byte* limit; FT_UInt volatile num_cmaps; - FT_Byte* volatile p = table; + FT_Byte* volatile p = table; FT_Library library = FT_FACE_LIBRARY( face ); FT_UNUSED( library ); - if ( !p || p + 4 > limit ) + if ( !p || face->cmap_size < 4 ) return FT_THROW( Invalid_Table ); - /* only recognize format 0 */ - if ( TT_NEXT_USHORT( p ) != 0 ) - { - FT_ERROR(( "tt_face_build_cmaps:" - " unsupported `cmap' table format = %d\n", - TT_PEEK_USHORT( p - 2 ) )); - return FT_THROW( Invalid_Table ); - } + /* Version 1.8.3 of the OpenType specification contains the following */ + /* (https://docs.microsoft.com/en-us/typography/opentype/spec/cmap): */ + /* */ + /* The 'cmap' table version number remains at 0x0000 for fonts that */ + /* make use of the newer subtable formats. */ + /* */ + /* This essentially means that a version format test is useless. */ + + /* ignore format */ + p += 2; num_cmaps = TT_NEXT_USHORT( p ); + FT_TRACE4(( "tt_face_build_cmaps: %d cmaps\n", num_cmaps )); + limit = table + face->cmap_size; for ( ; num_cmaps > 0 && p + 8 <= limit; num_cmaps-- ) { FT_CharMapRec charmap; diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.h index 36801c939ee..c7d7c21d2c0 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttcmap.h @@ -4,7 +4,7 @@ * * TrueType character mapping table (cmap) support (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,10 +20,9 @@ #define TTCMAP_H_ -#include -#include FT_INTERNAL_TRUETYPE_TYPES_H -#include FT_INTERNAL_VALIDATE_H -#include FT_SERVICE_TT_CMAP_H +#include +#include +#include FT_BEGIN_HEADER @@ -91,6 +90,11 @@ FT_BEGIN_HEADER }; +#undef TTCMAPCITEM +#define TTCMAPCITEM( a ) FT_CALLBACK_TABLE const TT_CMap_ClassRec a; +#include "ttcmapc.h" + + typedef struct TT_ValidatorRec_ { FT_ValidatorRec validator; diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttcmapc.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttcmapc.h index ace9e69ca8d..2e4ce5075b8 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttcmapc.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttcmapc.h @@ -4,7 +4,7 @@ * * TT CMAP classes definitions (specification only). * - * Copyright (C) 2009-2019 by + * Copyright (C) 2009-2020 by * Oran Agra and Mickey Gabel. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.c index 6b537d95b85..9025e356ce3 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.c @@ -4,7 +4,7 @@ * * TrueType and OpenType colored glyph layer support (body). * - * Copyright (C) 2018-2019 by + * Copyright (C) 2018-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Originally written by Shao Yu Zhang . @@ -27,11 +27,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H -#include FT_COLOR_H +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_COLOR_LAYERS @@ -40,9 +39,9 @@ /* NOTE: These are the table sizes calculated through the specs. */ -#define BASE_GLYPH_SIZE 6 -#define LAYER_SIZE 4 -#define COLR_HEADER_SIZE 14 +#define BASE_GLYPH_SIZE 6U +#define LAYER_SIZE 4U +#define COLR_HEADER_SIZE 14U typedef struct BaseGlyphRecord_ diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.h index 817489a855a..6412162669f 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttcolr.h @@ -4,7 +4,7 @@ * * TrueType and OpenType colored glyph layer support (specification). * - * Copyright (C) 2018-2019 by + * Copyright (C) 2018-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Originally written by Shao Yu Zhang . @@ -22,7 +22,6 @@ #define __TTCOLR_H__ -#include #include "ttload.h" diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.c index 3482169a891..9c514bafe58 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.c @@ -4,7 +4,7 @@ * * TrueType and OpenType color palette support (body). * - * Copyright (C) 2018-2019 by + * Copyright (C) 2018-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Originally written by Shao Yu Zhang . @@ -27,11 +27,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H -#include FT_COLOR_H +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_COLOR_LAYERS @@ -40,8 +39,8 @@ /* NOTE: These are the table sizes calculated through the specs. */ -#define CPAL_V0_HEADER_BASE_SIZE 12 -#define COLOR_SIZE 4 +#define CPAL_V0_HEADER_BASE_SIZE 12U +#define COLOR_SIZE 4U /* all data from `CPAL' not covered in FT_Palette_Data */ @@ -140,7 +139,7 @@ 3U * 4 > table_size ) goto InvalidTable; - p += face->palette_data.num_palettes * 2; + p += face->palette_data.num_palettes * 2U; type_offset = FT_NEXT_ULONG( p ); label_offset = FT_NEXT_ULONG( p ); @@ -150,7 +149,7 @@ { if ( type_offset >= table_size ) goto InvalidTable; - if ( face->palette_data.num_palettes * 2 > + if ( face->palette_data.num_palettes * 2U > table_size - type_offset ) goto InvalidTable; @@ -171,7 +170,7 @@ { if ( label_offset >= table_size ) goto InvalidTable; - if ( face->palette_data.num_palettes * 2 > + if ( face->palette_data.num_palettes * 2U > table_size - label_offset ) goto InvalidTable; @@ -192,7 +191,7 @@ { if ( entry_label_offset >= table_size ) goto InvalidTable; - if ( face->palette_data.num_palette_entries * 2 > + if ( face->palette_data.num_palette_entries * 2U > table_size - entry_label_offset ) goto InvalidTable; diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.h index d1b244f3e34..b544be696a4 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttcpal.h @@ -4,7 +4,7 @@ * * TrueType and OpenType color palette support (specification). * - * Copyright (C) 2018-2019 by + * Copyright (C) 2018-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Originally written by Shao Yu Zhang . @@ -22,7 +22,6 @@ #define __TTCPAL_H__ -#include #include "ttload.h" diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.c index 8d1b7810904..d4a70c7855a 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.c @@ -5,7 +5,7 @@ * Load the basic TrueType kerning table. This doesn't handle * kerning data within the GPOS table at the moment. * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,10 +17,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H +#include +#include +#include #include "ttkern.h" #include "sferrors.h" diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.h index 5f283e5e622..f44b5bdeb0d 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttkern.h @@ -5,7 +5,7 @@ * Load the basic TrueType kerning table. This doesn't handle * kerning data within the GPOS table at the moment. * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,9 +21,8 @@ #define TTKERN_H_ -#include -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttload.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttload.c index 5443bf4b696..4b46f41357c 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttload.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttload.c @@ -5,7 +5,7 @@ * Load the basic TrueType tables, i.e., tables that can be either in * TTF or OTF fonts (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,10 +17,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H +#include +#include +#include #include "ttload.h" #include "sferrors.h" @@ -65,8 +64,8 @@ #endif - FT_TRACE4(( "tt_face_lookup_table: %08p, `%c%c%c%c' -- ", - face, + FT_TRACE4(( "tt_face_lookup_table: %p, `%c%c%c%c' -- ", + (void *)face, (FT_Char)( tag >> 24 ), (FT_Char)( tag >> 16 ), (FT_Char)( tag >> 8 ), @@ -363,7 +362,7 @@ }; - FT_TRACE2(( "tt_face_load_font_dir: %08p\n", face )); + FT_TRACE2(( "tt_face_load_font_dir: %p\n", (void *)face )); /* read the offset table */ @@ -397,7 +396,15 @@ } } else + { valid_entries = sfnt.num_tables; + if ( !valid_entries ) + { + FT_TRACE2(( "tt_face_load_font_dir: no valid tables found\n" )); + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + } face->num_tables = valid_entries; face->format_tag = sfnt.format_tag; @@ -916,7 +923,7 @@ /* load language tags */ { TT_LangTag entry = table->langTags; - TT_LangTag limit = entry + table->numLangTagRecords; + TT_LangTag limit = FT_OFFSET( entry, table->numLangTagRecords ); for ( ; entry < limit; entry++ ) @@ -1307,7 +1314,7 @@ /* we don't load the glyph names, we do that in another */ /* module (ttpost). */ - FT_TRACE3(( "FormatType: 0x%x\n", post->FormatType )); + FT_TRACE3(( "FormatType: 0x%lx\n", post->FormatType )); FT_TRACE3(( "isFixedPitch: %s\n", post->isFixedPitch ? " yes" : " no" )); diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttload.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttload.h index cc18c18694c..4e53d8b7823 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttload.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttload.h @@ -5,7 +5,7 @@ * Load the basic TrueType tables, i.e., tables that can be either in * TTF or OTF fonts (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,9 +21,8 @@ #define TTLOAD_H_ -#include -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.c index 7a4d2be2cb8..021123336ed 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.c @@ -4,7 +4,7 @@ * * Load the metrics tables common to TTF and OTF fonts (body). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,13 +16,12 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H +#include +#include +#include #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_SERVICE_METRICS_VARIATIONS_H +#include #endif #include "ttmtx.h" @@ -280,7 +279,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 ) || @@ -292,7 +291,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/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.h index 5b0b60b641c..dba65ca9ba3 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttmtx.h @@ -4,7 +4,7 @@ * * Load the metrics tables common to TTF and OTF fonts (specification). * - * Copyright (C) 2006-2019 by + * Copyright (C) 2006-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define TTMTX_H_ -#include -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.c index 636a0a004ac..e93a4bf1b16 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.c @@ -5,7 +5,7 @@ * PostScript name table processing for TrueType and OpenType fonts * (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,10 +25,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H +#include +#include +#include #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES @@ -54,7 +53,7 @@ #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES -#include FT_SERVICE_POSTSCRIPT_CMAPS_H +#include #define MAC_NAME( x ) (FT_String*)psnames->macintosh_name( (FT_UInt)(x) ) @@ -240,7 +239,7 @@ break; else { - FT_TRACE6(( "load_format_20: %d byte left in post table\n", + FT_TRACE6(( "load_format_20: %ld byte left in post table\n", post_limit - FT_STREAM_POS() )); if ( FT_READ_BYTE( len ) ) diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.h index 812a0fc92db..94c7d168008 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttpost.h @@ -5,7 +5,7 @@ * PostScript name table processing for TrueType and OpenType fonts * (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -23,7 +23,7 @@ #include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.c b/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.c index 0c5a2ea87c0..ea2c90515cc 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.c +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.c @@ -4,7 +4,7 @@ * * TrueType and OpenType embedded bitmap support (body). * - * Copyright (C) 2005-2019 by + * Copyright (C) 2005-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Copyright 2013 by Google, Inc. @@ -19,11 +19,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H -#include FT_BITMAP_H +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS @@ -348,7 +347,7 @@ FT_TRACE2(( "tt_face_load_strike_metrics:" " sanitizing invalid ascender and descender\n" " " - " values for strike %d (%dppem, %dppem)\n", + " values for strike %ld (%dppem, %dppem)\n", strike_index, metrics->x_ppem, metrics->y_ppem )); @@ -1618,7 +1617,6 @@ TT_SBitDecoderRec decoder[1]; #endif - error = tt_sbit_decoder_init( decoder, face, strike_index, metrics ); if ( !error ) { diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.h b/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.h index 5ab8ff55689..b867e43a61a 100644 --- a/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/ttsbit.h @@ -4,7 +4,7 @@ * * TrueType and OpenType embedded bitmap support (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define TTSBIT_H_ -#include #include "ttload.h" diff --git a/sdk/lib/3rdparty/freetype/src/sfnt/woff2tags.c b/sdk/lib/3rdparty/freetype/src/sfnt/woff2tags.c new file mode 100644 index 00000000000..fd9f2e6c5d4 --- /dev/null +++ b/sdk/lib/3rdparty/freetype/src/sfnt/woff2tags.c @@ -0,0 +1,109 @@ +/**************************************************************************** + * + * woff2tags.c + * + * WOFF2 Font table tags (base). + * + * Copyright (C) 2019-2020 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. + * + */ + + +#include +#include "woff2tags.h" + + /* + * Return tag from index in the order given in WOFF2 specification. + * + * See + * + * https://www.w3.org/TR/WOFF2/#table_dir_format + * + * for details. + */ + FT_LOCAL_DEF( FT_ULong ) + woff2_known_tags( FT_Byte index ) + { + const FT_ULong known_tags[63] = + { + FT_MAKE_TAG('c', 'm', 'a', 'p'), /* 0 */ + FT_MAKE_TAG('h', 'e', 'a', 'd'), /* 1 */ + FT_MAKE_TAG('h', 'h', 'e', 'a'), /* 2 */ + FT_MAKE_TAG('h', 'm', 't', 'x'), /* 3 */ + FT_MAKE_TAG('m', 'a', 'x', 'p'), /* 4 */ + FT_MAKE_TAG('n', 'a', 'm', 'e'), /* 5 */ + FT_MAKE_TAG('O', 'S', '/', '2'), /* 6 */ + FT_MAKE_TAG('p', 'o', 's', 't'), /* 7 */ + FT_MAKE_TAG('c', 'v', 't', ' '), /* 8 */ + FT_MAKE_TAG('f', 'p', 'g', 'm'), /* 9 */ + FT_MAKE_TAG('g', 'l', 'y', 'f'), /* 10 */ + FT_MAKE_TAG('l', 'o', 'c', 'a'), /* 11 */ + FT_MAKE_TAG('p', 'r', 'e', 'p'), /* 12 */ + FT_MAKE_TAG('C', 'F', 'F', ' '), /* 13 */ + FT_MAKE_TAG('V', 'O', 'R', 'G'), /* 14 */ + FT_MAKE_TAG('E', 'B', 'D', 'T'), /* 15 */ + FT_MAKE_TAG('E', 'B', 'L', 'C'), /* 16 */ + FT_MAKE_TAG('g', 'a', 's', 'p'), /* 17 */ + FT_MAKE_TAG('h', 'd', 'm', 'x'), /* 18 */ + FT_MAKE_TAG('k', 'e', 'r', 'n'), /* 19 */ + FT_MAKE_TAG('L', 'T', 'S', 'H'), /* 20 */ + FT_MAKE_TAG('P', 'C', 'L', 'T'), /* 21 */ + FT_MAKE_TAG('V', 'D', 'M', 'X'), /* 22 */ + FT_MAKE_TAG('v', 'h', 'e', 'a'), /* 23 */ + FT_MAKE_TAG('v', 'm', 't', 'x'), /* 24 */ + FT_MAKE_TAG('B', 'A', 'S', 'E'), /* 25 */ + FT_MAKE_TAG('G', 'D', 'E', 'F'), /* 26 */ + FT_MAKE_TAG('G', 'P', 'O', 'S'), /* 27 */ + FT_MAKE_TAG('G', 'S', 'U', 'B'), /* 28 */ + FT_MAKE_TAG('E', 'B', 'S', 'C'), /* 29 */ + FT_MAKE_TAG('J', 'S', 'T', 'F'), /* 30 */ + FT_MAKE_TAG('M', 'A', 'T', 'H'), /* 31 */ + FT_MAKE_TAG('C', 'B', 'D', 'T'), /* 32 */ + FT_MAKE_TAG('C', 'B', 'L', 'C'), /* 33 */ + FT_MAKE_TAG('C', 'O', 'L', 'R'), /* 34 */ + FT_MAKE_TAG('C', 'P', 'A', 'L'), /* 35 */ + FT_MAKE_TAG('S', 'V', 'G', ' '), /* 36 */ + FT_MAKE_TAG('s', 'b', 'i', 'x'), /* 37 */ + FT_MAKE_TAG('a', 'c', 'n', 't'), /* 38 */ + FT_MAKE_TAG('a', 'v', 'a', 'r'), /* 39 */ + FT_MAKE_TAG('b', 'd', 'a', 't'), /* 40 */ + FT_MAKE_TAG('b', 'l', 'o', 'c'), /* 41 */ + FT_MAKE_TAG('b', 's', 'l', 'n'), /* 42 */ + FT_MAKE_TAG('c', 'v', 'a', 'r'), /* 43 */ + FT_MAKE_TAG('f', 'd', 's', 'c'), /* 44 */ + FT_MAKE_TAG('f', 'e', 'a', 't'), /* 45 */ + FT_MAKE_TAG('f', 'm', 't', 'x'), /* 46 */ + FT_MAKE_TAG('f', 'v', 'a', 'r'), /* 47 */ + FT_MAKE_TAG('g', 'v', 'a', 'r'), /* 48 */ + FT_MAKE_TAG('h', 's', 't', 'y'), /* 49 */ + FT_MAKE_TAG('j', 'u', 's', 't'), /* 50 */ + FT_MAKE_TAG('l', 'c', 'a', 'r'), /* 51 */ + FT_MAKE_TAG('m', 'o', 'r', 't'), /* 52 */ + FT_MAKE_TAG('m', 'o', 'r', 'x'), /* 53 */ + FT_MAKE_TAG('o', 'p', 'b', 'd'), /* 54 */ + FT_MAKE_TAG('p', 'r', 'o', 'p'), /* 55 */ + FT_MAKE_TAG('t', 'r', 'a', 'k'), /* 56 */ + FT_MAKE_TAG('Z', 'a', 'p', 'f'), /* 57 */ + FT_MAKE_TAG('S', 'i', 'l', 'f'), /* 58 */ + FT_MAKE_TAG('G', 'l', 'a', 't'), /* 59 */ + FT_MAKE_TAG('G', 'l', 'o', 'c'), /* 60 */ + FT_MAKE_TAG('F', 'e', 'a', 't'), /* 61 */ + FT_MAKE_TAG('S', 'i', 'l', 'l'), /* 62 */ + }; + + + if ( index > 62 ) + return 0; + + return known_tags[index]; + } + + +/* END */ diff --git a/sdk/lib/3rdparty/freetype/src/otvalid/otvgpos.h b/sdk/lib/3rdparty/freetype/src/sfnt/woff2tags.h similarity index 54% rename from sdk/lib/3rdparty/freetype/src/otvalid/otvgpos.h rename to sdk/lib/3rdparty/freetype/src/sfnt/woff2tags.h index b3154312eb1..c437c77aa1f 100644 --- a/sdk/lib/3rdparty/freetype/src/otvalid/otvgpos.h +++ b/sdk/lib/3rdparty/freetype/src/sfnt/woff2tags.h @@ -1,11 +1,11 @@ /**************************************************************************** * - * otvgpos.h + * woff2tags.h * - * OpenType GPOS table validator (specification). + * WOFFF2 Font table tags (specification). * - * Copyright (C) 2004-2019 by - * David Turner, Robert Wilhelm, and Werner Lemberg. + * Copyright (C) 2019-2020 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 @@ -16,21 +16,24 @@ */ -#ifndef OTVGPOS_H_ -#define OTVGPOS_H_ +#ifndef WOFF2TAGS_H +#define WOFF2TAGS_H + + +#include +#include FT_BEGIN_HEADER - FT_LOCAL( void ) - otv_GPOS_subtable_validate( FT_Bytes table, - OTV_Validator valid ); + FT_LOCAL( FT_ULong ) + woff2_known_tags( FT_Byte index ); FT_END_HEADER -#endif /* OTVGPOS_H_ */ +#endif /* WOFF2TAGS_H */ /* END */ diff --git a/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.c b/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.c index 20cb3f38691..53445389d04 100644 --- a/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.c +++ b/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.c @@ -4,7 +4,7 @@ * * A new `perfect' anti-aliasing renderer (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -45,7 +45,7 @@ * 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. + * 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 @@ -58,6 +58,14 @@ * 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 @@ -67,7 +75,7 @@ * callback. * * - A perfect anti-aliaser, i.e., it computes the _exact_ coverage on - * each pixel cell. + * each pixel cell by straight segments. * * - It performs a single pass on the outline (the `standard' FT2 * renderer makes two passes). @@ -75,7 +83,7 @@ * - 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 + * - For small (< 80) pixel sizes, it is faster than the standard * renderer. * */ @@ -183,6 +191,7 @@ typedef ptrdiff_t FT_PtrDist; #ifdef FT_DEBUG_LEVEL_TRACE +#ifndef __REACTOS__ /* win32ss/drivers/font/ftfd/rosglue.c defines this */ void FT_Message( const char* fmt, ... ) @@ -194,6 +203,7 @@ typedef ptrdiff_t FT_PtrDist; vfprintf( stderr, fmt, ap ); va_end( ap ); } +#endif /* empty function useful for setting a breakpoint to catch errors */ @@ -270,12 +280,11 @@ typedef ptrdiff_t FT_PtrDist; #else /* !STANDALONE_ */ -#include #include "ftgrays.h" -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H -#include FT_OUTLINE_H +#include +#include +#include +#include #include "ftsmerrs.h" @@ -327,17 +336,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 ) ) @@ -388,9 +389,9 @@ 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 ) ) /************************************************************************** @@ -432,6 +433,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 */ @@ -465,6 +469,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,7 +522,7 @@ typedef ptrdiff_t FT_PtrDist; /************************************************************************** * - * Record the current cell in the table. + * Record the current cell in the linked list. */ static void gray_record_cell( RAS_ARG ) @@ -526,10 +532,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 ) @@ -577,16 +582,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 || @@ -622,8 +624,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! */ /* */ @@ -650,6 +652,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 ); @@ -715,8 +720,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 ) @@ -732,7 +737,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; @@ -787,6 +792,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; @@ -843,8 +850,9 @@ typedef ptrdiff_t FT_PtrDist; 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 ); @@ -858,8 +866,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; @@ -868,8 +876,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 ) { @@ -896,7 +904,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 ); @@ -910,7 +918,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 ); @@ -922,7 +930,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 ); @@ -935,7 +943,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; @@ -945,7 +953,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 ); @@ -959,8 +967,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 ); @@ -979,16 +987,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; } @@ -1042,12 +1052,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 ); @@ -1060,28 +1069,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; } @@ -1092,9 +1105,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 ); @@ -1123,45 +1133,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 ); @@ -1236,8 +1214,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 ) @@ -1247,23 +1223,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 { @@ -1277,14 +1260,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 ); } @@ -1322,6 +1320,13 @@ 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; + } } } @@ -1371,7 +1376,7 @@ typedef ptrdiff_t FT_PtrDist; 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; @@ -1631,7 +1636,7 @@ typedef ptrdiff_t FT_PtrDist; gray_convert_glyph_inner( RAS_ARG, int continued ) { - volatile int error = 0; + int error; if ( ft_setjmp( ras.jump_buffer ) == 0 ) @@ -1645,7 +1650,7 @@ typedef ptrdiff_t FT_PtrDist; if ( !ras.invalid ) gray_record_cell( RAS_VAR ); - FT_TRACE7(( "band [%d..%d]: %d cell%s\n", + FT_TRACE7(( "band [%d..%d]: %ld cell%s\n", ras.min_ey, ras.max_ey, ras.num_cells, @@ -1776,7 +1781,6 @@ typedef ptrdiff_t FT_PtrDist; { const FT_Outline* outline = (const FT_Outline*)params->source; const FT_Bitmap* target_map = params->target; - FT_BBox clip; #ifndef FT_STATIC_RASTER #ifdef __REACTOS__ @@ -1830,6 +1834,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 { @@ -1875,27 +1885,15 @@ typedef ptrdiff_t FT_PtrDist; ras.render_span = (FT_Raster_Span_Func)NULL; ras.render_span_data = NULL; + ras.num_spans = -1; /* invalid */ + + ras.min_ex = 0; + ras.min_ey = 0; + ras.max_ex = (FT_Pos)target_map->width; + ras.max_ey = (FT_Pos)target_map->rows; } - /* compute clipping box */ - if ( params->flags & FT_RASTER_FLAG_DIRECT && - params->flags & FT_RASTER_FLAG_CLIP ) - clip = params->clip_box; - else - { - /* 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; - } - - /* clip to target bitmap, exit if nothing to do */ - ras.min_ex = clip.xMin; - ras.min_ey = clip.yMin; - ras.max_ex = clip.xMax; - ras.max_ey = clip.yMax; - + /* exit if nothing to do */ if ( ras.max_ex <= ras.min_ex || ras.max_ey <= ras.min_ey ) #if !defined(FT_STATIC_RASTER) && defined(__REACTOS__) { diff --git a/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.h b/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.h index e9f9c7a4add..caba632833d 100644 --- a/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.h +++ b/sdk/lib/3rdparty/freetype/src/smooth/ftgrays.h @@ -4,7 +4,7 @@ * * FreeType smooth renderer declaration * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -28,7 +28,7 @@ #include "ftimage.h" #else #include -#include FT_IMAGE_H +#include #endif diff --git a/sdk/lib/3rdparty/freetype/src/smooth/ftsmerrs.h b/sdk/lib/3rdparty/freetype/src/smooth/ftsmerrs.h index d52c0dd9e20..e93f3df9b36 100644 --- a/sdk/lib/3rdparty/freetype/src/smooth/ftsmerrs.h +++ b/sdk/lib/3rdparty/freetype/src/smooth/ftsmerrs.h @@ -4,7 +4,7 @@ * * smooth renderer error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef FTSMERRS_H_ #define FTSMERRS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX Smooth_Err_ #define FT_ERR_BASE FT_Mod_Err_Smooth -#include FT_ERRORS_H +#include #endif /* FTSMERRS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.c b/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.c index c8b6bb75186..5d66bd6fc42 100644 --- a/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.c +++ b/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.c @@ -4,7 +4,7 @@ * * Anti-aliasing renderer interface (body). * - * Copyright (C) 2000-2019 by + * Copyright (C) 2000-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,46 +16,15 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_OUTLINE_H +#include +#include +#include #include "ftsmooth.h" #include "ftgrays.h" #include "ftsmerrs.h" - /* initialize renderer -- init its raster */ - 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; - } - - /* sets render-specific mode */ static FT_Error ft_smooth_set_mode( FT_Renderer render, @@ -107,14 +76,359 @@ FT_Outline_Get_CBox( &slot->outline, cbox ); } + typedef struct TOrigin_ + { + unsigned char* origin; /* pixmap origin at the bottom-left */ + int pitch; /* pitch to go down one row */ - /* convert a slot's glyph image into a bitmap */ + } TOrigin; + +#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + + /* initialize renderer -- init its raster */ static FT_Error - ft_smooth_render_generic( FT_Renderer render, - FT_GlyphSlot slot, - FT_Render_Mode mode, - const FT_Vector* origin, - FT_Render_Mode required_mode ) + ft_smooth_init( FT_Renderer render ) + { + 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; + + render->clazz->raster_class->raster_reset( render->raster, NULL, 0 ); + + return 0; + } + + + /* This function writes every third byte in direct rendering mode */ + static void + ft_smooth_lcd_spans( int y, + int count, + const FT_Span* spans, + TOrigin* target ) + { + unsigned char* dst_line = target->origin - y * target->pitch; + unsigned char* dst; + unsigned short w; + + + for ( ; count--; spans++ ) + for ( dst = dst_line + spans->x * 3, w = spans->len; w--; dst += 3 ) + *dst = spans->coverage; + } + + + static FT_Error + ft_smooth_raster_lcd( FT_Renderer render, + FT_Outline* outline, + FT_Bitmap* bitmap ) + { + FT_Error error = FT_Err_Ok; + FT_Vector* sub = render->root.library->lcd_geometry; + FT_Pos x, y; + + FT_Raster_Params params; + TOrigin target; + + + /* Render 3 separate coverage bitmaps, shifting the outline. */ + /* Set up direct rendering to record them on each third byte. */ + params.source = outline; + params.flags = FT_RASTER_FLAG_AA | FT_RASTER_FLAG_DIRECT; + params.gray_spans = (FT_SpanFunc)ft_smooth_lcd_spans; + params.user = ⌖ + + params.clip_box.xMin = 0; + params.clip_box.yMin = 0; + params.clip_box.xMax = bitmap->width; + params.clip_box.yMax = bitmap->rows; + + if ( bitmap->pitch < 0 ) + target.origin = bitmap->buffer; + else + target.origin = bitmap->buffer + + ( bitmap->rows - 1 ) * (unsigned int)bitmap->pitch; + + target.pitch = bitmap->pitch; + + FT_Outline_Translate( outline, + -sub[0].x, + -sub[0].y ); + error = render->raster_render( render->raster, ¶ms ); + x = sub[0].x; + y = sub[0].y; + if ( error ) + goto Exit; + + target.origin++; + FT_Outline_Translate( outline, + sub[0].x - sub[1].x, + sub[0].y - sub[1].y ); + error = render->raster_render( render->raster, ¶ms ); + x = sub[1].x; + y = sub[1].y; + if ( error ) + goto Exit; + + target.origin++; + FT_Outline_Translate( outline, + sub[1].x - sub[2].x, + sub[1].y - sub[2].y ); + error = render->raster_render( render->raster, ¶ms ); + x = sub[2].x; + y = sub[2].y; + + Exit: + FT_Outline_Translate( outline, x, y ); + + return error; + } + + + static FT_Error + ft_smooth_raster_lcdv( FT_Renderer render, + FT_Outline* outline, + FT_Bitmap* bitmap ) + { + FT_Error error = FT_Err_Ok; + int pitch = bitmap->pitch; + FT_Vector* sub = render->root.library->lcd_geometry; + FT_Pos x, y; + + FT_Raster_Params params; + + + params.target = bitmap; + params.source = outline; + params.flags = FT_RASTER_FLAG_AA; + + /* Render 3 separate coverage 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; + + FT_Outline_Translate( outline, + -sub[0].y, + sub[0].x ); + error = render->raster_render( render->raster, ¶ms ); + x = sub[0].y; + y = -sub[0].x; + if ( error ) + goto Exit; + + 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, ¶ms ); + x = sub[1].y; + y = -sub[1].x; + bitmap->buffer -= pitch; + if ( error ) + goto Exit; + + 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, ¶ms ); + x = sub[2].y; + y = -sub[2].x; + bitmap->buffer -= 2 * pitch; + + Exit: + FT_Outline_Translate( outline, x, y ); + + bitmap->pitch /= 3; + bitmap->rows *= 3; + + return error; + } + +#else /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + /* initialize renderer -- init its raster */ + static FT_Error + ft_smooth_init( FT_Renderer render ) + { + /* set up default LCD filtering */ + FT_Library_SetLcdFilter( render->root.library, FT_LCD_FILTER_DEFAULT ); + + render->clazz->raster_class->raster_reset( render->raster, NULL, 0 ); + + return 0; + } + + + static FT_Error + ft_smooth_raster_lcd( FT_Renderer render, + FT_Outline* outline, + FT_Bitmap* bitmap ) + { + FT_Error error = FT_Err_Ok; + FT_Vector* points = outline->points; + FT_Vector* points_end = FT_OFFSET( points, outline->n_points ); + FT_Vector* vec; + + FT_Raster_Params params; + + + params.target = bitmap; + params.source = outline; + params.flags = FT_RASTER_FLAG_AA; + + /* implode outline */ + for ( vec = points; vec < points_end; vec++ ) + vec->x *= 3; + + /* render outline into the bitmap */ + error = render->raster_render( render->raster, ¶ms ); + + /* deflate outline */ + for ( vec = points; vec < points_end; vec++ ) + vec->x /= 3; + + return error; + } + + + static FT_Error + ft_smooth_raster_lcdv( FT_Renderer render, + FT_Outline* outline, + FT_Bitmap* bitmap ) + { + FT_Error error = FT_Err_Ok; + FT_Vector* points = outline->points; + FT_Vector* points_end = FT_OFFSET( points, outline->n_points ); + FT_Vector* vec; + + FT_Raster_Params params; + + + params.target = bitmap; + params.source = outline; + params.flags = FT_RASTER_FLAG_AA; + + /* implode outline */ + for ( vec = points; vec < points_end; vec++ ) + vec->y *= 3; + + /* render outline into the bitmap */ + error = render->raster_render( render->raster, ¶ms ); + + /* deflate outline */ + for ( vec = points; vec < points_end; vec++ ) + vec->y /= 3; + + return error; + } + +#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + +/* Oversampling scale to be used in rendering overlaps */ +#define SCALE ( 1 << 2 ) + + /* This function averages inflated spans in direct rendering mode */ + static void + ft_smooth_overlap_spans( int y, + int count, + const FT_Span* spans, + TOrigin* target ) + { + unsigned char* dst = target->origin - ( y / SCALE ) * target->pitch; + unsigned short x; + unsigned int cover, sum; + + + /* When accumulating the oversampled spans we need to assure that */ + /* fully covered pixels are equal to 255 and do not overflow. */ + /* It is important that the SCALE is a power of 2, each subpixel */ + /* cover can also reach a power of 2 after rounding, and the total */ + /* is clamped to 255 when it adds up to 256. */ + for ( ; count--; spans++ ) + { + cover = ( spans->coverage + SCALE * SCALE / 2 ) / ( SCALE * SCALE ); + for ( x = 0; x < spans->len; x++ ) + { + sum = dst[( spans->x + x ) / SCALE] + cover; + dst[( spans->x + x ) / SCALE] = (unsigned char)( sum - ( sum >> 8 ) ); + } + } + } + + + static FT_Error + ft_smooth_raster_overlap( FT_Renderer render, + FT_Outline* outline, + FT_Bitmap* bitmap ) + { + FT_Error error = FT_Err_Ok; + FT_Vector* points = outline->points; + FT_Vector* points_end = FT_OFFSET( points, outline->n_points ); + FT_Vector* vec; + + FT_Raster_Params params; + TOrigin target; + + + /* Reject outlines that are too wide for 16-bit FT_Span. */ + /* Other limits are applied upstream with the same error code. */ + if ( bitmap->width * SCALE > 0x7FFF ) + return FT_THROW( Raster_Overflow ); + + /* Set up direct rendering to average oversampled spans. */ + params.source = outline; + params.flags = FT_RASTER_FLAG_AA | FT_RASTER_FLAG_DIRECT; + params.gray_spans = (FT_SpanFunc)ft_smooth_overlap_spans; + params.user = ⌖ + + params.clip_box.xMin = 0; + params.clip_box.yMin = 0; + params.clip_box.xMax = bitmap->width * SCALE; + params.clip_box.yMax = bitmap->rows * SCALE; + + if ( bitmap->pitch < 0 ) + target.origin = bitmap->buffer; + else + target.origin = bitmap->buffer + + ( bitmap->rows - 1 ) * (unsigned int)bitmap->pitch; + + target.pitch = bitmap->pitch; + + /* inflate outline */ + for ( vec = points; vec < points_end; vec++ ) + { + vec->x *= SCALE; + vec->y *= SCALE; + } + + /* render outline into the bitmap */ + error = render->raster_render( render->raster, ¶ms ); + + /* deflate outline */ + for ( vec = points; vec < points_end; vec++ ) + { + vec->x /= SCALE; + vec->y /= SCALE; + } + + return error; + } + +#undef SCALE + + static FT_Error + ft_smooth_render( FT_Renderer render, + FT_GlyphSlot slot, + FT_Render_Mode mode, + const FT_Vector* origin ) { FT_Error error = FT_Err_Ok; FT_Outline* outline = &slot->outline; @@ -122,10 +436,6 @@ FT_Memory memory = render->root.memory; FT_Pos x_shift = 0; FT_Pos y_shift = 0; - FT_Int hmul = ( mode == FT_RENDER_MODE_LCD ); - FT_Int vmul = ( mode == FT_RENDER_MODE_LCD_V ); - - FT_Raster_Params params; /* check glyph image format */ @@ -136,7 +446,10 @@ } /* check mode */ - if ( mode != required_mode ) + if ( mode != FT_RENDER_MODE_NORMAL && + mode != FT_RENDER_MODE_LIGHT && + mode != FT_RENDER_MODE_LCD && + mode != FT_RENDER_MODE_LCD_V ) { error = FT_THROW( Cannot_Render_Glyph ); goto Exit; @@ -155,6 +468,9 @@ goto Exit; } + if ( !bitmap->rows || !bitmap->pitch ) + goto Exit; + /* allocate new one */ if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) ) goto Exit; @@ -178,188 +494,57 @@ if ( x_shift || y_shift ) FT_Outline_Translate( outline, x_shift, y_shift ); - /* set up parameters */ - params.target = bitmap; - params.source = outline; - params.flags = FT_RASTER_FLAG_AA; + if ( mode == FT_RENDER_MODE_NORMAL || + mode == FT_RENDER_MODE_LIGHT ) + { + if ( outline->flags & FT_OUTLINE_OVERLAP ) + error = ft_smooth_raster_overlap( render, outline, bitmap ); + else + { + FT_Raster_Params params; + + + params.target = bitmap; + params.source = outline; + params.flags = FT_RASTER_FLAG_AA; + + error = render->raster_render( render->raster, ¶ms ); + } + } + else + { + if ( mode == FT_RENDER_MODE_LCD ) + error = ft_smooth_raster_lcd ( render, outline, bitmap ); + else if ( mode == FT_RENDER_MODE_LCD_V ) + error = ft_smooth_raster_lcdv( render, outline, bitmap ); #ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING - /* implode outline if needed */ - { - FT_Vector* points = outline->points; - FT_Vector* points_end = points + outline->n_points; - FT_Vector* vec; - - - if ( hmul ) - for ( vec = points; vec < points_end; vec++ ) - vec->x *= 3; - - if ( vmul ) - for ( vec = points; vec < points_end; vec++ ) - vec->y *= 3; - } - - /* render outline into the bitmap */ - error = render->raster_render( render->raster, ¶ms ); - - /* deflate outline if needed */ - { - FT_Vector* points = outline->points; - FT_Vector* points_end = points + outline->n_points; - FT_Vector* vec; - - - if ( hmul ) - for ( vec = points; vec < points_end; vec++ ) - vec->x /= 3; - - if ( vmul ) - for ( vec = points; vec < points_end; vec++ ) - vec->y /= 3; - } - - if ( error ) - goto Exit; - - /* finally apply filtering */ - if ( hmul || vmul ) - { - FT_Byte* lcd_weights; - FT_Bitmap_LcdFilterFunc lcd_filter_func; - - - /* Per-face LCD filtering takes priority if set up. */ - if ( slot->face && slot->face->internal->lcd_filter_func ) + /* finally apply filtering */ { - lcd_weights = slot->face->internal->lcd_weights; - lcd_filter_func = slot->face->internal->lcd_filter_func; - } - else - { - lcd_weights = slot->library->lcd_weights; - lcd_filter_func = slot->library->lcd_filter_func; - } - - if ( lcd_filter_func ) - lcd_filter_func( bitmap, mode, lcd_weights ); - } - -#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ - - if ( hmul ) /* lcd */ - { - FT_Byte* line; - FT_Byte* temp = NULL; - FT_UInt i, j; - - unsigned int height = bitmap->rows; - unsigned int width = bitmap->width; - int pitch = bitmap->pitch; - - FT_Vector* sub = slot->library->lcd_geometry; + FT_Byte* lcd_weights; + FT_Bitmap_LcdFilterFunc lcd_filter_func; - /* 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, ¶ms ); - if ( error ) - goto Exit; - - 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, ¶ms ); - bitmap->buffer -= width; - if ( error ) - goto Exit; - - 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, ¶ms ); - 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. */ - - if ( FT_ALLOC( temp, (FT_ULong)pitch ) ) - goto Exit; - - for ( i = 0; i < height; i++ ) - { - line = bitmap->buffer + i * (FT_ULong)pitch; - for ( j = 0; j < width; j++ ) + /* Per-face LCD filtering takes priority if set up. */ + if ( slot->face && slot->face->internal->lcd_filter_func ) { - temp[3 * j ] = line[j]; - temp[3 * j + 1] = line[j + width]; - temp[3 * j + 2] = line[j + width + width]; + lcd_weights = slot->face->internal->lcd_weights; + lcd_filter_func = slot->face->internal->lcd_filter_func; } - FT_MEM_COPY( line, temp, pitch ); + else + { + lcd_weights = slot->library->lcd_weights; + lcd_filter_func = slot->library->lcd_filter_func; + } + + if ( lcd_filter_func ) + lcd_filter_func( bitmap, lcd_weights ); } - FT_FREE( temp ); +#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + } - else if ( vmul ) /* lcd_v */ - { - int pitch = bitmap->pitch; - - FT_Vector* sub = slot->library->lcd_geometry; - - - /* 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; - - FT_Outline_Translate( outline, - -sub[0].y, - sub[0].x ); - error = render->raster_render( render->raster, ¶ms ); - if ( error ) - goto Exit; - - 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, ¶ms ); - bitmap->buffer -= pitch; - if ( error ) - goto Exit; - - 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, ¶ms ); - bitmap->buffer -= 2 * pitch; - if ( error ) - goto Exit; - - x_shift -= sub[2].y; - y_shift += sub[2].x; - - bitmap->pitch /= 3; - bitmap->rows *= 3; - } - else /* grayscale */ - error = render->raster_render( render->raster, ¶ms ); - -#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ Exit: if ( !error ) @@ -380,45 +565,6 @@ } - /* convert a slot's glyph image into a bitmap */ - static FT_Error - ft_smooth_render( FT_Renderer render, - FT_GlyphSlot slot, - FT_Render_Mode mode, - const FT_Vector* origin ) - { - if ( mode == FT_RENDER_MODE_LIGHT ) - mode = FT_RENDER_MODE_NORMAL; - - return ft_smooth_render_generic( render, slot, mode, origin, - FT_RENDER_MODE_NORMAL ); - } - - - /* convert a slot's glyph image into a horizontal LCD bitmap */ - static FT_Error - ft_smooth_render_lcd( FT_Renderer render, - FT_GlyphSlot slot, - FT_Render_Mode mode, - const FT_Vector* origin ) - { - return ft_smooth_render_generic( render, slot, mode, origin, - FT_RENDER_MODE_LCD ); - } - - - /* convert a slot's glyph image into a vertical LCD bitmap */ - static FT_Error - ft_smooth_render_lcd_v( FT_Renderer render, - FT_GlyphSlot slot, - FT_Render_Mode mode, - const FT_Vector* origin ) - { - return ft_smooth_render_generic( render, slot, mode, origin, - FT_RENDER_MODE_LCD_V ); - } - - FT_DEFINE_RENDERER( ft_smooth_renderer_class, @@ -446,58 +592,4 @@ ) - FT_DEFINE_RENDERER( - ft_smooth_lcd_renderer_class, - - FT_MODULE_RENDERER, - sizeof ( FT_RendererRec ), - - "smooth-lcd", - 0x10000L, - 0x20000L, - - NULL, /* module specific interface */ - - (FT_Module_Constructor)ft_smooth_init, /* module_init */ - (FT_Module_Destructor) NULL, /* module_done */ - (FT_Module_Requester) NULL, /* get_interface */ - - FT_GLYPH_FORMAT_OUTLINE, - - (FT_Renderer_RenderFunc) ft_smooth_render_lcd, /* render_glyph */ - (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */ - (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */ - (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */ - - (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */ - ) - - - FT_DEFINE_RENDERER( - ft_smooth_lcdv_renderer_class, - - FT_MODULE_RENDERER, - sizeof ( FT_RendererRec ), - - "smooth-lcdv", - 0x10000L, - 0x20000L, - - NULL, /* module specific interface */ - - (FT_Module_Constructor)ft_smooth_init, /* module_init */ - (FT_Module_Destructor) NULL, /* module_done */ - (FT_Module_Requester) NULL, /* get_interface */ - - FT_GLYPH_FORMAT_OUTLINE, - - (FT_Renderer_RenderFunc) ft_smooth_render_lcd_v, /* render_glyph */ - (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */ - (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */ - (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */ - - (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */ - ) - - /* END */ diff --git a/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.h b/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.h index fbb21a31d05..22a88d54ec7 100644 --- a/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.h +++ b/sdk/lib/3rdparty/freetype/src/smooth/ftsmooth.h @@ -4,7 +4,7 @@ * * Anti-aliasing renderer interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define FTSMOOTH_H_ -#include -#include FT_RENDER_H +#include FT_BEGIN_HEADER @@ -29,10 +28,6 @@ FT_BEGIN_HEADER FT_DECLARE_RENDERER( ft_smooth_renderer_class ) - FT_DECLARE_RENDERER( ft_smooth_lcd_renderer_class ) - - FT_DECLARE_RENDERER( ft_smooth_lcdv_renderer_class ) - FT_END_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/smooth/smooth.c b/sdk/lib/3rdparty/freetype/src/smooth/smooth.c index 9c543d33603..04b531c0870 100644 --- a/sdk/lib/3rdparty/freetype/src/smooth/smooth.c +++ b/sdk/lib/3rdparty/freetype/src/smooth/smooth.c @@ -4,7 +4,7 @@ * * FreeType anti-aliasing rasterer module component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "ftgrays.c" #include "ftsmooth.c" diff --git a/sdk/lib/3rdparty/freetype/src/truetype/truetype.c b/sdk/lib/3rdparty/freetype/src/truetype/truetype.c index 84928e7321b..41b6808a84e 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/truetype.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/truetype.c @@ -4,7 +4,7 @@ * * FreeType TrueType driver component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "ttdriver.c" /* driver interface */ #include "ttgload.c" /* glyph loader */ diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.c b/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.c index ff626d53ab9..bf830b14188 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.c @@ -4,7 +4,7 @@ * * TrueType font driver implementation (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,22 +16,21 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_SFNT_H -#include FT_SERVICE_FONT_FORMAT_H +#include +#include +#include +#include #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT -#include FT_MULTIPLE_MASTERS_H -#include FT_SERVICE_MULTIPLE_MASTERS_H -#include FT_SERVICE_METRICS_VARIATIONS_H +#include +#include +#include #endif -#include FT_SERVICE_TRUETYPE_ENGINE_H -#include FT_SERVICE_TRUETYPE_GLYF_H -#include FT_SERVICE_PROPERTIES_H -#include FT_DRIVER_H +#include +#include +#include +#include #include "ttdriver.h" #include "ttgload.h" diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.h b/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.h index 3936c6a4def..ee1438eb6e0 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttdriver.h @@ -4,7 +4,7 @@ * * High-level TrueType driver interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define TTDRIVER_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/truetype/tterrors.h b/sdk/lib/3rdparty/freetype/src/truetype/tterrors.h index 5609d28d689..efeafd3a1b4 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/tterrors.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/tterrors.h @@ -4,7 +4,7 @@ * * TrueType error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef TTERRORS_H_ #define TTERRORS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX TT_Err_ #define FT_ERR_BASE FT_Mod_Err_TrueType -#include FT_ERRORS_H +#include #endif /* TTERRORS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttgload.c b/sdk/lib/3rdparty/freetype/src/truetype/ttgload.c index cbee27aa692..1dd319dcbf4 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttgload.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttgload.c @@ -4,7 +4,7 @@ * * TrueType Glyph Loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,15 +17,15 @@ #include -#include FT_INTERNAL_DEBUG_H +#include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_SFNT_H -#include FT_TRUETYPE_TAGS_H -#include FT_OUTLINE_H -#include FT_DRIVER_H -#include FT_LIST_H +#include +#include +#include +#include +#include +#include +#include #include "ttgload.h" #include "ttpload.h" @@ -60,7 +60,7 @@ #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 */ +#define OVERLAP_SIMPLE 0x40 /* retained as FT_OUTLINE_OVERLAP */ /************************************************************************** @@ -77,11 +77,20 @@ #define WE_HAVE_A_2X2 0x0080 #define WE_HAVE_INSTR 0x0100 #define USE_MY_METRICS 0x0200 -#define OVERLAP_COMPOUND 0x0400 /* we ignore this value */ +#define OVERLAP_COMPOUND 0x0400 /* retained as FT_OUTLINE_OVERLAP */ #define SCALED_COMPONENT_OFFSET 0x0800 #define UNSCALED_COMPONENT_OFFSET 0x1000 +#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. @@ -128,6 +137,11 @@ face->horizontal.Descender ); } +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !face->vertical_info ) + FT_TRACE5(( " [vertical metrics missing, computing values]\n" )); +#endif + FT_TRACE5(( " advance height (font units): %d\n", *ah )); FT_TRACE5(( " top side bearing (font units): %d\n", *tsb )); } @@ -324,9 +338,9 @@ loader->bbox.yMax = FT_NEXT_SHORT( p ); FT_TRACE5(( " # of contours: %d\n", loader->n_contours )); - FT_TRACE5(( " xMin: %4d xMax: %4d\n", loader->bbox.xMin, + FT_TRACE5(( " xMin: %4ld xMax: %4ld\n", loader->bbox.xMin, loader->bbox.xMax )); - FT_TRACE5(( " yMin: %4d yMax: %4d\n", loader->bbox.yMin, + FT_TRACE5(( " yMin: %4ld yMax: %4ld\n", loader->bbox.yMin, loader->bbox.yMax )); loader->cursor = p; @@ -480,6 +494,10 @@ } } + /* retain the overlap flag */ + if ( n_points && outline->tags[0] & OVERLAP_SIMPLE ) + gloader->base.outline.flags |= FT_OUTLINE_OVERLAP; + /* reading the X coordinates */ vec = outline->points; @@ -927,6 +945,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; @@ -947,26 +970,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 */ @@ -1021,10 +1050,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; } } @@ -1045,17 +1087,40 @@ 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 ); + } } } #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT - /* if we have a HVAR table, `pp1' and/or `pp2' are already adjusted */ - if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) || - !IS_HINTED( loader->load_flags ) ) + /* if we have a HVAR table, `pp1' and/or `pp2' */ + /* are already adjusted but unscaled */ + if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) && + IS_HINTED( loader->load_flags ) ) + { + loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale ); + loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale ); + /* pp1.y and pp2.y are always zero */ + } + else #endif { loader->pp1 = outline->points[n_points - 4]; @@ -1063,9 +1128,17 @@ } #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT - /* if we have a VVAR table, `pp3' and/or `pp4' are already adjusted */ - if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) || - !IS_HINTED( loader->load_flags ) ) + /* if we have a VVAR table, `pp3' and/or `pp4' */ + /* are already adjusted but unscaled */ + if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) && + IS_HINTED( loader->load_flags ) ) + { + loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale ); + loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale ); + loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale ); + loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale ); + } + else #endif { loader->pp3 = outline->points[n_points - 2]; @@ -1080,6 +1153,11 @@ error = TT_Hint_Glyph( loader, 0 ); } +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + Exit: + FT_FREE( unrounded ); +#endif + return error; } @@ -1681,6 +1759,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; @@ -1702,6 +1783,7 @@ error = TT_Vary_Apply_Glyph_Deltas( loader->face, glyph_index, &outline, + unrounded, (FT_UInt)outline.n_points ); if ( error ) goto Exit; @@ -1719,9 +1801,11 @@ /* 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 */ @@ -1861,9 +1945,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; @@ -1877,9 +1962,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; @@ -1928,6 +2014,7 @@ face, glyph_index, &outline, + unrounded, (FT_UInt)outline.n_points ) ) ) goto Exit1; @@ -1955,14 +2042,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; @@ -2088,6 +2180,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 ) @@ -2099,6 +2192,11 @@ goto Exit; } } + + /* retain the overlap flag */ + if ( gloader->base.num_subglyphs && + gloader->base.subglyphs[0].flags & OVERLAP_COMPOUND ) + gloader->base.outline.flags |= FT_OUTLINE_OVERLAP; } /***********************************************************************/ @@ -2218,13 +2316,14 @@ if ( face->vertical_info && face->vertical.number_Of_VMetrics > 0 ) { - top = (FT_Short)FT_DivFix( loader->pp3.y - bbox.yMax, + top = (FT_Short)FT_DivFix( SUB_LONG( loader->pp3.y, bbox.yMax ), y_scale ); if ( loader->pp3.y <= loader->pp4.y ) advance = 0; else - advance = (FT_UShort)FT_DivFix( loader->pp3.y - loader->pp4.y, + advance = (FT_UShort)FT_DivFix( SUB_LONG( loader->pp3.y, + loader->pp4.y ), y_scale ); } else @@ -2611,11 +2710,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; @@ -2718,13 +2812,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 )); @@ -2733,7 +2820,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; @@ -2908,8 +2995,6 @@ error = compute_glyph_metrics( &loader, glyph_index ); } - tt_loader_done( &loader ); - /* Set the `high precision' bit flag. */ /* This is _critical_ to get correct output for monochrome */ /* TrueType glyphs at all sizes using the bytecode interpreter. */ @@ -2918,6 +3003,15 @@ size->metrics->y_ppem < 24 ) glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION; + FT_TRACE1(( " subglyphs = %u, contours = %hd, points = %hd," + " flags = 0x%.3x\n", + loader.gloader->base.num_subglyphs, + glyph->outline.n_contours, + glyph->outline.n_points, + glyph->outline.flags )); + + tt_loader_done( &loader ); + Exit: #ifdef FT_DEBUG_LEVEL_TRACE if ( error ) diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttgload.h b/sdk/lib/3rdparty/freetype/src/truetype/ttgload.h index f1324bc8621..8f72cd558c8 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttgload.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttgload.h @@ -4,7 +4,7 @@ * * TrueType Glyph Loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define TTGLOAD_H_ -#include #include "ttobjs.h" #ifdef TT_USE_BYTECODE_INTERPRETER diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.c b/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.c index 020918f5336..b462263de11 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.c @@ -4,7 +4,7 @@ * * TrueType GX Font Variation loader * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. * * This file is part of the FreeType project, and may only be used, @@ -40,14 +40,14 @@ #include -#include FT_INTERNAL_DEBUG_H +#include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_SFNT_H -#include FT_TRUETYPE_TAGS_H -#include FT_TRUETYPE_IDS_H -#include FT_MULTIPLE_MASTERS_H -#include FT_LIST_H +#include +#include +#include +#include +#include +#include #include "ttpload.h" #include "ttgxvar.h" @@ -68,12 +68,16 @@ /* 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_fixedToInt( x ) \ - ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) ) +#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 ) ) /************************************************************************** @@ -397,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, @@ -1465,6 +1470,7 @@ FT_ULong table_len; FT_ULong gvar_start; FT_ULong offsetToData; + FT_ULong offsets_len; GX_GVar_Head gvar_head; static const FT_Frame_Field gvar_fields[] = @@ -1525,9 +1531,13 @@ goto Exit; } - /* rough sanity check: offsets can be either 2 or 4 bytes */ - if ( (FT_ULong)gvar_head.glyphCount * - ( ( gvar_head.flags & 1 ) ? 4 : 2 ) > table_len ) + /* offsets can be either 2 or 4 bytes */ + /* (one more offset than glyphs, to mark size of last) */ + offsets_len = ( gvar_head.glyphCount + 1 ) * + ( ( gvar_head.flags & 1 ) ? 4L : 2L ); + + /* rough sanity check */ + if (offsets_len > table_len ) { FT_TRACE1(( "ft_var_load_gvar: invalid number of glyphs\n" )); error = FT_THROW( Invalid_Table ); @@ -1536,93 +1546,116 @@ FT_TRACE2(( "loaded\n" )); - blend->gvar_size = table_len; - blend->tuplecount = gvar_head.globalCoordCount; - blend->gv_glyphcnt = gvar_head.glyphCount; - offsetToData = gvar_start + gvar_head.offsetToData; + blend->gvar_size = table_len; + offsetToData = gvar_start + gvar_head.offsetToData; FT_TRACE5(( "gvar: there %s %d shared coordinate%s:\n", - blend->tuplecount == 1 ? "is" : "are", - blend->tuplecount, - blend->tuplecount == 1 ? "" : "s" )); + gvar_head.globalCoordCount == 1 ? "is" : "are", + gvar_head.globalCoordCount, + gvar_head.globalCoordCount == 1 ? "" : "s" )); - if ( FT_NEW_ARRAY( blend->glyphoffsets, blend->gv_glyphcnt + 1 ) ) + if ( FT_FRAME_ENTER( offsets_len ) ) goto Exit; + /* offsets (one more offset than glyphs, to mark size of last) */ + if ( FT_NEW_ARRAY( blend->glyphoffsets, gvar_head.glyphCount + 1 ) ) + goto Fail2; + if ( gvar_head.flags & 1 ) { - FT_ULong limit = gvar_start + table_len; + FT_ULong limit = gvar_start + table_len; + FT_ULong max_offset = 0; - /* 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++ ) + for ( i = 0; i <= gvar_head.glyphCount; i++ ) { blend->glyphoffsets[i] = offsetToData + FT_GET_ULONG(); - /* use `>', not `>=' */ - if ( blend->glyphoffsets[i] > limit ) + + if ( max_offset <= blend->glyphoffsets[i] ) + max_offset = blend->glyphoffsets[i]; + else { FT_TRACE2(( "ft_var_load_gvar:" - " invalid glyph variation data offset for index %d\n", + " glyph variation data offset %d not monotonic\n", i )); - error = FT_THROW( Invalid_Table ); - break; + blend->glyphoffsets[i] = max_offset; + } + + /* use `<', not `<=' */ + if ( limit < blend->glyphoffsets[i] ) + { + FT_TRACE2(( "ft_var_load_gvar:" + " glyph variation data offset %d out of range\n", + i )); + blend->glyphoffsets[i] = limit; } } } else { - FT_ULong limit = gvar_start + table_len; + FT_ULong limit = gvar_start + table_len; + FT_ULong max_offset = 0; - /* 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++ ) + for ( i = 0; i <= gvar_head.glyphCount; i++ ) { blend->glyphoffsets[i] = offsetToData + FT_GET_USHORT() * 2; - /* use `>', not `>=' */ - if ( blend->glyphoffsets[i] > limit ) + + if ( max_offset <= blend->glyphoffsets[i] ) + max_offset = blend->glyphoffsets[i]; + else { FT_TRACE2(( "ft_var_load_gvar:" - " invalid glyph variation data offset for index %d\n", + " glyph variation data offset %d not monotonic\n", i )); - error = FT_THROW( Invalid_Table ); - break; + blend->glyphoffsets[i] = max_offset; + } + + /* use `<', not `<=' */ + if ( limit < blend->glyphoffsets[i] ) + { + FT_TRACE2(( "ft_var_load_gvar:" + " glyph variation data offset %d out of range\n", + i )); + blend->glyphoffsets[i] = limit; } } } + blend->gv_glyphcnt = gvar_head.glyphCount; + FT_FRAME_EXIT(); - if ( error ) - goto Exit; - if ( blend->tuplecount != 0 ) + if ( gvar_head.globalCoordCount != 0 ) { + if ( FT_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) || + FT_FRAME_ENTER( gvar_head.globalCoordCount * + gvar_head.axisCount * 2L ) ) + { + FT_TRACE2(( "ft_var_load_gvar:" + " glyph variation shared tuples missing\n" )); + goto Fail; + } + if ( FT_NEW_ARRAY( blend->tuplecoords, - gvar_head.axisCount * blend->tuplecount ) ) - goto Exit; + gvar_head.axisCount * gvar_head.globalCoordCount ) ) + goto Fail2; - if ( FT_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) || - FT_FRAME_ENTER( blend->tuplecount * gvar_head.axisCount * 2L ) ) - goto Exit; - - for ( i = 0; i < blend->tuplecount; i++ ) + for ( i = 0; i < gvar_head.globalCoordCount; i++ ) { FT_TRACE5(( " [ " )); for ( j = 0; j < (FT_UInt)gvar_head.axisCount; j++ ) { blend->tuplecoords[i * gvar_head.axisCount + j] = - FT_GET_SHORT() * 4; /* convert to FT_Fixed */ + FT_fdot14ToFixed( FT_GET_SHORT() ); FT_TRACE5(( "%.5f ", blend->tuplecoords[i * gvar_head.axisCount + j] / 65536.0 )); } FT_TRACE5(( "]\n" )); } + blend->tuplecount = gvar_head.globalCoordCount; + FT_TRACE5(( "\n" )); FT_FRAME_EXIT(); @@ -1630,6 +1663,14 @@ Exit: return error; + + Fail2: + FT_FRAME_EXIT(); + + Fail: + FT_FREE( blend->glyphoffsets ); + blend->gv_glyphcnt = 0; + goto Exit; } @@ -1688,7 +1729,7 @@ if ( tuple_coords[i] == 0 ) { - FT_TRACE6(( " tuple coordinate is zero, ignore\n", i )); + FT_TRACE6(( " tuple coordinate is zero, ignore\n" )); continue; } @@ -2122,7 +2163,7 @@ /* `fvar' table validity check in `sfnt_init_face' */ /* the various `*_size' variables, which we also use as */ - /* offsets into the `mmlen' array, must be multiples of the */ + /* offsets into the `mmvar' array, must be multiples of the */ /* pointer size (except the last one); without such an */ /* alignment there might be runtime errors due to */ /* misaligned addresses */ @@ -3032,7 +3073,7 @@ TT_Set_Named_Instance( TT_Face face, FT_UInt instance_index ) { - FT_Error error = FT_ERR( Invalid_Argument ); + FT_Error error; GX_Blend blend; FT_MM_Var* mmvar; @@ -3052,9 +3093,12 @@ /* `instance_index' starts with value 1, thus `>' */ if ( instance_index > num_instances ) + { + error = FT_ERR( Invalid_Argument ); 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; @@ -3080,7 +3124,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 ); @@ -3103,6 +3152,21 @@ /*************************************************************************/ + 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: @@ -3133,6 +3197,8 @@ FT_Error error; FT_Memory memory = stream->memory; + FT_Face root = &face->root; + FT_ULong table_start; FT_ULong table_len; @@ -3261,8 +3327,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 ) { @@ -3293,9 +3358,9 @@ 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, @@ -3360,9 +3425,9 @@ { FT_TRACE7(( " %d: %f -> %f\n", j, - ( FT_intToFixed( face->cvt[j] ) + + ( FT_fdot6ToFixed( face->cvt[j] ) + old_cvt_delta ) / 65536.0, - ( FT_intToFixed( face->cvt[j] ) + + ( FT_fdot6ToFixed( face->cvt[j] ) + cvt_deltas[j] ) / 65536.0 )); count++; } @@ -3402,9 +3467,9 @@ { FT_TRACE7(( " %d: %f -> %f\n", pindex, - ( FT_intToFixed( face->cvt[pindex] ) + + ( FT_fdot6ToFixed( face->cvt[pindex] ) + old_cvt_delta ) / 65536.0, - ( FT_intToFixed( face->cvt[pindex] ) + + ( FT_fdot6ToFixed( face->cvt[pindex] ) + cvt_deltas[pindex] ) / 65536.0 )); count++; } @@ -3429,7 +3494,7 @@ FT_TRACE5(( "\n" )); for ( i = 0; i < face->cvt_size; i++ ) - face->cvt[i] += FT_fixedToInt( cvt_deltas[i] ); + face->cvt[i] += FT_fixedToFdot6( cvt_deltas[i] ); FExit: FT_FRAME_EXIT(); @@ -3442,6 +3507,12 @@ 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; } @@ -3669,6 +3740,11 @@ * 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. */ @@ -3676,6 +3752,7 @@ TT_Vary_Apply_Glyph_Deltas( TT_Face face, FT_UInt glyph_index, FT_Outline* outline, + FT_Vector* unrounded, FT_UInt n_points ) { FT_Error error; @@ -3717,12 +3794,18 @@ 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] ) { FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:" - " no variation data for this glyph\n" )); + " no variation data for glyph %d\n", glyph_index )); return FT_Err_Ok; } @@ -3807,8 +3890,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 ) { @@ -3828,9 +3910,9 @@ 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, @@ -4064,6 +4146,9 @@ 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] ); } diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.h b/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.h index 7e8d9768a76..26e89bcf74e 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttgxvar.h @@ -4,7 +4,7 @@ * * TrueType GX Font Variation loader (specification) * - * Copyright (C) 2004-2019 by + * Copyright (C) 2004-2020 by * David Turner, Robert Wilhelm, Werner Lemberg and George Williams. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define TTGXVAR_H_ -#include #include "ttobjs.h" @@ -416,6 +415,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/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.c b/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.c index 403f3753c7b..0c3cb10ae8e 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.c @@ -4,7 +4,7 @@ * * TrueType bytecode interpreter (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,13 +20,12 @@ /* issues; many thanks! */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H -#include FT_TRIGONOMETRY_H -#include FT_SYSTEM_H -#include FT_DRIVER_H -#include FT_MULTIPLE_MASTERS_H +#include +#include +#include +#include +#include +#include #include "ttinterp.h" #include "tterrors.h" @@ -294,7 +293,7 @@ FT_Error error; - FT_TRACE1(( "Init_Context: new object at 0x%08p\n", exec )); + FT_TRACE1(( "Init_Context: new object at %p\n", (void *)exec )); exec->memory = memory; exec->callSize = 32; @@ -319,7 +318,7 @@ return FT_Err_Ok; Fail_Memory: - FT_ERROR(( "Init_Context: not enough memory for %p\n", exec )); + FT_ERROR(( "Init_Context: not enough memory for %p\n", (void *)exec )); TT_Done_Context( exec ); return error; @@ -654,23 +653,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 ), @@ -684,10 +685,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 ), @@ -695,7 +697,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 ), @@ -705,6 +707,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 */ @@ -717,17 +720,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 ), @@ -735,10 +739,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 ), @@ -752,10 +757,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 ), @@ -773,14 +779,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 ), @@ -790,23 +797,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 ), @@ -824,6 +833,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 ), @@ -841,23 +851,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 ), @@ -875,6 +887,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 ), @@ -892,6 +905,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 ), @@ -909,6 +923,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 ), @@ -937,23 +952,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", @@ -967,10 +984,11 @@ "3 SMD", "4 ELSE", "4 JMPR", - "6 SCvTCi", - "5 SSwCi", + "6 SCVTCI", + "5 SSWCI", "3 SSW", + /* 0x20 */ "3 DUP", "3 POP", "5 CLEAR", @@ -978,50 +996,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 MDAP[]", + "9 MDAP[rnd]", - "6 IUP[0]", - "6 IUP[1]", - "6 SHP[0]", - "6 SHP[1]", - "6 SHC[0]", - "6 SHC[1]", - "6 SHZ[0]", - "6 SHZ[1]", + /* 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", @@ -1035,10 +1056,11 @@ "3 AND", "2 OR", "3 NOT", - "7 DeltaP1", + "7 DELTAP1", "3 SDB", "3 SDS", + /* 0x60 */ "3 ADD", "3 SUB", "3 DIV", @@ -1047,23 +1069,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]", + "8 ROUND[G]", + "8 ROUND[B]", + "8 ROUND[W]", + "7 ROUND[]", + "9 NROUND[G]", + "9 NROUND[B]", + "9 NROUND[W]", + "8 NROUND[]", - "5 WCvtF", - "7 DeltaP2", - "7 DeltaP3", - "A DeltaCn[0]", - "A DeltaCn[1]", - "A DeltaCn[2]", + /* 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", @@ -1073,26 +1096,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", @@ -1112,6 +1137,7 @@ "7 INS_$9E", "7 INS_$9F", + /* 0xA0 */ "7 INS_$A0", "7 INS_$A1", "7 INS_$A2", @@ -1129,90 +1155,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]", + /* 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]", - "7 MDRP[?]", + "6 MDRP[]", "8 MDRP[rG]", "8 MDRP[rB]", "8 MDRP[rW]", - "8 MDRP[r?]", + "7 MDRP[r]", "8 MDRP[mG]", "8 MDRP[mB]", "8 MDRP[mW]", - "8 MDRP[m?]", + "7 MDRP[m]", "9 MDRP[mrG]", "9 MDRP[mrB]", "9 MDRP[mrW]", - "9 MDRP[mr?]", + "8 MDRP[mr]", + /* 0xD0 */ "8 MDRP[pG]", "8 MDRP[pB]", "8 MDRP[pW]", - "8 MDRP[p?]", + "7 MDRP[p]", "9 MDRP[prG]", "9 MDRP[prB]", "9 MDRP[prW]", - "9 MDRP[pr?]", + "8 MDRP[pr]", "9 MDRP[pmG]", "9 MDRP[pmB]", "9 MDRP[pmW]", - "9 MDRP[pm?]", + "8 MDRP[pm]", "A MDRP[pmrG]", "A MDRP[pmrB]", "A MDRP[pmrW]", - "A MDRP[pmr?]", + "9 MDRP[pmr]", + /* 0xE0 */ "7 MIRP[G]", "7 MIRP[B]", "7 MIRP[W]", - "7 MIRP[?]", + "6 MIRP[]", "8 MIRP[rG]", "8 MIRP[rB]", "8 MIRP[rW]", - "8 MIRP[r?]", + "7 MIRP[r]", "8 MIRP[mG]", "8 MIRP[mB]", "8 MIRP[mW]", - "8 MIRP[m?]", + "7 MIRP[m]", "9 MIRP[mrG]", "9 MIRP[mrB]", "9 MIRP[mrW]", - "9 MIRP[mr?]", + "8 MIRP[mr]", + /* 0xF0 */ "8 MIRP[pG]", "8 MIRP[pB]", "8 MIRP[pW]", - "8 MIRP[p?]", + "7 MIRP[p]", "9 MIRP[prG]", "9 MIRP[prB]", "9 MIRP[prW]", - "9 MIRP[pr?]", + "8 MIRP[pr]", "9 MIRP[pmG]", "9 MIRP[pmB]", "9 MIRP[pmW]", - "9 MIRP[pm?]", + "8 MIRP[pm]", "A MIRP[pmrG]", "A MIRP[pmrB]", "A MIRP[pmrW]", - "A MIRP[pmr?]" + "9 MIRP[pmr]" }; #endif /* FT_DEBUG_LEVEL_TRACE */ @@ -1662,6 +1693,32 @@ } + /* + * + * 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: @@ -1886,7 +1943,6 @@ zone->org[point].y = ADD_LONG( zone->org[point].y, distance ); } - /************************************************************************** * * @Function: @@ -1899,27 +1955,20 @@ * distance :: * The distance (not) to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * The compensated distance. - * - * @Note: - * The TrueType specification says very few about the relationship - * between rounding and engine compensation. However, it seems from - * the description of super round that we should add the compensation - * before rounding. */ static FT_F26Dot6 Round_None( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; - FT_UNUSED( exc ); - if ( distance >= 0 ) { @@ -1949,8 +1998,8 @@ * distance :: * The distance to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * Rounded distance. @@ -1958,12 +2007,11 @@ static FT_F26Dot6 Round_To_Grid( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; - FT_UNUSED( exc ); - if ( distance >= 0 ) { @@ -1995,8 +2043,8 @@ * distance :: * The distance to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * Rounded distance. @@ -2004,12 +2052,11 @@ static FT_F26Dot6 Round_To_Half_Grid( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; - FT_UNUSED( exc ); - if ( distance >= 0 ) { @@ -2043,8 +2090,8 @@ * distance :: * The distance to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * Rounded distance. @@ -2052,12 +2099,11 @@ static FT_F26Dot6 Round_Down_To_Grid( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; - FT_UNUSED( exc ); - if ( distance >= 0 ) { @@ -2088,8 +2134,8 @@ * distance :: * The distance to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * Rounded distance. @@ -2097,12 +2143,11 @@ static FT_F26Dot6 Round_Up_To_Grid( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; - FT_UNUSED( exc ); - if ( distance >= 0 ) { @@ -2134,8 +2179,8 @@ * distance :: * The distance to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * Rounded distance. @@ -2143,12 +2188,11 @@ static FT_F26Dot6 Round_To_Double_Grid( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; - FT_UNUSED( exc ); - if ( distance >= 0 ) { @@ -2180,8 +2224,8 @@ * distance :: * The distance to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * Rounded distance. @@ -2195,8 +2239,9 @@ static FT_F26Dot6 Round_Super( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; @@ -2235,8 +2280,8 @@ * distance :: * The distance to round. * - * compensation :: - * The engine compensation. + * color :: + * The engine compensation color. * * @Return: * Rounded distance. @@ -2248,8 +2293,9 @@ static FT_F26Dot6 Round_Super_45( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + FT_Int color ) { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; FT_F26Dot6 val; @@ -2848,7 +2894,7 @@ Ins_ODD( TT_ExecContext exc, FT_Long* args ) { - args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 ); + args[0] = ( ( exc->func_round( exc, args[0], 3 ) & 127 ) == 64 ); } @@ -2862,7 +2908,7 @@ Ins_EVEN( TT_ExecContext exc, FT_Long* args ) { - args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 ); + args[0] = ( ( exc->func_round( exc, args[0], 3 ) & 127 ) == 0 ); } @@ -3192,10 +3238,7 @@ Ins_ROUND( TT_ExecContext exc, FT_Long* args ) { - args[0] = exc->func_round( - exc, - args[0], - exc->tt_metrics.compensations[exc->opcode - 0x68] ); + args[0] = exc->func_round( exc, args[0], exc->opcode & 3 ); } @@ -3209,10 +3252,7 @@ Ins_NROUND( TT_ExecContext exc, FT_Long* args ) { - args[0] = Round_None( - exc, - args[0], - exc->tt_metrics.compensations[exc->opcode - 0x6C] ); + args[0] = Round_None( exc, args[0], exc->opcode & 3 ); } @@ -3667,7 +3707,7 @@ /* We will then parse the current table. */ rec = exc->FDefs; - limit = rec + exc->numFDefs; + limit = FT_OFFSET( rec, exc->numFDefs ); n = (FT_ULong)args[0]; for ( ; rec < limit; rec++ ) @@ -3914,6 +3954,9 @@ if ( BOUNDSL( F, exc->maxFunc + 1 ) ) goto Fail; + if ( !exc->FDefs ) + goto Fail; + /* Except for some old Apple fonts, all functions in a TrueType */ /* font are defined in increasing order, starting from 0. This */ /* means that we normally have */ @@ -4011,7 +4054,7 @@ /* */ /* If this isn't true, we need to look up the function table. */ - def = exc->FDefs + F; + def = FT_OFFSET( exc->FDefs, F ); if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) { /* look up the FDefs table */ @@ -4019,7 +4062,7 @@ def = exc->FDefs; - limit = def + exc->numFDefs; + limit = FT_OFFSET( def, exc->numFDefs ); while ( def < limit && def->opc != F ) def++; @@ -4099,7 +4142,7 @@ /* First of all, look for the same function in our table */ def = exc->IDefs; - limit = def + exc->numIDefs; + limit = FT_OFFSET( def, exc->numIDefs ); for ( ; def < limit; def++ ) if ( def->opc == (FT_ULong)args[0] ) @@ -5679,9 +5722,6 @@ { FT_F26Dot6 dx, dy; FT_UShort point; -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - FT_Int B1, B2; -#endif #ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL FT_Bool in_twilight = FT_BOOL( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 || @@ -5716,8 +5756,12 @@ } else #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - if ( SUBPIXEL_HINTING_INFINALITY ) + if ( SUBPIXEL_HINTING_INFINALITY && + exc->ignore_x_mode ) { + FT_Int B1, B2; + + /* If not using ignore_x_mode rendering, allow ZP2 move. */ /* If inline deltas aren't allowed, skip ZP2 move. */ /* If using ignore_x_mode rendering, allow ZP2 point move if: */ @@ -5726,72 +5770,57 @@ /* - the glyph is specifically set to allow SHPIX moves */ /* - the move is on a previously Y-touched point */ - if ( exc->ignore_x_mode ) + /* save point for later comparison */ + B1 = exc->zp2.cur[point].y; + + if ( exc->face->sph_compatibility_mode ) { - /* save point for later comparison */ + if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) + dy = FT_PIX_ROUND( B1 + dy ) - B1; + + /* skip post-iup deltas */ + if ( exc->iup_called && + ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) || + ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) ) + goto Skip; + + if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) && + ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || + ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) || + ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) ) + Move_Zp2_Point( exc, point, 0, dy, TRUE ); + + /* save new point */ if ( exc->GS.freeVector.y != 0 ) - B1 = exc->zp2.cur[point].y; - else - B1 = exc->zp2.cur[point].x; - - if ( !exc->face->sph_compatibility_mode && - exc->GS.freeVector.y != 0 ) { - Move_Zp2_Point( exc, point, dx, dy, TRUE ); + B2 = exc->zp2.cur[point].y; - /* save new point */ - if ( exc->GS.freeVector.y != 0 ) - { - B2 = exc->zp2.cur[point].y; - - /* reverse any disallowed moves */ - if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && - ( B1 & 63 ) != 0 && - ( B2 & 63 ) != 0 && - B1 != B2 ) - Move_Zp2_Point( exc, - point, - NEG_LONG( dx ), - NEG_LONG( dy ), - TRUE ); - } + /* reverse any disallowed moves */ + if ( ( B1 & 63 ) == 0 && + ( B2 & 63 ) != 0 && + B1 != B2 ) + Move_Zp2_Point( exc, point, 0, NEG_LONG( dy ), TRUE ); } - else if ( exc->face->sph_compatibility_mode ) - { - if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) - { - dx = FT_PIX_ROUND( B1 + dx ) - B1; - dy = FT_PIX_ROUND( B1 + dy ) - B1; - } - - /* skip post-iup deltas */ - if ( exc->iup_called && - ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) || - ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) ) - goto Skip; - - if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) && - ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || - ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) || - ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) ) - Move_Zp2_Point( exc, point, 0, dy, TRUE ); - - /* save new point */ - if ( exc->GS.freeVector.y != 0 ) - { - B2 = exc->zp2.cur[point].y; - - /* reverse any disallowed moves */ - if ( ( B1 & 63 ) == 0 && - ( B2 & 63 ) != 0 && - B1 != B2 ) - Move_Zp2_Point( exc, point, 0, NEG_LONG( dy ), TRUE ); - } - } - else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL ) - Move_Zp2_Point( exc, point, dx, dy, TRUE ); } - else + else if ( exc->GS.freeVector.y != 0 ) + { + Move_Zp2_Point( exc, point, dx, dy, TRUE ); + + /* save new point */ + B2 = exc->zp2.cur[point].y; + + /* reverse any disallowed moves */ + if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && + ( B1 & 63 ) != 0 && + ( B2 & 63 ) != 0 && + B1 != B2 ) + Move_Zp2_Point( exc, + point, + NEG_LONG( dx ), + NEG_LONG( dy ), + TRUE ); + } + else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL ) Move_Zp2_Point( exc, point, dx, dy, TRUE ); } else @@ -5839,22 +5868,8 @@ { FT_UShort point = 0; FT_F26Dot6 distance; -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - FT_F26Dot6 control_value_cutin = 0; - FT_F26Dot6 delta; - if ( SUBPIXEL_HINTING_INFINALITY ) - { - control_value_cutin = exc->GS.control_value_cutin; - - if ( exc->ignore_x_mode && - exc->GS.freeVector.x != 0 && - !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) - control_value_cutin = 0; - } -#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ - point = (FT_UShort)args[0]; if ( BOUNDS( point, exc->zp1.n_points ) || @@ -5877,16 +5892,25 @@ distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - delta = SUB_LONG( distance, args[1] ); - if ( delta < 0 ) - delta = NEG_LONG( delta ); - /* subpixel hinting - make MSIRP respect CVT cut-in; */ - if ( SUBPIXEL_HINTING_INFINALITY && - exc->ignore_x_mode && - exc->GS.freeVector.x != 0 && - delta >= control_value_cutin ) - distance = args[1]; + if ( SUBPIXEL_HINTING_INFINALITY && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 ) + { + FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin; + FT_F26Dot6 delta; + + + if ( !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + control_value_cutin = 0; + + delta = SUB_LONG( distance, args[1] ); + if ( delta < 0 ) + delta = NEG_LONG( delta ); + + if ( delta >= control_value_cutin ) + distance = args[1]; + } #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ exc->func_move( exc, @@ -5933,18 +5957,10 @@ if ( SUBPIXEL_HINTING_INFINALITY && exc->ignore_x_mode && exc->GS.freeVector.x != 0 ) - distance = SUB_LONG( - Round_None( exc, - cur_dist, - exc->tt_metrics.compensations[0] ), - cur_dist ); + distance = SUB_LONG( Round_None( exc, cur_dist, 3 ), cur_dist ); else #endif - distance = SUB_LONG( - exc->func_round( exc, - cur_dist, - exc->tt_metrics.compensations[0] ), - cur_dist ); + distance = SUB_LONG( exc->func_round( exc, cur_dist, 3 ), cur_dist ); } else distance = 0; @@ -5970,21 +5986,10 @@ FT_UShort point; FT_F26Dot6 distance; FT_F26Dot6 org_dist; - FT_F26Dot6 control_value_cutin; - control_value_cutin = exc->GS.control_value_cutin; - cvtEntry = (FT_ULong)args[1]; - point = (FT_UShort)args[0]; - -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - if ( SUBPIXEL_HINTING_INFINALITY && - exc->ignore_x_mode && - exc->GS.freeVector.x != 0 && - exc->GS.freeVector.y == 0 && - !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) - control_value_cutin = 0; -#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ + cvtEntry = (FT_ULong)args[1]; + point = (FT_UShort)args[0]; if ( BOUNDS( point, exc->zp0.n_points ) || BOUNDSL( cvtEntry, exc->cvtSize ) ) @@ -6028,7 +6033,7 @@ exc->zp0.org[point].x = TT_MulFix14( distance, exc->GS.freeVector.x ); exc->zp0.org[point].y = TT_MulFix14( distance, - exc->GS.freeVector.y ), + exc->GS.freeVector.y ); exc->zp0.cur[point] = exc->zp0.org[point]; } #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY @@ -6044,9 +6049,19 @@ if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */ { + FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin; FT_F26Dot6 delta; +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY + if ( SUBPIXEL_HINTING_INFINALITY && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + exc->GS.freeVector.y == 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + control_value_cutin = 0; +#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ + delta = SUB_LONG( distance, org_dist ); if ( delta < 0 ) delta = NEG_LONG( delta ); @@ -6058,14 +6073,10 @@ if ( SUBPIXEL_HINTING_INFINALITY && exc->ignore_x_mode && exc->GS.freeVector.x != 0 ) - distance = Round_None( exc, - distance, - exc->tt_metrics.compensations[0] ); + distance = Round_None( exc, distance, 3 ); else #endif - distance = exc->func_round( exc, - distance, - exc->tt_metrics.compensations[0] ); + distance = exc->func_round( exc, distance, 3 ); } exc->func_move( exc, &exc->zp0, point, SUB_LONG( distance, org_dist ) ); @@ -6087,19 +6098,9 @@ FT_Long* args ) { FT_UShort point = 0; - FT_F26Dot6 org_dist, distance, minimum_distance; + FT_F26Dot6 org_dist, distance; - minimum_distance = exc->GS.minimum_distance; - -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - if ( SUBPIXEL_HINTING_INFINALITY && - exc->ignore_x_mode && - exc->GS.freeVector.x != 0 && - !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) - minimum_distance = 0; -#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ - point = (FT_UShort)args[0]; if ( BOUNDS( point, exc->zp1.n_points ) || @@ -6172,27 +6173,29 @@ if ( SUBPIXEL_HINTING_INFINALITY && exc->ignore_x_mode && exc->GS.freeVector.x != 0 ) - distance = Round_None( - exc, - org_dist, - exc->tt_metrics.compensations[exc->opcode & 3] ); + distance = Round_None( exc, org_dist, exc->opcode & 3 ); else #endif - distance = exc->func_round( - exc, - org_dist, - exc->tt_metrics.compensations[exc->opcode & 3] ); + distance = exc->func_round( exc, org_dist, exc->opcode & 3 ); } else - distance = Round_None( - exc, - org_dist, - exc->tt_metrics.compensations[exc->opcode & 3] ); + distance = Round_None( exc, org_dist, exc->opcode & 3 ); /* minimum distance flag */ if ( ( exc->opcode & 8 ) != 0 ) { + FT_F26Dot6 minimum_distance = exc->GS.minimum_distance; + + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY + if ( SUBPIXEL_HINTING_INFINALITY && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + minimum_distance = 0; +#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ + if ( org_dist >= 0 ) { if ( distance < minimum_distance ) @@ -6236,30 +6239,13 @@ FT_F26Dot6 cvt_dist, distance, cur_dist, - org_dist, - control_value_cutin, - minimum_distance; -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - FT_Int B1 = 0; /* pacify compiler */ - FT_Int B2 = 0; - FT_Bool reverse_move = FALSE; -#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ + org_dist; FT_F26Dot6 delta; - minimum_distance = exc->GS.minimum_distance; - control_value_cutin = exc->GS.control_value_cutin; - point = (FT_UShort)args[0]; - cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) ); - -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - if ( SUBPIXEL_HINTING_INFINALITY && - exc->ignore_x_mode && - exc->GS.freeVector.x != 0 && - !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) - control_value_cutin = minimum_distance = 0; -#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ + point = (FT_UShort)args[0]; + cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) ); /* XXX: UNDOCUMENTED! cvt[-1] = 0 always */ @@ -6295,12 +6281,14 @@ /* twilight points (confirmed by Greg Hitchcock) */ if ( exc->GS.gep1 == 0 ) { - exc->zp1.org[point].x = exc->zp0.org[exc->GS.rp0].x + - TT_MulFix14( cvt_dist, - exc->GS.freeVector.x ); - exc->zp1.org[point].y = exc->zp0.org[exc->GS.rp0].y + - TT_MulFix14( cvt_dist, - exc->GS.freeVector.y ); + exc->zp1.org[point].x = ADD_LONG( + exc->zp0.org[exc->GS.rp0].x, + TT_MulFix14( cvt_dist, + exc->GS.freeVector.x ) ); + exc->zp1.org[point].y = ADD_LONG( + exc->zp0.org[exc->GS.rp0].y, + TT_MulFix14( cvt_dist, + exc->GS.freeVector.y ) ); exc->zp1.cur[point] = exc->zp1.org[point]; } @@ -6315,19 +6303,6 @@ cvt_dist = NEG_LONG( cvt_dist ); } -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - if ( SUBPIXEL_HINTING_INFINALITY && - exc->ignore_x_mode && - exc->GS.freeVector.y != 0 && - ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) ) - { - if ( cur_dist < -64 ) - cvt_dist -= 16; - else if ( cur_dist > 64 && cur_dist < 84 ) - cvt_dist += 32; - } -#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ - /* control value cut-in and round */ if ( ( exc->opcode & 4 ) != 0 ) @@ -6337,6 +6312,9 @@ if ( exc->GS.gep0 == exc->GS.gep1 ) { + FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin; + + /* XXX: According to Greg Hitchcock, the following wording is */ /* the right one: */ /* */ @@ -6357,10 +6335,7 @@ cvt_dist = org_dist; } - distance = exc->func_round( - exc, - cvt_dist, - exc->tt_metrics.compensations[exc->opcode & 3] ); + distance = exc->func_round( exc, cvt_dist, exc->opcode & 3 ); } else { @@ -6371,6 +6346,22 @@ exc->ignore_x_mode && exc->GS.gep0 == exc->GS.gep1 ) { + FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin; + + + if ( exc->GS.freeVector.x != 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + control_value_cutin = 0; + + if ( exc->GS.freeVector.y != 0 && + ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) ) + { + if ( cur_dist < -64 ) + cvt_dist -= 16; + else if ( cur_dist > 64 && cur_dist < 84 ) + cvt_dist += 32; + } + delta = SUB_LONG( cvt_dist, org_dist ); if ( delta < 0 ) delta = NEG_LONG( delta ); @@ -6380,16 +6371,24 @@ } #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ - distance = Round_None( - exc, - cvt_dist, - exc->tt_metrics.compensations[exc->opcode & 3] ); + distance = Round_None( exc, cvt_dist, exc->opcode & 3 ); } /* minimum distance test */ if ( ( exc->opcode & 8 ) != 0 ) { + FT_F26Dot6 minimum_distance = exc->GS.minimum_distance; + + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY + if ( SUBPIXEL_HINTING_INFINALITY && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + minimum_distance = 0; +#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ + if ( org_dist >= 0 ) { if ( distance < minimum_distance ) @@ -6403,60 +6402,51 @@ } #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - if ( SUBPIXEL_HINTING_INFINALITY ) + if ( SUBPIXEL_HINTING_INFINALITY && + exc->ignore_x_mode && + exc->GS.freeVector.y != 0 ) { + FT_Int B1, B2; + + B1 = exc->zp1.cur[point].y; /* Round moves if necessary */ - if ( exc->ignore_x_mode && - exc->GS.freeVector.y != 0 && - ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) ) + if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) distance = FT_PIX_ROUND( B1 + distance - cur_dist ) - B1 + cur_dist; - if ( exc->ignore_x_mode && - exc->GS.freeVector.y != 0 && - ( exc->opcode & 16 ) == 0 && + if ( ( exc->opcode & 16 ) == 0 && ( exc->opcode & 8 ) == 0 && ( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) ) distance += 64; - } -#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ - exc->func_move( exc, - &exc->zp1, - point, - SUB_LONG( distance, cur_dist ) ); + exc->func_move( exc, + &exc->zp1, + point, + SUB_LONG( distance, cur_dist ) ); -#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - if ( SUBPIXEL_HINTING_INFINALITY ) - { B2 = exc->zp1.cur[point].y; /* Reverse move if necessary */ - if ( exc->ignore_x_mode ) - { - if ( exc->face->sph_compatibility_mode && - exc->GS.freeVector.y != 0 && + if ( ( exc->face->sph_compatibility_mode && ( B1 & 63 ) == 0 && - ( B2 & 63 ) != 0 ) - reverse_move = TRUE; - - if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && - exc->GS.freeVector.y != 0 && - ( B2 & 63 ) != 0 && - ( B1 & 63 ) != 0 ) - reverse_move = TRUE; - } - - if ( reverse_move ) + ( B2 & 63 ) != 0 ) || + ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && + ( B1 & 63 ) != 0 && + ( B2 & 63 ) != 0 ) ) exc->func_move( exc, &exc->zp1, point, SUB_LONG( cur_dist, distance ) ); } - + else #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ + exc->func_move( exc, + &exc->zp1, + point, + SUB_LONG( distance, cur_dist ) ); + Fail: exc->GS.rp1 = exc->GS.rp0; @@ -7129,10 +7119,9 @@ FT_UShort A; FT_ULong C, P; FT_Long B; + + #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY - FT_UShort B1, B2; - - if ( SUBPIXEL_HINTING_INFINALITY && exc->ignore_x_mode && exc->iup_called && @@ -7213,6 +7202,9 @@ /* rules, always skipping deltas in subpixel direction. */ else if ( exc->ignore_x_mode && exc->GS.freeVector.y != 0 ) { + FT_UShort B1, B2; + + /* save the y value of the point now; compare after move */ B1 = (FT_UShort)exc->zp0.cur[A].y; @@ -7664,7 +7656,7 @@ Ins_UNKNOWN( TT_ExecContext exc ) { TT_DefRecord* def = exc->IDefs; - TT_DefRecord* limit = def + exc->numIDefs; + TT_DefRecord* limit = FT_OFFSET( def, exc->numIDefs ); for ( ; def < limit; def++ ) @@ -7790,7 +7782,7 @@ num_twilight_points = 0xFFFFU; FT_TRACE5(( "TT_RunIns: Resetting number of twilight points\n" - " from %d to the more reasonable value %d\n", + " from %d to the more reasonable value %ld\n", exc->twilight.n_points, num_twilight_points )); exc->twilight.n_points = (FT_UShort)num_twilight_points; @@ -7816,7 +7808,7 @@ FT_MAX( 50, exc->cvtSize / 10 ); else - exc->loopcall_counter_max = 300 + 8 * exc->cvtSize; + exc->loopcall_counter_max = 300 + 22 * exc->cvtSize; /* as a protection against an unreasonable number of CVT entries */ /* we assume at most 100 control values per glyph for the counter */ @@ -7825,11 +7817,11 @@ exc->loopcall_counter_max = 100 * (FT_ULong)exc->face->root.num_glyphs; FT_TRACE5(( "TT_RunIns: Limiting total number of loops in LOOPCALL" - " to %d\n", exc->loopcall_counter_max )); + " to %ld\n", exc->loopcall_counter_max )); exc->neg_jump_counter_max = exc->loopcall_counter_max; FT_TRACE5(( "TT_RunIns: Limiting total number of backward jumps" - " to %d\n", exc->neg_jump_counter_max )); + " to %ld\n", exc->neg_jump_counter_max )); /* set PPEM and CVT functions */ exc->tt_metrics.ratio = 0; @@ -7866,14 +7858,14 @@ /* if tracing level is 7, show current code position */ /* and the first few stack elements also */ FT_TRACE6(( " " )); - FT_TRACE7(( "%06d ", exc->IP )); + FT_TRACE7(( "%06ld ", exc->IP )); FT_TRACE6(( "%s", opcode_name[exc->opcode] + 2 )); FT_TRACE7(( "%*s", *opcode_name[exc->opcode] == 'A' ? 2 : 12 - ( *opcode_name[exc->opcode] - '0' ), "#" )); for ( n = 1; n <= cnt; n++ ) - FT_TRACE7(( " %d", exc->stack[exc->top - n] )); + FT_TRACE7(( " %ld", exc->stack[exc->top - n] )); FT_TRACE6(( "\n" )); } #endif /* FT_DEBUG_LEVEL_TRACE */ @@ -8516,7 +8508,7 @@ case FT_ERR( Invalid_Opcode ): { TT_DefRecord* def = exc->IDefs; - TT_DefRecord* limit = def + exc->numIDefs; + TT_DefRecord* limit = FT_OFFSET( def, exc->numIDefs ); for ( ; def < limit; def++ ) @@ -8591,7 +8583,7 @@ } while ( !exc->instruction_trap ); LNo_Error_: - FT_TRACE4(( " %d instruction%s executed\n", + FT_TRACE4(( " %ld instruction%s executed\n", ins_counter, ins_counter == 1 ? "" : "s" )); return FT_Err_Ok; diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.h b/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.h index 0cb1e892fb8..6a83705a6c5 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttinterp.h @@ -4,7 +4,7 @@ * * TrueType bytecode interpreter (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,6 @@ #ifndef TTINTERP_H_ #define TTINTERP_H_ -#include #include "ttobjs.h" @@ -52,7 +51,7 @@ FT_BEGIN_HEADER typedef FT_F26Dot6 (*TT_Round_Func)( TT_ExecContext exc, FT_F26Dot6 distance, - FT_F26Dot6 compensation ); + FT_Int color ); /* Point displacement along the freedom vector routine */ typedef void diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.c b/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.c index f3a432cedd6..06d45695597 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.c @@ -4,7 +4,7 @@ * * Objects manager (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H -#include FT_INTERNAL_SFNT_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include #include "ttgload.h" #include "ttpload.h" @@ -148,7 +147,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 @@ -937,7 +936,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; @@ -1094,11 +1108,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; /* zero */ } /* allocate function defs, instruction defs, cvt, and storage area */ @@ -1171,20 +1191,8 @@ if ( size->cvt_ready < 0 ) { FT_UInt i; - TT_Face face = (TT_Face)size->root.face; - /* 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], size->ttmetrics.scale ); - FT_TRACE6(( " %3d: %d (%f)\n", - i, face->cvt[i], size->cvt[i] / 64.0 )); - } - FT_TRACE6(( "\n" )); - /* all twilight points are originally zero */ for ( i = 0; i < (FT_UInt)size->twilight.n_points; i++ ) { diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.h b/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.h index 9fc654d5d10..d986deabc41 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttobjs.h @@ -4,7 +4,7 @@ * * Objects manager (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define TTOBJS_H_ -#include -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttpload.c b/sdk/lib/3rdparty/freetype/src/truetype/ttpload.c index e7718bf9b79..b1255b88cd5 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttpload.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttpload.c @@ -4,7 +4,7 @@ * * TrueType-specific tables loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_TAGS_H +#include +#include +#include +#include #include "ttpload.h" @@ -124,7 +123,7 @@ if ( face->num_locations != (FT_ULong)face->root.num_glyphs + 1 ) { - FT_TRACE2(( "glyph count mismatch! loca: %d, maxp: %d\n", + FT_TRACE2(( "glyph count mismatch! loca: %ld, maxp: %ld\n", face->num_locations - 1, face->root.num_glyphs )); /* we only handle the case where `maxp' gives a larger value */ @@ -165,7 +164,7 @@ face->num_locations = (FT_ULong)face->root.num_glyphs + 1; table_len = new_loca_len; - FT_TRACE2(( "adjusting num_locations to %d\n", + FT_TRACE2(( "adjusting num_locations to %ld\n", face->num_locations )); } else @@ -173,7 +172,7 @@ face->root.num_glyphs = face->num_locations ? (FT_Long)face->num_locations - 1 : 0; - FT_TRACE2(( "adjusting num_glyphs to %d\n", + FT_TRACE2(( "adjusting num_glyphs to %ld\n", face->root.num_glyphs )); } } @@ -238,7 +237,7 @@ if ( pos1 > face->glyf_len ) { FT_TRACE1(( "tt_face_get_location:" - " too large offset (0x%08lx) found for glyph index %ld,\n" + " too large offset (0x%08lx) found for glyph index %d,\n" " " " exceeding the end of `glyf' table (0x%08lx)\n", pos1, gindex, face->glyf_len )); @@ -252,7 +251,7 @@ if ( gindex == face->num_locations - 2 ) { FT_TRACE1(( "tt_face_get_location:" - " too large size (%ld bytes) found for glyph index %ld,\n" + " too large size (%ld bytes) found for glyph index %d,\n" " " " truncating at the end of `glyf' table to %ld bytes\n", pos2 - pos1, gindex, face->glyf_len - pos1 )); @@ -261,7 +260,7 @@ else { FT_TRACE1(( "tt_face_get_location:" - " too large offset (0x%08lx) found for glyph index %ld,\n" + " too large offset (0x%08lx) found for glyph index %d,\n" " " " exceeding the end of `glyf' table (0x%08lx)\n", pos2, gindex + 1, face->glyf_len )); @@ -352,12 +351,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(); @@ -429,7 +428,7 @@ if ( FT_FRAME_EXTRACT( table_len, face->font_program ) ) goto Exit; - FT_TRACE2(( "loaded, %12d bytes\n", face->font_program_size )); + FT_TRACE2(( "loaded, %12ld bytes\n", face->font_program_size )); } Exit: @@ -492,7 +491,7 @@ if ( FT_FRAME_EXTRACT( table_len, face->cvt_program ) ) goto Exit; - FT_TRACE2(( "loaded, %12d bytes\n", face->cvt_program_size )); + FT_TRACE2(( "loaded, %12ld bytes\n", face->cvt_program_size )); } Exit: @@ -633,7 +632,7 @@ FT_UInt nn; FT_Byte* result = NULL; FT_ULong record_size = face->hdmx_record_size; - FT_Byte* record = face->hdmx_table + 8; + FT_Byte* record = FT_OFFSET( face->hdmx_table, 8 ); for ( nn = 0; nn < face->hdmx_record_count; nn++ ) diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttpload.h b/sdk/lib/3rdparty/freetype/src/truetype/ttpload.h index 022750e3246..bb669e02786 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttpload.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttpload.h @@ -4,7 +4,7 @@ * * TrueType-specific tables loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define TTPLOAD_H_ -#include -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.c b/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.c index 23a2e5b4401..56667deaf79 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.c +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.c @@ -4,7 +4,7 @@ * * TrueType Subpixel Hinting. * - * Copyright (C) 2010-2019 by + * Copyright (C) 2010-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -15,14 +15,13 @@ * */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_SFNT_H -#include FT_TRUETYPE_TAGS_H -#include FT_OUTLINE_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include +#include +#include #include "ttsubpix.h" diff --git a/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.h b/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.h index 4966800c2d7..229a6cf055b 100644 --- a/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.h +++ b/sdk/lib/3rdparty/freetype/src/truetype/ttsubpix.h @@ -4,7 +4,7 @@ * * TrueType Subpixel Hinting. * - * Copyright (C) 2010-2019 by + * Copyright (C) 2010-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,7 +19,6 @@ #ifndef TTSUBPIX_H_ #define TTSUBPIX_H_ -#include #include "ttobjs.h" #include "ttinterp.h" diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1afm.c b/sdk/lib/3rdparty/freetype/src/type1/t1afm.c index 6841184539f..b9cd66b045d 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1afm.c +++ b/sdk/lib/3rdparty/freetype/src/type1/t1afm.c @@ -4,7 +4,7 @@ * * AFM support for Type 1 fonts (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,11 +16,10 @@ */ -#include #include "t1afm.h" -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include +#include #include "t1errors.h" diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1afm.h b/sdk/lib/3rdparty/freetype/src/type1/t1afm.h index a8e6a5495a2..edf919c7915 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1afm.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1afm.h @@ -4,7 +4,7 @@ * * AFM support for Type 1 fonts (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -19,9 +19,8 @@ #ifndef T1AFM_H_ #define T1AFM_H_ -#include #include "t1objs.h" -#include FT_INTERNAL_TYPE1_TYPES_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1driver.c b/sdk/lib/3rdparty/freetype/src/type1/t1driver.c index 8625db5b015..b786a87817e 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1driver.c +++ b/sdk/lib/3rdparty/freetype/src/type1/t1driver.c @@ -4,7 +4,7 @@ * * Type 1 driver interface (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,7 +16,6 @@ */ -#include #include "t1driver.h" #include "t1gload.h" #include "t1load.h" @@ -27,20 +26,20 @@ #include "t1afm.h" #endif -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_HASH_H -#include FT_INTERNAL_POSTSCRIPT_PROPS_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include -#include FT_SERVICE_MULTIPLE_MASTERS_H -#include FT_SERVICE_GLYPH_DICT_H -#include FT_SERVICE_FONT_FORMAT_H -#include FT_SERVICE_POSTSCRIPT_NAME_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_SERVICE_POSTSCRIPT_INFO_H -#include FT_SERVICE_PROPERTIES_H -#include FT_SERVICE_KERNING_H +#include +#include +#include +#include +#include +#include +#include +#include /************************************************************************** @@ -70,8 +69,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; diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1driver.h b/sdk/lib/3rdparty/freetype/src/type1/t1driver.h index 206f64a0bca..e7eae0b88c4 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1driver.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1driver.h @@ -4,7 +4,7 @@ * * High-level Type 1 driver interface (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define T1DRIVER_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1errors.h b/sdk/lib/3rdparty/freetype/src/type1/t1errors.h index b35f67a24c9..ad03a3d32a1 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1errors.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1errors.h @@ -4,7 +4,7 @@ * * Type 1 error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,7 +25,7 @@ #ifndef T1ERRORS_H_ #define T1ERRORS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -33,7 +33,7 @@ #define FT_ERR_PREFIX T1_Err_ #define FT_ERR_BASE FT_Mod_Err_Type1 -#include FT_ERRORS_H +#include #endif /* T1ERRORS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1gload.c b/sdk/lib/3rdparty/freetype/src/type1/t1gload.c index fd2eb42afc6..5720b862d3e 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1gload.c +++ b/sdk/lib/3rdparty/freetype/src/type1/t1gload.c @@ -4,7 +4,7 @@ * * Type 1 Glyph Loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,15 +16,14 @@ */ -#include #include "t1gload.h" -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_OUTLINE_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_INTERNAL_CFF_TYPES_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include +#include +#include #include "t1errors.h" @@ -374,7 +373,7 @@ else advances[nn] = 0; - FT_TRACE5(( " idx %d: advance width %d font unit%s\n", + FT_TRACE5(( " idx %d: advance width %ld font unit%s\n", first + nn, advances[nn], advances[nn] == 1 ? "" : "s" )); diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1gload.h b/sdk/lib/3rdparty/freetype/src/type1/t1gload.h index 80440369dc0..9947507c84a 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1gload.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1gload.h @@ -4,7 +4,7 @@ * * Type 1 Glyph Loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,7 +20,6 @@ #define T1GLOAD_H_ -#include #include "t1objs.h" diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1load.c b/sdk/lib/3rdparty/freetype/src/type1/t1load.c index 3896af70ba1..84986007b0d 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1load.c +++ b/sdk/lib/3rdparty/freetype/src/type1/t1load.c @@ -4,7 +4,7 @@ * * Type 1 font loader (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -61,12 +61,12 @@ #include -#include FT_INTERNAL_DEBUG_H +#include #include FT_CONFIG_CONFIG_H -#include FT_MULTIPLE_MASTERS_H -#include FT_INTERNAL_TYPE1_TYPES_H -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_HASH_H +#include +#include +#include +#include #include "t1load.h" #include "t1errors.h" @@ -309,31 +309,55 @@ FT_UInt i; FT_Fixed axiscoords[T1_MAX_MM_AXIS]; PS_Blend blend = face->blend; + FT_UShort* axis_flags; + + FT_Offset mmvar_size; + FT_Offset axis_flags_size; + FT_Offset axis_size; error = T1_Get_Multi_Master( face, &mmaster ); if ( error ) goto Exit; - if ( FT_ALLOC( mmvar, - sizeof ( FT_MM_Var ) + - mmaster.num_axis * sizeof ( FT_Var_Axis ) ) ) + + /* the various `*_size' variables, which we also use as */ + /* offsets into the `mmvar' array, must be multiples of the */ + /* pointer size (except the last one); without such an */ + /* alignment there might be runtime errors due to */ + /* misaligned addresses */ +#undef ALIGN_SIZE +#define ALIGN_SIZE( n ) \ + ( ( (n) + sizeof (void*) - 1 ) & ~( sizeof (void*) - 1 ) ) + + mmvar_size = ALIGN_SIZE( sizeof ( FT_MM_Var ) ); + axis_flags_size = ALIGN_SIZE( mmaster.num_axis * + sizeof ( FT_UShort ) ); + axis_size = mmaster.num_axis * sizeof ( FT_Var_Axis ); + + if ( FT_ALLOC( mmvar, mmvar_size + + axis_flags_size + + axis_size ) ) goto Exit; mmvar->num_axis = mmaster.num_axis; mmvar->num_designs = mmaster.num_designs; mmvar->num_namedstyles = 0; /* Not supported */ - mmvar->axis = (FT_Var_Axis*)&mmvar[1]; - /* Point to axes after MM_Var struct */ - mmvar->namedstyle = NULL; + + /* while axis flags are meaningless here, we have to provide the array */ + /* to make `FT_Get_Var_Axis_Flags' work: the function expects that the */ + /* values directly follow the data of `FT_MM_Var' */ + axis_flags = (FT_UShort*)( (char*)mmvar + mmvar_size ); + for ( i = 0; i < mmaster.num_axis; i++ ) + axis_flags[i] = 0; + + mmvar->axis = (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size ); + mmvar->namedstyle = NULL; for ( i = 0; i < mmaster.num_axis; i++ ) { mmvar->axis[i].name = mmaster.axis[i].name; mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum ); mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum ); - mmvar->axis[i].def = ( mmvar->axis[i].minimum + - mmvar->axis[i].maximum ) / 2; - /* Does not apply. But this value is in range */ mmvar->axis[i].strid = ~0U; /* Does not apply */ mmvar->axis[i].tag = ~0U; /* Does not apply */ @@ -1039,7 +1063,7 @@ map->design_points[p] = T1_ToInt( parser ); map->blend_points [p] = T1_ToFixed( parser, 0 ); - FT_TRACE4(( " [%d %f]", + FT_TRACE4(( " [%ld %f]", map->design_points[p], (double)map->blend_points[p] / 65536 )); } @@ -1507,12 +1531,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 */ /* */ @@ -1736,7 +1755,7 @@ */ FT_TRACE0(( "parse_subrs: adjusting number of subroutines" - " (from %d to %d)\n", + " (from %d to %ld)\n", num_subrs, ( parser->root.limit - parser->root.cursor ) >> 3 )); num_subrs = ( parser->root.limit - parser->root.cursor ) >> 3; @@ -1907,7 +1926,7 @@ if ( num_glyphs > ( limit - cur ) >> 3 ) { FT_TRACE0(( "parse_charstrings: adjusting number of glyphs" - " (from %d to %d)\n", + " (from %d to %ld)\n", num_glyphs, ( limit - cur ) >> 3 )); num_glyphs = ( limit - cur ) >> 3; } @@ -2147,7 +2166,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, @@ -2162,7 +2180,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; @@ -2633,8 +2651,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 */ @@ -2648,27 +2665,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/sdk/lib/3rdparty/freetype/src/type1/t1load.h b/sdk/lib/3rdparty/freetype/src/type1/t1load.h index 44f835bde23..4396415c203 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1load.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1load.h @@ -4,7 +4,7 @@ * * Type 1 font loader (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,10 +20,9 @@ #define T1LOAD_H_ -#include -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H -#include FT_MULTIPLE_MASTERS_H +#include +#include +#include #include "t1parse.h" diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1objs.c b/sdk/lib/3rdparty/freetype/src/type1/t1objs.c index 741388a645a..3b918b73388 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1objs.c +++ b/sdk/lib/3rdparty/freetype/src/type1/t1objs.c @@ -4,7 +4,7 @@ * * Type 1 objects manager (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -16,12 +16,11 @@ */ -#include -#include FT_INTERNAL_CALC_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_TRUETYPE_IDS_H -#include FT_DRIVER_H +#include +#include +#include +#include +#include #include "t1gload.h" #include "t1load.h" @@ -32,8 +31,8 @@ #include "t1afm.h" #endif -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include /************************************************************************** @@ -347,8 +346,8 @@ if ( error ) goto Exit; - FT_TRACE2(( "T1_Face_Init: %08p (index %d)\n", - face, + FT_TRACE2(( "T1_Face_Init: %p (index %d)\n", + (void *)face, face_index )); /* if we just wanted to check the format, leave successfully now */ diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1objs.h b/sdk/lib/3rdparty/freetype/src/type1/t1objs.h index 2161091f779..536be8ba1e3 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1objs.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1objs.h @@ -4,7 +4,7 @@ * * Type 1 objects manager (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -21,9 +21,9 @@ #include -#include FT_INTERNAL_OBJECTS_H +#include #include FT_CONFIG_CONFIG_H -#include FT_INTERNAL_TYPE1_TYPES_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1parse.c b/sdk/lib/3rdparty/freetype/src/type1/t1parse.c index 56caeb9e407..74cf38bde72 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1parse.c +++ b/sdk/lib/3rdparty/freetype/src/type1/t1parse.c @@ -4,7 +4,7 @@ * * Type 1 parser (body). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -33,10 +33,9 @@ */ -#include -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include +#include #include "t1parse.h" diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1parse.h b/sdk/lib/3rdparty/freetype/src/type1/t1parse.h index dab8fddc8b6..1ea0110b505 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1parse.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1parse.h @@ -4,7 +4,7 @@ * * Type 1 parser (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -20,9 +20,8 @@ #define T1PARSE_H_ -#include -#include FT_INTERNAL_TYPE1_TYPES_H -#include FT_INTERNAL_STREAM_H +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type1/t1tokens.h b/sdk/lib/3rdparty/freetype/src/type1/t1tokens.h index 97f2dbe0cfa..c09420355dd 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/t1tokens.h +++ b/sdk/lib/3rdparty/freetype/src/type1/t1tokens.h @@ -4,7 +4,7 @@ * * Type 1 tokenizer (specification). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, diff --git a/sdk/lib/3rdparty/freetype/src/type1/type1.c b/sdk/lib/3rdparty/freetype/src/type1/type1.c index ce8557a5fbf..cadee78994d 100644 --- a/sdk/lib/3rdparty/freetype/src/type1/type1.c +++ b/sdk/lib/3rdparty/freetype/src/type1/type1.c @@ -4,7 +4,7 @@ * * FreeType Type 1 driver component (body only). * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "t1afm.c" #include "t1driver.c" diff --git a/sdk/lib/3rdparty/freetype/src/type42/t42drivr.c b/sdk/lib/3rdparty/freetype/src/type42/t42drivr.c index 6d4e7a09554..90898b43292 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42drivr.c +++ b/sdk/lib/3rdparty/freetype/src/type42/t42drivr.c @@ -4,7 +4,7 @@ * * High-level Type 42 driver interface (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * Roberto Alameda. * * This file is part of the FreeType project, and may only be used, @@ -39,12 +39,12 @@ #include "t42drivr.h" #include "t42objs.h" #include "t42error.h" -#include FT_INTERNAL_DEBUG_H +#include -#include FT_SERVICE_FONT_FORMAT_H -#include FT_SERVICE_GLYPH_DICT_H -#include FT_SERVICE_POSTSCRIPT_NAME_H -#include FT_SERVICE_POSTSCRIPT_INFO_H +#include +#include +#include +#include #undef FT_COMPONENT #define FT_COMPONENT t42 @@ -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; diff --git a/sdk/lib/3rdparty/freetype/src/type42/t42drivr.h b/sdk/lib/3rdparty/freetype/src/type42/t42drivr.h index a35ca28f847..8bf2afc7555 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42drivr.h +++ b/sdk/lib/3rdparty/freetype/src/type42/t42drivr.h @@ -4,7 +4,7 @@ * * High-level Type 42 driver interface (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * Roberto Alameda. * * This file is part of the FreeType project, and may only be used, @@ -20,8 +20,7 @@ #define T42DRIVR_H_ -#include -#include FT_INTERNAL_DRIVER_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type42/t42error.h b/sdk/lib/3rdparty/freetype/src/type42/t42error.h index 5fb21439497..e48132ec098 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42error.h +++ b/sdk/lib/3rdparty/freetype/src/type42/t42error.h @@ -4,7 +4,7 @@ * * Type 42 error codes (specification only). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -25,7 +25,7 @@ #ifndef T42ERROR_H_ #define T42ERROR_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -33,7 +33,7 @@ #define FT_ERR_PREFIX T42_Err_ #define FT_ERR_BASE FT_Mod_Err_Type42 -#include FT_ERRORS_H +#include #endif /* T42ERROR_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/type42/t42objs.c b/sdk/lib/3rdparty/freetype/src/type42/t42objs.c index 234c0a3e975..6acfcdf4015 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42objs.c +++ b/sdk/lib/3rdparty/freetype/src/type42/t42objs.c @@ -4,7 +4,7 @@ * * Type 42 objects manager (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * Roberto Alameda. * * This file is part of the FreeType project, and may only be used, @@ -19,9 +19,9 @@ #include "t42objs.h" #include "t42parse.h" #include "t42error.h" -#include FT_INTERNAL_DEBUG_H -#include FT_LIST_H -#include FT_TRUETYPE_IDS_H +#include +#include +#include #undef FT_COMPONENT @@ -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; diff --git a/sdk/lib/3rdparty/freetype/src/type42/t42objs.h b/sdk/lib/3rdparty/freetype/src/type42/t42objs.h index 98300cf3485..69f5cffd44f 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42objs.h +++ b/sdk/lib/3rdparty/freetype/src/type42/t42objs.h @@ -4,7 +4,7 @@ * * Type 42 objects manager (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * Roberto Alameda. * * This file is part of the FreeType project, and may only be used, @@ -19,15 +19,14 @@ #ifndef T42OBJS_H_ #define T42OBJS_H_ -#include -#include FT_FREETYPE_H -#include FT_TYPE1_TABLES_H -#include FT_INTERNAL_TYPE1_TYPES_H +#include +#include +#include #include "t42types.h" -#include FT_INTERNAL_OBJECTS_H -#include FT_INTERNAL_DRIVER_H -#include FT_SERVICE_POSTSCRIPT_CMAPS_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H +#include +#include +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type42/t42parse.c b/sdk/lib/3rdparty/freetype/src/type42/t42parse.c index b653a133a55..98507699fad 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42parse.c +++ b/sdk/lib/3rdparty/freetype/src/type42/t42parse.c @@ -4,7 +4,7 @@ * * Type 42 font parser (body). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * Roberto Alameda. * * This file is part of the FreeType project, and may only be used, @@ -18,9 +18,9 @@ #include "t42parse.h" #include "t42error.h" -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include +#include +#include /************************************************************************** @@ -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 ); } @@ -373,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 */ /* */ @@ -830,7 +826,7 @@ if ( loader->num_glyphs > ( limit - parser->root.cursor ) >> 2 ) { FT_TRACE0(( "t42_parse_charstrings: adjusting number of glyphs" - " (from %d to %d)\n", + " (from %d to %ld)\n", loader->num_glyphs, ( limit - parser->root.cursor ) >> 2 )); loader->num_glyphs = ( limit - parser->root.cursor ) >> 2; @@ -1021,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/sdk/lib/3rdparty/freetype/src/type42/t42parse.h b/sdk/lib/3rdparty/freetype/src/type42/t42parse.h index 0c7bb48496d..2ccf052d784 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42parse.h +++ b/sdk/lib/3rdparty/freetype/src/type42/t42parse.h @@ -4,7 +4,7 @@ * * Type 42 font parser (specification). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * Roberto Alameda. * * This file is part of the FreeType project, and may only be used, @@ -21,7 +21,7 @@ #include "t42objs.h" -#include FT_INTERNAL_POSTSCRIPT_AUX_H +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type42/t42types.h b/sdk/lib/3rdparty/freetype/src/type42/t42types.h index a258144ec3d..ba0cc21429d 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/t42types.h +++ b/sdk/lib/3rdparty/freetype/src/type42/t42types.h @@ -4,7 +4,7 @@ * * Type 42 font data types (specification only). * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * Roberto Alameda. * * This file is part of the FreeType project, and may only be used, @@ -20,11 +20,10 @@ #define T42TYPES_H_ -#include -#include FT_FREETYPE_H -#include FT_TYPE1_TABLES_H -#include FT_INTERNAL_TYPE1_TYPES_H -#include FT_INTERNAL_POSTSCRIPT_HINTS_H +#include +#include +#include +#include FT_BEGIN_HEADER diff --git a/sdk/lib/3rdparty/freetype/src/type42/type42.c b/sdk/lib/3rdparty/freetype/src/type42/type42.c index 0cb7b77eec1..012559e2fd6 100644 --- a/sdk/lib/3rdparty/freetype/src/type42/type42.c +++ b/sdk/lib/3rdparty/freetype/src/type42/type42.c @@ -4,7 +4,7 @@ * * FreeType Type 42 driver component. * - * Copyright (C) 2002-2019 by + * Copyright (C) 2002-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -17,7 +17,6 @@ #define FT_MAKE_OPTION_SINGLE_OBJECT -#include #include "t42drivr.c" #include "t42objs.c" diff --git a/sdk/lib/3rdparty/freetype/src/winfonts/fnterrs.h b/sdk/lib/3rdparty/freetype/src/winfonts/fnterrs.h index af29307c75c..550de386fcb 100644 --- a/sdk/lib/3rdparty/freetype/src/winfonts/fnterrs.h +++ b/sdk/lib/3rdparty/freetype/src/winfonts/fnterrs.h @@ -4,7 +4,7 @@ * * Win FNT/FON error codes (specification only). * - * Copyright (C) 2001-2019 by + * Copyright (C) 2001-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, @@ -26,7 +26,7 @@ #ifndef FNTERRS_H_ #define FNTERRS_H_ -#include FT_MODULE_ERRORS_H +#include #undef FTERRORS_H_ @@ -34,7 +34,7 @@ #define FT_ERR_PREFIX FNT_Err_ #define FT_ERR_BASE FT_Mod_Err_Winfonts -#include FT_ERRORS_H +#include #endif /* FNTERRS_H_ */ diff --git a/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.c b/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.c index 2d771be2ccb..e83312d1668 100644 --- a/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.c +++ b/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.c @@ -4,7 +4,7 @@ * * FreeType font driver for Windows FNT/FON files * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * Copyright 2003 Huw D M Davies for Codeweavers * Copyright 2007 Dmitry Timoshkov for Codeweavers @@ -18,17 +18,16 @@ */ -#include -#include FT_WINFONTS_H -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_OBJECTS_H -#include FT_TRUETYPE_IDS_H +#include +#include +#include +#include +#include #include "winfnt.h" #include "fnterrs.h" -#include FT_SERVICE_WINFNT_H -#include FT_SERVICE_FONT_FORMAT_H +#include +#include /************************************************************************** * @@ -331,7 +330,7 @@ { FT_TRACE2(( "invalid alignment shift count for resource data\n" )); error = FT_THROW( Invalid_File_Format ); - goto Exit; + goto Exit1; } @@ -597,6 +596,10 @@ Exit: return error; + + Exit1: + FT_FRAME_EXIT(); + goto Exit; } diff --git a/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.h b/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.h index b628ad4c425..3367c7715e3 100644 --- a/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.h +++ b/sdk/lib/3rdparty/freetype/src/winfonts/winfnt.h @@ -4,7 +4,7 @@ * * FreeType font driver for Windows FNT/FON files * - * Copyright (C) 1996-2019 by + * Copyright (C) 1996-2020 by * David Turner, Robert Wilhelm, and Werner Lemberg. * Copyright 2007 Dmitry Timoshkov for Codeweavers * @@ -21,9 +21,8 @@ #define WINFNT_H_ -#include -#include FT_WINFONTS_H -#include FT_INTERNAL_DRIVER_H +#include +#include FT_BEGIN_HEADER diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index f509d3a59fc..92070ec1fde 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -20,12 +20,8 @@ #include FT_SFNT_NAMES_H #include FT_SYNTHESIS_H #include FT_TRUETYPE_IDS_H - -#ifndef FT_INTERNAL_INTERNAL_H - #define FT_INTERNAL_INTERNAL_H - #include FT_INTERNAL_INTERNAL_H -#endif -#include FT_INTERNAL_TRUETYPE_TYPES_H +#include FT_MODULE_H +#include // INT_TO_FIXED #include #include "font.h"