From bef7ab04f52391bcc65682ab068771c783a6815f Mon Sep 17 00:00:00 2001 From: longtran2904 <53656110+longtran2904@users.noreply.github.com> Date: Sun, 24 Aug 2025 14:44:17 +0700 Subject: [PATCH 1/2] Build freetype locally - Update to the latest version (`2.13.3`) - Add a build script (`build_freetype.bat`) - Add support for OTF files - Only build and include necessary files --- code/custom/generated/command_metadata.h | 536 +- .../foreign/freetype2/build_freetype.bat | 30 + .../freetype2/freetype/config/ftconfig.h | 498 +- .../freetype2/freetype/config/ftheader.h | 521 +- .../freetype2/freetype/config/ftmodule.h | 21 +- .../freetype2/freetype/config/ftoption.h | 1365 +-- .../freetype2/freetype/config/ftstdlib.h | 188 +- .../freetype2/freetype/config/integer-types.h | 250 + .../freetype2/freetype/config/mac-support.h | 49 + .../freetype2/freetype/config/public-macros.h | 138 + .../foreign/freetype2/freetype/freetype.h | 7439 +++++++++------- .../foreign/freetype2/freetype/ftadvanc.h | 243 +- .../foreign/freetype2/freetype/ftautoh.h | 503 -- .../foreign/freetype2/freetype/ftbbox.h | 132 +- non-source/foreign/freetype2/freetype/ftbdf.h | 244 +- .../foreign/freetype2/freetype/ftbitmap.h | 447 +- .../foreign/freetype2/freetype/ftbzip2.h | 144 +- .../foreign/freetype2/freetype/ftcache.h | 1266 +-- .../foreign/freetype2/freetype/ftcffdrv.h | 262 - .../foreign/freetype2/freetype/ftchapters.h | 303 +- non-source/foreign/freetype2/freetype/ftcid.h | 107 +- .../foreign/freetype2/freetype/ftcolor.h | 1667 ++++ .../foreign/freetype2/freetype/ftdriver.h | 1320 +++ .../foreign/freetype2/freetype/fterrdef.h | 109 +- .../foreign/freetype2/freetype/fterrors.h | 276 +- .../foreign/freetype2/freetype/ftfntfmt.h | 120 +- .../foreign/freetype2/freetype/ftgasp.h | 90 +- .../foreign/freetype2/freetype/ftglyph.h | 1101 ++- .../foreign/freetype2/freetype/ftgxval.h | 505 +- .../foreign/freetype2/freetype/ftgzip.h | 227 +- .../foreign/freetype2/freetype/ftimage.h | 1879 ++-- .../foreign/freetype2/freetype/ftincrem.h | 164 +- .../foreign/freetype2/freetype/ftlcdfil.h | 349 +- .../foreign/freetype2/freetype/ftlist.h | 424 +- .../foreign/freetype2/freetype/ftlogging.h | 184 + non-source/foreign/freetype2/freetype/ftlzw.h | 141 +- non-source/foreign/freetype2/freetype/ftmac.h | 409 +- non-source/foreign/freetype2/freetype/ftmm.h | 1010 ++- .../foreign/freetype2/freetype/ftmodapi.h | 936 +- .../foreign/freetype2/freetype/ftmoderr.h | 192 +- .../foreign/freetype2/freetype/ftotval.h | 320 +- .../foreign/freetype2/freetype/ftoutln.h | 932 +- .../foreign/freetype2/freetype/ftparams.h | 218 + non-source/foreign/freetype2/freetype/ftpfr.h | 261 +- .../foreign/freetype2/freetype/ftrender.h | 224 +- .../foreign/freetype2/freetype/ftsizes.h | 242 +- .../foreign/freetype2/freetype/ftsnames.h | 350 +- .../foreign/freetype2/freetype/ftstroke.h | 440 +- .../foreign/freetype2/freetype/ftsynth.h | 64 +- .../foreign/freetype2/freetype/ftsystem.h | 143 +- .../foreign/freetype2/freetype/fttrigon.h | 86 +- .../foreign/freetype2/freetype/ftttdrv.h | 310 - .../foreign/freetype2/freetype/fttypes.h | 877 +- .../foreign/freetype2/freetype/ftwinfnt.h | 167 +- .../freetype2/freetype/internal/autohint.h | 234 + .../freetype2/freetype/internal/cffotypes.h | 107 + .../freetype2/freetype/internal/cfftypes.h | 416 + .../freetype/internal/compiler-macros.h | 343 + .../freetype2/freetype/internal/ftcalc.h | 584 ++ .../freetype2/freetype/internal/ftdebug.h | 442 + .../freetype2/freetype/internal/ftdrv.h | 289 + .../freetype2/freetype/internal/ftgloadr.h | 147 + .../freetype2/freetype/internal/fthash.h | 135 + .../freetype2/freetype/internal/ftmemory.h | 401 + .../freetype2/freetype/internal/ftmmtypes.h | 91 + .../freetype2/freetype/internal/ftobjs.h | 1232 +++ .../freetype2/freetype/internal/ftpsprop.h | 47 + .../freetype2/freetype/internal/ftrfork.h | 245 + .../freetype2/freetype/internal/ftserv.h | 495 ++ .../freetype2/freetype/internal/ftstream.h | 570 ++ .../freetype2/freetype/internal/fttrace.h | 173 + .../freetype2/freetype/internal/ftvalid.h | 160 + .../freetype2/freetype/internal/psaux.h | 1447 +++ .../freetype2/freetype/internal/pshints.h | 699 ++ .../freetype/internal/services/svbdf.h | 66 + .../freetype/internal/services/svcfftl.h | 90 + .../freetype/internal/services/svcid.h | 69 + .../freetype/internal/services/svfntfmt.h | 55 + .../freetype/internal/services/svgldict.h | 72 + .../freetype/internal/services/svgxval.h | 72 + .../freetype/internal/services/svkern.h | 51 + .../freetype/internal/services/svmetric.h | 131 + .../freetype/internal/services/svmm.h | 214 + .../freetype/internal/services/svotval.h | 55 + .../freetype/internal/services/svpfr.h | 65 + .../freetype/internal/services/svpostnm.h | 65 + .../freetype/internal/services/svprop.h | 66 + .../freetype/internal/services/svpscmap.h | 145 + .../freetype/internal/services/svpsinfo.h | 86 + .../freetype/internal/services/svsfnt.h | 88 + .../freetype/internal/services/svttcmap.h | 90 + .../freetype/internal/services/svtteng.h | 53 + .../freetype/internal/services/svttglyf.h | 56 + .../freetype/internal/services/svwinfnt.h | 50 + .../freetype2/freetype/internal/sfnt.h | 1099 +++ .../freetype/internal/svginterface.h | 46 + .../freetype2/freetype/internal/t1types.h | 307 + .../freetype2/freetype/internal/tttypes.h | 1747 ++++ .../freetype2/freetype/internal/wofftypes.h | 312 + non-source/foreign/freetype2/freetype/otsvg.h | 336 + .../foreign/freetype2/freetype/t1tables.h | 794 +- .../foreign/freetype2/freetype/ttnameid.h | 736 +- .../foreign/freetype2/freetype/tttables.h | 1143 +-- .../foreign/freetype2/freetype/tttags.h | 49 +- .../foreign/freetype2/freetype/ttunpat.h | 63 - non-source/foreign/freetype2/ft2build.h | 65 +- non-source/foreign/freetype2/long_ftmodule.h | 33 + non-source/foreign/freetype2/long_ftoption.h | 1030 +++ .../foreign/freetype2/src/base/ftadvanc.c | 174 + .../foreign/freetype2/src/base/ftbase.c | 41 + .../foreign/freetype2/src/base/ftbase.h | 82 + .../foreign/freetype2/src/base/ftbitmap.c | 1144 +++ .../foreign/freetype2/src/base/ftcalc.c | 1126 +++ .../foreign/freetype2/src/base/ftcolor.c | 156 + .../foreign/freetype2/src/base/ftdbgmem.c | 971 +++ .../foreign/freetype2/src/base/ftdebug.c | 644 ++ .../foreign/freetype2/src/base/fterrors.c | 45 + .../foreign/freetype2/src/base/ftfntfmt.c | 54 + .../foreign/freetype2/src/base/ftgloadr.c | 383 + .../foreign/freetype2/src/base/fthash.c | 338 + .../foreign/freetype2/src/base/ftinit.c | 263 + .../foreign/freetype2/src/base/ftlcdfil.c | 437 + non-source/foreign/freetype2/src/base/ftmac.c | 1099 +++ .../foreign/freetype2/src/base/ftobjs.c | 5917 +++++++++++++ .../foreign/freetype2/src/base/ftoutln.c | 1120 +++ .../foreign/freetype2/src/base/ftpsprop.c | 284 + .../foreign/freetype2/src/base/ftrfork.c | 934 ++ .../foreign/freetype2/src/base/ftsnames.c | 185 + .../foreign/freetype2/src/base/ftstream.c | 872 ++ .../foreign/freetype2/src/base/ftsystem.c | 338 + .../foreign/freetype2/src/base/fttrigon.c | 517 ++ .../foreign/freetype2/src/base/ftutil.c | 442 + non-source/foreign/freetype2/src/cff/cff.c | 28 + .../foreign/freetype2/src/cff/cffcmap.c | 230 + .../foreign/freetype2/src/cff/cffcmap.h | 67 + .../foreign/freetype2/src/cff/cffdrivr.c | 1263 +++ .../foreign/freetype2/src/cff/cffdrivr.h | 35 + .../foreign/freetype2/src/cff/cfferrs.h | 42 + .../foreign/freetype2/src/cff/cffgload.c | 762 ++ .../foreign/freetype2/src/cff/cffgload.h | 62 + .../foreign/freetype2/src/cff/cffload.c | 2570 ++++++ .../foreign/freetype2/src/cff/cffload.h | 124 + .../foreign/freetype2/src/cff/cffobjs.c | 1175 +++ .../foreign/freetype2/src/cff/cffobjs.h | 84 + .../foreign/freetype2/src/cff/cffparse.c | 1550 ++++ .../foreign/freetype2/src/cff/cffparse.h | 144 + .../foreign/freetype2/src/cff/cfftoken.h | 150 + .../foreign/freetype2/src/psaux/afmparse.c | 1094 +++ .../foreign/freetype2/src/psaux/afmparse.h | 88 + .../foreign/freetype2/src/psaux/cffdecode.c | 2411 +++++ .../foreign/freetype2/src/psaux/cffdecode.h | 63 + .../foreign/freetype2/src/psaux/psarrst.c | 240 + .../foreign/freetype2/src/psaux/psarrst.h | 99 + .../foreign/freetype2/src/psaux/psaux.c | 40 + .../foreign/freetype2/src/psaux/psauxerr.h | 42 + .../foreign/freetype2/src/psaux/psauxmod.c | 190 + .../foreign/freetype2/src/psaux/psauxmod.h | 60 + .../foreign/freetype2/src/psaux/psblues.c | 571 ++ .../foreign/freetype2/src/psaux/psblues.h | 185 + .../foreign/freetype2/src/psaux/psconv.c | 610 ++ .../foreign/freetype2/src/psaux/psconv.h | 70 + .../foreign/freetype2/src/psaux/pserror.c | 52 + .../foreign/freetype2/src/psaux/pserror.h | 120 + .../foreign/freetype2/src/psaux/psfixed.h | 94 + .../foreign/freetype2/src/psaux/psfont.c | 566 ++ .../foreign/freetype2/src/psaux/psfont.h | 134 + non-source/foreign/freetype2/src/psaux/psft.c | 895 ++ non-source/foreign/freetype2/src/psaux/psft.h | 167 + .../foreign/freetype2/src/psaux/psglue.h | 144 + .../foreign/freetype2/src/psaux/pshints.c | 1952 +++++ .../foreign/freetype2/src/psaux/pshints.h | 288 + .../foreign/freetype2/src/psaux/psintrp.c | 3050 +++++++ .../foreign/freetype2/src/psaux/psintrp.h | 83 + .../foreign/freetype2/src/psaux/psobjs.c | 2560 ++++++ .../foreign/freetype2/src/psaux/psobjs.h | 312 + .../foreign/freetype2/src/psaux/psread.c | 112 + .../foreign/freetype2/src/psaux/psread.h | 68 + .../foreign/freetype2/src/psaux/psstack.c | 329 + .../foreign/freetype2/src/psaux/psstack.h | 122 + .../foreign/freetype2/src/psaux/pstypes.h | 77 + .../foreign/freetype2/src/psaux/t1cmap.c | 393 + .../foreign/freetype2/src/psaux/t1cmap.h | 104 + .../foreign/freetype2/src/psaux/t1decode.c | 2159 +++++ .../foreign/freetype2/src/psaux/t1decode.h | 73 + .../foreign/freetype2/src/pshinter/pshalgo.c | 2191 +++++ .../foreign/freetype2/src/pshinter/pshalgo.h | 233 + .../foreign/freetype2/src/pshinter/pshglob.c | 795 ++ .../foreign/freetype2/src/pshinter/pshglob.h | 196 + .../foreign/freetype2/src/pshinter/pshinter.c | 27 + .../foreign/freetype2/src/pshinter/pshmod.c | 125 + .../foreign/freetype2/src/pshinter/pshmod.h | 38 + .../foreign/freetype2/src/pshinter/pshnterr.h | 41 + .../foreign/freetype2/src/pshinter/pshrec.c | 1224 +++ .../foreign/freetype2/src/pshinter/pshrec.h | 171 + .../foreign/freetype2/src/psnames/psmodule.c | 621 ++ .../foreign/freetype2/src/psnames/psmodule.h | 37 + .../foreign/freetype2/src/psnames/psnamerr.h | 42 + .../foreign/freetype2/src/psnames/psnames.c | 24 + .../foreign/freetype2/src/psnames/pstables.h | 4238 +++++++++ .../foreign/freetype2/src/sfnt/pngshim.c | 462 + .../foreign/freetype2/src/sfnt/pngshim.h | 50 + .../foreign/freetype2/src/sfnt/sfdriver.c | 1384 +++ .../foreign/freetype2/src/sfnt/sfdriver.h | 35 + .../foreign/freetype2/src/sfnt/sferrors.h | 41 + non-source/foreign/freetype2/src/sfnt/sfnt.c | 41 + .../foreign/freetype2/src/sfnt/sfobjs.c | 1552 ++++ .../foreign/freetype2/src/sfnt/sfobjs.h | 58 + .../foreign/freetype2/src/sfnt/sfwoff.c | 426 + .../foreign/freetype2/src/sfnt/sfwoff.h | 43 + .../foreign/freetype2/src/sfnt/sfwoff2.c | 2380 +++++ .../foreign/freetype2/src/sfnt/sfwoff2.h | 78 + non-source/foreign/freetype2/src/sfnt/ttbdf.c | 257 + non-source/foreign/freetype2/src/sfnt/ttbdf.h | 49 + .../foreign/freetype2/src/sfnt/ttcmap.c | 3902 +++++++++ .../foreign/freetype2/src/sfnt/ttcmap.h | 126 + .../foreign/freetype2/src/sfnt/ttcmapc.h | 56 + .../foreign/freetype2/src/sfnt/ttcolr.c | 1923 ++++ .../foreign/freetype2/src/sfnt/ttcolr.h | 83 + .../foreign/freetype2/src/sfnt/ttcpal.c | 310 + .../foreign/freetype2/src/sfnt/ttcpal.h | 48 + .../foreign/freetype2/src/sfnt/ttgpos.c | 598 ++ .../foreign/freetype2/src/sfnt/ttgpos.h | 53 + .../foreign/freetype2/src/sfnt/ttkern.c | 317 + .../foreign/freetype2/src/sfnt/ttkern.h | 51 + .../foreign/freetype2/src/sfnt/ttload.c | 1496 ++++ .../foreign/freetype2/src/sfnt/ttload.h | 111 + non-source/foreign/freetype2/src/sfnt/ttmtx.c | 338 + non-source/foreign/freetype2/src/sfnt/ttmtx.h | 54 + .../foreign/freetype2/src/sfnt/ttpost.c | 484 + .../foreign/freetype2/src/sfnt/ttpost.h | 46 + .../foreign/freetype2/src/sfnt/ttsbit.c | 1685 ++++ .../foreign/freetype2/src/sfnt/ttsbit.h | 62 + non-source/foreign/freetype2/src/sfnt/ttsvg.c | 413 + non-source/foreign/freetype2/src/sfnt/ttsvg.h | 43 + .../foreign/freetype2/src/sfnt/woff2tags.c | 119 + .../foreign/freetype2/src/sfnt/woff2tags.h | 41 + .../foreign/freetype2/src/smooth/ftgrays.c | 2149 +++++ .../foreign/freetype2/src/smooth/ftgrays.h | 57 + .../foreign/freetype2/src/smooth/ftsmerrs.h | 42 + .../foreign/freetype2/src/smooth/ftsmooth.c | 605 ++ .../foreign/freetype2/src/smooth/ftsmooth.h | 37 + .../foreign/freetype2/src/smooth/smooth.c | 25 + .../foreign/freetype2/src/truetype/truetype.c | 29 + .../foreign/freetype2/src/truetype/ttdriver.c | 704 ++ .../foreign/freetype2/src/truetype/ttdriver.h | 35 + .../foreign/freetype2/src/truetype/tterrors.h | 42 + .../foreign/freetype2/src/truetype/ttgload.c | 2740 ++++++ .../foreign/freetype2/src/truetype/ttgload.h | 61 + .../foreign/freetype2/src/truetype/ttgxvar.c | 4594 ++++++++++ .../foreign/freetype2/src/truetype/ttgxvar.h | 453 + .../foreign/freetype2/src/truetype/ttinterp.c | 7751 +++++++++++++++++ .../foreign/freetype2/src/truetype/ttinterp.h | 465 + .../foreign/freetype2/src/truetype/ttobjs.c | 1543 ++++ .../foreign/freetype2/src/truetype/ttobjs.h | 426 + .../foreign/freetype2/src/truetype/ttpload.c | 665 ++ .../foreign/freetype2/src/truetype/ttpload.h | 74 + non-source/foreign/x64/freetype.lib | Bin 1213452 -> 2259796 bytes non-source/foreign/x64/freetype.pdb | Bin 0 -> 290816 bytes non-source/foreign/x64/libfreetype-mac.a | Bin 1235272 -> 0 bytes 259 files changed, 131016 insertions(+), 14247 deletions(-) create mode 100644 non-source/foreign/freetype2/build_freetype.bat create mode 100644 non-source/foreign/freetype2/freetype/config/integer-types.h create mode 100644 non-source/foreign/freetype2/freetype/config/mac-support.h create mode 100644 non-source/foreign/freetype2/freetype/config/public-macros.h delete mode 100644 non-source/foreign/freetype2/freetype/ftautoh.h delete mode 100644 non-source/foreign/freetype2/freetype/ftcffdrv.h create mode 100644 non-source/foreign/freetype2/freetype/ftcolor.h create mode 100644 non-source/foreign/freetype2/freetype/ftdriver.h create mode 100644 non-source/foreign/freetype2/freetype/ftlogging.h create mode 100644 non-source/foreign/freetype2/freetype/ftparams.h delete mode 100644 non-source/foreign/freetype2/freetype/ftttdrv.h create mode 100644 non-source/foreign/freetype2/freetype/internal/autohint.h create mode 100644 non-source/foreign/freetype2/freetype/internal/cffotypes.h create mode 100644 non-source/foreign/freetype2/freetype/internal/cfftypes.h create mode 100644 non-source/foreign/freetype2/freetype/internal/compiler-macros.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftcalc.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftdebug.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftdrv.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftgloadr.h create mode 100644 non-source/foreign/freetype2/freetype/internal/fthash.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftmemory.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftmmtypes.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftobjs.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftpsprop.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftrfork.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftserv.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftstream.h create mode 100644 non-source/foreign/freetype2/freetype/internal/fttrace.h create mode 100644 non-source/foreign/freetype2/freetype/internal/ftvalid.h create mode 100644 non-source/foreign/freetype2/freetype/internal/psaux.h create mode 100644 non-source/foreign/freetype2/freetype/internal/pshints.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svbdf.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svcfftl.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svcid.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svfntfmt.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svgldict.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svgxval.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svkern.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svmetric.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svmm.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svotval.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svpfr.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svpostnm.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svprop.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svpscmap.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svpsinfo.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svsfnt.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svttcmap.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svtteng.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svttglyf.h create mode 100644 non-source/foreign/freetype2/freetype/internal/services/svwinfnt.h create mode 100644 non-source/foreign/freetype2/freetype/internal/sfnt.h create mode 100644 non-source/foreign/freetype2/freetype/internal/svginterface.h create mode 100644 non-source/foreign/freetype2/freetype/internal/t1types.h create mode 100644 non-source/foreign/freetype2/freetype/internal/tttypes.h create mode 100644 non-source/foreign/freetype2/freetype/internal/wofftypes.h create mode 100644 non-source/foreign/freetype2/freetype/otsvg.h delete mode 100644 non-source/foreign/freetype2/freetype/ttunpat.h create mode 100644 non-source/foreign/freetype2/long_ftmodule.h create mode 100644 non-source/foreign/freetype2/long_ftoption.h create mode 100644 non-source/foreign/freetype2/src/base/ftadvanc.c create mode 100644 non-source/foreign/freetype2/src/base/ftbase.c create mode 100644 non-source/foreign/freetype2/src/base/ftbase.h create mode 100644 non-source/foreign/freetype2/src/base/ftbitmap.c create mode 100644 non-source/foreign/freetype2/src/base/ftcalc.c create mode 100644 non-source/foreign/freetype2/src/base/ftcolor.c create mode 100644 non-source/foreign/freetype2/src/base/ftdbgmem.c create mode 100644 non-source/foreign/freetype2/src/base/ftdebug.c create mode 100644 non-source/foreign/freetype2/src/base/fterrors.c create mode 100644 non-source/foreign/freetype2/src/base/ftfntfmt.c create mode 100644 non-source/foreign/freetype2/src/base/ftgloadr.c create mode 100644 non-source/foreign/freetype2/src/base/fthash.c create mode 100644 non-source/foreign/freetype2/src/base/ftinit.c create mode 100644 non-source/foreign/freetype2/src/base/ftlcdfil.c create mode 100644 non-source/foreign/freetype2/src/base/ftmac.c create mode 100644 non-source/foreign/freetype2/src/base/ftobjs.c create mode 100644 non-source/foreign/freetype2/src/base/ftoutln.c create mode 100644 non-source/foreign/freetype2/src/base/ftpsprop.c create mode 100644 non-source/foreign/freetype2/src/base/ftrfork.c create mode 100644 non-source/foreign/freetype2/src/base/ftsnames.c create mode 100644 non-source/foreign/freetype2/src/base/ftstream.c create mode 100644 non-source/foreign/freetype2/src/base/ftsystem.c create mode 100644 non-source/foreign/freetype2/src/base/fttrigon.c create mode 100644 non-source/foreign/freetype2/src/base/ftutil.c create mode 100644 non-source/foreign/freetype2/src/cff/cff.c create mode 100644 non-source/foreign/freetype2/src/cff/cffcmap.c create mode 100644 non-source/foreign/freetype2/src/cff/cffcmap.h create mode 100644 non-source/foreign/freetype2/src/cff/cffdrivr.c create mode 100644 non-source/foreign/freetype2/src/cff/cffdrivr.h create mode 100644 non-source/foreign/freetype2/src/cff/cfferrs.h create mode 100644 non-source/foreign/freetype2/src/cff/cffgload.c create mode 100644 non-source/foreign/freetype2/src/cff/cffgload.h create mode 100644 non-source/foreign/freetype2/src/cff/cffload.c create mode 100644 non-source/foreign/freetype2/src/cff/cffload.h create mode 100644 non-source/foreign/freetype2/src/cff/cffobjs.c create mode 100644 non-source/foreign/freetype2/src/cff/cffobjs.h create mode 100644 non-source/foreign/freetype2/src/cff/cffparse.c create mode 100644 non-source/foreign/freetype2/src/cff/cffparse.h create mode 100644 non-source/foreign/freetype2/src/cff/cfftoken.h create mode 100644 non-source/foreign/freetype2/src/psaux/afmparse.c create mode 100644 non-source/foreign/freetype2/src/psaux/afmparse.h create mode 100644 non-source/foreign/freetype2/src/psaux/cffdecode.c create mode 100644 non-source/foreign/freetype2/src/psaux/cffdecode.h create mode 100644 non-source/foreign/freetype2/src/psaux/psarrst.c create mode 100644 non-source/foreign/freetype2/src/psaux/psarrst.h create mode 100644 non-source/foreign/freetype2/src/psaux/psaux.c create mode 100644 non-source/foreign/freetype2/src/psaux/psauxerr.h create mode 100644 non-source/foreign/freetype2/src/psaux/psauxmod.c create mode 100644 non-source/foreign/freetype2/src/psaux/psauxmod.h create mode 100644 non-source/foreign/freetype2/src/psaux/psblues.c create mode 100644 non-source/foreign/freetype2/src/psaux/psblues.h create mode 100644 non-source/foreign/freetype2/src/psaux/psconv.c create mode 100644 non-source/foreign/freetype2/src/psaux/psconv.h create mode 100644 non-source/foreign/freetype2/src/psaux/pserror.c create mode 100644 non-source/foreign/freetype2/src/psaux/pserror.h create mode 100644 non-source/foreign/freetype2/src/psaux/psfixed.h create mode 100644 non-source/foreign/freetype2/src/psaux/psfont.c create mode 100644 non-source/foreign/freetype2/src/psaux/psfont.h create mode 100644 non-source/foreign/freetype2/src/psaux/psft.c create mode 100644 non-source/foreign/freetype2/src/psaux/psft.h create mode 100644 non-source/foreign/freetype2/src/psaux/psglue.h create mode 100644 non-source/foreign/freetype2/src/psaux/pshints.c create mode 100644 non-source/foreign/freetype2/src/psaux/pshints.h create mode 100644 non-source/foreign/freetype2/src/psaux/psintrp.c create mode 100644 non-source/foreign/freetype2/src/psaux/psintrp.h create mode 100644 non-source/foreign/freetype2/src/psaux/psobjs.c create mode 100644 non-source/foreign/freetype2/src/psaux/psobjs.h create mode 100644 non-source/foreign/freetype2/src/psaux/psread.c create mode 100644 non-source/foreign/freetype2/src/psaux/psread.h create mode 100644 non-source/foreign/freetype2/src/psaux/psstack.c create mode 100644 non-source/foreign/freetype2/src/psaux/psstack.h create mode 100644 non-source/foreign/freetype2/src/psaux/pstypes.h create mode 100644 non-source/foreign/freetype2/src/psaux/t1cmap.c create mode 100644 non-source/foreign/freetype2/src/psaux/t1cmap.h create mode 100644 non-source/foreign/freetype2/src/psaux/t1decode.c create mode 100644 non-source/foreign/freetype2/src/psaux/t1decode.h create mode 100644 non-source/foreign/freetype2/src/pshinter/pshalgo.c create mode 100644 non-source/foreign/freetype2/src/pshinter/pshalgo.h create mode 100644 non-source/foreign/freetype2/src/pshinter/pshglob.c create mode 100644 non-source/foreign/freetype2/src/pshinter/pshglob.h create mode 100644 non-source/foreign/freetype2/src/pshinter/pshinter.c create mode 100644 non-source/foreign/freetype2/src/pshinter/pshmod.c create mode 100644 non-source/foreign/freetype2/src/pshinter/pshmod.h create mode 100644 non-source/foreign/freetype2/src/pshinter/pshnterr.h create mode 100644 non-source/foreign/freetype2/src/pshinter/pshrec.c create mode 100644 non-source/foreign/freetype2/src/pshinter/pshrec.h create mode 100644 non-source/foreign/freetype2/src/psnames/psmodule.c create mode 100644 non-source/foreign/freetype2/src/psnames/psmodule.h create mode 100644 non-source/foreign/freetype2/src/psnames/psnamerr.h create mode 100644 non-source/foreign/freetype2/src/psnames/psnames.c create mode 100644 non-source/foreign/freetype2/src/psnames/pstables.h create mode 100644 non-source/foreign/freetype2/src/sfnt/pngshim.c create mode 100644 non-source/foreign/freetype2/src/sfnt/pngshim.h create mode 100644 non-source/foreign/freetype2/src/sfnt/sfdriver.c create mode 100644 non-source/foreign/freetype2/src/sfnt/sfdriver.h create mode 100644 non-source/foreign/freetype2/src/sfnt/sferrors.h create mode 100644 non-source/foreign/freetype2/src/sfnt/sfnt.c create mode 100644 non-source/foreign/freetype2/src/sfnt/sfobjs.c create mode 100644 non-source/foreign/freetype2/src/sfnt/sfobjs.h create mode 100644 non-source/foreign/freetype2/src/sfnt/sfwoff.c create mode 100644 non-source/foreign/freetype2/src/sfnt/sfwoff.h create mode 100644 non-source/foreign/freetype2/src/sfnt/sfwoff2.c create mode 100644 non-source/foreign/freetype2/src/sfnt/sfwoff2.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttbdf.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttbdf.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttcmap.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttcmap.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttcmapc.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttcolr.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttcolr.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttcpal.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttcpal.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttgpos.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttgpos.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttkern.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttkern.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttload.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttload.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttmtx.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttmtx.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttpost.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttpost.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttsbit.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttsbit.h create mode 100644 non-source/foreign/freetype2/src/sfnt/ttsvg.c create mode 100644 non-source/foreign/freetype2/src/sfnt/ttsvg.h create mode 100644 non-source/foreign/freetype2/src/sfnt/woff2tags.c create mode 100644 non-source/foreign/freetype2/src/sfnt/woff2tags.h create mode 100644 non-source/foreign/freetype2/src/smooth/ftgrays.c create mode 100644 non-source/foreign/freetype2/src/smooth/ftgrays.h create mode 100644 non-source/foreign/freetype2/src/smooth/ftsmerrs.h create mode 100644 non-source/foreign/freetype2/src/smooth/ftsmooth.c create mode 100644 non-source/foreign/freetype2/src/smooth/ftsmooth.h create mode 100644 non-source/foreign/freetype2/src/smooth/smooth.c create mode 100644 non-source/foreign/freetype2/src/truetype/truetype.c create mode 100644 non-source/foreign/freetype2/src/truetype/ttdriver.c create mode 100644 non-source/foreign/freetype2/src/truetype/ttdriver.h create mode 100644 non-source/foreign/freetype2/src/truetype/tterrors.h create mode 100644 non-source/foreign/freetype2/src/truetype/ttgload.c create mode 100644 non-source/foreign/freetype2/src/truetype/ttgload.h create mode 100644 non-source/foreign/freetype2/src/truetype/ttgxvar.c create mode 100644 non-source/foreign/freetype2/src/truetype/ttgxvar.h create mode 100644 non-source/foreign/freetype2/src/truetype/ttinterp.c create mode 100644 non-source/foreign/freetype2/src/truetype/ttinterp.h create mode 100644 non-source/foreign/freetype2/src/truetype/ttobjs.c create mode 100644 non-source/foreign/freetype2/src/truetype/ttobjs.h create mode 100644 non-source/foreign/freetype2/src/truetype/ttpload.c create mode 100644 non-source/foreign/freetype2/src/truetype/ttpload.h create mode 100644 non-source/foreign/x64/freetype.pdb delete mode 100644 non-source/foreign/x64/libfreetype-mac.a diff --git a/code/custom/generated/command_metadata.h b/code/custom/generated/command_metadata.h index 5270137e1..4013a4a54 100644 --- a/code/custom/generated/command_metadata.h +++ b/code/custom/generated/command_metadata.h @@ -290,274 +290,274 @@ i32 source_name_len; i32 line_number; }; static Command_Metadata fcoder_metacmd_table[268] = { -{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 481 }, -{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "C:\\Dev\\4cc\\code\\custom\\4coder_auto_indent.cpp", 45, 420 }, -{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "C:\\Dev\\4cc\\code\\custom\\4coder_auto_indent.cpp", 45, 430 }, -{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "C:\\Dev\\4cc\\code\\custom\\4coder_auto_indent.cpp", 45, 411 }, -{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 154 }, -{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 96 }, -{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 668 }, -{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 71 }, -{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "C:\\Dev\\4cc\\code\\custom\\4coder_build_commands.cpp", 48, 160 }, -{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "C:\\Dev\\4cc\\code\\custom\\4coder_build_commands.cpp", 48, 123 }, -{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 197 }, -{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 356 }, -{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 362 }, -{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "C:\\Dev\\4cc\\code\\custom\\4coder_build_commands.cpp", 48, 181 }, -{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines and removes all blank lines in the current buffer.", 93, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 648 }, -{ PROC_LINKS(clean_trailing_whitespace, 0), false, "clean_trailing_whitespace", 25, "Removes trailing whitespace from all lines in the current buffer.", 65, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 657 }, -{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 565 }, -{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 221 }, -{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 235 }, -{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 225 }, -{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 245 }, -{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 258 }, -{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 7 }, -{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 829 }, -{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "C:\\Dev\\4cc\\code\\custom\\4coder_build_commands.cpp", 48, 175 }, -{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 676 }, -{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "C:\\Dev\\4cc\\code\\custom\\4coder_docs.cpp", 38, 190 }, -{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "C:\\Dev\\4cc\\code\\custom\\4coder_lists.cpp", 39, 761 }, -{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 125 }, -{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 149 }, -{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 110 }, -{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 124 }, -{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "C:\\Dev\\4cc\\code\\custom\\4coder_docs.cpp", 38, 175 }, -{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 119 }, -{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 759 }, -{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 2067 }, -{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "C:\\Dev\\4cc\\code\\custom\\4coder_default_hooks.cpp", 47, 7 }, -{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "C:\\Dev\\4cc\\code\\custom\\4coder_default_hooks.cpp", 47, 33 }, -{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "C:\\Dev\\4cc\\code\\custom\\4coder_default_hooks.cpp", 47, 77 }, -{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 162 }, -{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 79 }, -{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 112 }, -{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1385 }, -{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1557 }, -{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 134 }, -{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 90 }, -{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 137 }, -{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 10 }, -{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1543 }, -{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "C:\\Dev\\4cc\\code\\custom\\4coder_cli_command.cpp", 45, 22 }, -{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "C:\\Dev\\4cc\\code\\custom\\4coder_cli_command.cpp", 45, 7 }, -{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 848 }, -{ PROC_LINKS(go_to_user_directory, 0), false, "go_to_user_directory", 20, "Go to the 4coder user directory", 31, "C:\\Dev\\4cc\\code\\custom\\4coder_config.cpp", 40, 1655 }, -{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_helper.cpp", 40, 2258 }, -{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "C:\\Dev\\4cc\\code\\custom\\4coder_helper.cpp", 40, 2266 }, -{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 525 }, -{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 542 }, -{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 348 }, -{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 375 }, -{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 856 }, -{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 464 }, -{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 494 }, -{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 481 }, -{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 511 }, -{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 706 }, -{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 692 }, -{ PROC_LINKS(hit_sfx, 0), false, "hit_sfx", 7, "Play the hit sound effect", 25, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 240 }, -{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "C:\\Dev\\4cc\\code\\custom\\4coder_tutorial.cpp", 42, 869 }, -{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 70 }, -{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 564 }, -{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 45, 581 }, -{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 748 }, -{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "C:\\Dev\\4cc\\code\\custom\\4coder_lists.cpp", 39, 521 }, -{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "C:\\Dev\\4cc\\code\\custom\\4coder_lists.cpp", 39, 661 }, -{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "C:\\Dev\\4cc\\code\\custom\\4coder_lists.cpp", 39, 715 }, -{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "C:\\Dev\\4cc\\code\\custom\\4coder_lists.cpp", 39, 612 }, -{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "C:\\Dev\\4cc\\code\\custom\\4coder_lists.cpp", 39, 511 }, -{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "C:\\Dev\\4cc\\code\\custom\\4coder_code_index_listers.cpp", 52, 12 }, -{ PROC_LINKS(jump_to_definition_at_cursor, 0), true, "jump_to_definition_at_cursor", 28, "Jump to the first definition in the code index matching an identifier at the cursor", 83, "C:\\Dev\\4cc\\code\\custom\\4coder_code_index_listers.cpp", 52, 68 }, -{ PROC_LINKS(jump_to_last_point, 0), false, "jump_to_last_point", 18, "Read from the top of the point stack and jump there; if already there pop the top and go to the next option", 107, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1338 }, -{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "C:\\Dev\\4cc\\code\\custom\\4coder_keyboard_macro.cpp", 48, 54 }, -{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "C:\\Dev\\4cc\\code\\custom\\4coder_keyboard_macro.cpp", 48, 77 }, -{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "C:\\Dev\\4cc\\code\\custom\\4coder_keyboard_macro.cpp", 48, 41 }, -{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1728 }, -{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "C:\\Dev\\4cc\\code\\custom\\4coder_tutorial.cpp", 42, 9 }, -{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 212 }, -{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "C:\\Dev\\4cc\\code\\custom\\4coder_function_list.cpp", 47, 296 }, -{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "C:\\Dev\\4cc\\code\\custom\\4coder_function_list.cpp", 47, 302 }, -{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "C:\\Dev\\4cc\\code\\custom\\4coder_function_list.cpp", 47, 268 }, -{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "C:\\Dev\\4cc\\code\\custom\\4coder_function_list.cpp", 47, 278 }, -{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 168 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 180 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 192 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 198 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 204 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 210 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 216 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 224 }, -{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 174 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 186 }, -{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 856 }, -{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "C:\\Dev\\4cc\\code\\custom\\4coder_config.cpp", 40, 1611 }, -{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 535 }, -{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 554 }, -{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1497 }, -{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 47, 44 }, -{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "C:\\Dev\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 47, 237 }, -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "C:\\Dev\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 47, 249 }, -{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 47, 29 }, -{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "C:\\Dev\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 47, 231 }, -{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "C:\\Dev\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 47, 243 }, -{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 801 }, -{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 268 }, -{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 342 }, -{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 354 }, -{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 360 }, -{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 413 }, -{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 437 }, -{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 425 }, -{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 443 }, -{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 520 }, -{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 534 }, -{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 492 }, -{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 477 }, -{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 506 }, -{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1537 }, -{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1531 }, -{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 451 }, -{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 513 }, -{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 527 }, -{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 485 }, -{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 469 }, -{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 499 }, -{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 336 }, -{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 348 }, -{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 407 }, -{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 431 }, -{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 419 }, -{ PROC_LINKS(multi_paste, 0), false, "multi_paste", 11, "Paste multiple entries from the clipboard at once", 49, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 229 }, -{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 371 }, -{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 380 }, -{ PROC_LINKS(music_start, 0), false, "music_start", 11, "Starts the music.", 17, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 213 }, -{ PROC_LINKS(music_stop, 0), false, "music_stop", 10, "Stops the music.", 16, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 234 }, -{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 838 }, -{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 847 }, -{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1578 }, -{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 2061 }, -{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 46 }, -{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 62 }, -{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 54 }, -{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1661 }, -{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 382 }, -{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 372 }, -{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 378 }, -{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 370 }, -{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 130 }, -{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 207 }, -{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 164 }, -{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "C:\\Dev\\4cc\\code\\custom\\4coder_clipboard.cpp", 43, 214 }, -{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 106 }, -{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 29 }, -{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "C:\\Dev\\4cc\\code\\custom\\4coder_profile.cpp", 41, 226 }, -{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "C:\\Dev\\4cc\\code\\custom\\4coder_profile.cpp", 41, 219 }, -{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "C:\\Dev\\4cc\\code\\custom\\4coder_profile.cpp", 41, 212 }, -{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "C:\\Dev\\4cc\\code\\custom\\4coder_profile_inspect.cpp", 49, 886 }, -{ PROC_LINKS(project_command_F1, 0), false, "project_command_F1", 18, "Run the command with index 1", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1084 }, -{ PROC_LINKS(project_command_F10, 0), false, "project_command_F10", 19, "Run the command with index 10", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1138 }, -{ PROC_LINKS(project_command_F11, 0), false, "project_command_F11", 19, "Run the command with index 11", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1144 }, -{ PROC_LINKS(project_command_F12, 0), false, "project_command_F12", 19, "Run the command with index 12", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1150 }, -{ PROC_LINKS(project_command_F13, 0), false, "project_command_F13", 19, "Run the command with index 13", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1156 }, -{ PROC_LINKS(project_command_F14, 0), false, "project_command_F14", 19, "Run the command with index 14", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1162 }, -{ PROC_LINKS(project_command_F15, 0), false, "project_command_F15", 19, "Run the command with index 15", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1168 }, -{ PROC_LINKS(project_command_F16, 0), false, "project_command_F16", 19, "Run the command with index 16", 29, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1174 }, -{ PROC_LINKS(project_command_F2, 0), false, "project_command_F2", 18, "Run the command with index 2", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1090 }, -{ PROC_LINKS(project_command_F3, 0), false, "project_command_F3", 18, "Run the command with index 3", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1096 }, -{ PROC_LINKS(project_command_F4, 0), false, "project_command_F4", 18, "Run the command with index 4", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1102 }, -{ PROC_LINKS(project_command_F5, 0), false, "project_command_F5", 18, "Run the command with index 5", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1108 }, -{ PROC_LINKS(project_command_F6, 0), false, "project_command_F6", 18, "Run the command with index 6", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1114 }, -{ PROC_LINKS(project_command_F7, 0), false, "project_command_F7", 18, "Run the command with index 7", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1120 }, -{ PROC_LINKS(project_command_F8, 0), false, "project_command_F8", 18, "Run the command with index 8", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1126 }, -{ PROC_LINKS(project_command_F9, 0), false, "project_command_F9", 18, "Run the command with index 9", 28, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1132 }, -{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1036 }, -{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 974 }, -{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1000 }, -{ PROC_LINKS(project_reprint, 0), false, "project_reprint", 15, "Prints the current project to the file it was loaded from; prints in the most recent project file version", 105, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1046 }, -{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1284 }, -{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1305 }, -{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1321 }, -{ PROC_LINKS(quick_swap_buffer, 0), false, "quick_swap_buffer", 17, "Change to the most recently used buffer in this view - or to the top of the buffer stack if the most recent doesn't exist anymore", 129, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1708 }, -{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1888 }, -{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1985 }, -{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1462 }, -{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1746 }, -{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1194 }, -{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1185 }, -{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1176 }, -{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1117 }, -{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1129 }, -{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1736 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 454 }, -{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1429 }, -{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1111 }, -{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1123 }, -{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "C:\\Dev\\4cc\\code\\custom\\4coder_helper.cpp", 40, 2246 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "C:\\Dev\\4cc\\code\\custom\\4coder_helper.cpp", 40, 2234 }, -{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "C:\\Dev\\4cc\\code\\custom\\4coder_helper.cpp", 40, 2252 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "C:\\Dev\\4cc\\code\\custom\\4coder_helper.cpp", 40, 2240 }, -{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 543 }, -{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 57 }, -{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 66 }, -{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 82 }, -{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 99 }, -{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 27 }, -{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "C:\\Dev\\4cc\\code\\custom\\4coder_scope_commands.cpp", 48, 39 }, -{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "C:\\Dev\\4cc\\code\\custom\\4coder_eol.cpp", 37, 125 }, -{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "C:\\Dev\\4cc\\code\\custom\\4coder_eol.cpp", 37, 112 }, -{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "C:\\Dev\\4cc\\code\\custom\\4coder_eol.cpp", 37, 86 }, -{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "C:\\Dev\\4cc\\code\\custom\\4coder_eol.cpp", 37, 99 }, -{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 728 }, -{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 770 }, -{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 115 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 499 }, -{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 493 }, -{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1018 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1030 }, -{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1024 }, -{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "C:\\Dev\\4cc\\code\\custom\\4coder_project_commands.cpp", 50, 1011 }, -{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 699 }, -{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 685 }, -{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "C:\\Dev\\4cc\\code\\custom\\4coder_log_parser.cpp", 44, 991 }, -{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 179 }, -{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 187 }, -{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 237 }, -{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "C:\\Dev\\4cc\\code\\custom\\4coder_examples.cpp", 42, 179 }, -{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 475 }, -{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1686 }, -{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "C:\\Dev\\4cc\\code\\custom\\4coder_lists.cpp", 39, 785 }, -{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 569 }, -{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 556 }, -{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 713 }, -{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 722 }, -{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 529 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 513 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 505 }, -{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 827 }, -{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 835 }, -{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 487 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "C:\\Dev\\4cc\\code\\custom\\4coder_default_framework.cpp", 51, 521 }, -{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 818 }, -{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "C:\\Dev\\4cc\\code\\custom\\4coder_code_index.cpp", 44, 1238 }, -{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "C:\\Dev\\4cc\\code\\custom\\4coder_tutorial.cpp", 42, 20 }, -{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "C:\\Dev\\4cc\\code\\custom\\4coder_tutorial.cpp", 42, 34 }, -{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 137 }, -{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1836 }, -{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1914 }, -{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 1674 }, -{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "C:\\Dev\\4cc\\code\\custom\\4coder_jump_lister.cpp", 45, 59 }, -{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 433 }, -{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "C:\\Dev\\4cc\\code\\custom\\4coder_search.cpp", 40, 679 }, -{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 94 }, -{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 82 }, -{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 88 }, -{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 67 }, -{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "C:\\Dev\\4cc\\code\\custom\\4coder_auto_indent.cpp", 45, 440 }, -{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 59 }, -{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 76 }, -{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "C:\\Dev\\4cc\\code\\custom\\4coder_base_commands.cpp", 47, 73 }, -{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "C:\\Dev\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 57, 100 }, +{ PROC_LINKS(allow_mouse, 0), false, "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 481 }, +{ PROC_LINKS(auto_indent_line_at_cursor, 0), false, "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "D:\\Programs\\4cc\\code\\custom\\4coder_auto_indent.cpp", 50, 420 }, +{ PROC_LINKS(auto_indent_range, 0), false, "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "D:\\Programs\\4cc\\code\\custom\\4coder_auto_indent.cpp", 50, 430 }, +{ PROC_LINKS(auto_indent_whole_file, 0), false, "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "D:\\Programs\\4cc\\code\\custom\\4coder_auto_indent.cpp", 50, 411 }, +{ PROC_LINKS(backspace_alpha_numeric_boundary, 0), false, "backspace_alpha_numeric_boundary", 32, "Delete characters between the cursor position and the first alphanumeric boundary to the left.", 94, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 154 }, +{ PROC_LINKS(backspace_char, 0), false, "backspace_char", 14, "Deletes the character to the left of the cursor.", 48, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 96 }, +{ PROC_LINKS(basic_change_active_panel, 0), false, "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 668 }, +{ PROC_LINKS(begin_clipboard_collection_mode, 0), true, "begin_clipboard_collection_mode", 31, "Allows the user to copy multiple strings from other applications before switching to 4coder and pasting them all.", 113, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 71 }, +{ PROC_LINKS(build_in_build_panel, 0), false, "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "D:\\Programs\\4cc\\code\\custom\\4coder_build_commands.cpp", 53, 160 }, +{ PROC_LINKS(build_search, 0), false, "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "D:\\Programs\\4cc\\code\\custom\\4coder_build_commands.cpp", 53, 123 }, +{ PROC_LINKS(center_view, 0), false, "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 197 }, +{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 356 }, +{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 362 }, +{ PROC_LINKS(change_to_build_panel, 0), false, "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "D:\\Programs\\4cc\\code\\custom\\4coder_build_commands.cpp", 53, 181 }, +{ PROC_LINKS(clean_all_lines, 0), false, "clean_all_lines", 15, "Removes trailing whitespace from all lines and removes all blank lines in the current buffer.", 93, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 648 }, +{ PROC_LINKS(clean_trailing_whitespace, 0), false, "clean_trailing_whitespace", 25, "Removes trailing whitespace from all lines in the current buffer.", 65, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 657 }, +{ PROC_LINKS(clear_all_themes, 0), false, "clear_all_themes", 16, "Clear the theme list", 20, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 565 }, +{ PROC_LINKS(clear_clipboard, 0), false, "clear_clipboard", 15, "Clears the history of the clipboard", 35, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 221 }, +{ PROC_LINKS(click_set_cursor, 0), false, "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 235 }, +{ PROC_LINKS(click_set_cursor_and_mark, 0), false, "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 225 }, +{ PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 245 }, +{ PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 258 }, +{ PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 7 }, +{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 829 }, +{ PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "D:\\Programs\\4cc\\code\\custom\\4coder_build_commands.cpp", 53, 175 }, +{ PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 676 }, +{ PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "D:\\Programs\\4cc\\code\\custom\\4coder_docs.cpp", 43, 190 }, +{ PROC_LINKS(command_lister, 0), true, "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "D:\\Programs\\4cc\\code\\custom\\4coder_lists.cpp", 44, 761 }, +{ PROC_LINKS(comment_line, 0), false, "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 125 }, +{ PROC_LINKS(comment_line_toggle, 0), false, "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 149 }, +{ PROC_LINKS(copy, 0), false, "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 110 }, +{ PROC_LINKS(cursor_mark_swap, 0), false, "cursor_mark_swap", 16, "Swaps the position of the cursor and the mark.", 46, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 124 }, +{ PROC_LINKS(custom_api_documentation, 0), true, "custom_api_documentation", 24, "Prompts the user to select a Custom API item then loads a doc buffer for that item", 82, "D:\\Programs\\4cc\\code\\custom\\4coder_docs.cpp", 43, 175 }, +{ PROC_LINKS(cut, 0), false, "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 119 }, +{ PROC_LINKS(decrease_face_size, 0), false, "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 759 }, +{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 2067 }, +{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "D:\\Programs\\4cc\\code\\custom\\4coder_default_hooks.cpp", 52, 7 }, +{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "D:\\Programs\\4cc\\code\\custom\\4coder_default_hooks.cpp", 52, 33 }, +{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "D:\\Programs\\4cc\\code\\custom\\4coder_default_hooks.cpp", 52, 77 }, +{ PROC_LINKS(delete_alpha_numeric_boundary, 0), false, "delete_alpha_numeric_boundary", 29, "Delete characters between the cursor position and the first alphanumeric boundary to the right.", 95, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 162 }, +{ PROC_LINKS(delete_char, 0), false, "delete_char", 11, "Deletes the character to the right of the cursor.", 49, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 79 }, +{ PROC_LINKS(delete_current_scope, 0), false, "delete_current_scope", 20, "Deletes the braces surrounding the currently selected scope. Leaves the contents within the scope.", 99, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 112 }, +{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1385 }, +{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1557 }, +{ PROC_LINKS(delete_range, 0), false, "delete_range", 12, "Deletes the text in the range between the cursor and the mark.", 62, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 134 }, +{ PROC_LINKS(display_key_codes, 0), false, "display_key_codes", 17, "Example of input handling loop", 30, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 90 }, +{ PROC_LINKS(display_text_input, 0), false, "display_text_input", 18, "Example of to_writable and leave_current_input_unhandled", 56, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 137 }, +{ PROC_LINKS(double_backspace, 0), false, "double_backspace", 16, "Example of history group helpers", 32, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 10 }, +{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1543 }, +{ PROC_LINKS(execute_any_cli, 0), false, "execute_any_cli", 15, "Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.", 133, "D:\\Programs\\4cc\\code\\custom\\4coder_cli_command.cpp", 50, 22 }, +{ PROC_LINKS(execute_previous_cli, 0), false, "execute_previous_cli", 20, "If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.", 126, "D:\\Programs\\4cc\\code\\custom\\4coder_cli_command.cpp", 50, 7 }, +{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 848 }, +{ PROC_LINKS(go_to_user_directory, 0), false, "go_to_user_directory", 20, "Go to the 4coder user directory", 31, "D:\\Programs\\4cc\\code\\custom\\4coder_config.cpp", 45, 1655 }, +{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_helper.cpp", 45, 2258 }, +{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "D:\\Programs\\4cc\\code\\custom\\4coder_helper.cpp", 45, 2266 }, +{ PROC_LINKS(goto_first_jump, 0), false, "goto_first_jump", 15, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.", 95, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 525 }, +{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), false, "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 542 }, +{ PROC_LINKS(goto_jump_at_cursor, 0), false, "goto_jump_at_cursor", 19, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in another view and changes the active panel to the view containing the jump.", 187, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 348 }, +{ PROC_LINKS(goto_jump_at_cursor_same_panel, 0), false, "goto_jump_at_cursor_same_panel", 30, "If the cursor is found to be on a jump location, parses the jump location and brings up the file and position in this view, losing the compilation output or jump list.", 167, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 375 }, +{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 856 }, +{ PROC_LINKS(goto_next_jump, 0), false, "goto_next_jump", 14, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.", 123, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 464 }, +{ PROC_LINKS(goto_next_jump_no_skips, 0), false, "goto_next_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.", 132, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 494 }, +{ PROC_LINKS(goto_prev_jump, 0), false, "goto_prev_jump", 14, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.", 127, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 481 }, +{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 511 }, +{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 706 }, +{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 692 }, +{ PROC_LINKS(hit_sfx, 0), false, "hit_sfx", 7, "Play the hit sound effect", 25, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 240 }, +{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "D:\\Programs\\4cc\\code\\custom\\4coder_tutorial.cpp", 47, 869 }, +{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 70 }, +{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 564 }, +{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), false, "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_sticky.cpp", 50, 581 }, +{ PROC_LINKS(increase_face_size, 0), false, "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 748 }, +{ PROC_LINKS(interactive_kill_buffer, 0), true, "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "D:\\Programs\\4cc\\code\\custom\\4coder_lists.cpp", 44, 521 }, +{ PROC_LINKS(interactive_new, 0), true, "interactive_new", 15, "Interactively creates a new file.", 33, "D:\\Programs\\4cc\\code\\custom\\4coder_lists.cpp", 44, 661 }, +{ PROC_LINKS(interactive_open, 0), true, "interactive_open", 16, "Interactively opens a file.", 27, "D:\\Programs\\4cc\\code\\custom\\4coder_lists.cpp", 44, 715 }, +{ PROC_LINKS(interactive_open_or_new, 0), true, "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "D:\\Programs\\4cc\\code\\custom\\4coder_lists.cpp", 44, 612 }, +{ PROC_LINKS(interactive_switch_buffer, 0), true, "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "D:\\Programs\\4cc\\code\\custom\\4coder_lists.cpp", 44, 511 }, +{ PROC_LINKS(jump_to_definition, 0), true, "jump_to_definition", 18, "List all definitions in the code index and jump to one chosen by the user.", 74, "D:\\Programs\\4cc\\code\\custom\\4coder_code_index_listers.cpp", 57, 12 }, +{ PROC_LINKS(jump_to_definition_at_cursor, 0), true, "jump_to_definition_at_cursor", 28, "Jump to the first definition in the code index matching an identifier at the cursor", 83, "D:\\Programs\\4cc\\code\\custom\\4coder_code_index_listers.cpp", 57, 68 }, +{ PROC_LINKS(jump_to_last_point, 0), false, "jump_to_last_point", 18, "Read from the top of the point stack and jump there; if already there pop the top and go to the next option", 107, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1338 }, +{ PROC_LINKS(keyboard_macro_finish_recording, 0), false, "keyboard_macro_finish_recording", 31, "Stop macro recording, do nothing if macro recording is not already started", 74, "D:\\Programs\\4cc\\code\\custom\\4coder_keyboard_macro.cpp", 53, 54 }, +{ PROC_LINKS(keyboard_macro_replay, 0), false, "keyboard_macro_replay", 21, "Replay the most recently recorded keyboard macro", 48, "D:\\Programs\\4cc\\code\\custom\\4coder_keyboard_macro.cpp", 53, 77 }, +{ PROC_LINKS(keyboard_macro_start_recording, 0), false, "keyboard_macro_start_recording", 30, "Start macro recording, do nothing if macro recording is already started", 71, "D:\\Programs\\4cc\\code\\custom\\4coder_keyboard_macro.cpp", 53, 41 }, +{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1728 }, +{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "D:\\Programs\\4cc\\code\\custom\\4coder_tutorial.cpp", 47, 9 }, +{ PROC_LINKS(left_adjust_view, 0), false, "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 212 }, +{ PROC_LINKS(list_all_functions_all_buffers, 0), false, "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "D:\\Programs\\4cc\\code\\custom\\4coder_function_list.cpp", 52, 296 }, +{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), true, "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "D:\\Programs\\4cc\\code\\custom\\4coder_function_list.cpp", 52, 302 }, +{ PROC_LINKS(list_all_functions_current_buffer, 0), false, "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "D:\\Programs\\4cc\\code\\custom\\4coder_function_list.cpp", 52, 268 }, +{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), true, "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "D:\\Programs\\4cc\\code\\custom\\4coder_function_list.cpp", 52, 278 }, +{ PROC_LINKS(list_all_locations, 0), false, "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 168 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), false, "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 180 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), false, "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 192 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), false, "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 198 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), false, "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 204 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), false, "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 210 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), false, "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 216 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 224 }, +{ PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 174 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 186 }, +{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 856 }, +{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "D:\\Programs\\4cc\\code\\custom\\4coder_config.cpp", 45, 1611 }, +{ PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 535 }, +{ PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 554 }, +{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1497 }, +{ PROC_LINKS(miblo_decrement_basic, 0), false, "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 52, 44 }, +{ PROC_LINKS(miblo_decrement_time_stamp, 0), false, "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "D:\\Programs\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 52, 237 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "D:\\Programs\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 52, 249 }, +{ PROC_LINKS(miblo_increment_basic, 0), false, "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 52, 29 }, +{ PROC_LINKS(miblo_increment_time_stamp, 0), false, "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "D:\\Programs\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 52, 231 }, +{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), false, "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "D:\\Programs\\4cc\\code\\custom\\4coder_miblo_numbers.cpp", 52, 243 }, +{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 801 }, +{ PROC_LINKS(mouse_wheel_scroll, 0), false, "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 268 }, +{ PROC_LINKS(move_down, 0), false, "move_down", 9, "Moves the cursor down one line.", 31, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 342 }, +{ PROC_LINKS(move_down_10, 0), false, "move_down_10", 12, "Moves the cursor down ten lines.", 32, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 354 }, +{ PROC_LINKS(move_down_textual, 0), false, "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 360 }, +{ PROC_LINKS(move_down_to_blank_line, 0), false, "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 413 }, +{ PROC_LINKS(move_down_to_blank_line_end, 0), false, "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 437 }, +{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), false, "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 425 }, +{ PROC_LINKS(move_left, 0), false, "move_left", 9, "Moves the cursor one character to the left.", 43, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 443 }, +{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), false, "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 520 }, +{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), false, "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 534 }, +{ PROC_LINKS(move_left_token_boundary, 0), false, "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 492 }, +{ PROC_LINKS(move_left_whitespace_boundary, 0), false, "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 477 }, +{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), false, "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 506 }, +{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1537 }, +{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1531 }, +{ PROC_LINKS(move_right, 0), false, "move_right", 10, "Moves the cursor one character to the right.", 44, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 451 }, +{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), false, "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 513 }, +{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), false, "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 527 }, +{ PROC_LINKS(move_right_token_boundary, 0), false, "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 485 }, +{ PROC_LINKS(move_right_whitespace_boundary, 0), false, "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 469 }, +{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), false, "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 499 }, +{ PROC_LINKS(move_up, 0), false, "move_up", 7, "Moves the cursor up one line.", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 336 }, +{ PROC_LINKS(move_up_10, 0), false, "move_up_10", 10, "Moves the cursor up ten lines.", 30, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 348 }, +{ PROC_LINKS(move_up_to_blank_line, 0), false, "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 407 }, +{ PROC_LINKS(move_up_to_blank_line_end, 0), false, "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 431 }, +{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), false, "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 419 }, +{ PROC_LINKS(multi_paste, 0), false, "multi_paste", 11, "Paste multiple entries from the clipboard at once", 49, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 229 }, +{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 371 }, +{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 380 }, +{ PROC_LINKS(music_start, 0), false, "music_start", 11, "Starts the music.", 17, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 213 }, +{ PROC_LINKS(music_stop, 0), false, "music_stop", 10, "Stops the music.", 16, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 234 }, +{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 838 }, +{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 847 }, +{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1578 }, +{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 2061 }, +{ PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 46 }, +{ PROC_LINKS(open_long_braces_break, 0), false, "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 62 }, +{ PROC_LINKS(open_long_braces_semicolon, 0), false, "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 54 }, +{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1661 }, +{ PROC_LINKS(open_panel_hsplit, 0), false, "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 382 }, +{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 372 }, +{ PROC_LINKS(page_down, 0), false, "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 378 }, +{ PROC_LINKS(page_up, 0), false, "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 370 }, +{ PROC_LINKS(paste, 0), false, "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 130 }, +{ PROC_LINKS(paste_and_indent, 0), false, "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 207 }, +{ PROC_LINKS(paste_next, 0), false, "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 164 }, +{ PROC_LINKS(paste_next_and_indent, 0), false, "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "D:\\Programs\\4cc\\code\\custom\\4coder_clipboard.cpp", 48, 214 }, +{ PROC_LINKS(place_in_scope, 0), false, "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 106 }, +{ PROC_LINKS(play_with_a_counter, 0), false, "play_with_a_counter", 19, "Example of query bar", 20, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 29 }, +{ PROC_LINKS(profile_clear, 0), false, "profile_clear", 13, "Clear all profiling information from 4coder's self profiler.", 60, "D:\\Programs\\4cc\\code\\custom\\4coder_profile.cpp", 46, 226 }, +{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "D:\\Programs\\4cc\\code\\custom\\4coder_profile.cpp", 46, 219 }, +{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "D:\\Programs\\4cc\\code\\custom\\4coder_profile.cpp", 46, 212 }, +{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "D:\\Programs\\4cc\\code\\custom\\4coder_profile_inspect.cpp", 54, 886 }, +{ PROC_LINKS(project_command_F1, 0), false, "project_command_F1", 18, "Run the command with index 1", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1084 }, +{ PROC_LINKS(project_command_F10, 0), false, "project_command_F10", 19, "Run the command with index 10", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1138 }, +{ PROC_LINKS(project_command_F11, 0), false, "project_command_F11", 19, "Run the command with index 11", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1144 }, +{ PROC_LINKS(project_command_F12, 0), false, "project_command_F12", 19, "Run the command with index 12", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1150 }, +{ PROC_LINKS(project_command_F13, 0), false, "project_command_F13", 19, "Run the command with index 13", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1156 }, +{ PROC_LINKS(project_command_F14, 0), false, "project_command_F14", 19, "Run the command with index 14", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1162 }, +{ PROC_LINKS(project_command_F15, 0), false, "project_command_F15", 19, "Run the command with index 15", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1168 }, +{ PROC_LINKS(project_command_F16, 0), false, "project_command_F16", 19, "Run the command with index 16", 29, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1174 }, +{ PROC_LINKS(project_command_F2, 0), false, "project_command_F2", 18, "Run the command with index 2", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1090 }, +{ PROC_LINKS(project_command_F3, 0), false, "project_command_F3", 18, "Run the command with index 3", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1096 }, +{ PROC_LINKS(project_command_F4, 0), false, "project_command_F4", 18, "Run the command with index 4", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1102 }, +{ PROC_LINKS(project_command_F5, 0), false, "project_command_F5", 18, "Run the command with index 5", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1108 }, +{ PROC_LINKS(project_command_F6, 0), false, "project_command_F6", 18, "Run the command with index 6", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1114 }, +{ PROC_LINKS(project_command_F7, 0), false, "project_command_F7", 18, "Run the command with index 7", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1120 }, +{ PROC_LINKS(project_command_F8, 0), false, "project_command_F8", 18, "Run the command with index 8", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1126 }, +{ PROC_LINKS(project_command_F9, 0), false, "project_command_F9", 18, "Run the command with index 9", 28, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1132 }, +{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1036 }, +{ PROC_LINKS(project_fkey_command, 0), false, "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 974 }, +{ PROC_LINKS(project_go_to_root_directory, 0), false, "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1000 }, +{ PROC_LINKS(project_reprint, 0), false, "project_reprint", 15, "Prints the current project to the file it was loaded from; prints in the most recent project file version", 105, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1046 }, +{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1284 }, +{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1305 }, +{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1321 }, +{ PROC_LINKS(quick_swap_buffer, 0), false, "quick_swap_buffer", 17, "Change to the most recently used buffer in this view - or to the top of the buffer stack if the most recent doesn't exist anymore", 129, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1708 }, +{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1888 }, +{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1985 }, +{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1462 }, +{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1746 }, +{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1194 }, +{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1185 }, +{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1176 }, +{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1117 }, +{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1129 }, +{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1736 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 454 }, +{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1429 }, +{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1111 }, +{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1123 }, +{ PROC_LINKS(seek_beginning_of_line, 0), false, "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "D:\\Programs\\4cc\\code\\custom\\4coder_helper.cpp", 45, 2246 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), false, "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "D:\\Programs\\4cc\\code\\custom\\4coder_helper.cpp", 45, 2234 }, +{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "D:\\Programs\\4cc\\code\\custom\\4coder_helper.cpp", 45, 2252 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), false, "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "D:\\Programs\\4cc\\code\\custom\\4coder_helper.cpp", 45, 2240 }, +{ PROC_LINKS(select_all, 0), false, "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 543 }, +{ PROC_LINKS(select_next_scope_absolute, 0), false, "select_next_scope_absolute", 26, "Finds the first scope started by '{' after the cursor and puts the cursor and mark on the '{' and '}'.", 102, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 57 }, +{ PROC_LINKS(select_next_scope_after_current, 0), false, "select_next_scope_after_current", 31, "If a scope is selected, find first scope that starts after the selected scope. Otherwise find the first scope that starts after the cursor.", 139, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 66 }, +{ PROC_LINKS(select_prev_scope_absolute, 0), false, "select_prev_scope_absolute", 26, "Finds the first scope started by '{' before the cursor and puts the cursor and mark on the '{' and '}'.", 103, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 82 }, +{ PROC_LINKS(select_prev_top_most_scope, 0), false, "select_prev_top_most_scope", 26, "Finds the first scope that starts before the cursor, then finds the top most scope that contains that scope.", 108, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 99 }, +{ PROC_LINKS(select_surrounding_scope, 0), false, "select_surrounding_scope", 24, "Finds the scope enclosed by '{' '}' surrounding the cursor and puts the cursor and mark on the '{' and '}'.", 107, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 27 }, +{ PROC_LINKS(select_surrounding_scope_maximal, 0), false, "select_surrounding_scope_maximal", 32, "Selects the top-most scope that surrounds the cursor.", 53, "D:\\Programs\\4cc\\code\\custom\\4coder_scope_commands.cpp", 53, 39 }, +{ PROC_LINKS(set_eol_mode_from_contents, 0), false, "set_eol_mode_from_contents", 26, "Sets the buffer's line ending mode to match the contents of the buffer.", 71, "D:\\Programs\\4cc\\code\\custom\\4coder_eol.cpp", 42, 125 }, +{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "D:\\Programs\\4cc\\code\\custom\\4coder_eol.cpp", 42, 112 }, +{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "D:\\Programs\\4cc\\code\\custom\\4coder_eol.cpp", 42, 86 }, +{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "D:\\Programs\\4cc\\code\\custom\\4coder_eol.cpp", 42, 99 }, +{ PROC_LINKS(set_face_size, 0), false, "set_face_size", 13, "Set face size of the face used by the current buffer.", 53, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 728 }, +{ PROC_LINKS(set_face_size_this_buffer, 0), false, "set_face_size_this_buffer", 25, "Set face size of the face used by the current buffer; if any other buffers are using the same face a new face is created so that only this buffer is effected", 157, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 770 }, +{ PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 115 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 499 }, +{ PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 493 }, +{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1018 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1030 }, +{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1024 }, +{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "D:\\Programs\\4cc\\code\\custom\\4coder_project_commands.cpp", 55, 1011 }, +{ PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 699 }, +{ PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 685 }, +{ PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "D:\\Programs\\4cc\\code\\custom\\4coder_log_parser.cpp", 49, 991 }, +{ PROC_LINKS(snipe_backward_whitespace_or_token_boundary, 0), false, "snipe_backward_whitespace_or_token_boundary", 43, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 179 }, +{ PROC_LINKS(snipe_forward_whitespace_or_token_boundary, 0), false, "snipe_forward_whitespace_or_token_boundary", 42, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 187 }, +{ PROC_LINKS(snippet_lister, 0), true, "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 237 }, +{ PROC_LINKS(string_repeat, 0), false, "string_repeat", 13, "Example of query_user_string and query_user_number", 50, "D:\\Programs\\4cc\\code\\custom\\4coder_examples.cpp", 47, 179 }, +{ PROC_LINKS(suppress_mouse, 0), false, "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 475 }, +{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1686 }, +{ PROC_LINKS(theme_lister, 0), true, "theme_lister", 12, "Opens an interactive list of all registered themes.", 51, "D:\\Programs\\4cc\\code\\custom\\4coder_lists.cpp", 44, 785 }, +{ PROC_LINKS(to_lowercase, 0), false, "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 569 }, +{ PROC_LINKS(to_uppercase, 0), false, "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 556 }, +{ PROC_LINKS(toggle_filebar, 0), false, "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 713 }, +{ PROC_LINKS(toggle_fps_meter, 0), false, "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 722 }, +{ PROC_LINKS(toggle_fullscreen, 0), false, "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 529 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), false, "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 513 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), false, "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 505 }, +{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 827 }, +{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 835 }, +{ PROC_LINKS(toggle_mouse, 0), false, "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 487 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), false, "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "D:\\Programs\\4cc\\code\\custom\\4coder_default_framework.cpp", 56, 521 }, +{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 818 }, +{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles virtual whitespace for all files.", 41, "D:\\Programs\\4cc\\code\\custom\\4coder_code_index.cpp", 49, 1238 }, +{ PROC_LINKS(tutorial_maximize, 0), false, "tutorial_maximize", 17, "Expand the tutorial window", 26, "D:\\Programs\\4cc\\code\\custom\\4coder_tutorial.cpp", 47, 20 }, +{ PROC_LINKS(tutorial_minimize, 0), false, "tutorial_minimize", 17, "Shrink the tutorial window", 26, "D:\\Programs\\4cc\\code\\custom\\4coder_tutorial.cpp", 47, 34 }, +{ PROC_LINKS(uncomment_line, 0), false, "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 137 }, +{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1836 }, +{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1914 }, +{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 1674 }, +{ PROC_LINKS(view_jump_list_with_lister, 0), false, "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "D:\\Programs\\4cc\\code\\custom\\4coder_jump_lister.cpp", 50, 59 }, +{ PROC_LINKS(word_complete, 0), false, "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 433 }, +{ PROC_LINKS(word_complete_drop_down, 0), false, "word_complete_drop_down", 23, "Word complete with drop down menu.", 34, "D:\\Programs\\4cc\\code\\custom\\4coder_search.cpp", 45, 679 }, +{ PROC_LINKS(write_block, 0), false, "write_block", 11, "At the cursor, insert a block comment.", 38, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 94 }, +{ PROC_LINKS(write_hack, 0), false, "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 82 }, +{ PROC_LINKS(write_note, 0), false, "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 88 }, +{ PROC_LINKS(write_space, 0), false, "write_space", 11, "Inserts a space.", 16, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 67 }, +{ PROC_LINKS(write_text_and_auto_indent, 0), false, "write_text_and_auto_indent", 26, "Inserts text and auto-indents the line on which the cursor sits if any of the text contains 'layout punctuation' such as ;:{}()[]# and new lines.", 145, "D:\\Programs\\4cc\\code\\custom\\4coder_auto_indent.cpp", 50, 440 }, +{ PROC_LINKS(write_text_input, 0), false, "write_text_input", 16, "Inserts whatever text was used to trigger this command.", 55, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 59 }, +{ PROC_LINKS(write_todo, 0), false, "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 76 }, +{ PROC_LINKS(write_underscore, 0), false, "write_underscore", 16, "Inserts an underscore.", 22, "D:\\Programs\\4cc\\code\\custom\\4coder_base_commands.cpp", 52, 73 }, +{ PROC_LINKS(write_zero_struct, 0), false, "write_zero_struct", 17, "At the cursor, insert a ' = {};'.", 33, "D:\\Programs\\4cc\\code\\custom\\4coder_combined_write_commands.cpp", 62, 100 }, }; static i32 fcoder_metacmd_ID_allow_mouse = 0; static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 1; diff --git a/non-source/foreign/freetype2/build_freetype.bat b/non-source/foreign/freetype2/build_freetype.bat new file mode 100644 index 000000000..44e0bb297 --- /dev/null +++ b/non-source/foreign/freetype2/build_freetype.bat @@ -0,0 +1,30 @@ +@echo off +pushd %~dp0 + +SET ROOT=%CD% + +SET FILES= +SET FILES=%FILES% %ROOT%\src\base\ftsystem.c +SET FILES=%FILES% %ROOT%\src\base\ftinit.c +SET FILES=%FILES% %ROOT%\src\base\ftdebug.c +SET FILES=%FILES% %ROOT%\src\base\ftbase.c +REM SET FILES=%FILES% %ROOT%\src\base\ftbbox.c +REM SET FILES=%FILES% %ROOT%\src\base\ftglyph.c +SET FILES=%FILES% %ROOT%\src\base\ftbitmap.c +SET FILES=%FILES% %ROOT%\src\sfnt\sfnt.c +SET FILES=%FILES% %ROOT%\src\truetype\truetype.c +SET FILES=%FILES% %ROOT%\src\cff\cff.c +SET FILES=%FILES% %ROOT%\src\smooth\smooth.c +SET FILES=%FILES% %ROOT%\src\psaux\psaux.c +SET FILES=%FILES% %ROOT%\src\psnames\psnames.c +SET FILES=%FILES% %ROOT%\src\pshinter\pshinter.c + +SET BUILD_DIR=%ROOT%\..\x64 +if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%" +cd %BUILD_DIR% + +del *.pdb +cl /c /nologo /Zi /O2 /Fd:freetype.pdb /DFT2_BUILD_LIBRARY /I%ROOT% %FILES% +lib /nologo /OUT:freetype.lib *.obj +del *.obj +popd diff --git a/non-source/foreign/freetype2/freetype/config/ftconfig.h b/non-source/foreign/freetype2/freetype/config/ftconfig.h index 3a9b4569b..0830d3f2e 100644 --- a/non-source/foreign/freetype2/freetype/config/ftconfig.h +++ b/non-source/foreign/freetype2/freetype/config/ftconfig.h @@ -1,39 +1,38 @@ -/***************************************************************************/ -/* */ -/* ftconfig.h */ -/* */ -/* ANSI-specific configuration file (specification only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This header file contains a number of macro definitions that are used */ - /* by the rest of the engine. Most of the macros here are automatically */ - /* determined at compile time, and you should not need to change it to */ - /* port FreeType, except to compile the library with a non-ANSI */ - /* compiler. */ - /* */ - /* Note however that if some specific modifications are needed, we */ - /* advise you to place a modified copy in your build directory. */ - /* */ - /* The build directory is usually `builds/', and contains */ - /* system-specific files that are always included first when building */ - /* the library. */ - /* */ - /* This ANSI version should stay in `include/config/'. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftconfig.h + * + * ANSI-specific configuration file (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This header file contains a number of macro definitions that are used by + * the rest of the engine. Most of the macros here are automatically + * determined at compile time, and you should not need to change it to port + * FreeType, except to compile the library with a non-ANSI compiler. + * + * Note however that if some specific modifications are needed, we advise + * you to place a modified copy in your build directory. + * + * The build directory is usually `builds/`, and contains + * system-specific files that are always included first when building the + * library. + * + * This ANSI version should stay in `include/config/`. + * + */ #ifndef FTCONFIG_H_ #define FTCONFIG_H_ @@ -42,430 +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 is a macro used to indicate that a given parameter is not */ - /* used -- this is only used to get rid of unpleasant compiler warnings */ -#ifndef FT_UNUSED -#define FT_UNUSED( arg ) ( (arg) = (arg) ) -#endif - - - /*************************************************************************/ - /* */ - /* AUTOMATIC CONFIGURATION MACROS */ - /* */ - /* These macros are computed from the ones defined above. Don't touch */ - /* their definition, unless you know precisely what you are doing. No */ - /* porter should need to mess with them. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Mac support */ - /* */ - /* This is the only necessary change, so it is defined here instead */ - /* providing a new configuration file. */ - /* */ -#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) ) - /* no Carbon frameworks for 64bit 10.4.x */ - /* AvailabilityMacros.h is available since Mac OS X 10.2, */ - /* so guess the system version by maximum errno before inclusion */ -#include -#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 - - - /*************************************************************************/ - /* */ - /*
*/ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int16 */ - /* */ - /* */ - /* A typedef for a 16bit signed integer type. */ - /* */ - typedef signed short FT_Int16; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt16 */ - /* */ - /* */ - /* A typedef for a 16bit unsigned integer type. */ - /* */ - typedef unsigned short FT_UInt16; - - /* */ - - - /* this #if 0 ... #endif clause is for documentation purposes */ -#if 0 - - /*************************************************************************/ - /* */ - /* */ - /* FT_Int32 */ - /* */ - /* */ - /* A typedef for a 32bit signed integer type. The size depends on */ - /* the configuration. */ - /* */ - typedef signed XXX FT_Int32; - - - /*************************************************************************/ - /* */ - /* */ - /* FT_UInt32 */ - /* */ - /* A typedef for a 32bit unsigned integer type. The size depends on */ - /* the configuration. */ - /* */ - typedef unsigned XXX FT_UInt32; - - - /*************************************************************************/ - /* */ - /* */ - /* 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; - - - /*************************************************************************/ - /* */ - /* */ - /* 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 - - - /*************************************************************************/ - /* */ - /* 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 ( __GNUC__ >= 2 || \ - defined( __IBM__TYPEOF__ ) || \ - ( __SUNPRO_C >= 0x5110 && !__STDC__ ) ) -#define FT_TYPEOF( type ) (__typeof__ (type)) -#else -#define FT_TYPEOF( type ) /* empty */ -#endif - - -#ifdef FT_MAKE_OPTION_SINGLE_OBJECT - -#define FT_LOCAL( x ) static x -#define FT_LOCAL_DEF( x ) static x - -#else - -#ifdef __cplusplus -#define FT_LOCAL( x ) extern "C" x -#define FT_LOCAL_DEF( x ) extern "C" x -#else -#define FT_LOCAL( x ) extern x -#define FT_LOCAL_DEF( x ) x -#endif - -#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ - -#define FT_LOCAL_ARRAY( x ) extern const x -#define FT_LOCAL_ARRAY_DEF( x ) const x - - -#ifndef FT_BASE - -#ifdef __cplusplus -#define FT_BASE( x ) extern "C" x -#else -#define FT_BASE( x ) extern x -#endif - -#endif /* !FT_BASE */ - - -#ifndef FT_BASE_DEF - -#ifdef __cplusplus -#define FT_BASE_DEF( x ) x -#else -#define FT_BASE_DEF( x ) x -#endif - -#endif /* !FT_BASE_DEF */ - - -#ifndef FT_EXPORT - -#ifdef __cplusplus -#define FT_EXPORT( x ) extern "C" x -#else -#define FT_EXPORT( x ) extern x -#endif - -#endif /* !FT_EXPORT */ - - -#ifndef FT_EXPORT_DEF - -#ifdef __cplusplus -#define FT_EXPORT_DEF( x ) extern "C" x -#else -#define FT_EXPORT_DEF( x ) extern x -#endif - -#endif /* !FT_EXPORT_DEF */ - - -#ifndef FT_EXPORT_VAR - -#ifdef __cplusplus -#define FT_EXPORT_VAR( x ) extern "C" x -#else -#define FT_EXPORT_VAR( x ) extern x -#endif - -#endif /* !FT_EXPORT_VAR */ - - /* The following macros are needed to compile the library with a */ - /* C++ compiler and with 16bit compilers. */ - /* */ - - /* This is special. Within C++, you must specify `extern "C"' for */ - /* functions which are used via function pointers, and you also */ - /* must do that for structures which contain function pointers to */ - /* assure C linkage -- it's not possible to have (local) anonymous */ - /* functions which are accessed by (global) function pointers. */ - /* */ - /* */ - /* FT_CALLBACK_DEF is used to _define_ a callback function. */ - /* */ - /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ - /* contains pointers to callback functions. */ - /* */ - /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ - /* that contains pointers to callback functions. */ - /* */ - /* */ - /* Some 16bit compilers have to redefine these macros to insert */ - /* the infamous `_cdecl' or `__fastcall' declarations. */ - /* */ -#ifndef FT_CALLBACK_DEF -#ifdef __cplusplus -#define FT_CALLBACK_DEF( x ) extern "C" x -#else -#define FT_CALLBACK_DEF( x ) static x -#endif -#endif /* FT_CALLBACK_DEF */ - -#ifndef FT_CALLBACK_TABLE -#ifdef __cplusplus -#define FT_CALLBACK_TABLE extern "C" -#define FT_CALLBACK_TABLE_DEF extern "C" -#else -#define FT_CALLBACK_TABLE extern -#define FT_CALLBACK_TABLE_DEF /* nothing */ -#endif -#endif /* FT_CALLBACK_TABLE */ - - -FT_END_HEADER - +#include +#include +#include #endif /* FTCONFIG_H_ */ diff --git a/non-source/foreign/freetype2/freetype/config/ftheader.h b/non-source/foreign/freetype2/freetype/config/ftheader.h index 68e14834d..f6ef2618d 100644 --- a/non-source/foreign/freetype2/freetype/config/ftheader.h +++ b/non-source/foreign/freetype2/freetype/config/ftheader.h @@ -1,19 +1,19 @@ -/***************************************************************************/ -/* */ -/* ftheader.h */ -/* */ -/* Build macros of the FreeType 2 library. */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftheader.h + * + * Build macros of the FreeType 2 library. + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTHEADER_H_ #define FTHEADER_H_ @@ -27,13 +27,15 @@ /* */ /* This macro is used in association with @FT_END_HEADER in header */ /* files to ensure that the declarations within are properly */ - /* encapsulated in an `extern "C" { .. }' block when included from a */ + /* encapsulated in an `extern "C" { .. }` block when included from a */ /* C++ compiler. */ /* */ -#ifdef __cplusplus -#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 @@ -45,64 +47,69 @@ /* */ /* This macro is used in association with @FT_BEGIN_HEADER in header */ /* files to ensure that the declarations within are properly */ - /* encapsulated in an `extern "C" { .. }' block when included from a */ + /* encapsulated in an `extern "C" { .. }` block when included from a */ /* C++ compiler. */ /* */ -#ifdef __cplusplus -#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 - /*************************************************************************/ - /* */ - /* Aliases for the FreeType 2 public and configuration files. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * Aliases for the FreeType 2 public and configuration files. + * + */ - /*************************************************************************/ - /* */ - /*
*/ - /* header_file_macros */ - /* */ - /* */ - /* Header File Macros */ - /* */ - /* <Abstract> */ - /* Macro definitions used to #include specific header files. */ - /* */ - /* <Description> */ - /* The following macros are defined to the name of specific */ - /* FreeType~2 header files. They can be used directly in #include */ - /* statements as in: */ - /* */ - /* { */ - /* #include FT_FREETYPE_H */ - /* #include FT_MULTIPLE_MASTERS_H */ - /* #include FT_GLYPH_H */ - /* } */ - /* */ - /* There are several reasons why we are now using macros to name */ - /* public header files. The first one is that such macros are not */ - /* limited to the infamous 8.3~naming rule required by DOS (and */ - /* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */ - /* */ - /* The second reason is that it allows for more flexibility in the */ - /* way FreeType~2 is installed on a given system. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * header_file_macros + * + * @title: + * Header File Macros + * + * @abstract: + * Macro definitions used to `#include` specific header files. + * + * @description: + * In addition to the normal scheme of including header files like + * + * ``` + * #include <freetype/freetype.h> + * #include <freetype/ftmm.h> + * #include <freetype/ftglyph.h> + * ``` + * + * it is possible to used named macros instead. They can be used + * directly in `#include` statements as in + * + * ``` + * #include FT_FREETYPE_H + * #include FT_MULTIPLE_MASTERS_H + * #include FT_GLYPH_H + * ``` + * + * 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`). + * + */ /* configuration files */ - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_CONFIG_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * FreeType~2 configuration data. * */ @@ -111,13 +118,13 @@ #endif - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_STANDARD_LIBRARY_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * FreeType~2 interface to the standard C library functions. * */ @@ -126,13 +133,13 @@ #endif - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_OPTIONS_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * FreeType~2 project-specific configuration options. * */ @@ -141,13 +148,13 @@ #endif - /************************************************************************* + /************************************************************************** * * @macro: * FT_CONFIG_MODULES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list of FreeType~2 modules that are statically linked to new library * instances in @FT_Init_FreeType. * @@ -160,26 +167,26 @@ /* public headers */ - /************************************************************************* + /************************************************************************** * * @macro: * FT_FREETYPE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * base FreeType~2 API. * */ #define FT_FREETYPE_H <freetype/freetype.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_ERRORS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list of FreeType~2 error codes (and messages). * * It is included by @FT_FREETYPE_H. @@ -188,26 +195,26 @@ #define FT_ERRORS_H <freetype/fterrors.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_MODULE_ERRORS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list of FreeType~2 module error offsets (and messages). * */ #define FT_MODULE_ERRORS_H <freetype/ftmoderr.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SYSTEM_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 interface to low-level operations (i.e., memory management * and stream i/o). * @@ -217,13 +224,13 @@ #define FT_SYSTEM_H <freetype/ftsystem.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_IMAGE_H * * @description: - * A macro used in #include statements to name the file containing type + * A macro used in `#include` statements to name the file containing type * definitions related to glyph images (i.e., bitmaps, outlines, * scan-converter parameters). * @@ -233,13 +240,13 @@ #define FT_IMAGE_H <freetype/ftimage.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TYPES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * basic data types defined by FreeType~2. * * It is included by @FT_FREETYPE_H. @@ -248,13 +255,13 @@ #define FT_TYPES_H <freetype/fttypes.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_LIST_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * list management API of FreeType~2. * * (Most applications will never need to include this file.) @@ -263,117 +270,151 @@ #define FT_LIST_H <freetype/ftlist.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_OUTLINE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * scalable outline management API of FreeType~2. * */ #define FT_OUTLINE_H <freetype/ftoutln.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SIZES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API which manages multiple @FT_Size objects per face. * */ #define FT_SIZES_H <freetype/ftsizes.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_MODULE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * module management API of FreeType~2. * */ #define FT_MODULE_H <freetype/ftmodapi.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_RENDER_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * renderer module management API of FreeType~2. * */ #define FT_RENDER_H <freetype/ftrender.h> - /************************************************************************* + /************************************************************************** + * + * @macro: + * FT_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the driver modules. + * + */ +#define FT_DRIVER_H <freetype/ftdriver.h> + + + /************************************************************************** * * @macro: * FT_AUTOHINTER_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * structures and macros related to the auto-hinting module. * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * */ -#define FT_AUTOHINTER_H <freetype/ftautoh.h> +#define FT_AUTOHINTER_H FT_DRIVER_H - /************************************************************************* + /************************************************************************** * * @macro: * FT_CFF_DRIVER_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * structures and macros related to the CFF driver module. * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * */ -#define FT_CFF_DRIVER_H <freetype/ftcffdrv.h> +#define FT_CFF_DRIVER_H FT_DRIVER_H - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_DRIVER_H * * @description: - * A macro used in #include statements to name the file containing + * A macro used in `#include` statements to name the file containing * structures and macros related to the TrueType driver module. * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * + */ +#define FT_TRUETYPE_DRIVER_H FT_DRIVER_H + + + /************************************************************************** + * + * @macro: + * FT_PCF_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the PCF driver module. + * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * */ -#define FT_TRUETYPE_DRIVER_H <freetype/ftttdrv.h> +#define FT_PCF_DRIVER_H FT_DRIVER_H - /************************************************************************* + /************************************************************************** * * @macro: * FT_TYPE1_TABLES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * types and API specific to the Type~1 format. * */ #define FT_TYPE1_TABLES_H <freetype/t1tables.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_IDS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * enumeration values which identify name strings, languages, encodings, * etc. This file really contains a _large_ set of constant macro * definitions, taken from the TrueType and OpenType specifications. @@ -382,231 +423,172 @@ #define FT_TRUETYPE_IDS_H <freetype/ttnameid.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_TABLES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * types and API specific to the TrueType (as well as OpenType) format. * */ #define FT_TRUETYPE_TABLES_H <freetype/tttables.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRUETYPE_TAGS_H * * @description: - * A macro used in #include statements to name the file containing the - * definitions of TrueType four-byte `tags' which identify blocks in + * A macro used in `#include` statements to name the file containing the + * definitions of TrueType four-byte 'tags' which identify blocks in * SFNT-based font formats (i.e., TrueType and OpenType). * */ #define FT_TRUETYPE_TAGS_H <freetype/tttags.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BDF_H * * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which accesses BDF-specific strings from a - * face. + * A macro used in `#include` statements to name the file containing the + * definitions of an API which accesses BDF-specific strings from a face. * */ #define FT_BDF_H <freetype/ftbdf.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_CID_H * * @description: - * A macro used in #include statements to name the file containing the - * definitions of an API which access CID font information from a - * face. + * A macro used in `#include` statements to name the file containing the + * definitions of an API which access CID font information from a face. * */ #define FT_CID_H <freetype/ftcid.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GZIP_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports gzip-compressed files. * */ #define FT_GZIP_H <freetype/ftgzip.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_LZW_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports LZW-compressed files. * */ #define FT_LZW_H <freetype/ftlzw.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BZIP2_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports bzip2-compressed files. * */ #define FT_BZIP2_H <freetype/ftbzip2.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_WINFONTS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * definitions of an API which supports Windows FNT files. * */ #define FT_WINFONTS_H <freetype/ftwinfnt.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GLYPH_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional glyph management component. * */ #define FT_GLYPH_H <freetype/ftglyph.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BITMAP_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional bitmap conversion component. * */ #define FT_BITMAP_H <freetype/ftbitmap.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_BBOX_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional exact bounding box computation routines. * */ #define FT_BBOX_H <freetype/ftbbox.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_CACHE_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * API of the optional FreeType~2 cache sub-system. * */ #define FT_CACHE_H <freetype/ftcache.h> - /************************************************************************* - * - * @macro: - * FT_CACHE_IMAGE_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `glyph image' API of the FreeType~2 cache sub-system. - * - * It is used to define a cache for @FT_Glyph elements. You can also - * use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to - * store small glyph bitmaps, as it will use less memory. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * glyph image-related cache declarations. - * - */ -#define FT_CACHE_IMAGE_H FT_CACHE_H - - - /************************************************************************* - * - * @macro: - * FT_CACHE_SMALL_BITMAPS_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `small bitmaps' API of the FreeType~2 cache sub-system. - * - * It is used to define a cache for small glyph bitmaps in a relatively - * memory-efficient way. You can also use the API defined in - * @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images, - * including scalable outlines. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * small bitmaps-related cache declarations. - * - */ -#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H - - - /************************************************************************* - * - * @macro: - * FT_CACHE_CHARMAP_H - * - * @description: - * A macro used in #include statements to name the file containing the - * `charmap' API of the FreeType~2 cache sub-system. - * - * This macro is deprecated. Simply include @FT_CACHE_H to have all - * charmap-based cache declarations. - * - */ -#define FT_CACHE_CHARMAP_H FT_CACHE_H - - - /************************************************************************* + /************************************************************************** * * @macro: * FT_MAC_H * * @description: - * A macro used in #include statements to name the file containing the - * Macintosh-specific FreeType~2 API. The latter is used to access - * fonts embedded in resource forks. + * A macro used in `#include` statements to name the file containing the + * Macintosh-specific FreeType~2 API. The latter is used to access fonts + * embedded in resource forks. * * This header file must be explicitly included by client applications * compiled on the Mac (note that the base API still works though). @@ -615,105 +597,105 @@ #define FT_MAC_H <freetype/ftmac.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_MULTIPLE_MASTERS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * optional multiple-masters management API of FreeType~2. * */ #define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SFNT_NAMES_H * * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType~2 API which accesses embedded `name' strings in + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which accesses embedded 'name' strings in * SFNT-based font formats (i.e., TrueType and OpenType). * */ #define FT_SFNT_NAMES_H <freetype/ftsnames.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_OPENTYPE_VALIDATE_H * * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType~2 API which validates OpenType tables (BASE, GDEF, - * GPOS, GSUB, JSTF). + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which validates OpenType tables ('BASE', + * 'GDEF', 'GPOS', 'GSUB', 'JSTF'). * */ #define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GX_VALIDATE_H * * @description: - * A macro used in #include statements to name the file containing the - * optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat, - * mort, morx, bsln, just, kern, opbd, trak, prop). + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which validates TrueTypeGX/AAT tables ('feat', + * 'mort', 'morx', 'bsln', 'just', 'kern', 'opbd', 'trak', 'prop'). * */ #define FT_GX_VALIDATE_H <freetype/ftgxval.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_PFR_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which accesses PFR-specific data. * */ #define FT_PFR_H <freetype/ftpfr.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_STROKER_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which provides functions to stroke outline paths. */ #define FT_STROKER_H <freetype/ftstroke.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_SYNTHESIS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which performs artificial obliquing and emboldening. */ #define FT_SYNTHESIS_H <freetype/ftsynth.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_FONT_FORMATS_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which provides functions specific to font formats. */ #define FT_FONT_FORMATS_H <freetype/ftfntfmt.h> @@ -722,110 +704,131 @@ #define FT_XFREE86_H FT_FONT_FORMATS_H - /************************************************************************* + /************************************************************************** * * @macro: * FT_TRIGONOMETRY_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which performs trigonometric computations (e.g., * cosines and arc tangents). */ #define FT_TRIGONOMETRY_H <freetype/fttrigon.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_LCD_FILTER_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which performs color filtering for subpixel rendering. */ #define FT_LCD_FILTER_H <freetype/ftlcdfil.h> - /************************************************************************* - * - * @macro: - * FT_UNPATENTED_HINTING_H - * - * @description: - * Deprecated. - */ -#define FT_UNPATENTED_HINTING_H <freetype/ttunpat.h> - - - /************************************************************************* + /************************************************************************** * * @macro: * FT_INCREMENTAL_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which performs incremental glyph loading. */ #define FT_INCREMENTAL_H <freetype/ftincrem.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_GASP_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which returns entries from the TrueType GASP table. */ #define FT_GASP_H <freetype/ftgasp.h> - /************************************************************************* + /************************************************************************** * * @macro: * FT_ADVANCES_H * * @description: - * A macro used in #include statements to name the file containing the + * A macro used in `#include` statements to name the file containing the * FreeType~2 API which returns individual and ranged glyph advances. */ #define FT_ADVANCES_H <freetype/ftadvanc.h> - /* */ + /************************************************************************** + * + * @macro: + * FT_COLOR_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which handles the OpenType 'CPAL' table. + */ +#define FT_COLOR_H <freetype/ftcolor.h> -#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h> + /************************************************************************** + * + * @macro: + * FT_OTSVG_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which handles the OpenType 'SVG~' glyphs. + */ +#define FT_OTSVG_H <freetype/otsvg.h> - /* The internals of the cache sub-system are no longer exposed. We */ - /* default to FT_CACHE_H at the moment just in case, but we know of */ - /* no rogue client that uses them. */ - /* */ -#define FT_CACHE_MANAGER_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_MRU_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_MANAGER_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_CACHE_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_GLYPH_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_IMAGE_H <freetype/ftcache.h> -#define FT_CACHE_INTERNAL_SBITS_H <freetype/ftcache.h> + /* */ -#define FT_INCREMENTAL_H <freetype/ftincrem.h> + /* These header files don't need to be included by the user. */ +#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h> +#define FT_PARAMETER_TAGS_H <freetype/ftparams.h> -#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h> + /* Deprecated macros. */ +#define FT_UNPATENTED_HINTING_H <freetype/ftparams.h> +#define FT_TRUETYPE_UNPATENTED_H <freetype/ftparams.h> + /* `FT_CACHE_H` is the only header file needed for the cache subsystem. */ +#define FT_CACHE_IMAGE_H FT_CACHE_H +#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H +#define FT_CACHE_CHARMAP_H FT_CACHE_H - /* - * Include internal headers definitions from <internal/...> - * only when building the library. - */ + /* The internals of the cache sub-system are no longer exposed. We */ + /* default to `FT_CACHE_H` at the moment just in case, but we know */ + /* of no rogue client that uses them. */ + /* */ +#define FT_CACHE_MANAGER_H FT_CACHE_H +#define FT_CACHE_INTERNAL_MRU_H FT_CACHE_H +#define FT_CACHE_INTERNAL_MANAGER_H FT_CACHE_H +#define FT_CACHE_INTERNAL_CACHE_H FT_CACHE_H +#define FT_CACHE_INTERNAL_GLYPH_H FT_CACHE_H +#define FT_CACHE_INTERNAL_IMAGE_H FT_CACHE_H +#define FT_CACHE_INTERNAL_SBITS_H FT_CACHE_H + +/* TODO(david): Move this section below to a different header */ #ifdef FT2_BUILD_LIBRARY -#define FT_INTERNAL_INTERNAL_H <freetype/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/non-source/foreign/freetype2/freetype/config/ftmodule.h b/non-source/foreign/freetype2/freetype/config/ftmodule.h index 76d271a74..b315baba8 100644 --- a/non-source/foreign/freetype2/freetype/config/ftmodule.h +++ b/non-source/foreign/freetype2/freetype/config/ftmodule.h @@ -1,12 +1,12 @@ /* - * This file registers the FreeType modules compiled into the library. + * This file registers the FreeType modules compiled into the library. * - * If you use GNU make, this file IS NOT USED! Instead, it is created in - * the objects directory (normally `<topdir>/objs/') based on information - * from `<topdir>/modules.cfg'. + * If you use GNU make, this file IS NOT USED! Instead, it is created in + * the objects directory (normally `<topdir>/objs/`) based on information + * from `<topdir>/modules.cfg`. * - * Please read `docs/INSTALL.ANY' and `docs/CUSTOMIZE' how to compile - * FreeType without GNU make. + * Please read `docs/INSTALL.ANY` and `docs/CUSTOMIZE` how to compile + * FreeType without GNU make. * */ @@ -19,14 +19,15 @@ FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class ) FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class ) FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class ) FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class ) FT_USE_MODULE( FT_Module_Class, psaux_module_class ) FT_USE_MODULE( FT_Module_Class, psnames_module_class ) FT_USE_MODULE( FT_Module_Class, pshinter_module_class ) -FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class ) FT_USE_MODULE( FT_Module_Class, sfnt_module_class ) FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class ) -FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class ) -FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class ) -FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_bitmap_sdf_renderer_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_svg_renderer_class ) /* EOF */ diff --git a/non-source/foreign/freetype2/freetype/config/ftoption.h b/non-source/foreign/freetype2/freetype/config/ftoption.h index bf7d5b12c..40de1900f 100644 --- a/non-source/foreign/freetype2/freetype/config/ftoption.h +++ b/non-source/foreign/freetype2/freetype/config/ftoption.h @@ -1,19 +1,19 @@ -/***************************************************************************/ -/* */ -/* ftoption.h */ -/* */ -/* User-selectable configuration macros (specification only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftoption.h + * + * User-selectable configuration macros (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTOPTION_H_ @@ -25,45 +25,47 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* USER-SELECTABLE CONFIGURATION MACROS */ - /* */ - /* This file contains the default configuration macro definitions for */ - /* a standard build of the FreeType library. There are three ways to */ - /* use this file to build project-specific versions of the library: */ - /* */ - /* - You can modify this file by hand, but this is not recommended in */ - /* cases where you would like to build several versions of the */ - /* library from a single source directory. */ - /* */ - /* - You can put a copy of this file in your build directory, more */ - /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */ - /* is the name of a directory that is included _before_ the FreeType */ - /* include path during compilation. */ - /* */ - /* The default FreeType Makefiles and Jamfiles use the build */ - /* directory `builds/<system>' by default, but you can easily change */ - /* that for your own projects. */ - /* */ - /* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */ - /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */ - /* locate this file during the build. For example, */ - /* */ - /* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */ - /* #include <freetype/config/ftheader.h> */ - /* */ - /* will use `$BUILD/myftoptions.h' instead of this file for macro */ - /* definitions. */ - /* */ - /* Note also that you can similarly pre-define the macro */ - /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */ - /* that are statically linked to the library at compile time. By */ - /* default, this file is <freetype/config/ftmodule.h>. */ - /* */ - /* We highly recommend using the third method whenever possible. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * USER-SELECTABLE CONFIGURATION MACROS + * + * This file contains the default configuration macro definitions for a + * standard build of the FreeType library. There are three ways to use + * this file to build project-specific versions of the library: + * + * - You can modify this file by hand, but this is not recommended in + * cases where you would like to build several versions of the library + * from a single source directory. + * + * - You can put a copy of this file in your build directory, more + * precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is + * the name of a directory that is included _before_ the FreeType include + * path during compilation. + * + * The default FreeType Makefiles use the build directory + * `builds/<system>` by default, but you can easily change that for your + * own projects. + * + * - Copy the file <ft2build.h> to `$BUILD/ft2build.h` and modify it + * slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate + * this file during the build. For example, + * + * ``` + * #define FT_CONFIG_OPTIONS_H <myftoptions.h> + * #include <freetype/config/ftheader.h> + * ``` + * + * will use `$BUILD/myftoptions.h` instead of this file for macro + * definitions. + * + * Note also that you can similarly pre-define the macro + * `FT_CONFIG_MODULES_H` used to locate the file listing of the modules + * that are statically linked to the library at compile time. By + * default, this file is `<freetype/config/ftmodule.h>`. + * + * We highly recommend using the third method whenever possible. + * + */ /*************************************************************************/ @@ -75,426 +77,481 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* Uncomment the line below if you want to activate sub-pixel rendering */ - /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */ - /* */ - /* Note that this feature is covered by several Microsoft patents */ - /* and should not be activated in any default build of the library. */ - /* */ - /* This macro has no impact on the FreeType API, only on its */ - /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */ - /* FT_Render_Glyph still generates a bitmap that is 3 times wider than */ - /* the original size in case this macro isn't defined; however, each */ - /* triplet of subpixels has R=G=B. */ - /* */ - /* This is done to allow FreeType clients to run unmodified, forcing */ - /* them to display normal gray-level anti-aliased glyphs. */ - /* */ + /*#************************************************************************ + * + * If you enable this configuration option, FreeType recognizes an + * environment variable called `FREETYPE_PROPERTIES`, which can be used to + * control the various font drivers and modules. The controllable + * properties are listed in the section @properties. + * + * You have to undefine this configuration option on platforms that lack + * the concept of environment variables (and thus don't have the `getenv` + * function), for example Windows CE. + * + * `FREETYPE_PROPERTIES` has the following syntax form (broken here into + * multiple lines for better readability). + * + * ``` + * <optional whitespace> + * <module-name1> ':' + * <property-name1> '=' <property-value1> + * <whitespace> + * <module-name2> ':' + * <property-name2> '=' <property-value2> + * ... + * ``` + * + * Example: + * + * ``` + * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ + * cff:no-stem-darkening=1 + * ``` + * + */ +#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + + + /************************************************************************** + * + * Uncomment the line below if you want to activate LCD rendering + * technology similar to ClearType in this build of the library. This + * technology triples the resolution in the direction color subpixels. To + * mitigate color fringes inherent to this technology, you also need to + * explicitly set up LCD filtering. + * + * When this macro is not defined, FreeType offers alternative LCD + * rendering technology that produces excellent output. + */ /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ - /*************************************************************************/ - /* */ - /* Many compilers provide a non-ANSI 64-bit data type that can be used */ - /* by FreeType to speed up some computations. However, this will create */ - /* some problems when compiling the library in strict ANSI mode. */ - /* */ - /* For this reason, the use of 64-bit integers is normally disabled when */ - /* the __STDC__ macro is defined. You can however disable this by */ - /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */ - /* */ - /* For most compilers, this will only create compilation warnings when */ - /* building the library. */ - /* */ - /* ObNote: The compiler-specific 64-bit integers are detected in the */ - /* file `ftconfig.h' either statically or through the */ - /* `configure' script on supported platforms. */ - /* */ + /************************************************************************** + * + * Many compilers provide a non-ANSI 64-bit data type that can be used by + * FreeType to speed up some computations. However, this will create some + * problems when compiling the library in strict ANSI mode. + * + * For this reason, the use of 64-bit integers is normally disabled when + * the `__STDC__` macro is defined. You can however disable this by + * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here. + * + * For most compilers, this will only create compilation warnings when + * building the library. + * + * ObNote: The compiler-specific 64-bit integers are detected in the + * file `ftconfig.h` either statically or through the `configure` + * script on supported platforms. + */ #undef FT_CONFIG_OPTION_FORCE_INT64 - /*************************************************************************/ - /* */ - /* If this macro is defined, do not try to use an assembler version of */ - /* performance-critical functions (e.g. FT_MulFix). You should only do */ - /* that to verify that the assembler function works properly, or to */ - /* execute benchmark tests of the various implementations. */ + /************************************************************************** + * + * If this macro is defined, do not try to use an assembler version of + * performance-critical functions (e.g., @FT_MulFix). You should only do + * that to verify that the assembler function works properly, or to execute + * benchmark tests of the various implementations. + */ /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ - /*************************************************************************/ - /* */ - /* If this macro is defined, try to use an inlined assembler version of */ - /* the `FT_MulFix' function, which is a `hotspot' when loading and */ - /* hinting glyphs, and which should be executed as fast as possible. */ - /* */ - /* Note that if your compiler or CPU is not supported, this will default */ - /* to the standard and portable implementation found in `ftcalc.c'. */ - /* */ + /************************************************************************** + * + * If this macro is defined, try to use an inlined assembler version of the + * @FT_MulFix function, which is a 'hotspot' when loading and hinting + * glyphs, and which should be executed as fast as possible. + * + * Note that if your compiler or CPU is not supported, this will default to + * the standard and portable implementation found in `ftcalc.c`. + */ #define FT_CONFIG_OPTION_INLINE_MULFIX - /*************************************************************************/ - /* */ - /* LZW-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `compress' program. This is mostly used to parse many of the PCF */ - /* files that come with various X11 distributions. The implementation */ - /* uses NetBSD's `zopen' to partially uncompress the file on the fly */ - /* (see src/lzw/ftgzip.c). */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ + /************************************************************************** + * + * LZW-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `compress` program. This is mostly used to parse many of the PCF + * files that come with various X11 distributions. The implementation + * uses NetBSD's `zopen` to partially uncompress the file on the fly (see + * `src/lzw/ftgzip.c`). + * + * Define this macro if you want to enable this 'feature'. + */ #define FT_CONFIG_OPTION_USE_LZW - /*************************************************************************/ - /* */ - /* Gzip-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `gzip' program. This is mostly used to parse many of the PCF files */ - /* that come with XFree86. The implementation uses `zlib' to */ - /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */ - /* */ - /* Define this macro if you want to enable this `feature'. See also */ - /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */ - /* */ + /************************************************************************** + * + * Gzip-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `gzip` program. This is mostly used to parse many of the PCF files + * that come with XFree86. The implementation uses 'zlib' to partially + * uncompress the file on the fly (see `src/gzip/ftgzip.c`). + * + * Define this macro if you want to enable this 'feature'. See also the + * macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below. + */ #define FT_CONFIG_OPTION_USE_ZLIB - /*************************************************************************/ - /* */ - /* ZLib library selection */ - /* */ - /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */ - /* It allows FreeType's `ftgzip' component to link to the system's */ - /* installation of the ZLib library. This is useful on systems like */ - /* Unix or VMS where it generally is already available. */ - /* */ - /* If you let it undefined, the component will use its own copy */ - /* of the zlib sources instead. These have been modified to be */ - /* included directly within the component and *not* export external */ - /* function names. This allows you to link any program with FreeType */ - /* _and_ ZLib without linking conflicts. */ - /* */ - /* Do not #undef this macro here since the build system might define */ - /* it for certain configurations only. */ - /* */ + /************************************************************************** + * + * ZLib library selection + * + * This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined. + * It allows FreeType's 'ftgzip' component to link to the system's + * installation of the ZLib library. This is useful on systems like + * Unix or VMS where it generally is already available. + * + * If you let it undefined, the component will use its own copy of the + * zlib sources instead. These have been modified to be included + * directly within the component and **not** export external function + * names. This allows you to link any program with FreeType _and_ ZLib + * without linking conflicts. + * + * Do not `#undef` this macro here since the build system might define + * it for certain configurations only. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + * + * If you use the GNU make build system directly (that is, without the + * `configure` script) and you define this macro, you also have to pass + * `SYSTEM_ZLIB=yes` as an argument to make. + */ /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ - /*************************************************************************/ - /* */ - /* Bzip2-compressed file support. */ - /* */ - /* FreeType now handles font files that have been compressed with the */ - /* `bzip2' program. This is mostly used to parse many of the PCF */ - /* files that come with XFree86. The implementation uses `libbz2' to */ - /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */ - /* Contrary to gzip, bzip2 currently is not included and need to use */ - /* the system available bzip2 implementation. */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ + /************************************************************************** + * + * Bzip2-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `bzip2` program. This is mostly used to parse many of the PCF files + * that come with XFree86. The implementation uses `libbz2` to partially + * uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary + * to gzip, bzip2 currently is not included and need to use the system + * available bzip2 implementation. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ /* #define FT_CONFIG_OPTION_USE_BZIP2 */ - /*************************************************************************/ - /* */ - /* Define to disable the use of file stream functions and types, FILE, */ - /* fopen() etc. Enables the use of smaller system libraries on embedded */ - /* systems that have multiple system libraries, some with or without */ - /* file stream support, in the cases where file stream support is not */ - /* necessary such as memory loading of font files. */ - /* */ + /************************************************************************** + * + * Define to disable the use of file stream functions and types, `FILE`, + * `fopen`, etc. Enables the use of smaller system libraries on embedded + * systems that have multiple system libraries, some with or without file + * stream support, in the cases where file stream support is not necessary + * such as memory loading of font files. + */ /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ - /*************************************************************************/ - /* */ - /* PNG bitmap support. */ - /* */ - /* FreeType now handles loading color bitmap glyphs in the PNG format. */ - /* This requires help from the external libpng library. Uncompressed */ - /* color bitmaps do not need any external libraries and will be */ - /* supported regardless of this configuration. */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ + /************************************************************************** + * + * PNG bitmap support. + * + * FreeType now handles loading color bitmap glyphs in the PNG format. + * This requires help from the external libpng library. Uncompressed + * color bitmaps do not need any external libraries and will be supported + * regardless of this configuration. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ /* #define FT_CONFIG_OPTION_USE_PNG */ - /*************************************************************************/ - /* */ - /* HarfBuzz support. */ - /* */ - /* FreeType uses the HarfBuzz library to improve auto-hinting of */ - /* OpenType fonts. If available, many glyphs not directly addressable */ - /* by a font's character map will be hinted also. */ - /* */ - /* Define this macro if you want to enable this `feature'. */ - /* */ + /************************************************************************** + * + * HarfBuzz support. + * + * FreeType uses the HarfBuzz library to improve auto-hinting of OpenType + * fonts. If available, many glyphs not directly addressable by a font's + * character map will be hinted also. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ - /*************************************************************************/ - /* */ - /* DLL export compilation */ - /* */ - /* When compiling FreeType as a DLL, some systems/compilers need a */ - /* special keyword in front OR after the return type of function */ - /* declarations. */ - /* */ - /* Two macros are used within the FreeType source code to define */ - /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */ - /* */ - /* FT_EXPORT( return_type ) */ - /* */ - /* is used in a function declaration, as in */ - /* */ - /* FT_EXPORT( FT_Error ) */ - /* FT_Init_FreeType( FT_Library* alibrary ); */ - /* */ - /* */ - /* FT_EXPORT_DEF( return_type ) */ - /* */ - /* is used in a function definition, as in */ - /* */ - /* FT_EXPORT_DEF( FT_Error ) */ - /* FT_Init_FreeType( FT_Library* alibrary ) */ - /* { */ - /* ... some code ... */ - /* return FT_Err_Ok; */ - /* } */ - /* */ - /* You can provide your own implementation of FT_EXPORT and */ - /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */ - /* will be later automatically defined as `extern return_type' to */ - /* allow normal compilation. */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ -/* #define FT_EXPORT(x) extern x */ -/* #define FT_EXPORT_DEF(x) x */ - - - /*************************************************************************/ - /* */ - /* Glyph Postscript Names handling */ - /* */ - /* By default, FreeType 2 is compiled with the `psnames' module. This */ - /* module is in charge of converting a glyph name string into a */ - /* Unicode value, or return a Macintosh standard glyph name for the */ - /* use with the TrueType `post' table. */ - /* */ - /* Undefine this macro if you do not want `psnames' compiled in your */ - /* build of FreeType. This has the following effects: */ - /* */ - /* - The TrueType driver will provide its own set of glyph names, */ - /* if you build it to support postscript names in the TrueType */ - /* `post' table. */ - /* */ - /* - The Type 1 driver will not be able to synthesize a Unicode */ - /* charmap out of the glyphs found in the fonts. */ - /* */ - /* You would normally undefine this configuration macro when building */ - /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */ - /* */ + /************************************************************************** + * + * 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 + * + * By default, FreeType 2 is compiled with the 'psnames' module. This + * module is in charge of converting a glyph name string into a Unicode + * value, or return a Macintosh standard glyph name for the use with the + * TrueType 'post' table. + * + * Undefine this macro if you do not want 'psnames' compiled in your + * build of FreeType. This has the following effects: + * + * - The TrueType driver will provide its own set of glyph names, if you + * build it to support postscript names in the TrueType 'post' table, + * but will not synthesize a missing Unicode charmap. + * + * - The Type~1 driver will not be able to synthesize a Unicode charmap + * out of the glyphs found in the fonts. + * + * You would normally undefine this configuration macro when building a + * version of FreeType that doesn't contain a Type~1 or CFF driver. + */ #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES - /*************************************************************************/ - /* */ - /* Postscript Names to Unicode Values support */ - /* */ - /* By default, FreeType 2 is built with the `PSNames' module compiled */ - /* in. Among other things, the module is used to convert a glyph name */ - /* into a Unicode value. This is especially useful in order to */ - /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */ - /* through a big table named the `Adobe Glyph List' (AGL). */ - /* */ - /* Undefine this macro if you do not want the Adobe Glyph List */ - /* compiled in your `PSNames' module. The Type 1 driver will not be */ - /* able to synthesize a Unicode charmap out of the glyphs found in the */ - /* fonts. */ - /* */ + /************************************************************************** + * + * Postscript Names to Unicode Values support + * + * By default, FreeType~2 is built with the 'psnames' module compiled in. + * Among other things, the module is used to convert a glyph name into a + * Unicode value. This is especially useful in order to synthesize on + * the fly a Unicode charmap from the CFF/Type~1 driver through a big + * table named the 'Adobe Glyph List' (AGL). + * + * Undefine this macro if you do not want the Adobe Glyph List compiled + * in your 'psnames' module. The Type~1 driver will not be able to + * synthesize a Unicode charmap out of the glyphs found in the fonts. + */ #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST - /*************************************************************************/ - /* */ - /* Support for Mac fonts */ - /* */ - /* Define this macro if you want support for outline fonts in Mac */ - /* format (mac dfont, mac resource, macbinary containing a mac */ - /* resource) on non-Mac platforms. */ - /* */ - /* Note that the `FOND' resource isn't checked. */ - /* */ + /************************************************************************** + * + * Support for Mac fonts + * + * Define this macro if you want support for outline fonts in Mac format + * (mac dfont, mac resource, macbinary containing a mac resource) on + * non-Mac platforms. + * + * Note that the 'FOND' resource isn't checked. + */ #define FT_CONFIG_OPTION_MAC_FONTS - /*************************************************************************/ - /* */ - /* Guessing methods to access embedded resource forks */ - /* */ - /* Enable extra Mac fonts support on non-Mac platforms (e.g. */ - /* GNU/Linux). */ - /* */ - /* Resource forks which include fonts data are stored sometimes in */ - /* locations which users or developers don't expected. In some cases, */ - /* resource forks start with some offset from the head of a file. In */ - /* other cases, the actual resource fork is stored in file different */ - /* from what the user specifies. If this option is activated, */ - /* FreeType tries to guess whether such offsets or different file */ - /* names must be used. */ - /* */ - /* Note that normal, direct access of resource forks is controlled via */ - /* the FT_CONFIG_OPTION_MAC_FONTS option. */ - /* */ + /************************************************************************** + * + * Guessing methods to access embedded resource forks + * + * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux). + * + * Resource forks which include fonts data are stored sometimes in + * locations which users or developers don't expected. In some cases, + * resource forks start with some offset from the head of a file. In + * other cases, the actual resource fork is stored in file different from + * what the user specifies. If this option is activated, FreeType tries + * to guess whether such offsets or different file names must be used. + * + * Note that normal, direct access of resource forks is controlled via + * the `FT_CONFIG_OPTION_MAC_FONTS` option. + */ #ifdef FT_CONFIG_OPTION_MAC_FONTS #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK #endif - /*************************************************************************/ - /* */ - /* Allow the use of FT_Incremental_Interface to load typefaces that */ - /* contain no glyph data, but supply it via a callback function. */ - /* This is required by clients supporting document formats which */ - /* supply font data incrementally as the document is parsed, such */ - /* as the Ghostscript interpreter for the PostScript language. */ - /* */ + /************************************************************************** + * + * Allow the use of `FT_Incremental_Interface` to load typefaces that + * contain no glyph data, but supply it via a callback function. This is + * required by clients supporting document formats which supply font data + * incrementally as the document is parsed, such as the Ghostscript + * interpreter for the PostScript language. + */ #define FT_CONFIG_OPTION_INCREMENTAL - /*************************************************************************/ - /* */ - /* The size in bytes of the render pool used by the scan-line converter */ - /* to do all of its work. */ - /* */ + /************************************************************************** + * + * The size in bytes of the render pool used by the scan-line converter to + * do all of its work. + */ #define FT_RENDER_POOL_SIZE 16384L - /*************************************************************************/ - /* */ - /* FT_MAX_MODULES */ - /* */ - /* The maximum number of modules that can be registered in a single */ - /* FreeType library object. 32 is the default. */ - /* */ + /************************************************************************** + * + * FT_MAX_MODULES + * + * The maximum number of modules that can be registered in a single + * FreeType library object. 32~is the default. + */ #define FT_MAX_MODULES 32 - /*************************************************************************/ - /* */ - /* Debug level */ - /* */ - /* FreeType can be compiled in debug or trace mode. In debug mode, */ - /* errors are reported through the `ftdebug' component. In trace */ - /* mode, additional messages are sent to the standard output during */ - /* execution. */ - /* */ - /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ - /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ - /* */ - /* Don't define any of these macros to compile in `release' mode! */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ + /************************************************************************** + * + * Debug level + * + * FreeType can be compiled in debug or trace mode. In debug mode, + * errors are reported through the 'ftdebug' component. In trace mode, + * additional messages are sent to the standard output during execution. + * + * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode. + * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode. + * + * Don't define any of these macros to compile in 'release' mode! + * + * Do not `#undef` these macros here since the build system might define + * them for certain configurations only. + */ /* #define FT_DEBUG_LEVEL_ERROR */ /* #define FT_DEBUG_LEVEL_TRACE */ - /*************************************************************************/ - /* */ - /* Autofitter debugging */ - /* */ - /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */ - /* control the autofitter behaviour for debugging purposes with global */ - /* boolean variables (consequently, you should *never* enable this */ - /* while compiling in `release' mode): */ - /* */ - /* _af_debug_disable_horz_hints */ - /* _af_debug_disable_vert_hints */ - /* _af_debug_disable_blue_hints */ - /* */ - /* Additionally, the following functions provide dumps of various */ - /* internal autofit structures to stdout (using `printf'): */ - /* */ - /* af_glyph_hints_dump_points */ - /* af_glyph_hints_dump_segments */ - /* af_glyph_hints_dump_edges */ - /* af_glyph_hints_get_num_segments */ - /* af_glyph_hints_get_segment_offset */ - /* */ - /* As an argument, they use another global variable: */ - /* */ - /* _af_debug_hints */ - /* */ - /* Please have a look at the `ftgrid' demo program to see how those */ - /* variables and macros should be used. */ - /* */ - /* Do not #undef these macros here since the build system might define */ - /* them for certain configurations only. */ - /* */ + /************************************************************************** + * + * Logging + * + * Compiling FreeType in debug or trace mode makes FreeType write error + * and trace log messages to `stderr`. Enabling this macro + * automatically forces the `FT_DEBUG_LEVEL_ERROR` and + * `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and + * trace log messages to a file instead of `stderr`. For writing logs + * to a file, FreeType uses an the external `dlg` library (the source + * code is in `src/dlg`). + * + * This option needs a C99 compiler. + */ +/* #define FT_DEBUG_LOGGING */ + + + /************************************************************************** + * + * Autofitter debugging + * + * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to + * control the autofitter behaviour for debugging purposes with global + * boolean variables (consequently, you should **never** enable this + * while compiling in 'release' mode): + * + * ``` + * af_debug_disable_horz_hints_ + * af_debug_disable_vert_hints_ + * af_debug_disable_blue_hints_ + * ``` + * + * Additionally, the following functions provide dumps of various + * internal autofit structures to stdout (using `printf`): + * + * ``` + * af_glyph_hints_dump_points + * af_glyph_hints_dump_segments + * af_glyph_hints_dump_edges + * af_glyph_hints_get_num_segments + * af_glyph_hints_get_segment_offset + * ``` + * + * As an argument, they use another global variable: + * + * ``` + * af_debug_hints_ + * ``` + * + * Please have a look at the `ftgrid` demo program to see how those + * variables and macros should be used. + * + * Do not `#undef` these macros here since the build system might define + * them for certain configurations only. + */ /* #define FT_DEBUG_AUTOFIT */ - /*************************************************************************/ - /* */ - /* Memory Debugging */ - /* */ - /* FreeType now comes with an integrated memory debugger that is */ - /* capable of detecting simple errors like memory leaks or double */ - /* deletes. To compile it within your build of the library, you */ - /* should define FT_DEBUG_MEMORY here. */ - /* */ - /* Note that the memory debugger is only activated at runtime when */ - /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */ - /* */ - /* Do not #undef this macro here since the build system might define */ - /* it for certain configurations only. */ - /* */ + /************************************************************************** + * + * Memory Debugging + * + * FreeType now comes with an integrated memory debugger that is capable + * of detecting simple errors like memory leaks or double deletes. To + * compile it within your build of the library, you should define + * `FT_DEBUG_MEMORY` here. + * + * Note that the memory debugger is only activated at runtime when when + * the _environment_ variable `FT2_DEBUG_MEMORY` is defined also! + * + * Do not `#undef` this macro here since the build system might define it + * for certain configurations only. + */ /* #define FT_DEBUG_MEMORY */ - /*************************************************************************/ - /* */ - /* Module errors */ - /* */ - /* If this macro is set (which is _not_ the default), the higher byte */ - /* of an error code gives the module in which the error has occurred, */ - /* while the lower byte is the real error code. */ - /* */ - /* Setting this macro makes sense for debugging purposes only, since */ - /* it would break source compatibility of certain programs that use */ - /* FreeType 2. */ - /* */ - /* More details can be found in the files ftmoderr.h and fterrors.h. */ - /* */ + /************************************************************************** + * + * Module errors + * + * If this macro is set (which is _not_ the default), the higher byte of + * an error code gives the module in which the error has occurred, while + * the lower byte is the real error code. + * + * Setting this macro makes sense for debugging purposes only, since it + * would break source compatibility of certain programs that use + * FreeType~2. + * + * More details can be found in the files `ftmoderr.h` and `fterrors.h`. + */ #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS - /*************************************************************************/ - /* */ - /* Position Independent Code */ - /* */ - /* If this macro is set (which is _not_ the default), FreeType2 will */ - /* avoid creating constants that require address fixups. Instead the */ - /* constants will be moved into a struct and additional intialization */ - /* code will be used. */ - /* */ - /* Setting this macro is needed for systems that prohibit address */ - /* fixups, such as BREW. */ - /* */ -/* #define FT_CONFIG_OPTION_PIC */ + /************************************************************************** + * + * OpenType SVG Glyph Support + * + * Setting this macro enables support for OpenType SVG glyphs. By + * default, FreeType can only fetch SVG documents. However, it can also + * render them if external rendering hook functions are plugged in at + * runtime. + * + * More details on the hooks can be found in file `otsvg.h`. + */ +#define FT_CONFIG_OPTION_SVG + + + /************************************************************************** + * + * Error Strings + * + * If this macro is set, `FT_Error_String` will return meaningful + * descriptions. This is not enabled by default to reduce the overall + * size of FreeType. + * + * More details can be found in the file `fterrors.h`. + */ +/* #define FT_CONFIG_OPTION_ERROR_STRINGS */ /*************************************************************************/ @@ -506,50 +563,60 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */ - /* embedded bitmaps in all formats using the SFNT module (namely */ - /* TrueType & OpenType). */ - /* */ + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support + * embedded bitmaps in all formats using the 'sfnt' module (namely + * TrueType~& OpenType). + */ #define TT_CONFIG_OPTION_EMBEDDED_BITMAPS - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */ - /* load and enumerate the glyph Postscript names in a TrueType or */ - /* OpenType file. */ - /* */ - /* Note that when you do not compile the `PSNames' module by undefining */ - /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */ - /* contain additional code used to read the PS Names table from a font. */ - /* */ - /* (By default, the module uses `PSNames' to extract glyph names.) */ - /* */ + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored + * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' + * module (namely TrueType~& OpenType). + */ +#define TT_CONFIG_OPTION_COLOR_LAYERS + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to + * load and enumerate Postscript names of glyphs in a TrueType or OpenType + * file. + * + * Note that if you do not compile the 'psnames' module by undefining the + * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` macro, the 'sfnt' module will + * contain additional code to read the PostScript name table from a font. + * + * (By default, the module uses 'psnames' to extract glyph names.) + */ #define TT_CONFIG_OPTION_POSTSCRIPT_NAMES - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */ - /* access the internal name table in a SFNT-based format like TrueType */ - /* or OpenType. The name table contains various strings used to */ - /* describe the font, like family name, copyright, version, etc. It */ - /* does not contain any glyph name though. */ - /* */ - /* Accessing SFNT names is done through the functions declared in */ - /* `ftsnames.h'. */ - /* */ + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access + * the internal name table in a SFNT-based format like TrueType or + * OpenType. The name table contains various strings used to describe the + * font, like family name, copyright, version, etc. It does not contain + * any glyph name though. + * + * Accessing SFNT names is done through the functions declared in + * `ftsnames.h`. + */ #define TT_CONFIG_OPTION_SFNT_NAMES - /*************************************************************************/ - /* */ - /* TrueType CMap support */ - /* */ - /* Here you can fine-tune which TrueType CMap table format shall be */ - /* supported. */ + /************************************************************************** + * + * TrueType CMap support + * + * Here you can fine-tune which TrueType CMap table format shall be + * supported. + */ #define TT_CONFIG_CMAP_FORMAT_0 #define TT_CONFIG_CMAP_FORMAT_2 #define TT_CONFIG_CMAP_FORMAT_4 @@ -569,97 +636,143 @@ FT_BEGIN_HEADER /*************************************************************************/ /*************************************************************************/ - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */ - /* a bytecode interpreter in the TrueType driver. */ - /* */ - /* By undefining this, you will only compile the code necessary to load */ - /* TrueType glyphs without hinting. */ - /* */ - /* Do not #undef this macro here, since the build system might */ - /* define it for certain configurations only. */ - /* */ + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a + * bytecode interpreter in the TrueType driver. + * + * By undefining this, you will only compile the code necessary to load + * TrueType glyphs without hinting. + * + * Do not `#undef` this macro here, since the build system might define it + * for certain configurations only. + */ #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */ - /* EXPERIMENTAL subpixel hinting support into the TrueType driver. This */ - /* replaces the native TrueType hinting mechanism when anything but */ - /* FT_RENDER_MODE_MONO is requested. */ - /* */ - /* Enabling this causes the TrueType driver to ignore instructions under */ - /* certain conditions. This is done in accordance with the guide here, */ - /* with some minor differences: */ - /* */ - /* http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */ - /* */ - /* By undefining this, you only compile the code necessary to hint */ - /* TrueType glyphs with native TT hinting. */ - /* */ - /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */ - /* defined. */ - /* */ -/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - - - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */ - /* TrueType glyph loader to use Apple's definition of how to handle */ - /* component offsets in composite glyphs. */ - /* */ - /* Apple and MS disagree on the default behavior of component offsets */ - /* in composites. Apple says that they should be scaled by the scaling */ - /* factors in the transformation matrix (roughly, it's more complex) */ - /* while MS says they should not. OpenType defines two bits in the */ - /* composite flags array which can be used to disambiguate, but old */ - /* fonts will not have them. */ - /* */ - /* http://www.microsoft.com/typography/otspec/glyf.htm */ - /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */ - /* */ + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile + * subpixel hinting support into the TrueType driver. This modifies the + * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is + * requested. + * + * In particular, it modifies the bytecode interpreter to interpret (or + * not) instructions in a certain way so that all TrueType fonts look like + * they do in a Windows ClearType (DirectWrite) environment. See [1] for a + * technical overview on what this means. See `ttinterp.h` for more + * details on this option. + * + * The new default mode focuses on applying a minimal set of rules to all + * fonts indiscriminately so that modern and web fonts render well while + * legacy fonts render okay. The corresponding interpreter version is v40. + * The so-called Infinality mode (v38) is no longer available in FreeType. + * + * By undefining these, you get rendering behavior like on Windows without + * ClearType, i.e., Windows XP without ClearType enabled and Win9x + * (interpreter version v35). Or not, depending on how much hinting blood + * and testing tears the font designer put into a given font. If you + * define one or both subpixel hinting options, you can switch between + * between v35 and the ones you define (using `FT_Property_Set`). + * + * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be + * defined. + * + * [1] + * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx + */ +#define TT_CONFIG_OPTION_SUBPIXEL_HINTING + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the + * TrueType glyph loader to use Apple's definition of how to handle + * component offsets in composite glyphs. + * + * Apple and MS disagree on the default behavior of component offsets in + * composites. Apple says that they should be scaled by the scaling + * factors in the transformation matrix (roughly, it's more complex) while + * MS says they should not. OpenType defines two bits in the composite + * flags array which can be used to disambiguate, but old fonts will not + * have them. + * + * https://www.microsoft.com/typography/otspec/glyf.htm + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html + */ #undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */ - /* support for Apple's distortable font technology (fvar, gvar, cvar, */ - /* and avar tables). This has many similarities to Type 1 Multiple */ - /* Masters support. */ - /* */ + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support + * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and + * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType + * also. This has many similarities to Type~1 Multiple Masters support. + */ #define TT_CONFIG_OPTION_GX_VAR_SUPPORT - /*************************************************************************/ - /* */ - /* Define TT_CONFIG_OPTION_BDF if you want to include support for */ - /* an embedded `BDF ' table within SFNT-based bitmap formats. */ - /* */ + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_NO_BORING_EXPANSION` if you want to exclude + * support for 'boring' OpenType specification expansions. + * + * https://github.com/harfbuzz/boring-expansion-spec + * + * Right now, the following features are covered: + * + * - 'avar' version 2.0 + * + * Most likely, this is a temporary configuration option to be removed in + * the near future, since it is assumed that eventually those features are + * added to the OpenType standard. + */ +/* #define TT_CONFIG_OPTION_NO_BORING_EXPANSION */ + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an + * embedded 'BDF~' table within SFNT-based bitmap formats. + */ #define TT_CONFIG_OPTION_BDF - /*************************************************************************/ - /* */ - /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */ - /* number of bytecode instructions executed for a single run of the */ - /* bytecode interpreter, needed to prevent infinite loops. You don't */ - /* want to change this except for very special situations (e.g., making */ - /* a library fuzzer spend less time to handle broken fonts). */ - /* */ - /* It is not expected that this value is ever modified by a configuring */ - /* script; instead, it gets surrounded with #ifndef ... #endif so that */ - /* the value can be set as a preprocessor option on the compiler's */ - /* command line. */ - /* */ + /************************************************************************** + * + * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum + * number of bytecode instructions executed for a single run of the + * bytecode interpreter, needed to prevent infinite loops. You don't want + * to change this except for very special situations (e.g., making a + * library fuzzer spend less time to handle broken fonts). + * + * It is not expected that this value is ever modified by a configuring + * script; instead, it gets surrounded with `#ifndef ... #endif` so that + * the value can be set as a preprocessor option on the compiler's command + * line. + */ #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L #endif + /************************************************************************** + * + * Option `TT_CONFIG_OPTION_GPOS_KERNING` enables a basic GPOS kerning + * implementation (for TrueType fonts only). With this defined, FreeType + * is able to get kerning pair data from the GPOS 'kern' feature as well as + * legacy 'kern' tables; without this defined, FreeType will only be able + * to use legacy 'kern' tables. + * + * Note that FreeType does not support more advanced GPOS layout features; + * even the 'kern' feature implemented here doesn't handle more + * sophisticated kerning variants. Use a higher-level library like + * HarfBuzz instead for that. + */ +/* #define TT_CONFIG_OPTION_GPOS_KERNING */ + + /*************************************************************************/ /*************************************************************************/ /**** ****/ @@ -669,52 +782,61 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */ - /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */ - /* required. */ - /* */ + /************************************************************************** + * + * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays + * in the Type~1 stream (see `t1load.c`). A minimum of~4 is required. + */ #define T1_MAX_DICT_DEPTH 5 - /*************************************************************************/ - /* */ - /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */ - /* calls during glyph loading. */ - /* */ + /************************************************************************** + * + * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine + * calls during glyph loading. + */ #define T1_MAX_SUBRS_CALLS 16 - /*************************************************************************/ - /* */ - /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */ - /* minimum of 16 is required. */ - /* */ - /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */ - /* */ + /************************************************************************** + * + * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A + * minimum of~16 is required. + * + * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character + * set) needs 256. + */ #define T1_MAX_CHARSTRINGS_OPERANDS 256 - /*************************************************************************/ - /* */ - /* Define this configuration macro if you want to prevent the */ - /* compilation of `t1afm', which is in charge of reading Type 1 AFM */ - /* files into an existing face. Note that if set, the T1 driver will be */ - /* unable to produce kerning distances. */ - /* */ + /************************************************************************** + * + * Define this configuration macro if you want to prevent the compilation + * of the 't1afm' module, which is in charge of reading Type~1 AFM files + * into an existing face. Note that if set, the Type~1 driver will be + * unable to produce kerning distances. + */ #undef T1_CONFIG_OPTION_NO_AFM - /*************************************************************************/ - /* */ - /* Define this configuration macro if you want to prevent the */ - /* compilation of the Multiple Masters font support in the Type 1 */ - /* driver. */ - /* */ + /************************************************************************** + * + * Define this configuration macro if you want to prevent the compilation + * of the Multiple Masters font support in the Type~1 driver. + */ #undef T1_CONFIG_OPTION_NO_MM_SUPPORT + /************************************************************************** + * + * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1 + * engine gets compiled into FreeType. If defined, it is possible to + * switch between the two engines using the `hinting-engine` property of + * the 'type1' driver module. + */ +/* #define T1_CONFIG_OPTION_OLD_ENGINE */ + + /*************************************************************************/ /*************************************************************************/ /**** ****/ @@ -724,17 +846,16 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */ - /* possible to set up the default values of the four control points that */ - /* define the stem darkening behaviour of the (new) CFF engine. For */ - /* more details please read the documentation of the */ - /* `darkening-parameters' property of the cff driver module (file */ - /* `ftcffdrv.h'), which allows the control at run-time. */ - /* */ - /* Do *not* undefine these macros! */ - /* */ + /************************************************************************** + * + * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is + * possible to set up the default values of the four control points that + * define the stem darkening behaviour of the (new) CFF engine. For more + * details please read the documentation of the `darkening-parameters` + * property (file `ftdriver.h`), which allows the control at run-time. + * + * Do **not** undefine these macros! + */ #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 @@ -748,75 +869,133 @@ FT_BEGIN_HEADER #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 - /*************************************************************************/ - /* */ - /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */ - /* engine gets compiled into FreeType. If defined, it is possible to */ - /* switch between the two engines using the `hinting-engine' property of */ - /* the cff driver module. */ - /* */ + /************************************************************************** + * + * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine + * gets compiled into FreeType. If defined, it is possible to switch + * between the two engines using the `hinting-engine` property of the 'cff' + * driver module. + */ /* #define CFF_CONFIG_OPTION_OLD_ENGINE */ /*************************************************************************/ /*************************************************************************/ /**** ****/ - /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ + /**** P C F D R I V E R C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ + /************************************************************************** + * + * There are many PCF fonts just called 'Fixed' which look completely + * different, and which have nothing to do with each other. When selecting + * 'Fixed' in KDE or Gnome one gets results that appear rather random, the + * style changes often if one changes the size and one cannot select some + * fonts at all. This option makes the 'pcf' module prepend the foundry + * name (plus a space) to the family name. + * + * We also check whether we have 'wide' characters; all put together, we + * get family names like 'Sony Fixed' or 'Misc Fixed Wide'. + * + * If this option is activated, it can be controlled with the + * `no-long-family-names` property of the 'pcf' driver module. + */ +/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ + + /*************************************************************************/ - /* */ - /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */ - /* support. */ - /* */ + /*************************************************************************/ + /**** ****/ + /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script + * support. + */ #define AF_CONFIG_OPTION_CJK - /*************************************************************************/ - /* */ - /* Compile autofit module with Indic script support. */ - /* */ + + /************************************************************************** + * + * Compile 'autofit' module with fallback Indic script support, covering + * some scripts that the 'latin' submodule of the 'autofit' module doesn't + * (yet) handle. Currently, this needs option `AF_CONFIG_OPTION_CJK`. + */ +#ifdef AF_CONFIG_OPTION_CJK #define AF_CONFIG_OPTION_INDIC +#endif - /*************************************************************************/ - /* */ - /* Compile autofit module with warp hinting. The idea of the warping */ - /* code is to slightly scale and shift a glyph within a single dimension */ - /* so that as much of its segments are aligned (more or less) on the */ - /* grid. To find out the optimal scaling and shifting value, various */ - /* parameter combinations are tried and scored. */ - /* */ - /* This experimental option is active only if the rendering mode is */ - /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */ - /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */ - /* information; by default it is switched off). */ - /* */ -#define AF_CONFIG_OPTION_USE_WARPER + + /************************************************************************** + * + * Use TrueType-like size metrics for 'light' auto-hinting. + * + * It is strongly recommended to avoid this option, which exists only to + * help some legacy applications retain its appearance and behaviour with + * respect to auto-hinted TrueType fonts. + * + * The very reason this option exists at all are GNU/Linux distributions + * like Fedora that did not un-patch the following change (which was + * present in FreeType between versions 2.4.6 and 2.7.1, inclusive). + * + * ``` + * 2011-07-16 Steven Chu <steven.f.chu@gmail.com> + * + * [truetype] Fix metrics on size request for scalable fonts. + * ``` + * + * This problematic commit is now reverted (more or less). + */ +/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */ /* */ /* - * This macro is obsolete. Support has been removed in FreeType - * version 2.5. + * This macro is obsolete. Support has been removed in FreeType version + * 2.5. */ /* #define FT_CONFIG_OPTION_OLD_INTERNALS */ /* - * This macro is defined if native TrueType hinting is requested by the - * definitions above. + * The next two macros are defined if native TrueType hinting is + * requested by the definitions above. Don't change this. */ #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER #define TT_USE_BYTECODE_INTERPRETER +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING +#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL +#endif +#endif + + + /* + * The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this + * version of FreeType has support for 'COLR' v1 API. This definition is + * useful to FreeType clients that want to build in support for 'COLR' v1 + * depending on a tip-of-tree checkout before it is officially released in + * FreeType, and while the feature cannot yet be tested against using + * version macros. Don't change this macro. This may be removed once the + * feature is in a FreeType release version and version macros can be used + * to test for availability. + */ +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS +#define TT_SUPPORT_COLRV1 #endif /* * Check CFF darkening parameters. The checks are the same as in function - * `cff_property_set' in file `cffdrivr.c'. + * `cff_property_set` in file `cffdrivr.c`. */ #if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ @@ -842,8 +1021,8 @@ FT_BEGIN_HEADER #error "Invalid CFF darkening parameters!" #endif -FT_END_HEADER +FT_END_HEADER #endif /* FTOPTION_H_ */ diff --git a/non-source/foreign/freetype2/freetype/config/ftstdlib.h b/non-source/foreign/freetype2/freetype/config/ftstdlib.h index 9daea56f7..e17aa7b89 100644 --- a/non-source/foreign/freetype2/freetype/config/ftstdlib.h +++ b/non-source/foreign/freetype2/freetype/config/ftstdlib.h @@ -1,31 +1,31 @@ -/***************************************************************************/ -/* */ -/* ftstdlib.h */ -/* */ -/* ANSI-specific library and header configuration file (specification */ -/* only). */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file is used to group all #includes to the ANSI C library that */ - /* FreeType normally requires. It also defines macros to rename the */ - /* standard functions within the FreeType source code. */ - /* */ - /* Load a file which defines FTSTDLIB_H_ before this one to override it. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftstdlib.h + * + * ANSI-specific library and header configuration file (specification + * only). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to group all `#includes` to the ANSI~C library that + * FreeType normally requires. It also defines macros to rename the + * standard functions within the FreeType source code. + * + * Load a file which defines `FTSTDLIB_H_` before this one to override it. + * + */ #ifndef FTSTDLIB_H_ @@ -37,23 +37,24 @@ #define ft_ptrdiff_t ptrdiff_t - /**********************************************************************/ - /* */ - /* integer limits */ - /* */ - /* UINT_MAX and ULONG_MAX are used to automatically compute the size */ - /* of `int' and `long' in bytes at compile-time. So far, this works */ - /* for all platforms the library has been tested on. */ - /* */ - /* Note that on the extremely rare platforms that do not provide */ - /* integer types that are _exactly_ 16 and 32 bits wide (e.g. some */ - /* old Crays where `int' is 36 bits), we do not make any guarantee */ - /* about the correct behaviour of FT2 with all fonts. */ - /* */ - /* In these case, `ftconfig.h' will refuse to compile anyway with a */ - /* message like `couldn't find 32-bit type' or something similar. */ - /* */ - /**********************************************************************/ + /************************************************************************** + * + * integer limits + * + * `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of + * `int` and `long` in bytes at compile-time. So far, this works for all + * platforms the library has been tested on. We also check `ULLONG_MAX` + * to see whether we can use 64-bit `long long` later on. + * + * Note that on the extremely rare platforms that do not provide integer + * types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where + * `int` is 36~bits), we do not make any guarantee about the correct + * behaviour of FreeType~2 with all fonts. + * + * In these cases, `ftconfig.h` will refuse to compile anyway with a + * message like 'couldn't find 32-bit type' or something similar. + * + */ #include <limits.h> @@ -63,15 +64,25 @@ #define FT_INT_MAX INT_MAX #define FT_INT_MIN INT_MIN #define FT_UINT_MAX UINT_MAX +#define FT_LONG_MIN LONG_MIN #define FT_LONG_MAX LONG_MAX #define FT_ULONG_MAX ULONG_MAX +#ifdef LLONG_MAX +#define FT_LLONG_MAX LLONG_MAX +#endif +#ifdef LLONG_MIN +#define FT_LLONG_MIN LLONG_MIN +#endif +#ifdef ULLONG_MAX +#define FT_ULLONG_MAX ULLONG_MAX +#endif - /**********************************************************************/ - /* */ - /* character and string processing */ - /* */ - /**********************************************************************/ + /************************************************************************** + * + * character and string processing + * + */ #include <string.h> @@ -91,29 +102,29 @@ #define ft_strstr strstr - /**********************************************************************/ - /* */ - /* file handling */ - /* */ - /**********************************************************************/ + /************************************************************************** + * + * file handling + * + */ #include <stdio.h> -#define FT_FILE FILE -#define ft_fclose fclose -#define ft_fopen fopen -#define ft_fread fread -#define ft_fseek fseek -#define ft_ftell ftell -#define ft_sprintf sprintf +#define FT_FILE FILE +#define ft_fclose fclose +#define ft_fopen fopen +#define ft_fread fread +#define ft_fseek fseek +#define ft_ftell ftell +#define ft_snprintf snprintf - /**********************************************************************/ - /* */ - /* sorting */ - /* */ - /**********************************************************************/ + /************************************************************************** + * + * sorting + * + */ #include <stdlib.h> @@ -121,11 +132,11 @@ #define ft_qsort qsort - /**********************************************************************/ - /* */ - /* memory allocation */ - /* */ - /**********************************************************************/ + /************************************************************************** + * + * memory allocation + * + */ #define ft_scalloc calloc @@ -134,35 +145,36 @@ #define ft_srealloc realloc - /**********************************************************************/ - /* */ - /* miscellaneous */ - /* */ - /**********************************************************************/ + /************************************************************************** + * + * miscellaneous + * + */ -#define ft_atol atol +#define ft_strtol strtol +#define ft_getenv getenv - /**********************************************************************/ - /* */ - /* execution control */ - /* */ - /**********************************************************************/ + /************************************************************************** + * + * execution control + * + */ #include <setjmp.h> -#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */ - /* jmp_buf is defined as a macro */ - /* on certain platforms */ +#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */ + /* `jmp_buf` is defined as a macro */ + /* on certain platforms */ #define ft_longjmp longjmp #define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */ - /* the following is only used for debugging purposes, i.e., if */ - /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */ + /* The following is only used for debugging purposes, i.e., if */ + /* `FT_DEBUG_LEVEL_ERROR` or `FT_DEBUG_LEVEL_TRACE` are defined. */ #include <stdarg.h> diff --git a/non-source/foreign/freetype2/freetype/config/integer-types.h b/non-source/foreign/freetype2/freetype/config/integer-types.h new file mode 100644 index 000000000..c27505ffc --- /dev/null +++ b/non-source/foreign/freetype2/freetype/config/integer-types.h @@ -0,0 +1,250 @@ +/**************************************************************************** + * + * config/integer-types.h + * + * FreeType integer types definitions. + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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) */ + +#ifndef FT_SIZEOF_LONG_LONG + + /* The size of a `long long` type if available */ +#if defined( FT_ULLONG_MAX ) && FT_ULLONG_MAX >= 0xFFFFFFFFFFFFFFFFULL +#define FT_SIZEOF_LONG_LONG ( 64 / FT_CHAR_BIT ) +#else +#define FT_SIZEOF_LONG_LONG 0 +#endif + +#endif /* !defined(FT_SIZEOF_LONG_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 integer type */ +#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT ) + +#define FT_INT64 long +#define FT_UINT64 unsigned long + +#elif FT_SIZEOF_LONG_LONG >= ( 64 / FT_CHAR_BIT ) + +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + + /************************************************************************** + * + * A 64-bit data type may create compilation problems if you compile in + * strict ANSI mode. To avoid them, we disable other 64-bit data types if + * `__STDC__` is defined. You can however ignore this rule by defining the + * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro. + */ +#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 ) + +#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ + + /* this compiler provides the `__int64` type */ +#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_INT64 __int64 +#define FT_UINT64 unsigned __int64 + +#elif defined( __WATCOMC__ ) && __WATCOMC__ >= 1100 /* Watcom C++ */ + +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ + +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#elif defined( __GNUC__ ) + + /* GCC provides the `long long` type */ +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#endif /* !__STDC__ */ + +#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ + +#ifdef FT_INT64 + typedef FT_INT64 FT_Int64; + typedef FT_UINT64 FT_UInt64; +#endif + + +#endif /* FREETYPE_CONFIG_INTEGER_TYPES_H_ */ diff --git a/non-source/foreign/freetype2/freetype/config/mac-support.h b/non-source/foreign/freetype2/freetype/config/mac-support.h new file mode 100644 index 000000000..07b6f915b --- /dev/null +++ b/non-source/foreign/freetype2/freetype/config/mac-support.h @@ -0,0 +1,49 @@ +/**************************************************************************** + * + * config/mac-support.h + * + * Mac/OS X support configuration header. + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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 <errno.h> +#ifdef ECANCELED /* defined since 10.2 */ +#include "AvailabilityMacros.h" +#endif +#if defined( __LP64__ ) && \ + ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) +#undef FT_MACINTOSH +#endif + +#elif defined( __SC__ ) || defined( __MRC__ ) + /* Classic MacOS compilers */ +#include "ConditionalMacros.h" +#if TARGET_OS_MAC +#define FT_MACINTOSH 1 +#endif + +#endif /* Mac support */ + +#endif /* FREETYPE_CONFIG_MAC_SUPPORT_H_ */ diff --git a/non-source/foreign/freetype2/freetype/config/public-macros.h b/non-source/foreign/freetype2/freetype/config/public-macros.h new file mode 100644 index 000000000..f56581a6e --- /dev/null +++ b/non-source/foreign/freetype2/freetype/config/public-macros.h @@ -0,0 +1,138 @@ +/**************************************************************************** + * + * config/public-macros.h + * + * Define a set of compiler macros used in public FreeType headers. + * + * Copyright (C) 2020-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 + + + /* + * Support for casts in both C and C++. + */ +#ifdef __cplusplus +#define FT_STATIC_CAST( type, var ) static_cast<type>(var) +#define FT_REINTERPRET_CAST( type, var ) reinterpret_cast<type>(var) + +#define FT_STATIC_BYTE_CAST( type, var ) \ + static_cast<type>( static_cast<unsigned char>( var ) ) +#else +#define FT_STATIC_CAST( type, var ) (type)(var) +#define FT_REINTERPRET_CAST( type, var ) (type)(var) + +#define FT_STATIC_BYTE_CAST( type, var ) (type)(unsigned char)(var) +#endif + + +FT_END_HEADER + +#endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */ diff --git a/non-source/foreign/freetype2/freetype/freetype.h b/non-source/foreign/freetype2/freetype/freetype.h index 4666d4893..58fc33dfe 100644 --- a/non-source/foreign/freetype2/freetype/freetype.h +++ b/non-source/foreign/freetype2/freetype/freetype.h @@ -1,96 +1,378 @@ -/***************************************************************************/ -/* */ -/* freetype.h */ -/* */ -/* FreeType high-level API and common types (specification only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * freetype.h + * + * FreeType high-level API and common types (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FREETYPE_H_ #define FREETYPE_H_ -#ifndef FT_FREETYPE_H -#error "`ft2build.h' hasn't been included yet!" -#error "Please always use macros to include FreeType header files." -#error "Example:" -#error " #include <ft2build.h>" -#error " #include FT_FREETYPE_H" -#endif - - #include <ft2build.h> #include FT_CONFIG_CONFIG_H -#include FT_TYPES_H -#include FT_ERRORS_H +#include <freetype/fttypes.h> +#include <freetype/fterrors.h> FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* header_inclusion */ - /* */ - /* <Title> */ - /* FreeType's header inclusion scheme */ - /* */ - /* <Abstract> */ - /* How client applications should include FreeType header files. */ - /* */ - /* <Description> */ - /* To be as flexible as possible (and for historical reasons), */ - /* FreeType uses a very special inclusion scheme to load header */ - /* files, for example */ - /* */ - /* { */ - /* #include <ft2build.h> */ - /* */ - /* #include FT_FREETYPE_H */ - /* #include FT_OUTLINE_H */ - /* } */ - /* */ - /* A compiler and its preprocessor only needs an include path to find */ - /* the file `ft2build.h'; the exact locations and names of the other */ - /* FreeType header files are hidden by preprocessor macro names, */ - /* loaded by `ft2build.h'. The API documentation always gives the */ - /* header macro name needed for a particular function. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * preamble + * + * @title: + * Preamble + * + * @abstract: + * What FreeType is and isn't + * + * @description: + * FreeType is a library that provides access to glyphs in font files. It + * scales the glyph images and their metrics to a requested size, and it + * rasterizes the glyph images to produce pixel or subpixel alpha coverage + * bitmaps. + * + * Note that FreeType is _not_ a text layout engine. You have to use + * higher-level libraries like HarfBuzz, Pango, or ICU for that. + * + * Note also that FreeType does _not_ perform alpha blending or + * compositing the resulting bitmaps or pixmaps by itself. Use your + * favourite graphics library (for example, Cairo or Skia) to further + * process FreeType's output. + * + */ - /*************************************************************************/ - /* */ - /* <Section> */ - /* user_allocation */ - /* */ - /* <Title> */ - /* User allocation */ - /* */ - /* <Abstract> */ - /* How client applications should allocate FreeType data structures. */ - /* */ - /* <Description> */ - /* FreeType assumes that structures allocated by the user and passed */ - /* as arguments are zeroed out except for the actual data. In other */ - /* words, it is recommended to use `calloc' (or variants of it) */ - /* instead of `malloc' for allocation. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * header_inclusion + * + * @title: + * FreeType's header inclusion scheme + * + * @abstract: + * How client applications should include FreeType header files. + * + * @description: + * To be as flexible as possible (and for historical reasons), you must + * load file `ft2build.h` first before other header files, for example + * + * ``` + * #include <ft2build.h> + * + * #include <freetype/freetype.h> + * #include <freetype/ftoutln.h> + * ``` + */ + + + /************************************************************************** + * + * @section: + * user_allocation + * + * @title: + * User allocation + * + * @abstract: + * How client applications should allocate FreeType data structures. + * + * @description: + * FreeType assumes that structures allocated by the user and passed as + * arguments are zeroed out except for the actual data. In other words, + * it is recommended to use `calloc` (or variants of it) instead of + * `malloc` for allocation. + * + */ + + + /************************************************************************** + * + * @section: + * font_testing_macros + * + * @title: + * Font Testing Macros + * + * @abstract: + * Macros to test various properties of fonts. + * + * @description: + * Macros to test the most important font properties. + * + * It is recommended to use these high-level macros instead of directly + * testing the corresponding flags, which are scattered over various + * structures. + * + * @order: + * FT_HAS_HORIZONTAL + * FT_HAS_VERTICAL + * FT_HAS_KERNING + * FT_HAS_FIXED_SIZES + * FT_HAS_GLYPH_NAMES + * FT_HAS_COLOR + * FT_HAS_MULTIPLE_MASTERS + * FT_HAS_SVG + * FT_HAS_SBIX + * FT_HAS_SBIX_OVERLAY + * + * FT_IS_SFNT + * FT_IS_SCALABLE + * FT_IS_FIXED_WIDTH + * FT_IS_CID_KEYED + * FT_IS_TRICKY + * FT_IS_NAMED_INSTANCE + * FT_IS_VARIATION + * + */ + + + /************************************************************************** + * + * @section: + * library_setup + * + * @title: + * Library Setup + * + * @abstract: + * Functions to start and end the usage of the FreeType library. + * + * @description: + * Functions to start and end the usage of the FreeType library. + * + * Note that @FT_Library_Version and @FREETYPE_XXX are of limited use + * because even a new release of FreeType with only documentation + * changes increases the version number. + * + * @order: + * FT_Library + * FT_Init_FreeType + * FT_Done_FreeType + * + * FT_Library_Version + * FREETYPE_XXX + * + */ + + + /************************************************************************** + * + * @section: + * face_creation + * + * @title: + * Face Creation + * + * @abstract: + * Functions to manage fonts. + * + * @description: + * The functions and structures collected in this section operate on + * fonts globally. + * + * @order: + * FT_Face + * FT_FaceRec + * FT_FACE_FLAG_XXX + * FT_STYLE_FLAG_XXX + * + * FT_New_Face + * FT_Done_Face + * FT_Reference_Face + * FT_New_Memory_Face + * FT_Face_Properties + * FT_Open_Face + * FT_Open_Args + * FT_OPEN_XXX + * FT_Parameter + * FT_Attach_File + * FT_Attach_Stream + * + */ + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + * @title: + * Sizing and Scaling + * + * @abstract: + * Functions to manage font sizes. + * + * @description: + * The functions and structures collected in this section are related to + * selecting and manipulating the size of a font globally. + * + * @order: + * FT_Size + * FT_SizeRec + * FT_Size_Metrics + * + * FT_Bitmap_Size + * + * FT_Set_Char_Size + * FT_Set_Pixel_Sizes + * FT_Request_Size + * FT_Select_Size + * FT_Size_Request_Type + * FT_Size_RequestRec + * FT_Size_Request + * + * FT_Set_Transform + * FT_Get_Transform + * + */ + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + * @title: + * Glyph Retrieval + * + * @abstract: + * Functions to manage glyphs. + * + * @description: + * The functions and structures collected in this section operate on + * single glyphs, of which @FT_Load_Glyph is most important. + * + * @order: + * FT_GlyphSlot + * FT_GlyphSlotRec + * FT_Glyph_Metrics + * + * FT_Load_Glyph + * FT_LOAD_XXX + * FT_LOAD_TARGET_MODE + * FT_LOAD_TARGET_XXX + * + * FT_Render_Glyph + * FT_Render_Mode + * FT_Get_Kerning + * FT_Kerning_Mode + * FT_Get_Track_Kerning + * + */ + + + /************************************************************************** + * + * @section: + * character_mapping + * + * @title: + * Character Mapping + * + * @abstract: + * Functions to manage character-to-glyph maps. + * + * @description: + * This section holds functions and structures that are related to + * mapping character input codes to glyph indices. + * + * Note that for many scripts the simplistic approach used by FreeType + * of mapping a single character to a single glyph is not valid or + * possible! In general, a higher-level library like HarfBuzz or ICU + * should be used for handling text strings. + * + * @order: + * FT_CharMap + * FT_CharMapRec + * FT_Encoding + * FT_ENC_TAG + * + * FT_Select_Charmap + * FT_Set_Charmap + * FT_Get_Charmap_Index + * + * FT_Get_Char_Index + * FT_Get_First_Char + * FT_Get_Next_Char + * FT_Load_Char + * + */ + + + /************************************************************************** + * + * @section: + * information_retrieval + * + * @title: + * Information Retrieval + * + * @abstract: + * Functions to retrieve font and glyph information. + * + * @description: + * Functions to retrieve font and glyph information. Only some very + * basic data is covered; see also the chapter on the format-specific + * API for more. + * + * + * @order: + * FT_Get_Name_Index + * FT_Get_Glyph_Name + * FT_Get_Postscript_Name + * FT_Get_FSType_Flags + * FT_FSTYPE_XXX + * FT_Get_SubGlyph_Info + * FT_SUBGLYPH_FLAG_XXX + * + */ + /************************************************************************** + * + * @section: + * other_api_data + * + * @title: + * Other API Data + * + * @abstract: + * Other structures, enumerations, and macros. + * + * @description: + * Other structures, enumerations, and macros. Deprecated functions are + * also listed here. + * + * @order: + * FT_Face_Internal + * FT_Size_Internal + * FT_Slot_Internal + * + * FT_SubGlyph + * + * FT_HAS_FAST_GLYPHS + * FT_Face_CheckTrueTypePatents + * FT_Face_SetUnpatentedHinting + * + */ + /*************************************************************************/ /*************************************************************************/ @@ -101,210 +383,64 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* <Section> */ - /* base_interface */ - /* */ - /* <Title> */ - /* Base Interface */ - /* */ - /* <Abstract> */ - /* The FreeType~2 base font interface. */ - /* */ - /* <Description> */ - /* This section describes the most important public high-level API */ - /* functions of FreeType~2. */ - /* */ - /* <Order> */ - /* FT_Library */ - /* FT_Face */ - /* FT_Size */ - /* FT_GlyphSlot */ - /* FT_CharMap */ - /* FT_Encoding */ - /* FT_ENC_TAG */ - /* */ - /* FT_FaceRec */ - /* */ - /* FT_FACE_FLAG_SCALABLE */ - /* FT_FACE_FLAG_FIXED_SIZES */ - /* FT_FACE_FLAG_FIXED_WIDTH */ - /* FT_FACE_FLAG_HORIZONTAL */ - /* FT_FACE_FLAG_VERTICAL */ - /* FT_FACE_FLAG_COLOR */ - /* FT_FACE_FLAG_SFNT */ - /* FT_FACE_FLAG_CID_KEYED */ - /* FT_FACE_FLAG_TRICKY */ - /* FT_FACE_FLAG_KERNING */ - /* FT_FACE_FLAG_MULTIPLE_MASTERS */ - /* FT_FACE_FLAG_GLYPH_NAMES */ - /* FT_FACE_FLAG_EXTERNAL_STREAM */ - /* FT_FACE_FLAG_HINTER */ - /* */ - /* FT_HAS_HORIZONTAL */ - /* FT_HAS_VERTICAL */ - /* FT_HAS_KERNING */ - /* FT_HAS_FIXED_SIZES */ - /* FT_HAS_GLYPH_NAMES */ - /* FT_HAS_MULTIPLE_MASTERS */ - /* FT_HAS_COLOR */ - /* */ - /* FT_IS_SFNT */ - /* FT_IS_SCALABLE */ - /* FT_IS_FIXED_WIDTH */ - /* FT_IS_CID_KEYED */ - /* FT_IS_TRICKY */ - /* */ - /* FT_STYLE_FLAG_BOLD */ - /* FT_STYLE_FLAG_ITALIC */ - /* */ - /* FT_SizeRec */ - /* FT_Size_Metrics */ - /* */ - /* FT_GlyphSlotRec */ - /* FT_Glyph_Metrics */ - /* FT_SubGlyph */ - /* */ - /* FT_Bitmap_Size */ - /* */ - /* FT_Init_FreeType */ - /* FT_Done_FreeType */ - /* */ - /* FT_New_Face */ - /* FT_Done_Face */ - /* FT_Reference_Face */ - /* FT_New_Memory_Face */ - /* FT_Open_Face */ - /* FT_Open_Args */ - /* FT_Parameter */ - /* FT_Attach_File */ - /* FT_Attach_Stream */ - /* */ - /* FT_Set_Char_Size */ - /* FT_Set_Pixel_Sizes */ - /* FT_Request_Size */ - /* FT_Select_Size */ - /* FT_Size_Request_Type */ - /* FT_Size_RequestRec */ - /* FT_Size_Request */ - /* FT_Set_Transform */ - /* FT_Load_Glyph */ - /* FT_Get_Char_Index */ - /* FT_Get_First_Char */ - /* FT_Get_Next_Char */ - /* FT_Get_Name_Index */ - /* FT_Load_Char */ - /* */ - /* FT_OPEN_MEMORY */ - /* FT_OPEN_STREAM */ - /* FT_OPEN_PATHNAME */ - /* FT_OPEN_DRIVER */ - /* FT_OPEN_PARAMS */ - /* */ - /* FT_LOAD_DEFAULT */ - /* FT_LOAD_RENDER */ - /* FT_LOAD_MONOCHROME */ - /* FT_LOAD_LINEAR_DESIGN */ - /* FT_LOAD_NO_SCALE */ - /* FT_LOAD_NO_HINTING */ - /* FT_LOAD_NO_BITMAP */ - /* FT_LOAD_NO_AUTOHINT */ - /* FT_LOAD_COLOR */ - /* */ - /* FT_LOAD_VERTICAL_LAYOUT */ - /* FT_LOAD_IGNORE_TRANSFORM */ - /* FT_LOAD_FORCE_AUTOHINT */ - /* FT_LOAD_NO_RECURSE */ - /* FT_LOAD_PEDANTIC */ - /* */ - /* FT_LOAD_TARGET_NORMAL */ - /* FT_LOAD_TARGET_LIGHT */ - /* FT_LOAD_TARGET_MONO */ - /* FT_LOAD_TARGET_LCD */ - /* FT_LOAD_TARGET_LCD_V */ - /* */ - /* FT_LOAD_TARGET_MODE */ - /* */ - /* FT_Render_Glyph */ - /* FT_Render_Mode */ - /* FT_Get_Kerning */ - /* FT_Kerning_Mode */ - /* FT_Get_Track_Kerning */ - /* FT_Get_Glyph_Name */ - /* FT_Get_Postscript_Name */ - /* */ - /* FT_CharMapRec */ - /* FT_Select_Charmap */ - /* FT_Set_Charmap */ - /* FT_Get_Charmap_Index */ - /* */ - /* FT_Get_FSType_Flags */ - /* FT_Get_SubGlyph_Info */ - /* */ - /* FT_Face_Internal */ - /* FT_Size_Internal */ - /* FT_Slot_Internal */ - /* */ - /* FT_FACE_FLAG_XXX */ - /* FT_STYLE_FLAG_XXX */ - /* FT_OPEN_XXX */ - /* FT_LOAD_XXX */ - /* FT_LOAD_TARGET_XXX */ - /* FT_SUBGLYPH_FLAG_XXX */ - /* FT_FSTYPE_XXX */ - /* */ - /* FT_HAS_FAST_GLYPHS */ - /* */ - /*************************************************************************/ - + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Glyph_Metrics */ - /* */ - /* <Description> */ - /* A structure used to model the metrics of a single glyph. The */ - /* values are expressed in 26.6 fractional pixel format; if the flag */ - /* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */ - /* are expressed in font units instead. */ - /* */ - /* <Fields> */ - /* width :: */ - /* The glyph's width. */ - /* */ - /* height :: */ - /* The glyph's height. */ - /* */ - /* horiBearingX :: */ - /* Left side bearing for horizontal layout. */ - /* */ - /* horiBearingY :: */ - /* Top side bearing for horizontal layout. */ - /* */ - /* horiAdvance :: */ - /* Advance width for horizontal layout. */ - /* */ - /* vertBearingX :: */ - /* Left side bearing for vertical layout. */ - /* */ - /* vertBearingY :: */ - /* Top side bearing for vertical layout. Larger positive values */ - /* mean further below the vertical glyph origin. */ - /* */ - /* vertAdvance :: */ - /* Advance height for vertical layout. Positive values mean the */ - /* glyph has a positive advance downward. */ - /* */ - /* <Note> */ - /* If not disabled with @FT_LOAD_NO_HINTING, the values represent */ - /* dimensions of the hinted glyph (in case hinting is applicable). */ - /* */ - /* Stroking a glyph with an outside border does not increase */ - /* `horiAdvance' or `vertAdvance'; you have to manually adjust these */ - /* values to account for the added width and height. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Glyph_Metrics + * + * @description: + * A structure to model the metrics of a single glyph. The values are + * expressed in 26.6 fractional pixel format; if the flag + * @FT_LOAD_NO_SCALE has been used while loading the glyph, values are + * expressed in font units instead. + * + * @fields: + * width :: + * The glyph's width. + * + * height :: + * The glyph's height. + * + * horiBearingX :: + * Left side bearing for horizontal layout. + * + * horiBearingY :: + * Top side bearing for horizontal layout. + * + * horiAdvance :: + * Advance width for horizontal layout. + * + * vertBearingX :: + * Left side bearing for vertical layout. + * + * vertBearingY :: + * Top side bearing for vertical layout. Larger positive values mean + * further below the vertical glyph origin. + * + * vertAdvance :: + * Advance height for vertical layout. Positive values mean the glyph + * has a positive advance downward. + * + * @note: + * If not disabled with @FT_LOAD_NO_HINTING, the values represent + * dimensions of the hinted glyph (in case hinting is applicable). + * + * Stroking a glyph with an outside border does not increase + * `horiAdvance` or `vertAdvance`; you have to manually adjust these + * values to account for the added width and height. + * + * FreeType doesn't use the 'VORG' table data for CFF fonts because it + * doesn't have an interface to quickly retrieve the glyph height. The + * y~coordinate of the vertical origin can be simply computed as + * `vertBearingY + height` after loading a glyph. + */ typedef struct FT_Glyph_Metrics_ { FT_Pos width; @@ -321,44 +457,52 @@ FT_BEGIN_HEADER } FT_Glyph_Metrics; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Bitmap_Size */ - /* */ - /* <Description> */ - /* This structure models the metrics of a bitmap strike (i.e., a set */ - /* of glyphs for a given point size and resolution) in a bitmap font. */ - /* It is used for the `available_sizes' field of @FT_Face. */ - /* */ - /* <Fields> */ - /* height :: The vertical distance, in pixels, between two */ - /* consecutive baselines. It is always positive. */ - /* */ - /* width :: The average width, in pixels, of all glyphs in the */ - /* strike. */ - /* */ - /* size :: The nominal size of the strike in 26.6 fractional */ - /* points. This field is not very useful. */ - /* */ - /* x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional */ - /* pixels. */ - /* */ - /* y_ppem :: The vertical ppem (nominal height) in 26.6 fractional */ - /* pixels. */ - /* */ - /* <Note> */ - /* Windows FNT: */ - /* The nominal size given in a FNT font is not reliable. Thus when */ - /* the driver finds it incorrect, it sets `size' to some calculated */ - /* values and sets `x_ppem' and `y_ppem' to the pixel width and */ - /* height given in the font, respectively. */ - /* */ - /* TrueType embedded bitmaps: */ - /* `size', `width', and `height' values are not contained in the */ - /* bitmap strike itself. They are computed from the global font */ - /* parameters. */ - /* */ + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @struct: + * FT_Bitmap_Size + * + * @description: + * This structure models the metrics of a bitmap strike (i.e., a set of + * glyphs for a given point size and resolution) in a bitmap font. It is + * used for the `available_sizes` field of @FT_Face. + * + * @fields: + * height :: + * The vertical distance, in pixels, between two consecutive baselines. + * It is always positive. + * + * width :: + * The average width, in pixels, of all glyphs in the strike. + * + * size :: + * The nominal size of the strike in 26.6 fractional points. This + * field is not very useful. + * + * x_ppem :: + * The horizontal ppem (nominal width) in 26.6 fractional pixels. + * + * y_ppem :: + * The vertical ppem (nominal height) in 26.6 fractional pixels. + * + * @note: + * Windows FNT: + * The nominal size given in a FNT font is not reliable. If the driver + * finds it incorrect, it sets `size` to some calculated values, and + * `x_ppem` and `y_ppem` to the pixel width and height given in the + * font, respectively. + * + * TrueType embedded bitmaps: + * `size`, `width`, and `height` values are not contained in the bitmap + * strike itself. They are computed from the global font parameters. + */ typedef struct FT_Bitmap_Size_ { FT_Short height; @@ -380,379 +524,406 @@ FT_BEGIN_HEADER /*************************************************************************/ /*************************************************************************/ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Library */ - /* */ - /* <Description> */ - /* A handle to a FreeType library instance. Each `library' is */ - /* completely independent from the others; it is the `root' of a set */ - /* of objects like fonts, faces, sizes, etc. */ - /* */ - /* It also embeds a memory manager (see @FT_Memory), as well as a */ - /* scan-line converter object (see @FT_Raster). */ - /* */ - /* In multi-threaded applications it is easiest to use one */ - /* `FT_Library' object per thread. In case this is too cumbersome, */ - /* a single `FT_Library' object across threads is possible also */ - /* (since FreeType version 2.5.6), as long as a mutex lock is used */ - /* around @FT_New_Face and @FT_Done_Face. */ - /* */ - /* <Note> */ - /* Library objects are normally created by @FT_Init_FreeType, and */ - /* destroyed with @FT_Done_FreeType. If you need reference-counting */ - /* (cf. @FT_Reference_Library), use @FT_New_Library and */ - /* @FT_Done_Library. */ - /* */ + /************************************************************************** + * + * @section: + * library_setup + * + */ + + /************************************************************************** + * + * @type: + * FT_Library + * + * @description: + * A handle to a FreeType library instance. Each 'library' is completely + * independent from the others; it is the 'root' of a set of objects like + * fonts, faces, sizes, etc. + * + * It also embeds a memory manager (see @FT_Memory), as well as a + * scan-line converter object (see @FT_Raster). + * + * [Since 2.5.6] In multi-threaded applications it is easiest to use one + * `FT_Library` object per thread. In case this is too cumbersome, a + * single `FT_Library` object across threads is possible also, as long as + * a mutex lock is used around @FT_New_Face and @FT_Done_Face. + * + * @note: + * Library objects are normally created by @FT_Init_FreeType, and + * destroyed with @FT_Done_FreeType. If you need reference-counting + * (cf. @FT_Reference_Library), use @FT_New_Library and @FT_Done_Library. + */ typedef struct FT_LibraryRec_ *FT_Library; - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * module_management + * + */ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Module */ - /* */ - /* <Description> */ - /* A handle to a given FreeType module object. Each module can be a */ - /* font driver, a renderer, or anything else that provides services */ - /* to the formers. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Module + * + * @description: + * A handle to a given FreeType module object. A module can be a font + * driver, a renderer, or anything else that provides services to the + * former. + */ typedef struct FT_ModuleRec_* FT_Module; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Driver */ - /* */ - /* <Description> */ - /* A handle to a given FreeType font driver object. Each font driver */ - /* is a special module capable of creating faces from font files. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Driver + * + * @description: + * A handle to a given FreeType font driver object. A font driver is a + * module capable of creating faces from font files. + */ typedef struct FT_DriverRec_* FT_Driver; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Renderer */ - /* */ - /* <Description> */ - /* A handle to a given FreeType renderer. A renderer is a special */ - /* module in charge of converting a glyph image to a bitmap, when */ - /* necessary. Each renderer supports a given glyph image format, and */ - /* one or more target surface depths. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Renderer + * + * @description: + * A handle to a given FreeType renderer. A renderer is a module in + * charge of converting a glyph's outline image to a bitmap. It supports + * a single glyph image format, and one or more target surface depths. + */ typedef struct FT_RendererRec_* FT_Renderer; - /*************************************************************************/ - /* */ - /* <Section> */ - /* base_interface */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * face_creation + * + */ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Face */ - /* */ - /* <Description> */ - /* A handle to a given typographic face object. A face object models */ - /* a given typeface, in a given style. */ - /* */ - /* <Note> */ - /* Each face object also owns a single @FT_GlyphSlot object, as well */ - /* as one or more @FT_Size objects. */ - /* */ - /* Use @FT_New_Face or @FT_Open_Face to create a new face object from */ - /* a given filepathname or a custom input stream. */ - /* */ - /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */ - /* */ - /* An `FT_Face' object can only be safely used from one thread at a */ - /* time. Similarly, creation and destruction of `FT_Face' with the */ - /* same @FT_Library object can only be done from one thread at a */ - /* time. On the other hand, functions like @FT_Load_Glyph and its */ - /* siblings are thread-safe and do not need the lock to be held as */ - /* long as the same `FT_Face' object is not used from multiple */ - /* threads at the same time. */ - /* */ - /* <Also> */ - /* See @FT_FaceRec for the publicly accessible fields of a given face */ - /* object. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Face + * + * @description: + * A handle to a typographic face object. A face object models a given + * typeface, in a given style. + * + * @note: + * A face object also owns a single @FT_GlyphSlot object, as well as one + * or more @FT_Size objects. + * + * Use @FT_New_Face or @FT_Open_Face to create a new face object from a + * given filepath or a custom input stream. + * + * Use @FT_Done_Face to destroy it (along with its slot and sizes). + * + * An `FT_Face` object can only be safely used from one thread at a time. + * Similarly, creation and destruction of `FT_Face` with the same + * @FT_Library object can only be done from one thread at a time. On the + * other hand, functions like @FT_Load_Glyph and its siblings are + * thread-safe and do not need the lock to be held as long as the same + * `FT_Face` object is not used from multiple threads at the same time. + * + * @also: + * See @FT_FaceRec for the publicly accessible fields of a given face + * object. + */ typedef struct FT_FaceRec_* FT_Face; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Size */ - /* */ - /* <Description> */ - /* A handle to an object used to model a face scaled to a given */ - /* character size. */ - /* */ - /* <Note> */ - /* Each @FT_Face has an _active_ @FT_Size object that is used by */ - /* functions like @FT_Load_Glyph to determine the scaling */ - /* transformation that in turn is used to load and hint glyphs and */ - /* metrics. */ - /* */ - /* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, */ - /* @FT_Request_Size or even @FT_Select_Size to change the content */ - /* (i.e., the scaling values) of the active @FT_Size. */ - /* */ - /* You can use @FT_New_Size to create additional size objects for a */ - /* given @FT_Face, but they won't be used by other functions until */ - /* you activate it through @FT_Activate_Size. Only one size can be */ - /* activated at any given time per face. */ - /* */ - /* <Also> */ - /* See @FT_SizeRec for the publicly accessible fields of a given size */ - /* object. */ - /* */ + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @type: + * FT_Size + * + * @description: + * A handle to an object that models a face scaled to a given character + * size. + * + * @note: + * An @FT_Face has one _active_ `FT_Size` object that is used by + * functions like @FT_Load_Glyph to determine the scaling transformation + * that in turn is used to load and hint glyphs and metrics. + * + * A newly created `FT_Size` object contains only meaningless zero values. + * You must use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size + * or even @FT_Select_Size to change the content (i.e., the scaling + * values) of the active `FT_Size`. Otherwise, the scaling and hinting + * will not be performed. + * + * You can use @FT_New_Size to create additional size objects for a given + * @FT_Face, but they won't be used by other functions until you activate + * it through @FT_Activate_Size. Only one size can be activated at any + * given time per face. + * + * @also: + * See @FT_SizeRec for the publicly accessible fields of a given size + * object. + */ typedef struct FT_SizeRec_* FT_Size; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_GlyphSlot */ - /* */ - /* <Description> */ - /* A handle to a given `glyph slot'. A slot is a container where it */ - /* is possible to load any of the glyphs contained in its parent */ - /* face. */ - /* */ - /* In other words, each time you call @FT_Load_Glyph or */ - /* @FT_Load_Char, the slot's content is erased by the new glyph data, */ - /* i.e., the glyph's metrics, its image (bitmap or outline), and */ - /* other control information. */ - /* */ - /* <Also> */ - /* See @FT_GlyphSlotRec for the publicly accessible glyph fields. */ - /* */ + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @type: + * FT_GlyphSlot + * + * @description: + * A handle to a given 'glyph slot'. A slot is a container that can hold + * any of the glyphs contained in its parent face. + * + * In other words, each time you call @FT_Load_Glyph or @FT_Load_Char, + * the slot's content is erased by the new glyph data, i.e., the glyph's + * metrics, its image (bitmap or outline), and other control information. + * + * @also: + * See @FT_GlyphSlotRec for the publicly accessible glyph fields. + */ typedef struct FT_GlyphSlotRec_* FT_GlyphSlot; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_CharMap */ - /* */ - /* <Description> */ - /* A handle to a given character map. A charmap is used to translate */ - /* character codes in a given encoding into glyph indexes for its */ - /* parent's face. Some font formats may provide several charmaps per */ - /* font. */ - /* */ - /* Each face object owns zero or more charmaps, but only one of them */ - /* can be `active' and used by @FT_Get_Char_Index or @FT_Load_Char. */ - /* */ - /* The list of available charmaps in a face is available through the */ - /* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */ - /* */ - /* The currently active charmap is available as `face->charmap'. */ - /* You should call @FT_Set_Charmap to change it. */ - /* */ - /* <Note> */ - /* When a new face is created (either through @FT_New_Face or */ - /* @FT_Open_Face), the library looks for a Unicode charmap within */ - /* the list and automatically activates it. */ - /* */ - /* <Also> */ - /* See @FT_CharMapRec for the publicly accessible fields of a given */ - /* character map. */ - /* */ + /************************************************************************** + * + * @section: + * character_mapping + * + */ + + /************************************************************************** + * + * @type: + * FT_CharMap + * + * @description: + * A handle to a character map (usually abbreviated to 'charmap'). A + * charmap is used to translate character codes in a given encoding into + * glyph indexes for its parent's face. Some font formats may provide + * several charmaps per font. + * + * Each face object owns zero or more charmaps, but only one of them can + * be 'active', providing the data used by @FT_Get_Char_Index or + * @FT_Load_Char. + * + * The list of available charmaps in a face is available through the + * `face->num_charmaps` and `face->charmaps` fields of @FT_FaceRec. + * + * The currently active charmap is available as `face->charmap`. You + * should call @FT_Set_Charmap to change it. + * + * @note: + * When a new face is created (either through @FT_New_Face or + * @FT_Open_Face), the library looks for a Unicode charmap within the + * list and automatically activates it. If there is no Unicode charmap, + * FreeType doesn't set an 'active' charmap. + * + * @also: + * See @FT_CharMapRec for the publicly accessible fields of a given + * character map. + */ typedef struct FT_CharMapRec_* FT_CharMap; - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_ENC_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags into an unsigned long. It is */ - /* used to define `encoding' identifiers (see @FT_Encoding). */ - /* */ - /* <Note> */ - /* Since many 16-bit compilers don't like 32-bit enumerations, you */ - /* should redefine this macro in case of problems to something like */ - /* this: */ - /* */ - /* { */ - /* #define FT_ENC_TAG( value, a, b, c, d ) value */ - /* } */ - /* */ - /* to get a simple enumeration without assigning special numbers. */ - /* */ + /************************************************************************** + * + * @macro: + * FT_ENC_TAG + * + * @description: + * This macro converts four-letter tags into an unsigned long. It is + * used to define 'encoding' identifiers (see @FT_Encoding). + * + * @note: + * Since many 16-bit compilers don't like 32-bit enumerations, you should + * redefine this macro in case of problems to something like this: + * + * ``` + * #define FT_ENC_TAG( value, a, b, c, d ) value + * ``` + * + * to get a simple enumeration without assigning special numbers. + */ #ifndef FT_ENC_TAG -#define FT_ENC_TAG( value, a, b, c, d ) \ - value = ( ( (FT_UInt32)(a) << 24 ) | \ - ( (FT_UInt32)(b) << 16 ) | \ - ( (FT_UInt32)(c) << 8 ) | \ - (FT_UInt32)(d) ) + +#define FT_ENC_TAG( value, a, b, c, d ) \ + value = ( ( FT_STATIC_BYTE_CAST( FT_UInt32, a ) << 24 ) | \ + ( FT_STATIC_BYTE_CAST( FT_UInt32, b ) << 16 ) | \ + ( FT_STATIC_BYTE_CAST( FT_UInt32, c ) << 8 ) | \ + FT_STATIC_BYTE_CAST( FT_UInt32, d ) ) #endif /* FT_ENC_TAG */ - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Encoding */ - /* */ - /* <Description> */ - /* An enumeration used to specify character sets supported by */ - /* charmaps. Used in the @FT_Select_Charmap API function. */ - /* */ - /* <Note> */ - /* Despite the name, this enumeration lists specific character */ - /* repertories (i.e., charsets), and not text encoding methods (e.g., */ - /* UTF-8, UTF-16, etc.). */ - /* */ - /* Other encodings might be defined in the future. */ - /* */ - /* <Values> */ - /* FT_ENCODING_NONE :: */ - /* The encoding value~0 is reserved. */ - /* */ - /* FT_ENCODING_UNICODE :: */ - /* Corresponds to the Unicode character set. This value covers */ - /* all versions of the Unicode repertoire, including ASCII and */ - /* Latin-1. Most fonts include a Unicode charmap, but not all */ - /* of them. */ - /* */ - /* For example, if you want to access Unicode value U+1F028 (and */ - /* the font contains it), use value 0x1F028 as the input value for */ - /* @FT_Get_Char_Index. */ - /* */ - /* FT_ENCODING_MS_SYMBOL :: */ - /* Corresponds to the Microsoft Symbol encoding, used to encode */ - /* mathematical symbols and wingdings. For more information, see */ - /* `http://www.microsoft.com/typography/otspec/recom.htm', */ - /* `http://www.kostis.net/charsets/symbol.htm', and */ - /* `http://www.kostis.net/charsets/wingding.htm'. */ - /* */ - /* This encoding uses character codes from the PUA (Private Unicode */ - /* Area) in the range U+F020-U+F0FF. */ - /* */ - /* FT_ENCODING_SJIS :: */ - /* Corresponds to Japanese SJIS encoding. More info at */ - /* at `http://en.wikipedia.org/wiki/Shift_JIS'. */ - /* See note on multi-byte encodings below. */ - /* */ - /* FT_ENCODING_GB2312 :: */ - /* Corresponds to an encoding system for Simplified Chinese as used */ - /* used in mainland China. */ - /* */ - /* FT_ENCODING_BIG5 :: */ - /* Corresponds to an encoding system for Traditional Chinese as */ - /* used in Taiwan and Hong Kong. */ - /* */ - /* FT_ENCODING_WANSUNG :: */ - /* Corresponds to the Korean encoding system known as Wansung. */ - /* For more information see */ - /* `https://msdn.microsoft.com/en-US/goglobal/cc305154'. */ - /* */ - /* FT_ENCODING_JOHAB :: */ - /* The Korean standard character set (KS~C 5601-1992), which */ - /* corresponds to MS Windows code page 1361. This character set */ - /* includes all possible Hangeul character combinations. */ - /* */ - /* FT_ENCODING_ADOBE_LATIN_1 :: */ - /* Corresponds to a Latin-1 encoding as defined in a Type~1 */ - /* PostScript font. It is limited to 256 character codes. */ - /* */ - /* FT_ENCODING_ADOBE_STANDARD :: */ - /* Corresponds to the Adobe Standard encoding, as found in Type~1, */ - /* CFF, and OpenType/CFF fonts. It is limited to 256 character */ - /* codes. */ - /* */ - /* FT_ENCODING_ADOBE_EXPERT :: */ - /* Corresponds to the Adobe Expert encoding, as found in Type~1, */ - /* CFF, and OpenType/CFF fonts. It is limited to 256 character */ - /* codes. */ - /* */ - /* FT_ENCODING_ADOBE_CUSTOM :: */ - /* Corresponds to a custom encoding, as found in Type~1, CFF, and */ - /* OpenType/CFF fonts. It is limited to 256 character codes. */ - /* */ - /* FT_ENCODING_APPLE_ROMAN :: */ - /* Corresponds to the 8-bit Apple roman encoding. Many TrueType */ - /* and OpenType fonts contain a charmap for this encoding, since */ - /* older versions of Mac OS are able to use it. */ - /* */ - /* FT_ENCODING_OLD_LATIN_2 :: */ - /* This value is deprecated and was never used nor reported by */ - /* FreeType. Don't use or test for it. */ - /* */ - /* FT_ENCODING_MS_SJIS :: */ - /* Same as FT_ENCODING_SJIS. Deprecated. */ - /* */ - /* FT_ENCODING_MS_GB2312 :: */ - /* Same as FT_ENCODING_GB2312. Deprecated. */ - /* */ - /* FT_ENCODING_MS_BIG5 :: */ - /* Same as FT_ENCODING_BIG5. Deprecated. */ - /* */ - /* FT_ENCODING_MS_WANSUNG :: */ - /* Same as FT_ENCODING_WANSUNG. Deprecated. */ - /* */ - /* FT_ENCODING_MS_JOHAB :: */ - /* Same as FT_ENCODING_JOHAB. Deprecated. */ - /* */ - /* <Note> */ - /* By default, FreeType automatically synthesizes a Unicode charmap */ - /* for PostScript fonts, using their glyph names dictionaries. */ - /* However, it also reports the encodings defined explicitly in the */ - /* font file, for the cases when they are needed, with the Adobe */ - /* values as well. */ - /* */ - /* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */ - /* is neither Unicode nor ISO-8859-1 (otherwise it is set to */ - /* FT_ENCODING_UNICODE). Use @FT_Get_BDF_Charset_ID to find out */ - /* which encoding is really present. If, for example, the */ - /* `cs_registry' field is `KOI8' and the `cs_encoding' field is `R', */ - /* the font is encoded in KOI8-R. */ - /* */ - /* FT_ENCODING_NONE is always set (with a single exception) by the */ - /* winfonts driver. Use @FT_Get_WinFNT_Header and examine the */ - /* `charset' field of the @FT_WinFNT_HeaderRec structure to find out */ - /* which encoding is really present. For example, */ - /* @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for */ - /* Russian). */ - /* */ - /* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */ - /* and `encoding_id' is not @TT_MAC_ID_ROMAN (otherwise it is set to */ - /* FT_ENCODING_APPLE_ROMAN). */ - /* */ - /* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function */ - /* @FT_Get_CMap_Language_ID to query the Mac language ID that may */ - /* be needed to be able to distinguish Apple encoding variants. See */ - /* */ - /* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt */ - /* */ - /* to get an idea how to do that. Basically, if the language ID */ - /* is~0, don't use it, otherwise subtract 1 from the language ID. */ - /* Then examine `encoding_id'. If, for example, `encoding_id' is */ - /* @TT_MAC_ID_ROMAN and the language ID (minus~1) is */ - /* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */ - /* @TT_MAC_ID_ARABIC with `TT_MAC_LANGID_FARSI' means the Farsi */ - /* variant the Arabic encoding. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_Encoding + * + * @description: + * An enumeration to specify character sets supported by charmaps. Used + * in the @FT_Select_Charmap API function. + * + * @note: + * Despite the name, this enumeration lists specific character + * repertoires (i.e., charsets), and not text encoding methods (e.g., + * UTF-8, UTF-16, etc.). + * + * Other encodings might be defined in the future. + * + * @values: + * FT_ENCODING_NONE :: + * The encoding value~0 is reserved for all formats except BDF, PCF, + * and Windows FNT; see below for more information. + * + * FT_ENCODING_UNICODE :: + * The Unicode character set. This value covers all versions of the + * Unicode repertoire, including ASCII and Latin-1. Most fonts include + * a Unicode charmap, but not all of them. + * + * For example, if you want to access Unicode value U+1F028 (and the + * font contains it), use value 0x1F028 as the input value for + * @FT_Get_Char_Index. + * + * FT_ENCODING_MS_SYMBOL :: + * Microsoft Symbol encoding, used to encode mathematical symbols and + * wingdings. For more information, see + * 'https://www.microsoft.com/typography/otspec/recom.htm#non-standard-symbol-fonts', + * 'http://www.kostis.net/charsets/symbol.htm', and + * 'http://www.kostis.net/charsets/wingding.htm'. + * + * This encoding uses character codes from the PUA (Private Unicode + * Area) in the range U+F020-U+F0FF. + * + * FT_ENCODING_SJIS :: + * Shift JIS encoding for Japanese. More info at + * 'https://en.wikipedia.org/wiki/Shift_JIS'. See note on multi-byte + * encodings below. + * + * FT_ENCODING_PRC :: + * Corresponds to encoding systems mainly for Simplified Chinese as + * used in People's Republic of China (PRC). The encoding layout is + * based on GB~2312 and its supersets GBK and GB~18030. + * + * FT_ENCODING_BIG5 :: + * Corresponds to an encoding system for Traditional Chinese as used in + * Taiwan and Hong Kong. + * + * FT_ENCODING_WANSUNG :: + * Corresponds to the Korean encoding system known as Extended Wansung + * (MS Windows code page 949). For more information see + * 'https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'. + * + * FT_ENCODING_JOHAB :: + * The Korean standard character set (KS~C 5601-1992), which + * corresponds to MS Windows code page 1361. This character set + * includes all possible Hangul character combinations. + * + * FT_ENCODING_ADOBE_LATIN_1 :: + * Corresponds to a Latin-1 encoding as defined in a Type~1 PostScript + * font. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_STANDARD :: + * Adobe Standard encoding, as found in Type~1, CFF, and OpenType/CFF + * fonts. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_EXPERT :: + * Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF + * fonts. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_CUSTOM :: + * Corresponds to a custom encoding, as found in Type~1, CFF, and + * OpenType/CFF fonts. It is limited to 256 character codes. + * + * FT_ENCODING_APPLE_ROMAN :: + * Apple roman encoding. Many TrueType and OpenType fonts contain a + * charmap for this 8-bit encoding, since older versions of Mac OS are + * able to use it. + * + * FT_ENCODING_OLD_LATIN_2 :: + * This value is deprecated and was neither used nor reported by + * FreeType. Don't use or test for it. + * + * FT_ENCODING_MS_SJIS :: + * Same as FT_ENCODING_SJIS. Deprecated. + * + * FT_ENCODING_MS_GB2312 :: + * Same as FT_ENCODING_PRC. Deprecated. + * + * FT_ENCODING_MS_BIG5 :: + * Same as FT_ENCODING_BIG5. Deprecated. + * + * FT_ENCODING_MS_WANSUNG :: + * Same as FT_ENCODING_WANSUNG. Deprecated. + * + * FT_ENCODING_MS_JOHAB :: + * Same as FT_ENCODING_JOHAB. Deprecated. + * + * @note: + * When loading a font, FreeType makes a Unicode charmap active if + * possible (either if the font provides such a charmap, or if FreeType + * can synthesize one from PostScript glyph name dictionaries; in either + * case, the charmap is tagged with `FT_ENCODING_UNICODE`). If such a + * charmap is synthesized, it is placed at the first position of the + * charmap array. + * + * All other encodings are considered legacy and tagged only if + * explicitly defined in the font file. Otherwise, `FT_ENCODING_NONE` is + * used. + * + * `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is + * neither Unicode nor ISO-8859-1 (otherwise it is set to + * `FT_ENCODING_UNICODE`). Use @FT_Get_BDF_Charset_ID to find out which + * encoding is really present. If, for example, the `cs_registry` field + * is 'KOI8' and the `cs_encoding` field is 'R', the font is encoded in + * KOI8-R. + * + * `FT_ENCODING_NONE` is always set (with a single exception) by the + * winfonts driver. Use @FT_Get_WinFNT_Header and examine the `charset` + * field of the @FT_WinFNT_HeaderRec structure to find out which encoding + * is really present. For example, @FT_WinFNT_ID_CP1251 (204) means + * Windows code page 1251 (for Russian). + * + * `FT_ENCODING_NONE` is set if `platform_id` is @TT_PLATFORM_MACINTOSH + * and `encoding_id` is not `TT_MAC_ID_ROMAN` (otherwise it is set to + * `FT_ENCODING_APPLE_ROMAN`). + * + * If `platform_id` is @TT_PLATFORM_MACINTOSH, use the function + * @FT_Get_CMap_Language_ID to query the Mac language ID that may be + * needed to be able to distinguish Apple encoding variants. See + * + * https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt + * + * to get an idea how to do that. Basically, if the language ID is~0, + * don't use it, otherwise subtract 1 from the language ID. Then examine + * `encoding_id`. If, for example, `encoding_id` is `TT_MAC_ID_ROMAN` + * and the language ID (minus~1) is `TT_MAC_LANGID_GREEK`, it is the + * Greek encoding, not Roman. `TT_MAC_ID_ARABIC` with + * `TT_MAC_LANGID_FARSI` means the Farsi variant of the Arabic encoding. + */ typedef enum FT_Encoding_ { FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ), @@ -761,14 +932,15 @@ FT_BEGIN_HEADER FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ), FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ), - FT_ENC_TAG( FT_ENCODING_GB2312, 'g', 'b', ' ', ' ' ), + FT_ENC_TAG( FT_ENCODING_PRC, 'g', 'b', ' ', ' ' ), FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ), FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ), FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ), - /* for backwards compatibility */ + /* for backward compatibility */ + FT_ENCODING_GB2312 = FT_ENCODING_PRC, FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS, - FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312, + FT_ENCODING_MS_GB2312 = FT_ENCODING_PRC, FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5, FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG, FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB, @@ -785,7 +957,7 @@ FT_BEGIN_HEADER } FT_Encoding; - /* these constants are deprecated; use the corresponding `FT_Encoding' */ + /* these constants are deprecated; use the corresponding `FT_Encoding` */ /* values instead */ #define ft_encoding_none FT_ENCODING_NONE #define ft_encoding_unicode FT_ENCODING_UNICODE @@ -793,7 +965,7 @@ FT_BEGIN_HEADER #define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 #define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 #define ft_encoding_sjis FT_ENCODING_SJIS -#define ft_encoding_gb2312 FT_ENCODING_GB2312 +#define ft_encoding_gb2312 FT_ENCODING_PRC #define ft_encoding_big5 FT_ENCODING_BIG5 #define ft_encoding_wansung FT_ENCODING_WANSUNG #define ft_encoding_johab FT_ENCODING_JOHAB @@ -804,34 +976,36 @@ FT_BEGIN_HEADER #define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_CharMapRec */ - /* */ - /* <Description> */ - /* The base charmap structure. */ - /* */ - /* <Fields> */ - /* face :: A handle to the parent face object. */ - /* */ - /* encoding :: An @FT_Encoding tag identifying the charmap. Use */ - /* this with @FT_Select_Charmap. */ - /* */ - /* platform_id :: An ID number describing the platform for the */ - /* following encoding ID. This comes directly from */ - /* the TrueType specification and should be emulated */ - /* for other formats. */ - /* */ - /* encoding_id :: A platform specific encoding number. This also */ - /* comes from the TrueType specification and should be */ - /* emulated similarly. */ - /* */ - typedef struct FT_CharMapRec_ - { - FT_Face face; - FT_Encoding encoding; - FT_UShort platform_id; + /************************************************************************** + * + * @struct: + * FT_CharMapRec + * + * @description: + * The base charmap structure. + * + * @fields: + * face :: + * A handle to the parent face object. + * + * encoding :: + * An @FT_Encoding tag identifying the charmap. Use this with + * @FT_Select_Charmap. + * + * platform_id :: + * An ID number describing the platform for the following encoding ID. + * This comes directly from the TrueType specification and gets + * emulated for other formats. + * + * encoding_id :: + * A platform-specific encoding number. This also comes from the + * TrueType specification and gets emulated similarly. + */ + typedef struct FT_CharMapRec_ + { + FT_Face face; + FT_Encoding encoding; + FT_UShort platform_id; FT_UShort encoding_id; } FT_CharMapRec; @@ -846,190 +1020,212 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Face_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Face_InternalRec' structure, used to */ - /* model private data of a given @FT_Face object. */ - /* */ - /* This structure might change between releases of FreeType~2 and is */ - /* not generally available to client applications. */ - /* */ + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @type: + * FT_Face_Internal + * + * @description: + * An opaque handle to an `FT_Face_InternalRec` structure that models the + * private data of a given @FT_Face object. + * + * This structure might change between releases of FreeType~2 and is not + * generally available to client applications. + */ typedef struct FT_Face_InternalRec_* FT_Face_Internal; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_FaceRec */ - /* */ - /* <Description> */ - /* FreeType root face class structure. A face object models a */ - /* typeface in a font file. */ - /* */ - /* <Fields> */ - /* num_faces :: The number of faces in the font file. Some */ - /* font formats can have multiple faces in */ - /* a font file. */ - /* */ - /* face_index :: This field holds two different values. */ - /* Bits 0-15 are the index of the face in the */ - /* font file (starting with value~0). They */ - /* are set to~0 if there is only one face in */ - /* the font file. */ - /* */ - /* Bits 16-30 are relevant to GX variation */ - /* fonts only, holding the named instance */ - /* index for the current face index (starting */ - /* with value~1; value~0 indicates font access */ - /* without GX variation data). For non-GX */ - /* fonts, bits 16-30 are ignored. If we have */ - /* the third named instance of face~4, say, */ - /* `face_index' is set to 0x00030004. */ - /* */ - /* Bit 31 is always zero (this is, */ - /* `face_index' is always a positive value). */ - /* */ - /* face_flags :: A set of bit flags that give important */ - /* information about the face; see */ - /* @FT_FACE_FLAG_XXX for the details. */ - /* */ - /* style_flags :: The lower 16~bits contain a set of bit */ - /* flags indicating the style of the face; see */ - /* @FT_STYLE_FLAG_XXX for the details. Bits */ - /* 16-30 hold the number of named instances */ - /* available for the current face if we have a */ - /* GX variation (sub)font. Bit 31 is always */ - /* zero (this is, `style_flags' is always a */ - /* positive value). */ - /* */ - /* num_glyphs :: The number of glyphs in the face. If the */ - /* face is scalable and has sbits (see */ - /* `num_fixed_sizes'), it is set to the number */ - /* of outline glyphs. */ - /* */ - /* For CID-keyed fonts, this value gives the */ - /* highest CID used in the font. */ - /* */ - /* family_name :: The face's family name. This is an ASCII */ - /* string, usually in English, that describes */ - /* the typeface's family (like `Times New */ - /* Roman', `Bodoni', `Garamond', etc). This */ - /* is a least common denominator used to list */ - /* fonts. Some formats (TrueType & OpenType) */ - /* provide localized and Unicode versions of */ - /* this string. Applications should use the */ - /* format specific interface to access them. */ - /* Can be NULL (e.g., in fonts embedded in a */ - /* PDF file). */ - /* */ - /* In case the font doesn't provide a specific */ - /* family name entry, FreeType tries to */ - /* synthesize one, deriving it from other name */ - /* entries. */ - /* */ - /* style_name :: The face's style name. This is an ASCII */ - /* string, usually in English, that describes */ - /* the typeface's style (like `Italic', */ - /* `Bold', `Condensed', etc). Not all font */ - /* formats provide a style name, so this field */ - /* is optional, and can be set to NULL. As */ - /* for `family_name', some formats provide */ - /* localized and Unicode versions of this */ - /* string. Applications should use the format */ - /* specific interface to access them. */ - /* */ - /* num_fixed_sizes :: The number of bitmap strikes in the face. */ - /* Even if the face is scalable, there might */ - /* still be bitmap strikes, which are called */ - /* `sbits' in that case. */ - /* */ - /* available_sizes :: An array of @FT_Bitmap_Size for all bitmap */ - /* strikes in the face. It is set to NULL if */ - /* there is no bitmap strike. */ - /* */ - /* num_charmaps :: The number of charmaps in the face. */ - /* */ - /* charmaps :: An array of the charmaps of the face. */ - /* */ - /* generic :: A field reserved for client uses. See the */ - /* @FT_Generic type description. */ - /* */ - /* bbox :: The font bounding box. Coordinates are */ - /* expressed in font units (see */ - /* `units_per_EM'). The box is large enough */ - /* to contain any glyph from the font. Thus, */ - /* `bbox.yMax' can be seen as the `maximum */ - /* ascender', and `bbox.yMin' as the `minimum */ - /* descender'. Only relevant for scalable */ - /* formats. */ - /* */ - /* Note that the bounding box might be off by */ - /* (at least) one pixel for hinted fonts. See */ - /* @FT_Size_Metrics for further discussion. */ - /* */ - /* units_per_EM :: The number of font units per EM square for */ - /* this face. This is typically 2048 for */ - /* TrueType fonts, and 1000 for Type~1 fonts. */ - /* Only relevant for scalable formats. */ - /* */ - /* ascender :: The typographic ascender of the face, */ - /* expressed in font units. For font formats */ - /* not having this information, it is set to */ - /* `bbox.yMax'. Only relevant for scalable */ - /* formats. */ - /* */ - /* descender :: The typographic descender of the face, */ - /* expressed in font units. For font formats */ - /* not having this information, it is set to */ - /* `bbox.yMin'. Note that this field is */ - /* usually negative. Only relevant for */ - /* scalable formats. */ - /* */ - /* height :: This value is the vertical distance */ - /* between two consecutive baselines, */ - /* expressed in font units. It is always */ - /* positive. Only relevant for scalable */ - /* formats. */ - /* */ - /* If you want the global glyph height, use */ - /* `ascender - descender'. */ - /* */ - /* max_advance_width :: The maximum advance width, in font units, */ - /* for all glyphs in this face. This can be */ - /* used to make word wrapping computations */ - /* faster. Only relevant for scalable */ - /* formats. */ - /* */ - /* max_advance_height :: The maximum advance height, in font units, */ - /* for all glyphs in this face. This is only */ - /* relevant for vertical layouts, and is set */ - /* to `height' for fonts that do not provide */ - /* vertical metrics. Only relevant for */ - /* scalable formats. */ - /* */ - /* underline_position :: The position, in font units, of the */ - /* underline line for this face. It is the */ - /* center of the underlining stem. Only */ - /* relevant for scalable formats. */ - /* */ - /* underline_thickness :: The thickness, in font units, of the */ - /* underline for this face. Only relevant for */ - /* scalable formats. */ - /* */ - /* glyph :: The face's associated glyph slot(s). */ - /* */ - /* size :: The current active size for this face. */ - /* */ - /* charmap :: The current active charmap for this face. */ - /* */ - /* <Note> */ - /* Fields may be changed after a call to @FT_Attach_File or */ - /* @FT_Attach_Stream. */ - /* */ + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @struct: + * FT_FaceRec + * + * @description: + * FreeType root face class structure. A face object models a typeface + * in a font file. + * + * @fields: + * num_faces :: + * The number of faces in the font file. Some font formats can have + * multiple faces in a single font file. + * + * face_index :: + * This field holds two different values. Bits 0-15 are the index of + * the face in the font file (starting with value~0). They are set + * to~0 if there is only one face in the font file. + * + * [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation + * fonts only, holding the named instance index for the current face + * index (starting with value~1; value~0 indicates font access without + * a named instance). For non-variation fonts, bits 16-30 are ignored. + * If we have the third named instance of face~4, say, `face_index` is + * set to 0x00030004. + * + * Bit 31 is always zero (that is, `face_index` is always a positive + * value). + * + * [Since 2.9] Changing the design coordinates with + * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does + * not influence the named instance index value (only + * @FT_Set_Named_Instance does that). + * + * face_flags :: + * A set of bit flags that give important information about the face; + * see @FT_FACE_FLAG_XXX for the details. + * + * style_flags :: + * The lower 16~bits contain a set of bit flags indicating the style of + * the face; see @FT_STYLE_FLAG_XXX for the details. + * + * [Since 2.6.1] Bits 16-30 hold the number of named instances + * available for the current face if we have a GX or OpenType variation + * (sub)font. Bit 31 is always zero (that is, `style_flags` is always + * a positive value). Note that a variation font has always at least + * one named instance, namely the default instance. + * + * num_glyphs :: + * The number of glyphs in the face. If the face is scalable and has + * sbits (see `num_fixed_sizes`), it is set to the number of outline + * glyphs. + * + * For CID-keyed fonts (not in an SFNT wrapper) this value gives the + * highest CID used in the font. + * + * family_name :: + * The face's family name. This is an ASCII string, usually in + * English, that describes the typeface's family (like 'Times New + * Roman', 'Bodoni', 'Garamond', etc). This is a least common + * denominator used to list fonts. Some formats (TrueType & OpenType) + * provide localized and Unicode versions of this string. Applications + * should use the format-specific interface to access them. Can be + * `NULL` (e.g., in fonts embedded in a PDF file). + * + * In case the font doesn't provide a specific family name entry, + * FreeType tries to synthesize one, deriving it from other name + * entries. + * + * style_name :: + * The face's style name. This is an ASCII string, usually in English, + * that describes the typeface's style (like 'Italic', 'Bold', + * 'Condensed', etc). Not all font formats provide a style name, so + * this field is optional, and can be set to `NULL`. As for + * `family_name`, some formats provide localized and Unicode versions + * of this string. Applications should use the format-specific + * interface to access them. + * + * num_fixed_sizes :: + * The number of bitmap strikes in the face. Even if the face is + * scalable, there might still be bitmap strikes, which are called + * 'sbits' in that case. + * + * available_sizes :: + * An array of @FT_Bitmap_Size for all bitmap strikes in the face. It + * is set to `NULL` if there is no bitmap strike. + * + * Note that FreeType tries to sanitize the strike data since they are + * sometimes sloppy or incorrect, but this can easily fail. + * + * num_charmaps :: + * The number of charmaps in the face. + * + * charmaps :: + * An array of the charmaps of the face. + * + * generic :: + * A field reserved for client uses. See the @FT_Generic type + * description. + * + * bbox :: + * The font bounding box. Coordinates are expressed in font units (see + * `units_per_EM`). The box is large enough to contain any glyph from + * the font. Thus, `bbox.yMax` can be seen as the 'maximum ascender', + * and `bbox.yMin` as the 'minimum descender'. Only relevant for + * scalable formats. + * + * Note that the bounding box might be off by (at least) one pixel for + * hinted fonts. See @FT_Size_Metrics for further discussion. + * + * Note that the bounding box does not vary in OpenType variation 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 + * relevant for scalable formats. + * + * ascender :: + * The typographic ascender of the face, expressed in font units. For + * font formats not having this information, it is set to `bbox.yMax`. + * Only relevant for scalable formats. + * + * descender :: + * The typographic descender of the face, expressed in font units. For + * font formats not having this information, it is set to `bbox.yMin`. + * Note that this field is negative for values below the baseline. + * Only relevant for scalable formats. + * + * height :: + * This value is the vertical distance between two consecutive + * baselines, expressed in font units. It is always positive. Only + * relevant for scalable formats. + * + * If you want the global glyph height, use `ascender - descender`. + * + * max_advance_width :: + * The maximum advance width, in font units, for all glyphs in this + * face. This can be used to make word wrapping computations faster. + * Only relevant for scalable formats. + * + * max_advance_height :: + * The maximum advance height, in font units, for all glyphs in this + * face. This is only relevant for vertical layouts, and is set to + * `height` for fonts that do not provide vertical metrics. Only + * relevant for scalable formats. + * + * underline_position :: + * The position, in font units, of the underline line for this face. + * It is the center of the underlining stem. Only relevant for + * scalable formats. + * + * underline_thickness :: + * The thickness, in font units, of the underline for this face. Only + * relevant for scalable formats. + * + * glyph :: + * The face's associated glyph slot(s). + * + * size :: + * The current active size for this face. + * + * charmap :: + * The current active charmap for this face. + * + * @note: + * Fields may be changed after a call to @FT_Attach_File or + * @FT_Attach_Stream. + * + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `ascender`, `descender`, `height`, + * `underline_position`, and `underline_thickness`. + * + * Especially for TrueType fonts see also the documentation for + * @FT_Size_Metrics. + */ typedef struct FT_FaceRec_ { FT_Long num_faces; @@ -1051,9 +1247,9 @@ FT_BEGIN_HEADER FT_Generic generic; - /*# The following member variables (down to `underline_thickness') */ - /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */ - /*# for bitmap fonts. */ + /* The following member variables (down to `underline_thickness`) */ + /* are only relevant to scalable outlines; cf. @FT_Bitmap_Size */ + /* for bitmap fonts. */ FT_BBox bbox; FT_UShort units_per_EM; @@ -1071,7 +1267,7 @@ FT_BEGIN_HEADER FT_Size size; FT_CharMap charmap; - /*@private begin */ + /* private fields, internal to FreeType */ FT_Driver driver; FT_Memory memory; @@ -1084,113 +1280,136 @@ FT_BEGIN_HEADER FT_Face_Internal internal; - /*@private end */ - } FT_FaceRec; - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_FACE_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flags used in the `face_flags' field of the */ - /* @FT_FaceRec structure. They inform client applications of */ - /* properties of the corresponding face. */ - /* */ - /* <Values> */ - /* FT_FACE_FLAG_SCALABLE :: */ - /* Indicates that the face contains outline glyphs. This doesn't */ - /* prevent bitmap strikes, i.e., a face can have both this and */ - /* and @FT_FACE_FLAG_FIXED_SIZES set. */ - /* */ - /* FT_FACE_FLAG_FIXED_SIZES :: */ - /* Indicates that the face contains bitmap strikes. See also the */ - /* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */ - /* */ - /* FT_FACE_FLAG_FIXED_WIDTH :: */ - /* Indicates that the face contains fixed-width characters (like */ - /* Courier, Lucido, MonoType, etc.). */ - /* */ - /* FT_FACE_FLAG_SFNT :: */ - /* Indicates that the face uses the `sfnt' storage scheme. For */ - /* now, this means TrueType and OpenType. */ - /* */ - /* FT_FACE_FLAG_HORIZONTAL :: */ - /* Indicates that the face contains horizontal glyph metrics. This */ - /* should be set for all common formats. */ - /* */ - /* FT_FACE_FLAG_VERTICAL :: */ - /* Indicates that the face contains vertical glyph metrics. This */ - /* is only available in some formats, not all of them. */ - /* */ - /* FT_FACE_FLAG_KERNING :: */ - /* Indicates that the face contains kerning information. If set, */ - /* the kerning distance can be retrieved through the function */ - /* @FT_Get_Kerning. Otherwise the function always return the */ - /* vector (0,0). Note that FreeType doesn't handle kerning data */ - /* from the `GPOS' table (as present in some OpenType fonts). */ - /* */ - /* FT_FACE_FLAG_FAST_GLYPHS :: */ - /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */ - /* */ - /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */ - /* Indicates that the font contains multiple masters and is capable */ - /* of interpolating between them. See the multiple-masters */ - /* specific API for details. */ - /* */ - /* FT_FACE_FLAG_GLYPH_NAMES :: */ - /* Indicates that the font contains glyph names that can be */ - /* retrieved through @FT_Get_Glyph_Name. Note that some TrueType */ - /* fonts contain broken glyph name tables. Use the function */ - /* @FT_Has_PS_Glyph_Names when needed. */ - /* */ - /* FT_FACE_FLAG_EXTERNAL_STREAM :: */ - /* Used internally by FreeType to indicate that a face's stream was */ - /* provided by the client application and should not be destroyed */ - /* when @FT_Done_Face is called. Don't read or test this flag. */ - /* */ - /* FT_FACE_FLAG_HINTER :: */ - /* Set if the font driver has a hinting machine of its own. For */ - /* example, with TrueType fonts, it makes sense to use data from */ - /* the SFNT `gasp' table only if the native TrueType hinting engine */ - /* (with the bytecode interpreter) is available and active. */ - /* */ - /* FT_FACE_FLAG_CID_KEYED :: */ - /* Set if the font is CID-keyed. In that case, the font is not */ - /* accessed by glyph indices but by CID values. For subsetted */ - /* CID-keyed fonts this has the consequence that not all index */ - /* values are a valid argument to FT_Load_Glyph. Only the CID */ - /* values for which corresponding glyphs in the subsetted font */ - /* exist make FT_Load_Glyph return successfully; in all other cases */ - /* you get an `FT_Err_Invalid_Argument' error. */ - /* */ - /* Note that CID-keyed fonts that are in an SFNT wrapper don't */ - /* have this flag set since the glyphs are accessed in the normal */ - /* way (using contiguous indices); the `CID-ness' isn't visible to */ - /* the application. */ - /* */ - /* FT_FACE_FLAG_TRICKY :: */ - /* Set if the font is `tricky', this is, it always needs the */ - /* font format's native hinting engine to get a reasonable result. */ - /* A typical example is the Chinese font `mingli.ttf' that uses */ - /* TrueType bytecode instructions to move and scale all of its */ - /* subglyphs. */ - /* */ - /* It is not possible to auto-hint such fonts using */ - /* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */ - /* @FT_LOAD_NO_HINTING. You have to set both @FT_LOAD_NO_HINTING */ - /* and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */ - /* probably never want this except for demonstration purposes. */ - /* */ - /* Currently, there are about a dozen TrueType fonts in the list of */ - /* tricky fonts; they are hard-coded in file `ttobjs.c'. */ - /* */ - /* FT_FACE_FLAG_COLOR :: */ - /* Set if the font has color glyph tables. To access color glyphs */ - /* use @FT_LOAD_COLOR. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_FACE_FLAG_XXX + * + * @description: + * A list of bit flags used in the `face_flags` field of the @FT_FaceRec + * structure. They inform client applications of properties of the + * corresponding face. + * + * @values: + * FT_FACE_FLAG_SCALABLE :: + * The face contains outline glyphs. Note that a face can contain + * bitmap strikes also, i.e., a face can have both this flag and + * @FT_FACE_FLAG_FIXED_SIZES set. + * + * FT_FACE_FLAG_FIXED_SIZES :: + * The face contains bitmap strikes. See also the `num_fixed_sizes` + * and `available_sizes` fields of @FT_FaceRec. + * + * FT_FACE_FLAG_FIXED_WIDTH :: + * The face contains fixed-width characters (like Courier, Lucida, + * MonoType, etc.). + * + * FT_FACE_FLAG_SFNT :: + * The face uses the SFNT storage scheme. For now, this means TrueType + * and OpenType. + * + * FT_FACE_FLAG_HORIZONTAL :: + * The face contains horizontal glyph metrics. This should be set for + * all common formats. + * + * FT_FACE_FLAG_VERTICAL :: + * The face contains vertical glyph metrics. This is only available in + * some formats, not all of them. + * + * FT_FACE_FLAG_KERNING :: + * The face contains kerning information. If set, the kerning distance + * can be retrieved using the function @FT_Get_Kerning. Otherwise the + * function always returns the vector (0,0). + * + * Note that for TrueType fonts only, FreeType supports both the 'kern' + * table and the basic, pair-wise kerning feature from the 'GPOS' table + * (with `TT_CONFIG_OPTION_GPOS_KERNING` enabled), though FreeType does + * not support the more advanced GPOS layout features; use a library + * like HarfBuzz for those instead. + * + * FT_FACE_FLAG_FAST_GLYPHS :: + * THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. + * + * FT_FACE_FLAG_MULTIPLE_MASTERS :: + * The face contains multiple masters and is capable of interpolating + * between them. Supported formats are Adobe MM, TrueType GX, and + * OpenType variation fonts. + * + * See section @multiple_masters for API details. + * + * FT_FACE_FLAG_GLYPH_NAMES :: + * The face contains glyph names, which can be retrieved using + * @FT_Get_Glyph_Name. Note that some TrueType fonts contain broken + * glyph name tables. Use the function @FT_Has_PS_Glyph_Names when + * needed. + * + * FT_FACE_FLAG_EXTERNAL_STREAM :: + * Used internally by FreeType to indicate that a face's stream was + * provided by the client application and should not be destroyed when + * @FT_Done_Face is called. Don't read or test this flag. + * + * FT_FACE_FLAG_HINTER :: + * The font driver has a hinting machine of its own. For example, with + * TrueType fonts, it makes sense to use data from the SFNT 'gasp' + * table only if the native TrueType hinting engine (with the bytecode + * interpreter) is available and active. + * + * FT_FACE_FLAG_CID_KEYED :: + * The face is CID-keyed. In that case, the face is not accessed by + * glyph indices but by CID values. For subsetted CID-keyed fonts this + * has the consequence that not all index values are a valid argument + * to @FT_Load_Glyph. Only the CID values for which corresponding + * glyphs in the subsetted font exist make `FT_Load_Glyph` return + * successfully; in all other cases you get an + * `FT_Err_Invalid_Argument` error. + * + * Note that CID-keyed fonts that are in an SFNT wrapper (that is, all + * OpenType/CFF fonts) don't have this flag set since the glyphs are + * accessed in the normal way (using contiguous indices); the + * 'CID-ness' isn't visible to the application. + * + * FT_FACE_FLAG_TRICKY :: + * The face is 'tricky', that is, it always needs the font format's + * native hinting engine to get a reasonable result. A typical example + * is the old Chinese font `mingli.ttf` (but not `mingliu.ttc`) that + * uses TrueType bytecode instructions to move and scale all of its + * subglyphs. + * + * It is not possible to auto-hint such fonts using + * @FT_LOAD_FORCE_AUTOHINT; it will also ignore @FT_LOAD_NO_HINTING. + * You have to set both @FT_LOAD_NO_HINTING and @FT_LOAD_NO_AUTOHINT to + * really disable hinting; however, you probably never want this except + * for demonstration purposes. + * + * Currently, there are about a dozen TrueType fonts in the list of + * tricky fonts; they are hard-coded in file `ttobjs.c`. + * + * FT_FACE_FLAG_COLOR :: + * [Since 2.5.1] The face has color glyph tables. See @FT_LOAD_COLOR + * for more information. + * + * FT_FACE_FLAG_VARIATION :: + * [Since 2.9] Set if the current face (or named instance) has been + * altered with @FT_Set_MM_Design_Coordinates, + * @FT_Set_Var_Design_Coordinates, @FT_Set_Var_Blend_Coordinates, or + * @FT_Set_MM_WeightVector to select a non-default instance. + * + * FT_FACE_FLAG_SVG :: + * [Since 2.12] The face has an 'SVG~' OpenType table. + * + * FT_FACE_FLAG_SBIX :: + * [Since 2.12] The face has an 'sbix' OpenType table *and* outlines. + * For such fonts, @FT_FACE_FLAG_SCALABLE is not set by default to + * retain backward compatibility. + * + * FT_FACE_FLAG_SBIX_OVERLAY :: + * [Since 2.12] The face has an 'sbix' OpenType table where outlines + * should be drawn on top of bitmap strikes. + * + */ #define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) #define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) #define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 ) @@ -1206,29 +1425,40 @@ FT_BEGIN_HEADER #define FT_FACE_FLAG_CID_KEYED ( 1L << 12 ) #define FT_FACE_FLAG_TRICKY ( 1L << 13 ) #define FT_FACE_FLAG_COLOR ( 1L << 14 ) +#define FT_FACE_FLAG_VARIATION ( 1L << 15 ) +#define FT_FACE_FLAG_SVG ( 1L << 16 ) +#define FT_FACE_FLAG_SBIX ( 1L << 17 ) +#define FT_FACE_FLAG_SBIX_OVERLAY ( 1L << 18 ) - /************************************************************************* + /************************************************************************** + * + * @section: + * font_testing_macros + * + */ + + /************************************************************************** * * @macro: - * FT_HAS_HORIZONTAL( face ) + * FT_HAS_HORIZONTAL * * @description: - * A macro that returns true whenever a face object contains - * horizontal metrics (this is true for all font formats though). + * A macro that returns true whenever a face object contains horizontal + * metrics (this is true for all font formats though). * * @also: * @FT_HAS_VERTICAL can be used to check for vertical metrics. * */ #define FT_HAS_HORIZONTAL( face ) \ - ( face->face_flags & FT_FACE_FLAG_HORIZONTAL ) + ( !!( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_HAS_VERTICAL( face ) + * FT_HAS_VERTICAL * * @description: * A macro that returns true whenever a face object contains real @@ -1236,91 +1466,98 @@ FT_BEGIN_HEADER * */ #define FT_HAS_VERTICAL( face ) \ - ( face->face_flags & FT_FACE_FLAG_VERTICAL ) + ( !!( (face)->face_flags & FT_FACE_FLAG_VERTICAL ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_HAS_KERNING( face ) + * FT_HAS_KERNING * * @description: - * A macro that returns true whenever a face object contains kerning - * data that can be accessed with @FT_Get_Kerning. + * A macro that returns true whenever a face object contains kerning data + * that can be accessed with @FT_Get_Kerning. * */ #define FT_HAS_KERNING( face ) \ - ( face->face_flags & FT_FACE_FLAG_KERNING ) + ( !!( (face)->face_flags & FT_FACE_FLAG_KERNING ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_IS_SCALABLE( face ) + * FT_IS_SCALABLE * * @description: * A macro that returns true whenever a face object contains a scalable - * font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF, - * and PFR font formats. + * font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF, and + * PFR font formats). * */ #define FT_IS_SCALABLE( face ) \ - ( face->face_flags & FT_FACE_FLAG_SCALABLE ) + ( !!( (face)->face_flags & FT_FACE_FLAG_SCALABLE ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_IS_SFNT( face ) + * FT_IS_SFNT * * @description: - * A macro that returns true whenever a face object contains a font - * whose format is based on the SFNT storage scheme. This usually - * means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded - * bitmap fonts. + * A macro that returns true whenever a face object contains a font whose + * format is based on the SFNT storage scheme. This usually means: + * TrueType fonts, OpenType fonts, as well as SFNT-based embedded bitmap + * fonts. * * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and * @FT_TRUETYPE_TABLES_H are available. * */ #define FT_IS_SFNT( face ) \ - ( face->face_flags & FT_FACE_FLAG_SFNT ) + ( !!( (face)->face_flags & FT_FACE_FLAG_SFNT ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_IS_FIXED_WIDTH( face ) + * FT_IS_FIXED_WIDTH * * @description: * A macro that returns true whenever a face object contains a font face - * that contains fixed-width (or `monospace', `fixed-pitch', etc.) + * that contains fixed-width (or 'monospace', 'fixed-pitch', etc.) * glyphs. * */ #define FT_IS_FIXED_WIDTH( face ) \ - ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) + ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_HAS_FIXED_SIZES( face ) + * FT_HAS_FIXED_SIZES * * @description: * A macro that returns true whenever a face object contains some - * embedded bitmaps. See the `available_sizes' field of the - * @FT_FaceRec structure. + * embedded bitmaps. See the `available_sizes` field of the @FT_FaceRec + * structure. * */ #define FT_HAS_FIXED_SIZES( face ) \ - ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES ) + ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES ) ) - /************************************************************************* + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** * * @macro: - * FT_HAS_FAST_GLYPHS( face ) + * FT_HAS_FAST_GLYPHS * * @description: * Deprecated. @@ -1329,10 +1566,17 @@ FT_BEGIN_HEADER #define FT_HAS_FAST_GLYPHS( face ) 0 - /************************************************************************* + /************************************************************************** + * + * @section: + * font_testing_macros + * + */ + + /************************************************************************** * * @macro: - * FT_HAS_GLYPH_NAMES( face ) + * FT_HAS_GLYPH_NAMES * * @description: * A macro that returns true whenever a face object contains some glyph @@ -1340,13 +1584,13 @@ 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 ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_HAS_MULTIPLE_MASTERS( face ) + * FT_HAS_MULTIPLE_MASTERS * * @description: * A macro that returns true whenever a face object contains some @@ -1355,148 +1599,378 @@ 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 ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_NAMED_INSTANCE + * + * @description: + * A macro that returns true whenever a face object is a named instance + * of a GX or OpenType variation font. + * + * [Since 2.9] Changing the design coordinates with + * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does + * not influence the return value of this macro (only + * @FT_Set_Named_Instance does that). + * + * @since: + * 2.7 + * + */ +#define FT_IS_NAMED_INSTANCE( face ) \ + ( !!( (face)->face_index & 0x7FFF0000L ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_VARIATION + * + * @description: + * A macro that returns true whenever a face object has been altered by + * @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, + * @FT_Set_Var_Blend_Coordinates, or @FT_Set_MM_WeightVector. + * + * @since: + * 2.9 + * + */ +#define FT_IS_VARIATION( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_VARIATION ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_IS_CID_KEYED( face ) + * FT_IS_CID_KEYED * * @description: * A macro that returns true whenever a face object contains a CID-keyed - * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more - * details. + * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more details. * * If this macro is true, all functions defined in @FT_CID_H are * available. * */ #define FT_IS_CID_KEYED( face ) \ - ( face->face_flags & FT_FACE_FLAG_CID_KEYED ) + ( !!( (face)->face_flags & FT_FACE_FLAG_CID_KEYED ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_IS_TRICKY( face ) + * FT_IS_TRICKY * * @description: - * A macro that returns true whenever a face represents a `tricky' font. + * A macro that returns true whenever a face represents a 'tricky' font. * See the discussion of @FT_FACE_FLAG_TRICKY for more details. * */ #define FT_IS_TRICKY( face ) \ - ( face->face_flags & FT_FACE_FLAG_TRICKY ) + ( !!( (face)->face_flags & FT_FACE_FLAG_TRICKY ) ) - /************************************************************************* + /************************************************************************** * * @macro: - * FT_HAS_COLOR( face ) + * FT_HAS_COLOR * * @description: - * A macro that returns true whenever a face object contains - * tables for color glyphs. + * A macro that returns true whenever a face object contains tables for + * color glyphs. + * + * @since: + * 2.5.1 * */ #define FT_HAS_COLOR( face ) \ - ( face->face_flags & FT_FACE_FLAG_COLOR ) - - - /*************************************************************************/ - /* */ - /* <Const> */ - /* FT_STYLE_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flags used to indicate the style of a given face. */ - /* These are used in the `style_flags' field of @FT_FaceRec. */ - /* */ - /* <Values> */ - /* FT_STYLE_FLAG_ITALIC :: */ - /* Indicates that a given face style is italic or oblique. */ - /* */ - /* FT_STYLE_FLAG_BOLD :: */ - /* Indicates that a given face is bold. */ - /* */ - /* <Note> */ - /* The style information as provided by FreeType is very basic. More */ - /* details are beyond the scope and should be done on a higher level */ - /* (for example, by analyzing various fields of the `OS/2' table in */ - /* SFNT based fonts). */ - /* */ -#define FT_STYLE_FLAG_ITALIC ( 1 << 0 ) -#define FT_STYLE_FLAG_BOLD ( 1 << 1 ) + ( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) ) - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Size_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Size_InternalRec' structure, used to */ - /* model private data of a given @FT_Size object. */ - /* */ - typedef struct FT_Size_InternalRec_* FT_Size_Internal; + /************************************************************************** + * + * @macro: + * FT_HAS_SVG + * + * @description: + * A macro that returns true whenever a face object contains an 'SVG~' + * OpenType table. + * + * @since: + * 2.12 + */ +#define FT_HAS_SVG( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SVG ) ) - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_Metrics */ - /* */ - /* <Description> */ - /* The size metrics structure gives the metrics of a size object. */ - /* */ - /* <Fields> */ - /* x_ppem :: The width of the scaled EM square in pixels, hence */ - /* the term `ppem' (pixels per EM). It is also */ - /* referred to as `nominal width'. */ - /* */ - /* y_ppem :: The height of the scaled EM square in pixels, */ - /* hence the term `ppem' (pixels per EM). It is also */ - /* referred to as `nominal height'. */ - /* */ - /* x_scale :: A 16.16 fractional scaling value used to convert */ - /* horizontal metrics from font units to 26.6 */ - /* fractional pixels. Only relevant for scalable */ - /* font formats. */ - /* */ - /* y_scale :: A 16.16 fractional scaling value used to convert */ - /* vertical metrics from font units to 26.6 */ - /* fractional pixels. Only relevant for scalable */ - /* font formats. */ - /* */ - /* ascender :: The ascender in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* descender :: The descender in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* height :: The height in 26.6 fractional pixels. See */ - /* @FT_FaceRec for the details. */ - /* */ - /* max_advance :: The maximum advance width in 26.6 fractional */ - /* pixels. See @FT_FaceRec for the details. */ - /* */ - /* <Note> */ - /* The scaling values, if relevant, are determined first during a */ - /* size changing operation. The remaining fields are then set by the */ - /* driver. For scalable formats, they are usually set to scaled */ - /* values of the corresponding fields in @FT_FaceRec. */ - /* */ - /* Note that due to glyph hinting, these values might not be exact */ - /* for certain fonts. Thus they must be treated as unreliable */ - /* with an error margin of at least one pixel! */ - /* */ - /* Indeed, the only way to get the exact metrics is to render _all_ */ - /* glyphs. As this would be a definite performance hit, it is up to */ - /* client applications to perform such computations. */ - /* */ - /* The FT_Size_Metrics structure is valid for bitmap fonts also. */ - /* */ + /************************************************************************** + * + * @macro: + * FT_HAS_SBIX + * + * @description: + * A macro that returns true whenever a face object contains an 'sbix' + * OpenType table *and* outline glyphs. + * + * Currently, FreeType only supports bitmap glyphs in PNG format for this + * table (i.e., JPEG and TIFF formats are unsupported, as are + * Apple-specific formats not part of the OpenType specification). + * + * @note: + * For backward compatibility, a font with an 'sbix' table is treated as + * a bitmap-only face. Using @FT_Open_Face with + * @FT_PARAM_TAG_IGNORE_SBIX, an application can switch off 'sbix' + * handling so that the face is treated as an ordinary outline font with + * scalable outlines. + * + * Here is some pseudo code that roughly illustrates how to implement + * 'sbix' handling according to the OpenType specification. + * + * ``` + * if ( FT_HAS_SBIX( face ) ) + * { + * // open font as a scalable one without sbix handling + * FT_Face face2; + * FT_Parameter param = { FT_PARAM_TAG_IGNORE_SBIX, NULL }; + * FT_Open_Args args = { FT_OPEN_PARAMS | ..., + * ..., + * 1, ¶m }; + * + * + * FT_Open_Face( library, &args, 0, &face2 ); + * + * <sort `face->available_size` as necessary into + * `preferred_sizes`[*]> + * + * for ( i = 0; i < face->num_fixed_sizes; i++ ) + * { + * size = preferred_sizes[i].size; + * + * error = FT_Set_Pixel_Sizes( face, size, size ); + * <error handling omitted> + * + * // check whether we have a glyph in a bitmap strike + * error = FT_Load_Glyph( face, + * glyph_index, + * FT_LOAD_SBITS_ONLY | + * FT_LOAD_BITMAP_METRICS_ONLY ); + * if ( error == FT_Err_Invalid_Argument ) + * continue; + * else if ( error ) + * <other error handling omitted> + * else + * break; + * } + * + * if ( i != face->num_fixed_sizes ) + * <load embedded bitmap with `FT_Load_Glyph`, + * scale it, display it, etc.> + * + * if ( i == face->num_fixed_sizes || + * FT_HAS_SBIX_OVERLAY( face ) ) + * <use `face2` to load outline glyph with `FT_Load_Glyph`, + * scale it, display it on top of the bitmap, etc.> + * } + * ``` + * + * [*] Assuming a target value of 400dpi and available strike sizes 100, + * 200, 300, and 400dpi, a possible order might be [400, 200, 300, 100]: + * scaling 200dpi to 400dpi usually gives better results than scaling + * 300dpi to 400dpi; it is also much faster. However, scaling 100dpi to + * 400dpi can yield a too pixelated result, thus the preference might be + * 300dpi over 100dpi. + * + * @since: + * 2.12 + */ +#define FT_HAS_SBIX( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SBIX ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_SBIX_OVERLAY + * + * @description: + * A macro that returns true whenever a face object contains an 'sbix' + * OpenType table with bit~1 in its `flags` field set, instructing the + * application to overlay the bitmap strike with the corresponding + * outline glyph. See @FT_HAS_SBIX for pseudo code how to use it. + * + * @since: + * 2.12 + */ +#define FT_HAS_SBIX_OVERLAY( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SBIX_OVERLAY ) ) + + + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @enum: + * FT_STYLE_FLAG_XXX + * + * @description: + * A list of bit flags to indicate the style of a given face. These are + * used in the `style_flags` field of @FT_FaceRec. + * + * @values: + * FT_STYLE_FLAG_ITALIC :: + * The face style is italic or oblique. + * + * FT_STYLE_FLAG_BOLD :: + * The face is bold. + * + * @note: + * The style information as provided by FreeType is very basic. More + * details are beyond the scope and should be done on a higher level (for + * example, by analyzing various fields of the 'OS/2' table in SFNT based + * fonts). + */ +#define FT_STYLE_FLAG_ITALIC ( 1 << 0 ) +#define FT_STYLE_FLAG_BOLD ( 1 << 1 ) + + + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @type: + * FT_Size_Internal + * + * @description: + * An opaque handle to an `FT_Size_InternalRec` structure, used to model + * private data of a given @FT_Size object. + */ + typedef struct FT_Size_InternalRec_* FT_Size_Internal; + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @struct: + * FT_Size_Metrics + * + * @description: + * The size metrics structure gives the metrics of a size object. + * + * @fields: + * x_ppem :: + * The width of the scaled EM square in pixels, hence the term 'ppem' + * (pixels per EM). It is also referred to as 'nominal width'. + * + * y_ppem :: + * The height of the scaled EM square in pixels, hence the term 'ppem' + * (pixels per EM). It is also referred to as 'nominal height'. + * + * x_scale :: + * A 16.16 fractional scaling value to convert horizontal metrics from + * font units to 26.6 fractional pixels. Only relevant for scalable + * font formats. + * + * y_scale :: + * A 16.16 fractional scaling value to convert vertical metrics from + * font units to 26.6 fractional pixels. Only relevant for scalable + * font formats. + * + * ascender :: + * The ascender in 26.6 fractional pixels, rounded up to an integer + * value. See @FT_FaceRec for the details. + * + * descender :: + * The descender in 26.6 fractional pixels, rounded down to an integer + * value. See @FT_FaceRec for the details. + * + * height :: + * The height in 26.6 fractional pixels, rounded to an integer value. + * See @FT_FaceRec for the details. + * + * max_advance :: + * The maximum advance width in 26.6 fractional pixels, rounded to an + * integer value. See @FT_FaceRec for the details. + * + * @note: + * The scaling values, if relevant, are determined first during a size + * changing operation. The remaining fields are then set by the driver. + * For scalable formats, they are usually set to scaled values of the + * corresponding fields in @FT_FaceRec. Some values like ascender or + * descender are rounded for historical reasons; more precise values (for + * outline fonts) can be derived by scaling the corresponding @FT_FaceRec + * values manually, with code similar to the following. + * + * ``` + * scaled_ascender = FT_MulFix( face->ascender, + * size_metrics->y_scale ); + * ``` + * + * Note that due to glyph hinting and the selected rendering mode these + * values are usually not exact; consequently, they must be treated as + * unreliable with an error margin of at least one pixel! + * + * Indeed, the only way to get the exact metrics is to render _all_ + * glyphs. As this would be a definite performance hit, it is up to + * client applications to perform such computations. + * + * The `FT_Size_Metrics` structure is valid for bitmap fonts also. + * + * + * **TrueType fonts with native bytecode hinting** + * + * All applications that handle TrueType fonts with native hinting must + * be aware that TTFs expect different rounding of vertical font + * dimensions. The application has to cater for this, especially if it + * wants to rely on a TTF's vertical data (for example, to properly align + * box characters vertically). + * + * Only the application knows _in advance_ that it is going to use native + * hinting for TTFs! FreeType, on the other hand, selects the hinting + * mode not at the time of creating an @FT_Size object but much later, + * namely while calling @FT_Load_Glyph. + * + * Here is some pseudo code that illustrates a possible solution. + * + * ``` + * font_format = FT_Get_Font_Format( face ); + * + * if ( !strcmp( font_format, "TrueType" ) && + * do_native_bytecode_hinting ) + * { + * ascender = ROUND( FT_MulFix( face->ascender, + * size_metrics->y_scale ) ); + * descender = ROUND( FT_MulFix( face->descender, + * size_metrics->y_scale ) ); + * } + * else + * { + * ascender = size_metrics->ascender; + * descender = size_metrics->descender; + * } + * + * height = size_metrics->height; + * max_advance = size_metrics->max_advance; + * ``` + */ typedef struct FT_Size_Metrics_ { FT_UShort x_ppem; /* horizontal pixels per EM */ @@ -1513,25 +1987,27 @@ FT_BEGIN_HEADER } FT_Size_Metrics; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SizeRec */ - /* */ - /* <Description> */ - /* FreeType root size class structure. A size object models a face */ - /* object at a given size. */ - /* */ - /* <Fields> */ - /* face :: Handle to the parent face object. */ - /* */ - /* generic :: A typeless pointer, unused by the FreeType library or */ - /* any of its drivers. It can be used by client */ - /* applications to link their own data to each size */ - /* object. */ - /* */ - /* metrics :: Metrics for this size object. This field is read-only. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_SizeRec + * + * @description: + * FreeType root size class structure. A size object models a face + * object at a given size. + * + * @fields: + * face :: + * Handle to the parent face object. + * + * generic :: + * A typeless pointer, unused by the FreeType library or any of its + * drivers. It can be used by client applications to link their own + * data to each size object. + * + * metrics :: + * Metrics for this size object. This field is read-only. + */ typedef struct FT_SizeRec_ { FT_Face face; /* parent face object */ @@ -1542,211 +2018,255 @@ FT_BEGIN_HEADER } FT_SizeRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SubGlyph */ - /* */ - /* <Description> */ - /* The subglyph structure is an internal object used to describe */ - /* subglyphs (for example, in the case of composites). */ - /* */ - /* <Note> */ - /* The subglyph implementation is not part of the high-level API, */ - /* hence the forward structure declaration. */ - /* */ - /* You can however retrieve subglyph information with */ - /* @FT_Get_SubGlyph_Info. */ - /* */ + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @struct: + * FT_SubGlyph + * + * @description: + * The subglyph structure is an internal object used to describe + * subglyphs (for example, in the case of composites). + * + * @note: + * The subglyph implementation is not part of the high-level API, hence + * the forward structure declaration. + * + * You can however retrieve subglyph information with + * @FT_Get_SubGlyph_Info. + */ typedef struct FT_SubGlyphRec_* FT_SubGlyph; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Slot_Internal */ - /* */ - /* <Description> */ - /* An opaque handle to an `FT_Slot_InternalRec' structure, used to */ - /* model private data of a given @FT_GlyphSlot object. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Slot_Internal + * + * @description: + * An opaque handle to an `FT_Slot_InternalRec` structure, used to model + * private data of a given @FT_GlyphSlot object. + */ typedef struct FT_Slot_InternalRec_* FT_Slot_Internal; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_GlyphSlotRec */ - /* */ - /* <Description> */ - /* FreeType root glyph slot class structure. A glyph slot is a */ - /* container where individual glyphs can be loaded, be they in */ - /* outline or bitmap format. */ - /* */ - /* <Fields> */ - /* library :: A handle to the FreeType library instance */ - /* this slot belongs to. */ - /* */ - /* face :: A handle to the parent face object. */ - /* */ - /* next :: In some cases (like some font tools), several */ - /* glyph slots per face object can be a good */ - /* thing. As this is rare, the glyph slots are */ - /* listed through a direct, single-linked list */ - /* using its `next' field. */ - /* */ - /* generic :: A typeless pointer unused by the FreeType */ - /* library or any of its drivers. It can be */ - /* used by client applications to link their own */ - /* data to each glyph slot object. */ - /* */ - /* metrics :: The metrics of the last loaded glyph in the */ - /* slot. The returned values depend on the last */ - /* load flags (see the @FT_Load_Glyph API */ - /* function) and can be expressed either in 26.6 */ - /* fractional pixels or font units. */ - /* */ - /* Note that even when the glyph image is */ - /* transformed, the metrics are not. */ - /* */ - /* linearHoriAdvance :: The advance width of the unhinted glyph. */ - /* Its value is expressed in 16.16 fractional */ - /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */ - /* when loading the glyph. This field can be */ - /* important to perform correct WYSIWYG layout. */ - /* Only relevant for outline glyphs. */ - /* */ - /* linearVertAdvance :: The advance height of the unhinted glyph. */ - /* Its value is expressed in 16.16 fractional */ - /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */ - /* when loading the glyph. This field can be */ - /* important to perform correct WYSIWYG layout. */ - /* Only relevant for outline glyphs. */ - /* */ - /* advance :: This shorthand is, depending on */ - /* @FT_LOAD_IGNORE_TRANSFORM, the transformed */ - /* (hinted) advance width for the glyph, in 26.6 */ - /* fractional pixel format. As specified with */ - /* @FT_LOAD_VERTICAL_LAYOUT, it uses either the */ - /* `horiAdvance' or the `vertAdvance' value of */ - /* `metrics' field. */ - /* */ - /* format :: This field indicates the format of the image */ - /* contained in the glyph slot. Typically */ - /* @FT_GLYPH_FORMAT_BITMAP, */ - /* @FT_GLYPH_FORMAT_OUTLINE, or */ - /* @FT_GLYPH_FORMAT_COMPOSITE, but others are */ - /* possible. */ - /* */ - /* bitmap :: This field is used as a bitmap descriptor */ - /* when the slot format is */ - /* @FT_GLYPH_FORMAT_BITMAP. Note that the */ - /* address and content of the bitmap buffer can */ - /* change between calls of @FT_Load_Glyph and a */ - /* few other functions. */ - /* */ - /* bitmap_left :: The bitmap's left bearing expressed in */ - /* integer pixels. Only valid if the format is */ - /* @FT_GLYPH_FORMAT_BITMAP, this is, if the */ - /* glyph slot contains a bitmap. */ - /* */ - /* bitmap_top :: The bitmap's top bearing expressed in integer */ - /* pixels. Remember that this is the distance */ - /* from the baseline to the top-most glyph */ - /* scanline, upwards y~coordinates being */ - /* *positive*. */ - /* */ - /* outline :: The outline descriptor for the current glyph */ - /* image if its format is */ - /* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */ - /* loaded, `outline' can be transformed, */ - /* distorted, embolded, etc. However, it must */ - /* not be freed. */ - /* */ - /* num_subglyphs :: The number of subglyphs in a composite glyph. */ - /* This field is only valid for the composite */ - /* glyph format that should normally only be */ - /* loaded with the @FT_LOAD_NO_RECURSE flag. */ - /* */ - /* subglyphs :: An array of subglyph descriptors for */ - /* composite glyphs. There are `num_subglyphs' */ - /* elements in there. Currently internal to */ - /* FreeType. */ - /* */ - /* control_data :: Certain font drivers can also return the */ - /* control data for a given glyph image (e.g. */ - /* TrueType bytecode, Type~1 charstrings, etc.). */ - /* This field is a pointer to such data. */ - /* */ - /* control_len :: This is the length in bytes of the control */ - /* data. */ - /* */ - /* other :: Really wicked formats can use this pointer to */ - /* present their own glyph image to client */ - /* applications. Note that the application */ - /* needs to know about the image format. */ - /* */ - /* lsb_delta :: The difference between hinted and unhinted */ - /* left side bearing while auto-hinting is */ - /* active. Zero otherwise. */ - /* */ - /* rsb_delta :: The difference between hinted and unhinted */ - /* right side bearing while auto-hinting is */ - /* active. Zero otherwise. */ - /* */ - /* <Note> */ - /* If @FT_Load_Glyph is called with default flags (see */ - /* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */ - /* its native format (e.g., an outline glyph for TrueType and Type~1 */ - /* formats). */ - /* */ - /* This image can later be converted into a bitmap by calling */ - /* @FT_Render_Glyph. This function finds the current renderer for */ - /* the native image's format, then invokes it. */ - /* */ - /* The renderer is in charge of transforming the native image through */ - /* the slot's face transformation fields, then converting it into a */ - /* bitmap that is returned in `slot->bitmap'. */ - /* */ - /* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */ - /* to specify the position of the bitmap relative to the current pen */ - /* position (e.g., coordinates (0,0) on the baseline). Of course, */ - /* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */ - /* */ - /* <Note> */ - /* Here is a small pseudo code fragment that shows how to use */ - /* `lsb_delta' and `rsb_delta': */ - /* */ - /* { */ - /* FT_Pos origin_x = 0; */ - /* FT_Pos prev_rsb_delta = 0; */ - /* */ - /* */ - /* for all glyphs do */ - /* <compute kern between current and previous glyph and add it to */ - /* `origin_x'> */ - /* */ - /* <load glyph with `FT_Load_Glyph'> */ - /* */ - /* if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 ) */ - /* origin_x -= 64; */ - /* else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) */ - /* origin_x += 64; */ - /* */ - /* prev_rsb_delta = face->glyph->rsb_delta; */ - /* */ - /* <save glyph image, or render glyph, or ...> */ - /* */ - /* origin_x += face->glyph->advance.x; */ - /* endfor */ - /* } */ - /* */ + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @struct: + * FT_GlyphSlotRec + * + * @description: + * FreeType root glyph slot class structure. A glyph slot is a container + * where individual glyphs can be loaded, be they in outline or bitmap + * format. + * + * @fields: + * library :: + * A handle to the FreeType library instance this slot belongs to. + * + * face :: + * A handle to the parent face object. + * + * next :: + * In some cases (like some font tools), several glyph slots per face + * object can be a good thing. As this is rare, the glyph slots are + * listed through a direct, single-linked list using its `next` field. + * + * glyph_index :: + * [Since 2.10] The glyph index passed as an argument to @FT_Load_Glyph + * while initializing the glyph slot. + * + * generic :: + * A typeless pointer unused by the FreeType library or any of its + * drivers. It can be used by client applications to link their own + * data to each glyph slot object. + * + * metrics :: + * The metrics of the last loaded glyph in the slot. The returned + * values depend on the last load flags (see the @FT_Load_Glyph API + * function) and can be expressed either in 26.6 fractional pixels or + * font units. + * + * Note that even when the glyph image is transformed, the metrics are + * not. + * + * linearHoriAdvance :: + * The advance width of the unhinted glyph. Its value is expressed in + * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when + * loading the glyph. This field can be important to perform correct + * WYSIWYG layout. Only relevant for scalable glyphs. + * + * linearVertAdvance :: + * The advance height of the unhinted glyph. Its value is expressed in + * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when + * loading the glyph. This field can be important to perform correct + * WYSIWYG layout. Only relevant for scalable glyphs. + * + * advance :: + * This shorthand is, depending on @FT_LOAD_IGNORE_TRANSFORM, the + * transformed (hinted) advance width for the glyph, in 26.6 fractional + * pixel format. As specified with @FT_LOAD_VERTICAL_LAYOUT, it uses + * either the `horiAdvance` or the `vertAdvance` value of `metrics` + * field. + * + * format :: + * This field indicates the format of the image contained in the glyph + * slot. Typically @FT_GLYPH_FORMAT_BITMAP, @FT_GLYPH_FORMAT_OUTLINE, + * or @FT_GLYPH_FORMAT_COMPOSITE, but other values are possible. + * + * bitmap :: + * This field is used as a bitmap descriptor. Note that the address + * and content of the bitmap buffer can change between calls of + * @FT_Load_Glyph and a few other functions. + * + * bitmap_left :: + * The bitmap's left bearing expressed in integer pixels. + * + * bitmap_top :: + * The bitmap's top bearing expressed in integer pixels. This is the + * distance from the baseline to the top-most glyph scanline, upwards + * y~coordinates being **positive**. + * + * outline :: + * The outline descriptor for the current glyph image if its format is + * @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is loaded, `outline` can be + * transformed, distorted, emboldened, etc. However, it must not be + * freed. + * + * [Since 2.10.1] If @FT_LOAD_NO_SCALE is set, outline coordinates of + * OpenType variation fonts for a selected instance are internally + * handled as 26.6 fractional font units but returned as (rounded) + * integers, as expected. To get unrounded font units, don't use + * @FT_LOAD_NO_SCALE but load the glyph with @FT_LOAD_NO_HINTING and + * scale it, using the font's `units_per_EM` value as the ppem. + * + * num_subglyphs :: + * The number of subglyphs in a composite glyph. This field is only + * valid for the composite glyph format that should normally only be + * loaded with the @FT_LOAD_NO_RECURSE flag. + * + * subglyphs :: + * An array of subglyph descriptors for composite glyphs. There are + * `num_subglyphs` elements in there. Currently internal to FreeType. + * + * control_data :: + * Certain font drivers can also return the control data for a given + * glyph image (e.g. TrueType bytecode, Type~1 charstrings, etc.). + * This field is a pointer to such data; it is currently internal to + * FreeType. + * + * control_len :: + * This is the length in bytes of the control data. Currently internal + * to FreeType. + * + * other :: + * Reserved. + * + * lsb_delta :: + * The difference between hinted and unhinted left side bearing while + * auto-hinting is active. Zero otherwise. + * + * rsb_delta :: + * The difference between hinted and unhinted right side bearing while + * auto-hinting is active. Zero otherwise. + * + * @note: + * If @FT_Load_Glyph is called with default flags (see @FT_LOAD_DEFAULT) + * the glyph image is loaded in the glyph slot in its native format + * (e.g., an outline glyph for TrueType and Type~1 formats). [Since 2.9] + * The prospective bitmap metrics are calculated according to + * @FT_LOAD_TARGET_XXX and other flags even for the outline glyph, even + * if @FT_LOAD_RENDER is not set. + * + * This image can later be converted into a bitmap by calling + * @FT_Render_Glyph. This function searches the current renderer for the + * native image's format, then invokes it. + * + * The renderer is in charge of transforming the native image through the + * slot's face transformation fields, then converting it into a bitmap + * that is returned in `slot->bitmap`. + * + * Note that `slot->bitmap_left` and `slot->bitmap_top` are also used to + * specify the position of the bitmap relative to the current pen + * position (e.g., coordinates (0,0) on the baseline). Of course, + * `slot->format` is also changed to @FT_GLYPH_FORMAT_BITMAP. + * + * Here is a small pseudo code fragment that shows how to use `lsb_delta` + * and `rsb_delta` to do fractional positioning of glyphs: + * + * ``` + * FT_GlyphSlot slot = face->glyph; + * FT_Pos origin_x = 0; + * + * + * for all glyphs do + * <load glyph with `FT_Load_Glyph'> + * + * FT_Outline_Translate( slot->outline, origin_x & 63, 0 ); + * + * <save glyph image, or render glyph, or ...> + * + * <compute kern between current and next glyph + * and add it to `origin_x'> + * + * origin_x += slot->advance.x; + * origin_x += slot->lsb_delta - slot->rsb_delta; + * endfor + * ``` + * + * Here is another small pseudo code fragment that shows how to use + * `lsb_delta` and `rsb_delta` to improve integer positioning of glyphs: + * + * ``` + * FT_GlyphSlot slot = face->glyph; + * FT_Pos origin_x = 0; + * FT_Pos prev_rsb_delta = 0; + * + * + * for all glyphs do + * <compute kern between current and previous glyph + * and add it to `origin_x'> + * + * <load glyph with `FT_Load_Glyph'> + * + * if ( prev_rsb_delta - slot->lsb_delta > 32 ) + * origin_x -= 64; + * else if ( prev_rsb_delta - slot->lsb_delta < -31 ) + * origin_x += 64; + * + * prev_rsb_delta = slot->rsb_delta; + * + * <save glyph image, or render glyph, or ...> + * + * origin_x += slot->advance.x; + * endfor + * ``` + * + * If you use strong auto-hinting, you **must** apply these delta values! + * Otherwise you will experience far too large inter-glyph spacing at + * small rendering sizes in most cases. Note that it doesn't harm to use + * the above code for other hinting modes also, since the delta values + * are zero then. + */ typedef struct FT_GlyphSlotRec_ { FT_Library library; FT_Face face; FT_GlyphSlot next; - FT_UInt reserved; /* retained for binary compatibility */ + FT_UInt glyph_index; /* new in 2.10; was reserved previously */ FT_Generic generic; FT_Glyph_Metrics metrics; @@ -1787,80 +2307,106 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Init_FreeType */ - /* */ - /* <Description> */ - /* Initialize a new FreeType library object. The set of modules */ - /* that are registered by this function is determined at build time. */ - /* */ - /* <Output> */ - /* alibrary :: A handle to a new library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* In case you want to provide your own memory allocating routines, */ - /* use @FT_New_Library instead, followed by a call to */ - /* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module). */ - /* */ - /* See the documentation of @FT_Library and @FT_Face for */ - /* multi-threading issues. */ - /* */ - /* If you need reference-counting (cf. @FT_Reference_Library), use */ - /* @FT_New_Library and @FT_Done_Library. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Init_FreeType( FT_Library *alibrary ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_FreeType */ - /* */ - /* <Description> */ - /* Destroy a given FreeType library object and all of its children, */ - /* including resources, drivers, faces, sizes, etc. */ - /* */ - /* <Input> */ - /* library :: A handle to the target library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @section: + * library_setup + * + */ + + /************************************************************************** + * + * @function: + * FT_Init_FreeType + * + * @description: + * Initialize a new FreeType library object. The set of modules that are + * registered by this function is determined at build time. + * + * @output: + * alibrary :: + * A handle to a new library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * In case you want to provide your own memory allocating routines, use + * @FT_New_Library instead, followed by a call to @FT_Add_Default_Modules + * (or a series of calls to @FT_Add_Module) and + * @FT_Set_Default_Properties. + * + * See the documentation of @FT_Library and @FT_Face for multi-threading + * issues. + * + * If you need reference-counting (cf. @FT_Reference_Library), use + * @FT_New_Library and @FT_Done_Library. + * + * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is + * set, this function reads the `FREETYPE_PROPERTIES` environment + * variable to control driver properties. See section @properties for + * more. + */ + FT_EXPORT( FT_Error ) + FT_Init_FreeType( FT_Library *alibrary ); + + + /************************************************************************** + * + * @function: + * FT_Done_FreeType + * + * @description: + * Destroy a given FreeType library object and all of its children, + * including resources, drivers, faces, sizes, etc. + * + * @input: + * library :: + * A handle to the target library object. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Done_FreeType( FT_Library library ); - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_OPEN_XXX */ - /* */ - /* <Description> */ - /* A list of bit field constants used within the `flags' field of the */ - /* @FT_Open_Args structure. */ - /* */ - /* <Values> */ - /* FT_OPEN_MEMORY :: This is a memory-based stream. */ - /* */ - /* FT_OPEN_STREAM :: Copy the stream from the `stream' field. */ - /* */ - /* FT_OPEN_PATHNAME :: Create a new input stream from a C~path */ - /* name. */ - /* */ - /* FT_OPEN_DRIVER :: Use the `driver' field. */ - /* */ - /* FT_OPEN_PARAMS :: Use the `num_params' and `params' fields. */ - /* */ - /* <Note> */ - /* The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME' */ - /* flags are mutually exclusive. */ - /* */ + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @enum: + * FT_OPEN_XXX + * + * @description: + * A list of bit field constants used within the `flags` field of the + * @FT_Open_Args structure. + * + * @values: + * FT_OPEN_MEMORY :: + * This is a memory-based stream. + * + * FT_OPEN_STREAM :: + * Copy the stream from the `stream` field. + * + * FT_OPEN_PATHNAME :: + * Create a new input stream from a C~path name. + * + * FT_OPEN_DRIVER :: + * Use the `driver` field. + * + * FT_OPEN_PARAMS :: + * Use the `num_params` and `params` fields. + * + * @note: + * The `FT_OPEN_MEMORY`, `FT_OPEN_STREAM`, and `FT_OPEN_PATHNAME` flags + * are mutually exclusive. + */ #define FT_OPEN_MEMORY 0x1 #define FT_OPEN_STREAM 0x2 #define FT_OPEN_PATHNAME 0x4 @@ -1868,7 +2414,7 @@ FT_BEGIN_HEADER #define FT_OPEN_PARAMS 0x10 - /* these constants are deprecated; use the corresponding `FT_OPEN_XXX' */ + /* these constants are deprecated; use the corresponding `FT_OPEN_XXX` */ /* values instead */ #define ft_open_memory FT_OPEN_MEMORY #define ft_open_stream FT_OPEN_STREAM @@ -1877,24 +2423,26 @@ FT_BEGIN_HEADER #define ft_open_params FT_OPEN_PARAMS - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Parameter */ - /* */ - /* <Description> */ - /* A simple structure used to pass more or less generic parameters to */ - /* @FT_Open_Face. */ - /* */ - /* <Fields> */ - /* tag :: A four-byte identification tag. */ - /* */ - /* data :: A pointer to the parameter data. */ - /* */ - /* <Note> */ - /* The ID and function of parameters are driver-specific. See the */ - /* various FT_PARAM_TAG_XXX flags for more information. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Parameter + * + * @description: + * A simple structure to pass more or less generic parameters to + * @FT_Open_Face and @FT_Face_Properties. + * + * @fields: + * tag :: + * A four-byte identification tag. + * + * data :: + * A pointer to the parameter data. + * + * @note: + * The ID and function of parameters are driver-specific. See section + * @parameter_tags for more information. + */ typedef struct FT_Parameter_ { FT_ULong tag; @@ -1903,64 +2451,73 @@ FT_BEGIN_HEADER } FT_Parameter; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Open_Args */ - /* */ - /* <Description> */ - /* A structure used to indicate how to open a new font file or */ - /* stream. A pointer to such a structure can be used as a parameter */ - /* for the functions @FT_Open_Face and @FT_Attach_Stream. */ - /* */ - /* <Fields> */ - /* flags :: A set of bit flags indicating how to use the */ - /* structure. */ - /* */ - /* memory_base :: The first byte of the file in memory. */ - /* */ - /* memory_size :: The size in bytes of the file in memory. */ - /* */ - /* pathname :: A pointer to an 8-bit file pathname. */ - /* */ - /* stream :: A handle to a source stream object. */ - /* */ - /* driver :: This field is exclusively used by @FT_Open_Face; */ - /* it simply specifies the font driver to use to open */ - /* the face. If set to~0, FreeType tries to load the */ - /* face with each one of the drivers in its list. */ - /* */ - /* num_params :: The number of extra parameters. */ - /* */ - /* params :: Extra parameters passed to the font driver when */ - /* opening a new face. */ - /* */ - /* <Note> */ - /* The stream type is determined by the contents of `flags' that */ - /* are tested in the following order by @FT_Open_Face: */ - /* */ - /* If the @FT_OPEN_MEMORY bit is set, assume that this is a */ - /* memory file of `memory_size' bytes, located at `memory_address'. */ - /* The data are are not copied, and the client is responsible for */ - /* releasing and destroying them _after_ the corresponding call to */ - /* @FT_Done_Face. */ - /* */ - /* Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a */ - /* custom input stream `stream' is used. */ - /* */ - /* Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this */ - /* is a normal file and use `pathname' to open it. */ - /* */ - /* If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to */ - /* open the file with the driver whose handler is in `driver'. */ - /* */ - /* If the @FT_OPEN_PARAMS bit is set, the parameters given by */ - /* `num_params' and `params' is used. They are ignored otherwise. */ - /* */ - /* Ideally, both the `pathname' and `params' fields should be tagged */ - /* as `const'; this is missing for API backwards compatibility. In */ - /* other words, applications should treat them as read-only. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Open_Args + * + * @description: + * A structure to indicate how to open a new font file or stream. A + * pointer to such a structure can be used as a parameter for the + * functions @FT_Open_Face and @FT_Attach_Stream. + * + * @fields: + * flags :: + * A set of bit flags indicating how to use the structure. + * + * memory_base :: + * The first byte of the file in memory. + * + * memory_size :: + * The size in bytes of the file in memory. + * + * pathname :: + * A pointer to an 8-bit file pathname, which must be a C~string (i.e., + * no null bytes except at the very end). The pointer is not owned by + * FreeType. + * + * stream :: + * A handle to a source stream object. + * + * driver :: + * This field is exclusively used by @FT_Open_Face; it simply specifies + * the font driver to use for opening the face. If set to `NULL`, + * FreeType tries to load the face with each one of the drivers in its + * list. + * + * num_params :: + * The number of extra parameters. + * + * params :: + * Extra parameters passed to the font driver when opening a new face. + * + * @note: + * The stream type is determined by the contents of `flags`: + * + * If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file + * of `memory_size` bytes, located at `memory_address`. The data are not + * copied, and the client is responsible for releasing and destroying + * them _after_ the corresponding call to @FT_Done_Face. + * + * Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a custom + * input stream `stream` is used. + * + * Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a + * normal file and use `pathname` to open it. + * + * If none of the above bits are set or if multiple are set at the same + * time, the flags are invalid and @FT_Open_Face fails. + * + * If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open + * the file with the driver whose handler is in `driver`. + * + * If the @FT_OPEN_PARAMS bit is set, the parameters given by + * `num_params` and `params` is used. They are ignored otherwise. + * + * Ideally, both the `pathname` and `params` fields should be tagged as + * 'const'; this is missing for API backward compatibility. In other + * words, applications should treat them as read-only. + */ typedef struct FT_Open_Args_ { FT_UInt flags; @@ -1975,34 +2532,44 @@ FT_BEGIN_HEADER } FT_Open_Args; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face */ - /* */ - /* <Description> */ - /* This function calls @FT_Open_Face to open a font by its pathname. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* pathname :: A path to the font file. */ - /* */ - /* face_index :: See @FT_Open_Face for a detailed description of this */ - /* parameter. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Use @FT_Done_Face to destroy the created @FT_Face object (along */ - /* with its slot and sizes). */ - /* */ + /************************************************************************** + * + * @function: + * FT_New_Face + * + * @description: + * Call @FT_Open_Face to open a font by its pathname. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * pathname :: + * A path to the font file. + * + * face_index :: + * See @FT_Open_Face for a detailed description of this parameter. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `pathname` string should be recognizable as such by a standard + * `fopen` call on your system; in particular, this means that `pathname` + * must not contain null bytes. If that is not sufficient to address all + * file name possibilities (for example, to handle wide character file + * names on Windows in UTF-16 encoding) you might use @FT_Open_Face to + * pass a memory array or a stream object instead. + * + * Use @FT_Done_Face to destroy the created @FT_Face object (along with + * its slot and sizes). + */ FT_EXPORT( FT_Error ) FT_New_Face( FT_Library library, const char* filepathname, @@ -2010,36 +2577,39 @@ FT_BEGIN_HEADER FT_Face *aface ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Memory_Face */ - /* */ - /* <Description> */ - /* This function calls @FT_Open_Face to open a font that has been */ - /* loaded into memory. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* file_base :: A pointer to the beginning of the font data. */ - /* */ - /* file_size :: The size of the memory chunk used by the font data. */ - /* */ - /* face_index :: See @FT_Open_Face for a detailed description of this */ - /* parameter. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You must not deallocate the memory before calling @FT_Done_Face. */ - /* */ + /************************************************************************** + * + * @function: + * FT_New_Memory_Face + * + * @description: + * Call @FT_Open_Face to open a font that has been loaded into memory. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * file_base :: + * A pointer to the beginning of the font data. + * + * file_size :: + * The size of the memory chunk used by the font data. + * + * face_index :: + * See @FT_Open_Face for a detailed description of this parameter. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You must not deallocate the memory before calling @FT_Done_Face. + */ FT_EXPORT( FT_Error ) FT_New_Memory_Face( FT_Library library, const FT_Byte* file_base, @@ -2048,146 +2618,147 @@ FT_BEGIN_HEADER FT_Face *aface ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Open_Face */ - /* */ - /* <Description> */ - /* Create a face object from a given resource described by */ - /* @FT_Open_Args. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* args :: A pointer to an `FT_Open_Args' structure that must */ - /* be filled by the caller. */ - /* */ - /* face_index :: This field holds two different values. Bits 0-15 */ - /* are the index of the face in the font file (starting */ - /* with value~0). Set it to~0 if there is only one */ - /* face in the font file. */ - /* */ - /* Bits 16-30 are relevant to GX variation fonts only, */ - /* specifying the named instance index for the current */ - /* face index (starting with value~1; value~0 makes */ - /* FreeType ignore named instances). For non-GX fonts, */ - /* bits 16-30 are ignored. Assuming that you want to */ - /* access the third named instance in face~4, */ - /* `face_index' should be set to 0x00030004. If you */ - /* want to access face~4 without GX variation handling, */ - /* simply set `face_index' to value~4. */ - /* */ - /* FT_Open_Face and its siblings can be used to quickly */ - /* check whether the font format of a given font */ - /* resource is supported by FreeType. In general, if */ - /* the `face_index' argument is negative, the */ - /* function's return value is~0 if the font format is */ - /* recognized, or non-zero otherwise. The function */ - /* allocates a more or less empty face handle in */ - /* `*aface' (if `aface' isn't NULL); the only two */ - /* useful fields in this special case are */ - /* `face->num_faces' and `face->style_flags'. For any */ - /* negative value of `face_index', `face->num_faces' */ - /* gives the number of faces within the font file. For */ - /* the negative value `-(N+1)' (with `N' a 16-bit */ - /* value), bits 16-30 in `face->style_flags' give the */ - /* number of named instances in face `N' if we have a */ - /* GX variation font (or zero otherwise). After */ - /* examination, the returned @FT_Face structure should */ - /* be deallocated with a call to @FT_Done_Face. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. If `face_index' is */ - /* greater than or equal to zero, it must be non-NULL. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Unlike FreeType 1.x, this function automatically creates a glyph */ - /* slot for the face object that can be accessed directly through */ - /* `face->glyph'. */ - /* */ - /* Each new face object created with this function also owns a */ - /* default @FT_Size object, accessible as `face->size'. */ - /* */ - /* One @FT_Library instance can have multiple face objects, this is, */ - /* @FT_Open_Face and its siblings can be called multiple times using */ - /* the same `library' argument. */ - /* */ - /* See the discussion of reference counters in the description of */ - /* @FT_Reference_Face. */ - /* */ - /* To loop over all faces, use code similar to the following snippet */ - /* (omitting the error handling). */ - /* */ - /* { */ - /* ... */ - /* FT_Face face; */ - /* FT_Long i, num_faces; */ - /* */ - /* */ - /* error = FT_Open_Face( library, args, -1, &face ); */ - /* if ( error ) { ... } */ - /* */ - /* num_faces = face->num_faces; */ - /* FT_Done_Face( face ); */ - /* */ - /* for ( i = 0; i < num_faces; i++ ) */ - /* { */ - /* ... */ - /* error = FT_Open_Face( library, args, i, &face ); */ - /* ... */ - /* FT_Done_Face( face ); */ - /* ... */ - /* } */ - /* } */ - /* */ - /* To loop over all valid values for `face_index', use something */ - /* similar to the following snippet, again without error handling. */ - /* The code accesses all faces immediately (thus only a single call */ - /* of `FT_Open_Face' within the do-loop), with and without named */ - /* instances. */ - /* */ - /* { */ - /* ... */ - /* FT_Face face; */ - /* */ - /* FT_Long num_faces = 0; */ - /* FT_Long num_instances = 0; */ - /* */ - /* FT_Long face_idx = 0; */ - /* FT_Long instance_idx = 0; */ - /* */ - /* */ - /* do */ - /* { */ - /* FT_Long id = ( instance_idx << 16 ) + face_idx; */ - /* */ - /* */ - /* error = FT_Open_Face( library, args, id, &face ); */ - /* if ( error ) { ... } */ - /* */ - /* num_faces = face->num_faces; */ - /* num_instances = face->style_flags >> 16; */ - /* */ - /* ... */ - /* */ - /* FT_Done_Face( face ); */ - /* */ - /* if ( instance_idx < num_instances ) */ - /* instance_idx++; */ - /* else */ - /* { */ - /* face_idx++; */ - /* instance_idx = 0; */ - /* } */ - /* */ - /* } while ( face_idx < num_faces ) */ - /* } */ - /* */ + /************************************************************************** + * + * @function: + * FT_Open_Face + * + * @description: + * Create a face object from a given resource described by @FT_Open_Args. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * args :: + * A pointer to an `FT_Open_Args` structure that must be filled by the + * caller. + * + * face_index :: + * This field holds two different values. Bits 0-15 are the index of + * the face in the font file (starting with value~0). Set it to~0 if + * there is only one face in the font file. + * + * [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation + * fonts only, specifying the named instance index for the current face + * index (starting with value~1; value~0 makes FreeType ignore named + * instances). For non-variation fonts, bits 16-30 are ignored. + * Assuming that you want to access the third named instance in face~4, + * `face_index` should be set to 0x00030004. If you want to access + * face~4 without variation handling, simply set `face_index` to + * value~4. + * + * `FT_Open_Face` and its siblings can be used to quickly check whether + * the font format of a given font resource is supported by FreeType. + * In general, if the `face_index` argument is negative, the function's + * return value is~0 if the font format is recognized, or non-zero + * otherwise. The function allocates a more or less empty face handle + * in `*aface` (if `aface` isn't `NULL`); the only two useful fields in + * this special case are `face->num_faces` and `face->style_flags`. + * For any negative value of `face_index`, `face->num_faces` gives the + * number of faces within the font file. For the negative value + * '-(N+1)' (with 'N' a non-negative 16-bit value), bits 16-30 in + * `face->style_flags` give the number of named instances in face 'N' + * if we have a variation font (or zero otherwise). After examination, + * the returned @FT_Face structure should be deallocated with a call to + * @FT_Done_Face. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Unlike FreeType 1.x, this function automatically creates a glyph slot + * for the face object that can be accessed directly through + * `face->glyph`. + * + * Each new face object created with this function also owns a default + * @FT_Size object, accessible as `face->size`. + * + * One @FT_Library instance can have multiple face objects, that is, + * @FT_Open_Face and its siblings can be called multiple times using the + * same `library` argument. + * + * See the discussion of reference counters in the description of + * @FT_Reference_Face. + * + * If `FT_OPEN_STREAM` is set in `args->flags`, the stream in + * `args->stream` is automatically closed before this function returns + * any error (including `FT_Err_Invalid_Argument`). + * + * @example: + * To loop over all faces, use code similar to the following snippet + * (omitting the error handling). + * + * ``` + * ... + * FT_Face face; + * FT_Long i, num_faces; + * + * + * error = FT_Open_Face( library, args, -1, &face ); + * if ( error ) { ... } + * + * num_faces = face->num_faces; + * FT_Done_Face( face ); + * + * for ( i = 0; i < num_faces; i++ ) + * { + * ... + * error = FT_Open_Face( library, args, i, &face ); + * ... + * FT_Done_Face( face ); + * ... + * } + * ``` + * + * To loop over all valid values for `face_index`, use something similar + * to the following snippet, again without error handling. The code + * accesses all faces immediately (thus only a single call of + * `FT_Open_Face` within the do-loop), with and without named instances. + * + * ``` + * ... + * FT_Face face; + * + * FT_Long num_faces = 0; + * FT_Long num_instances = 0; + * + * FT_Long face_idx = 0; + * FT_Long instance_idx = 0; + * + * + * do + * { + * FT_Long id = ( instance_idx << 16 ) + face_idx; + * + * + * error = FT_Open_Face( library, args, id, &face ); + * if ( error ) { ... } + * + * num_faces = face->num_faces; + * num_instances = face->style_flags >> 16; + * + * ... + * + * FT_Done_Face( face ); + * + * if ( instance_idx < num_instances ) + * instance_idx++; + * else + * { + * face_idx++; + * instance_idx = 0; + * } + * + * } while ( face_idx < num_faces ) + * ``` + */ FT_EXPORT( FT_Error ) FT_Open_Face( FT_Library library, const FT_Open_Args* args, @@ -2195,178 +2766,216 @@ FT_BEGIN_HEADER FT_Face *aface ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Attach_File */ - /* */ - /* <Description> */ - /* This function calls @FT_Attach_Stream to attach a file. */ - /* */ - /* <InOut> */ - /* face :: The target face object. */ - /* */ - /* <Input> */ - /* filepathname :: The pathname. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Attach_File + * + * @description: + * Call @FT_Attach_Stream to attach a file. + * + * @inout: + * face :: + * The target face object. + * + * @input: + * filepathname :: + * The pathname. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Attach_File( FT_Face face, const char* filepathname ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Attach_Stream */ - /* */ - /* <Description> */ - /* `Attach' data to a face object. Normally, this is used to read */ - /* additional information for the face object. For example, you can */ - /* attach an AFM file that comes with a Type~1 font to get the */ - /* kerning values and other metrics. */ - /* */ - /* <InOut> */ - /* face :: The target face object. */ - /* */ - /* <Input> */ - /* parameters :: A pointer to @FT_Open_Args that must be filled by */ - /* the caller. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The meaning of the `attach' (i.e., what really happens when the */ - /* new file is read) is not fixed by FreeType itself. It really */ - /* depends on the font format (and thus the font driver). */ - /* */ - /* Client applications are expected to know what they are doing */ - /* when invoking this function. Most drivers simply do not implement */ - /* file attachments. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Attach_Stream + * + * @description: + * 'Attach' data to a face object. Normally, this is used to read + * additional information for the face object. For example, you can + * attach an AFM file that comes with a Type~1 font to get the kerning + * values and other metrics. + * + * @inout: + * face :: + * The target face object. + * + * @input: + * parameters :: + * A pointer to @FT_Open_Args that must be filled by the caller. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The meaning of the 'attach' (i.e., what really happens when the new + * file is read) is not fixed by FreeType itself. It really depends on + * the font format (and thus the font driver). + * + * Client applications are expected to know what they are doing when + * invoking this function. Most drivers simply do not implement file or + * stream attachments. + */ FT_EXPORT( FT_Error ) - FT_Attach_Stream( FT_Face face, - FT_Open_Args* parameters ); + FT_Attach_Stream( FT_Face face, + const FT_Open_Args* parameters ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Reference_Face */ - /* */ - /* <Description> */ - /* A counter gets initialized to~1 at the time an @FT_Face structure */ - /* is created. This function increments the counter. @FT_Done_Face */ - /* then only destroys a face if the counter is~1, otherwise it simply */ - /* decrements the counter. */ - /* */ - /* This function helps in managing life-cycles of structures that */ - /* reference @FT_Face objects. */ - /* */ - /* <Input> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Since> */ - /* 2.4.2 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Reference_Face + * + * @description: + * A counter gets initialized to~1 at the time an @FT_Face structure is + * created. This function increments the counter. @FT_Done_Face then + * only destroys a face if the counter is~1, otherwise it simply + * decrements the counter. + * + * This function helps in managing life-cycles of structures that + * reference @FT_Face objects. + * + * @input: + * face :: + * A handle to a target face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.4.2 + * + */ FT_EXPORT( FT_Error ) FT_Reference_Face( FT_Face face ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Face */ - /* */ - /* <Description> */ - /* Discard a given face object, as well as all of its child slots and */ - /* sizes. */ - /* */ - /* <Input> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* See the discussion of reference counters in the description of */ - /* @FT_Reference_Face. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Done_Face + * + * @description: + * Discard a given face object, as well as all of its child slots and + * sizes. + * + * @input: + * face :: + * A handle to a target face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Face. + */ FT_EXPORT( FT_Error ) FT_Done_Face( FT_Face face ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Select_Size */ - /* */ - /* <Description> */ - /* Select a bitmap strike. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* strike_index :: The index of the bitmap strike in the */ - /* `available_sizes' field of @FT_FaceRec structure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @function: + * FT_Select_Size + * + * @description: + * Select a bitmap strike. To be more precise, this function sets the + * scaling factors of the active @FT_Size object in a face so that + * bitmaps from this particular strike are taken by @FT_Load_Glyph and + * friends. + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * strike_index :: + * The index of the bitmap strike in the `available_sizes` field of + * @FT_FaceRec structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * For bitmaps embedded in outline fonts it is common that only a subset + * of the available glyphs at a given ppem value is available. FreeType + * silently uses outlines if there is no bitmap for a given glyph index. + * + * For GX and OpenType variation fonts, a bitmap strike makes sense only + * if the default instance is active (that is, no glyph variation takes + * place); otherwise, FreeType simply ignores bitmap strikes. The same + * is true for all named instances that are different from the default + * instance. + * + * Don't use this function if you are using the FreeType cache API. + */ FT_EXPORT( FT_Error ) FT_Select_Size( FT_Face face, FT_Int strike_index ); - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Size_Request_Type */ - /* */ - /* <Description> */ - /* An enumeration type that lists the supported size request types. */ - /* */ - /* <Values> */ - /* FT_SIZE_REQUEST_TYPE_NOMINAL :: */ - /* The nominal size. The `units_per_EM' field of @FT_FaceRec is */ - /* used to determine both scaling values. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */ - /* The real dimension. The sum of the the `ascender' and (minus */ - /* of) the `descender' fields of @FT_FaceRec are used to determine */ - /* both scaling values. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_BBOX :: */ - /* The font bounding box. The width and height of the `bbox' field */ - /* of @FT_FaceRec are used to determine the horizontal and vertical */ - /* scaling value, respectively. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_CELL :: */ - /* The `max_advance_width' field of @FT_FaceRec is used to */ - /* determine the horizontal scaling value; the vertical scaling */ - /* value is determined the same way as */ - /* @FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling */ - /* values are set to the smaller one. This type is useful if you */ - /* want to specify the font size for, say, a window of a given */ - /* dimension and 80x24 cells. */ - /* */ - /* FT_SIZE_REQUEST_TYPE_SCALES :: */ - /* Specify the scaling values directly. */ - /* */ - /* <Note> */ - /* The above descriptions only apply to scalable formats. For bitmap */ - /* formats, the behaviour is up to the driver. */ - /* */ - /* See the note section of @FT_Size_Metrics if you wonder how size */ - /* requesting relates to scaling values. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_Size_Request_Type + * + * @description: + * An enumeration type that lists the supported size request types, i.e., + * what input size (in font units) maps to the requested output size (in + * pixels, as computed from the arguments of @FT_Size_Request). + * + * @values: + * FT_SIZE_REQUEST_TYPE_NOMINAL :: + * The nominal size. The `units_per_EM` field of @FT_FaceRec is used + * to determine both scaling values. + * + * This is the standard scaling found in most applications. In + * particular, use this size request type for TrueType fonts if they + * provide optical scaling or something similar. Note, however, that + * `units_per_EM` is a rather abstract value which bears no relation to + * the actual size of the glyphs in a font. + * + * FT_SIZE_REQUEST_TYPE_REAL_DIM :: + * The real dimension. The sum of the `ascender` and (minus of) the + * `descender` fields of @FT_FaceRec is used to determine both scaling + * values. + * + * FT_SIZE_REQUEST_TYPE_BBOX :: + * The font bounding box. The width and height of the `bbox` field of + * @FT_FaceRec are used to determine the horizontal and vertical + * scaling value, respectively. + * + * FT_SIZE_REQUEST_TYPE_CELL :: + * The `max_advance_width` field of @FT_FaceRec is used to determine + * the horizontal scaling value; the vertical scaling value is + * determined the same way as @FT_SIZE_REQUEST_TYPE_REAL_DIM does. + * Finally, both scaling values are set to the smaller one. This type + * is useful if you want to specify the font size for, say, a window of + * a given dimension and 80x24 cells. + * + * FT_SIZE_REQUEST_TYPE_SCALES :: + * Specify the scaling values directly. + * + * @note: + * The above descriptions only apply to scalable formats. For bitmap + * formats, the behaviour is up to the driver. + * + * See the note section of @FT_Size_Metrics if you wonder how size + * requesting relates to scaling values. + */ typedef enum FT_Size_Request_Type_ { FT_SIZE_REQUEST_TYPE_NOMINAL, @@ -2380,33 +2989,45 @@ FT_BEGIN_HEADER } FT_Size_Request_Type; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_RequestRec */ - /* */ - /* <Description> */ - /* A structure used to model a size request. */ - /* */ - /* <Fields> */ - /* type :: See @FT_Size_Request_Type. */ - /* */ - /* width :: The desired width. */ - /* */ - /* height :: The desired height. */ - /* */ - /* horiResolution :: The horizontal resolution. If set to zero, */ - /* `width' is treated as a 26.6 fractional pixel */ - /* value. */ - /* */ - /* vertResolution :: The vertical resolution. If set to zero, */ - /* `height' is treated as a 26.6 fractional pixel */ - /* value. */ - /* */ - /* <Note> */ - /* If `width' is zero, then the horizontal scaling value is set equal */ - /* to the vertical scaling value, and vice versa. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Size_RequestRec + * + * @description: + * A structure to model a size request. + * + * @fields: + * type :: + * See @FT_Size_Request_Type. + * + * width :: + * The desired width, given as a 26.6 fractional point value (with 72pt + * = 1in). + * + * height :: + * The desired height, given as a 26.6 fractional point value (with + * 72pt = 1in). + * + * horiResolution :: + * The horizontal resolution (dpi, i.e., pixels per inch). If set to + * zero, `width` is treated as a 26.6 fractional **pixel** value, which + * gets internally rounded to an integer. + * + * vertResolution :: + * The vertical resolution (dpi, i.e., pixels per inch). If set to + * zero, `height` is treated as a 26.6 fractional **pixel** value, + * which gets internally rounded to an integer. + * + * @note: + * If `width` is zero, the horizontal scaling value is set equal to the + * vertical scaling value, and vice versa. + * + * If `type` is `FT_SIZE_REQUEST_TYPE_SCALES`, `width` and `height` are + * interpreted directly as 16.16 fractional scaling values, without any + * further modification, and both `horiResolution` and `vertResolution` + * are ignored. + */ typedef struct FT_Size_RequestRec_ { FT_Size_Request_Type type; @@ -2418,89 +3039,102 @@ FT_BEGIN_HEADER } FT_Size_RequestRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Size_Request */ - /* */ - /* <Description> */ - /* A handle to a size request structure. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Size_Request + * + * @description: + * A handle to a size request structure. + */ typedef struct FT_Size_RequestRec_ *FT_Size_Request; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Request_Size */ - /* */ - /* <Description> */ - /* Resize the scale of the active @FT_Size object in a face. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* req :: A pointer to a @FT_Size_RequestRec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Although drivers may select the bitmap strike matching the */ - /* request, you should not rely on this if you intend to select a */ - /* particular bitmap strike. Use @FT_Select_Size instead in that */ - /* case. */ - /* */ - /* The relation between the requested size and the resulting glyph */ - /* size is dependent entirely on how the size is defined in the */ - /* source face. The font designer chooses the final size of each */ - /* glyph relative to this size. For more information refer to */ - /* `http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html' */ - /* */ - /* Don't use this function if you are using the FreeType cache API. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Request_Size + * + * @description: + * Resize the scale of the active @FT_Size object in a face. + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * req :: + * A pointer to a @FT_Size_RequestRec. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Although drivers may select the bitmap strike matching the request, + * you should not rely on this if you intend to select a particular + * bitmap strike. Use @FT_Select_Size instead in that case. + * + * The relation between the requested size and the resulting glyph size + * is dependent entirely on how the size is defined in the source face. + * The font designer chooses the final size of each glyph relative to + * this size. For more information refer to + * 'https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'. + * + * Contrary to @FT_Set_Char_Size, this function doesn't have special code + * to normalize zero-valued widths, heights, or resolutions, which are + * treated as @FT_LOAD_NO_SCALE. + * + * Don't use this function if you are using the FreeType cache API. + */ FT_EXPORT( FT_Error ) FT_Request_Size( FT_Face face, FT_Size_Request req ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Char_Size */ - /* */ - /* <Description> */ - /* This function calls @FT_Request_Size to request the nominal size */ - /* (in points). */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object. */ - /* */ - /* <Input> */ - /* char_width :: The nominal width, in 26.6 fractional points. */ - /* */ - /* char_height :: The nominal height, in 26.6 fractional points. */ - /* */ - /* horz_resolution :: The horizontal resolution in dpi. */ - /* */ - /* vert_resolution :: The vertical resolution in dpi. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If either the character width or height is zero, it is set equal */ - /* to the other value. */ - /* */ - /* If either the horizontal or vertical resolution is zero, it is set */ - /* equal to the other value. */ - /* */ - /* A character width or height smaller than 1pt is set to 1pt; if */ - /* both resolution values are zero, they are set to 72dpi. */ - /* */ - /* Don't use this function if you are using the FreeType cache API. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Set_Char_Size + * + * @description: + * Call @FT_Request_Size to request the nominal size (in points). + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * char_width :: + * The nominal width, in 26.6 fractional points. + * + * char_height :: + * The nominal height, in 26.6 fractional points. + * + * horz_resolution :: + * The horizontal resolution in dpi. + * + * vert_resolution :: + * The vertical resolution in dpi. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * While this function allows fractional points as input values, the + * resulting ppem value for the given resolution is always rounded to the + * nearest integer. + * + * If either the character width or height is zero, it is set equal to + * the other value. + * + * If either the horizontal or vertical resolution is zero, it is set + * equal to the other value. + * + * A character width or height smaller than 1pt is set to 1pt; if both + * resolution values are zero, they are set to 72dpi. + * + * Don't use this function if you are using the FreeType cache API. + */ FT_EXPORT( FT_Error ) FT_Set_Char_Size( FT_Face face, FT_F26Dot6 char_width, @@ -2509,124 +3143,161 @@ FT_BEGIN_HEADER FT_UInt vert_resolution ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Pixel_Sizes */ - /* */ - /* <Description> */ - /* This function calls @FT_Request_Size to request the nominal size */ - /* (in pixels). */ - /* */ - /* <InOut> */ - /* face :: A handle to the target face object. */ - /* */ - /* <Input> */ - /* pixel_width :: The nominal width, in pixels. */ - /* */ - /* pixel_height :: The nominal height, in pixels. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You should not rely on the resulting glyphs matching, or being */ - /* constrained, to this pixel size. Refer to @FT_Request_Size to */ - /* understand how requested sizes relate to actual sizes. */ - /* */ - /* Don't use this function if you are using the FreeType cache API. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Set_Pixel_Sizes + * + * @description: + * Call @FT_Request_Size to request the nominal size (in pixels). + * + * @inout: + * face :: + * A handle to the target face object. + * + * @input: + * pixel_width :: + * The nominal width, in pixels. + * + * pixel_height :: + * The nominal height, in pixels. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should not rely on the resulting glyphs matching or being + * constrained to this pixel size. Refer to @FT_Request_Size to + * understand how requested sizes relate to actual sizes. + * + * Don't use this function if you are using the FreeType cache API. + */ FT_EXPORT( FT_Error ) FT_Set_Pixel_Sizes( FT_Face face, FT_UInt pixel_width, FT_UInt pixel_height ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Load_Glyph */ - /* */ - /* <Description> */ - /* A function used to load a single glyph into the glyph slot of a */ - /* face object. */ - /* */ - /* <InOut> */ - /* face :: A handle to the target face object where the glyph */ - /* is loaded. */ - /* */ - /* <Input> */ - /* glyph_index :: The index of the glyph in the font file. For */ - /* CID-keyed fonts (either in PS or in CFF format) */ - /* this argument specifies the CID value. */ - /* */ - /* load_flags :: A flag indicating what to load for this glyph. The */ - /* @FT_LOAD_XXX constants can be used to control the */ - /* glyph loading process (e.g., whether the outline */ - /* should be scaled, whether to load bitmaps or not, */ - /* whether to hint the outline, etc). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The loaded glyph may be transformed. See @FT_Set_Transform for */ - /* the details. */ - /* */ - /* For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is */ - /* returned for invalid CID values (this is, for CID values that */ - /* don't have a corresponding glyph in the font). See the discussion */ - /* of the @FT_FACE_FLAG_CID_KEYED flag for more details. */ - /* */ + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @function: + * FT_Load_Glyph + * + * @description: + * Load a glyph into the glyph slot of a face object. + * + * @inout: + * face :: + * A handle to the target face object where the glyph is loaded. + * + * @input: + * glyph_index :: + * The index of the glyph in the font file. For CID-keyed fonts + * (either in PS or in CFF format) this argument specifies the CID + * value. + * + * load_flags :: + * A flag indicating what to load for this glyph. The @FT_LOAD_XXX + * flags can be used to control the glyph loading process (e.g., + * whether the outline should be scaled, whether to load bitmaps or + * not, whether to hint the outline, etc). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * For proper scaling and hinting, the active @FT_Size object owned by + * the face has to be meaningfully initialized by calling + * @FT_Set_Char_Size before this function, for example. The loaded + * glyph may be transformed. See @FT_Set_Transform for the details. + * + * For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned + * for invalid CID values (that is, for CID values that don't have a + * corresponding glyph in the font). See the discussion of the + * @FT_FACE_FLAG_CID_KEYED flag for more details. + * + * If you receive `FT_Err_Glyph_Too_Big`, try getting the glyph outline + * at EM size, then scale it manually and fill it as a graphics + * operation. + */ FT_EXPORT( FT_Error ) FT_Load_Glyph( FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Load_Char */ - /* */ - /* <Description> */ - /* A function used to load a single glyph into the glyph slot of a */ - /* face object, according to its character code. */ - /* */ - /* <InOut> */ - /* face :: A handle to a target face object where the glyph */ - /* is loaded. */ - /* */ - /* <Input> */ - /* char_code :: The glyph's character code, according to the */ - /* current charmap used in the face. */ - /* */ - /* load_flags :: A flag indicating what to load for this glyph. The */ - /* @FT_LOAD_XXX constants can be used to control the */ - /* glyph loading process (e.g., whether the outline */ - /* should be scaled, whether to load bitmaps or not, */ - /* whether to hint the outline, etc). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. */ - /* */ + /************************************************************************** + * + * @section: + * character_mapping + * + */ + + /************************************************************************** + * + * @function: + * FT_Load_Char + * + * @description: + * Load a glyph into the glyph slot of a face object, accessed by its + * character code. + * + * @inout: + * face :: + * A handle to a target face object where the glyph is loaded. + * + * @input: + * char_code :: + * The glyph's character code, according to the current charmap used in + * the face. + * + * load_flags :: + * A flag indicating what to load for this glyph. The @FT_LOAD_XXX + * constants can be used to control the glyph loading process (e.g., + * whether the outline should be scaled, whether to load bitmaps or + * not, whether to hint the outline, etc). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. + * + * Many fonts contain glyphs that can't be loaded by this function since + * its glyph indices are not listed in any of the font's charmaps. + * + * If no active cmap is set up (i.e., `face->charmap` is zero), the call + * to @FT_Get_Char_Index is omitted, and the function behaves identically + * to @FT_Load_Glyph. + */ FT_EXPORT( FT_Error ) FT_Load_Char( FT_Face face, FT_ULong char_code, FT_Int32 load_flags ); - /************************************************************************* + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** * * @enum: * FT_LOAD_XXX * * @description: - * A list of bit field constants used with @FT_Load_Glyph to indicate - * what kind of operations to perform during glyph loading. + * A list of bit field constants for @FT_Load_Glyph to indicate what kind + * of operations to perform during glyph loading. * * @values: * FT_LOAD_DEFAULT :: @@ -2634,35 +3305,36 @@ FT_BEGIN_HEADER * operation. In this case, the following happens: * * 1. FreeType looks for a bitmap for the glyph corresponding to the - * face's current size. If one is found, the function returns. - * The bitmap data can be accessed from the glyph slot (see note - * below). + * face's current size. If one is found, the function returns. The + * bitmap data can be accessed from the glyph slot (see note below). * - * 2. If no embedded bitmap is searched or found, FreeType looks for a - * scalable outline. If one is found, it is loaded from the font - * file, scaled to device pixels, then `hinted' to the pixel grid - * in order to optimize it. The outline data can be accessed from - * the glyph slot (see note below). + * 2. If no embedded bitmap is searched for or found, FreeType looks + * for a scalable outline. If one is found, it is loaded from the font + * file, scaled to device pixels, then 'hinted' to the pixel grid in + * order to optimize it. The outline data can be accessed from the + * glyph slot (see note below). * - * Note that by default, the glyph loader doesn't render outlines into + * Note that by default the glyph loader doesn't render outlines into * bitmaps. The following flags are used to modify this default * behaviour to more specific and useful cases. * * FT_LOAD_NO_SCALE :: * Don't scale the loaded outline glyph but keep it in font units. + * This flag is also assumed if @FT_Size owned by the face was not + * properly initialized. * * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and * unsets @FT_LOAD_RENDER. * - * If the font is `tricky' (see @FT_FACE_FLAG_TRICKY for more), using - * FT_LOAD_NO_SCALE usually yields meaningless outlines because the + * If the font is 'tricky' (see @FT_FACE_FLAG_TRICKY for more), using + * `FT_LOAD_NO_SCALE` usually yields meaningless outlines because the * subglyphs must be scaled and positioned with hinting instructions. - * This can be solved by loading the font without FT_LOAD_NO_SCALE and - * setting the character size to `font->units_per_EM'. + * This can be solved by loading the font without `FT_LOAD_NO_SCALE` + * and setting the character size to `font->units_per_EM`. * * FT_LOAD_NO_HINTING :: - * Disable hinting. This generally generates `blurrier' bitmap glyphs - * when the glyph are rendered in any of the anti-aliased modes. See + * Disable hinting. This generally generates 'blurrier' bitmap glyphs + * when the glyphs are rendered in any of the anti-aliased modes. See * also the note below. * * This flag is implied by @FT_LOAD_NO_SCALE. @@ -2680,42 +3352,53 @@ FT_BEGIN_HEADER * * @FT_LOAD_NO_SCALE always sets this flag. * + * FT_LOAD_SBITS_ONLY :: + * [Since 2.12] This is the opposite of @FT_LOAD_NO_BITMAP, more or + * less: @FT_Load_Glyph returns `FT_Err_Invalid_Argument` if the face + * contains a bitmap strike for the given size (or the strike selected + * by @FT_Select_Size) but there is no glyph in the strike. + * + * Note that this load flag was part of FreeType since version 2.0.6 + * but previously tagged as internal. + * * FT_LOAD_VERTICAL_LAYOUT :: * Load the glyph for vertical text layout. In particular, the - * `advance' value in the @FT_GlyphSlotRec structure is set to the - * `vertAdvance' value of the `metrics' field. + * `advance` value in the @FT_GlyphSlotRec structure is set to the + * `vertAdvance` value of the `metrics` field. * - * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use - * this flag currently. Reason is that in this case vertical metrics - * get synthesized, and those values are not always consistent across + * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use this + * flag currently. Reason is that in this case vertical metrics get + * synthesized, and those values are not always consistent across * various font formats. * * FT_LOAD_FORCE_AUTOHINT :: - * Indicates that the auto-hinter is preferred over the font's native - * hinter. See also the note below. + * Prefer the auto-hinter over the font's native hinter. See also the + * note below. * * FT_LOAD_PEDANTIC :: - * Indicates that the font driver should perform pedantic verifications - * during glyph loading. This is mostly used to detect broken glyphs - * in fonts. By default, FreeType tries to handle broken fonts also. + * Make the font driver perform pedantic verifications during glyph + * loading and hinting. This is mostly used to detect broken glyphs in + * fonts. By default, FreeType tries to handle broken fonts also. * * In particular, errors from the TrueType bytecode engine are not - * passed to the application if this flag is not set; this might - * result in partially hinted or distorted glyphs in case a glyph's - * bytecode is buggy. + * passed to the application if this flag is not set; this might result + * in partially hinted or distorted glyphs in case a glyph's bytecode + * is buggy. * * FT_LOAD_NO_RECURSE :: - * Indicate that the font driver should not load composite glyphs - * recursively. Instead, it should set the `num_subglyph' and - * `subglyphs' values of the glyph slot accordingly, and set - * `glyph->format' to @FT_GLYPH_FORMAT_COMPOSITE. The description of - * subglyphs can then be accessed with @FT_Get_SubGlyph_Info. + * Don't load composite glyphs recursively. Instead, the font driver + * fills the `num_subglyph` and `subglyphs` values of the glyph slot; + * it also sets `glyph->format` to @FT_GLYPH_FORMAT_COMPOSITE. The + * description of subglyphs can then be accessed with + * @FT_Get_SubGlyph_Info. + * + * Don't use this flag for retrieving metrics information since some + * font drivers only return rudimentary data. * * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM. * * FT_LOAD_IGNORE_TRANSFORM :: - * Indicates that the transform matrix set by @FT_Set_Transform should - * be ignored. + * Ignore the transform matrix set by @FT_Set_Transform. * * FT_LOAD_MONOCHROME :: * This flag is used with @FT_LOAD_RENDER to indicate that you want to @@ -2727,31 +3410,63 @@ FT_BEGIN_HEADER * monochrome-optimized hinting algorithm is used. * * FT_LOAD_LINEAR_DESIGN :: - * Indicates that the `linearHoriAdvance' and `linearVertAdvance' - * fields of @FT_GlyphSlotRec should be kept in font units. See - * @FT_GlyphSlotRec for details. + * Keep `linearHoriAdvance` and `linearVertAdvance` fields of + * @FT_GlyphSlotRec in font units. See @FT_GlyphSlotRec for details. * * FT_LOAD_NO_AUTOHINT :: - * Disable auto-hinter. See also the note below. + * Disable the auto-hinter. See also the note below. * * FT_LOAD_COLOR :: - * This flag is used to request loading of color embedded-bitmap - * images. The resulting color bitmaps, if available, will have the - * @FT_PIXEL_MODE_BGRA format. When the flag is not used and color - * bitmaps are found, they will be converted to 256-level gray - * bitmaps transparently. Those bitmaps will be in the + * Load colored glyphs. FreeType searches in the following order; + * there are slight differences depending on the font format. + * + * [Since 2.5] Load embedded color bitmap images (provided + * @FT_LOAD_NO_BITMAP is not set). The resulting color bitmaps, if + * available, have the @FT_PIXEL_MODE_BGRA format, with pre-multiplied + * color channels. If the flag is not set and color bitmaps are found, + * they are converted to 256-level gray bitmaps, using the * @FT_PIXEL_MODE_GRAY format. * + * [Since 2.12] If the glyph index maps to an entry in the face's + * 'SVG~' table, load the associated SVG document from this table and + * set the `format` field of @FT_GlyphSlotRec to @FT_GLYPH_FORMAT_SVG + * ([since 2.13.1] provided @FT_LOAD_NO_SVG is not set). Note that + * FreeType itself can't render SVG documents; however, the library + * provides hooks to seamlessly integrate an external renderer. See + * sections @ot_svg_driver and @svg_fonts for more. + * + * [Since 2.10, experimental] If the glyph index maps to an entry in + * the face's 'COLR' table with a 'CPAL' palette table (as defined in + * the OpenType specification), make @FT_Render_Glyph provide a default + * blending of the color glyph layers associated with the glyph index, + * using the same bitmap format as embedded color bitmap images. This + * is mainly for convenience and works only for glyphs in 'COLR' v0 + * tables (or glyphs in 'COLR' v1 tables that exclusively use v0 + * features). For full control of color layers use + * @FT_Get_Color_Glyph_Layer and FreeType's color functions like + * @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering + * so that the client application can handle blending by itself. + * + * FT_LOAD_NO_SVG :: + * [Since 2.13.1] Ignore SVG glyph data when loading. + * * FT_LOAD_COMPUTE_METRICS :: - * This flag sets computing glyph metrics without the use of bundled - * metrics tables (for example, the `hdmx' table in TrueType fonts). - * Well-behaving fonts have optimized bundled metrics and these should - * be used. This flag is mainly used by font validating or font - * editing applications, which need to ignore, verify, or edit those - * tables. + * [Since 2.6.1] Compute glyph metrics from the glyph data, without the + * use of bundled metrics tables (for example, the 'hdmx' table in + * TrueType fonts). This flag is mainly used by font validating or + * font editing applications, which need to ignore, verify, or edit + * those tables. * * Currently, this flag is only implemented for TrueType fonts. * + * FT_LOAD_BITMAP_METRICS_ONLY :: + * [Since 2.7.1] Request loading of the metrics and bitmap image + * information of a (possibly embedded) bitmap glyph without allocating + * or copying the bitmap image data itself. No effect if the target + * glyph is not a bitmap image. + * + * This flag unsets @FT_LOAD_RENDER. + * * FT_LOAD_CROP_BITMAP :: * Ignored. Deprecated. * @@ -2763,8 +3478,8 @@ FT_BEGIN_HEADER * @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can * disable hinting by setting @FT_LOAD_NO_HINTING or change the * precedence by setting @FT_LOAD_FORCE_AUTOHINT. You can also set - * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be - * used at all. + * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be used + * at all. * * See the description of @FT_FACE_FLAG_TRICKY for a special exception * (affecting only a handful of Asian fonts). @@ -2775,35 +3490,38 @@ FT_BEGIN_HEADER * Note that the auto-hinter needs a valid Unicode cmap (either a native * one or synthesized by FreeType) for producing correct results. If a * font provides an incorrect mapping (for example, assigning the - * character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a + * character code U+005A, LATIN CAPITAL LETTER~Z, to a glyph depicting a * mathematical integral sign), the auto-hinter might produce useless * results. * */ #define FT_LOAD_DEFAULT 0x0 -#define FT_LOAD_NO_SCALE ( 1L << 0 ) -#define FT_LOAD_NO_HINTING ( 1L << 1 ) -#define FT_LOAD_RENDER ( 1L << 2 ) -#define FT_LOAD_NO_BITMAP ( 1L << 3 ) -#define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 ) -#define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 ) -#define FT_LOAD_CROP_BITMAP ( 1L << 6 ) -#define FT_LOAD_PEDANTIC ( 1L << 7 ) -#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 ) +#define FT_LOAD_NO_SCALE ( 1L << 0 ) +#define FT_LOAD_NO_HINTING ( 1L << 1 ) +#define FT_LOAD_RENDER ( 1L << 2 ) +#define FT_LOAD_NO_BITMAP ( 1L << 3 ) +#define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 ) +#define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 ) +#define FT_LOAD_CROP_BITMAP ( 1L << 6 ) +#define FT_LOAD_PEDANTIC ( 1L << 7 ) +#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 ) #define FT_LOAD_NO_RECURSE ( 1L << 10 ) #define FT_LOAD_IGNORE_TRANSFORM ( 1L << 11 ) #define FT_LOAD_MONOCHROME ( 1L << 12 ) #define FT_LOAD_LINEAR_DESIGN ( 1L << 13 ) +#define FT_LOAD_SBITS_ONLY ( 1L << 14 ) #define FT_LOAD_NO_AUTOHINT ( 1L << 15 ) - /* Bits 16..19 are used by `FT_LOAD_TARGET_' */ + /* Bits 16-19 are used by `FT_LOAD_TARGET_` */ #define FT_LOAD_COLOR ( 1L << 20 ) #define FT_LOAD_COMPUTE_METRICS ( 1L << 21 ) +#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 ) +#define FT_LOAD_NO_SVG ( 1L << 24 ) /* */ - /* used internally only by certain font drivers! */ -#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 ) -#define FT_LOAD_SBITS_ONLY ( 1L << 14 ) + /* used internally only by certain font drivers */ +#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 ) +#define FT_LOAD_SVG_ONLY ( 1L << 23 ) /************************************************************************** @@ -2812,37 +3530,52 @@ FT_BEGIN_HEADER * FT_LOAD_TARGET_XXX * * @description: - * A list of values that are used to select a specific hinting algorithm - * to use by the hinter. You should OR one of these values to your - * `load_flags' when calling @FT_Load_Glyph. + * A list of values to select a specific hinting algorithm for the + * hinter. You should OR one of these values to your `load_flags` when + * calling @FT_Load_Glyph. * - * Note that font's native hinters may ignore the hinting algorithm you + * Note that a font's native hinters may ignore the hinting algorithm you * have specified (e.g., the TrueType bytecode interpreter). You can set * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used. * * @values: * FT_LOAD_TARGET_NORMAL :: - * This corresponds to the default hinting algorithm, optimized for - * standard gray-level rendering. For monochrome output, use - * @FT_LOAD_TARGET_MONO instead. + * The default hinting algorithm, optimized for standard gray-level + * rendering. For monochrome output, use @FT_LOAD_TARGET_MONO instead. * * FT_LOAD_TARGET_LIGHT :: * A lighter hinting algorithm for gray-level modes. Many generated * glyphs are fuzzier but better resemble their original shape. This * is achieved by snapping glyphs to the pixel grid only vertically - * (Y-axis), as is done by Microsoft's ClearType and Adobe's - * proprietary font renderer. This preserves inter-glyph spacing in + * (Y-axis), as is done by FreeType's new CFF engine or Microsoft's + * ClearType font renderer. This preserves inter-glyph spacing in * horizontal text. The snapping is done either by the native font - * driver if the driver itself and the font support it or by the + * driver, if the driver itself and the font support it, or by the * auto-hinter. * + * Advance widths are rounded to integer values; however, using the + * `lsb_delta` and `rsb_delta` fields of @FT_GlyphSlotRec, it is + * possible to get fractional advance widths for subpixel positioning + * (which is recommended to use). + * + * If configuration option `AF_CONFIG_OPTION_TT_SIZE_METRICS` is + * active, TrueType-like metrics are used to make this mode behave + * similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1 + * (inclusive). + * * FT_LOAD_TARGET_MONO :: * Strong hinting algorithm that should only be used for monochrome * output. The result is probably unpleasant if the glyph is rendered * in non-monochrome modes. * + * Note that for outline fonts only the TrueType font driver has proper + * monochrome hinting support, provided the TTFs contain hints for B/W + * rendering (which most fonts no longer provide). If these conditions + * are not met it is very likely that you get ugly results at smaller + * sizes. + * * FT_LOAD_TARGET_LCD :: - * A variant of @FT_LOAD_TARGET_NORMAL optimized for horizontally + * A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally * decimated LCD displays. * * FT_LOAD_TARGET_LCD_V :: @@ -2850,28 +3583,35 @@ FT_BEGIN_HEADER * decimated LCD displays. * * @note: - * You should use only _one_ of the FT_LOAD_TARGET_XXX values in your - * `load_flags'. They can't be ORed. + * You should use only _one_ of the `FT_LOAD_TARGET_XXX` values in your + * `load_flags`. They can't be ORed. * * If @FT_LOAD_RENDER is also set, the glyph is rendered in the * corresponding mode (i.e., the mode that matches the used algorithm - * best). An exeption is FT_LOAD_TARGET_MONO since it implies + * best). An exception is `FT_LOAD_TARGET_MONO` since it implies * @FT_LOAD_MONOCHROME. * * You can use a hinting algorithm that doesn't correspond to the same - * rendering mode. As an example, it is possible to use the `light' + * rendering mode. As an example, it is possible to use the 'light' * hinting algorithm and have the results rendered in horizontal LCD * pixel mode, with code like * - * { - * FT_Load_Glyph( face, glyph_index, - * load_flags | FT_LOAD_TARGET_LIGHT ); + * ``` + * FT_Load_Glyph( face, glyph_index, + * load_flags | FT_LOAD_TARGET_LIGHT ); * - * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD ); - * } + * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD ); + * ``` + * + * In general, you should stick with one rendering mode. For example, + * switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO + * enforces a lot of recomputation for TrueType fonts, which is slow. + * Another reason is caching: Selecting a different mode usually causes + * changes in both the outlines and the rasterized bitmaps; it is thus + * necessary to empty the cache after a mode switch to avoid false hits. * */ -#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 ) +#define FT_LOAD_TARGET_( x ) ( FT_STATIC_CAST( FT_Int32, (x) & 15 ) << 16 ) #define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL ) #define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT ) @@ -2890,101 +3630,160 @@ FT_BEGIN_HEADER * @FT_LOAD_TARGET_XXX value. * */ -#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) ) +#define FT_LOAD_TARGET_MODE( x ) \ + FT_STATIC_CAST( FT_Render_Mode, ( (x) >> 16 ) & 15 ) - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Transform */ - /* */ - /* <Description> */ - /* A function used to set the transformation that is applied to glyph */ - /* images when they are loaded into a glyph slot through */ - /* @FT_Load_Glyph. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the transformation's 2x2 matrix. Use~0 for */ - /* the identity matrix. */ - /* delta :: A pointer to the translation vector. Use~0 for the null */ - /* vector. */ - /* */ - /* <Note> */ - /* The transformation is only applied to scalable image formats after */ - /* the glyph has been loaded. It means that hinting is unaltered by */ - /* the transformation and is performed on the character size given in */ - /* the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. */ - /* */ - /* Note that this also transforms the `face.glyph.advance' field, but */ - /* *not* the values in `face.glyph.metrics'. */ - /* */ + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @function: + * FT_Set_Transform + * + * @description: + * Set the transformation that is applied to glyph images when they are + * loaded into a glyph slot through @FT_Load_Glyph. + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * matrix :: + * A pointer to the transformation's 2x2 matrix. Use `NULL` for the + * identity matrix. + * delta :: + * A pointer to the translation vector. Use `NULL` for the null + * vector. + * + * @note: + * 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 + * last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. + * + * Note that this also transforms the `face.glyph.advance` field, but + * **not** the values in `face.glyph.metrics`. + */ FT_EXPORT( void ) FT_Set_Transform( FT_Face face, FT_Matrix* matrix, FT_Vector* delta ); - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Render_Mode */ - /* */ - /* <Description> */ - /* An enumeration type that lists the render modes supported by */ - /* FreeType~2. Each mode corresponds to a specific type of scanline */ - /* conversion performed on the outline. */ - /* */ - /* For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode' */ - /* field in the @FT_GlyphSlotRec structure gives the format of the */ - /* returned bitmap. */ - /* */ - /* All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, */ - /* indicating pixel coverage. Use linear alpha blending and gamma */ - /* correction to correctly render non-monochrome glyph bitmaps onto a */ - /* surface; see @FT_Render_Glyph. */ - /* */ - /* <Values> */ - /* FT_RENDER_MODE_NORMAL :: */ - /* This is the default render mode; it corresponds to 8-bit */ - /* anti-aliased bitmaps. */ - /* */ - /* FT_RENDER_MODE_LIGHT :: */ - /* This is equivalent to @FT_RENDER_MODE_NORMAL. It is only */ - /* defined as a separate value because render modes are also used */ - /* indirectly to define hinting algorithm selectors. See */ - /* @FT_LOAD_TARGET_XXX for details. */ - /* */ - /* FT_RENDER_MODE_MONO :: */ - /* This mode corresponds to 1-bit bitmaps (with 2~levels of */ - /* opacity). */ - /* */ - /* FT_RENDER_MODE_LCD :: */ - /* This mode corresponds to horizontal RGB and BGR sub-pixel */ - /* displays like LCD screens. It produces 8-bit bitmaps that are */ - /* 3~times the width of the original glyph outline in pixels, and */ - /* which use the @FT_PIXEL_MODE_LCD mode. */ - /* */ - /* FT_RENDER_MODE_LCD_V :: */ - /* This mode corresponds to vertical RGB and BGR sub-pixel displays */ - /* (like PDA screens, rotated LCD displays, etc.). It produces */ - /* 8-bit bitmaps that are 3~times the height of the original */ - /* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */ - /* */ - /* <Note> */ - /* The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be */ - /* filtered to reduce color-fringes by using @FT_Library_SetLcdFilter */ - /* (not active in the default builds). It is up to the caller to */ - /* either call @FT_Library_SetLcdFilter (if available) or do the */ - /* filtering itself. */ - /* */ - /* The selected render mode only affects vector glyphs of a font. */ - /* Embedded bitmaps often have a different pixel mode like */ - /* @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform */ - /* them into 8-bit pixmaps. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Transform + * + * @description: + * Return the transformation that is applied to glyph images when they + * are loaded into a glyph slot through @FT_Load_Glyph. See + * @FT_Set_Transform for more details. + * + * @input: + * face :: + * A handle to the source face object. + * + * @output: + * matrix :: + * A pointer to a transformation's 2x2 matrix. Set this to NULL if you + * are not interested in the value. + * + * delta :: + * A pointer to a translation vector. Set this to NULL if you are not + * interested in the value. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Get_Transform( FT_Face face, + FT_Matrix* matrix, + FT_Vector* delta ); + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @enum: + * FT_Render_Mode + * + * @description: + * Render modes supported by FreeType~2. Each mode corresponds to a + * specific type of scanline conversion performed on the outline. + * + * For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode` field + * in the @FT_GlyphSlotRec structure gives the format of the returned + * bitmap. + * + * All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, + * indicating pixel coverage. Use linear alpha blending and gamma + * correction to correctly render non-monochrome glyph bitmaps onto a + * surface; see @FT_Render_Glyph. + * + * The @FT_RENDER_MODE_SDF is a special render mode that uses up to 256 + * distance values, indicating the signed distance from the grid position + * to the nearest outline. + * + * @values: + * FT_RENDER_MODE_NORMAL :: + * Default render mode; it corresponds to 8-bit anti-aliased bitmaps. + * + * FT_RENDER_MODE_LIGHT :: + * This is equivalent to @FT_RENDER_MODE_NORMAL. It is only defined as + * a separate value because render modes are also used indirectly to + * define hinting algorithm selectors. See @FT_LOAD_TARGET_XXX for + * details. + * + * FT_RENDER_MODE_MONO :: + * This mode corresponds to 1-bit bitmaps (with 2~levels of opacity). + * + * FT_RENDER_MODE_LCD :: + * This mode corresponds to horizontal RGB and BGR subpixel displays + * like LCD screens. It produces 8-bit bitmaps that are 3~times the + * width of the original glyph outline in pixels, and which use the + * @FT_PIXEL_MODE_LCD mode. + * + * FT_RENDER_MODE_LCD_V :: + * This mode corresponds to vertical RGB and BGR subpixel displays + * (like PDA screens, rotated LCD displays, etc.). It produces 8-bit + * bitmaps that are 3~times the height of the original glyph outline in + * pixels and use the @FT_PIXEL_MODE_LCD_V mode. + * + * FT_RENDER_MODE_SDF :: + * The positive (unsigned) 8-bit bitmap values can be converted to the + * single-channel signed distance field (SDF) by subtracting 128, with + * the positive and negative results corresponding to the inside and + * the outside of a glyph contour, respectively. The distance units are + * arbitrarily determined by an adjustable @spread property. + * + * @note: + * The selected render mode only affects scalable vector glyphs of a font. + * Embedded bitmaps often have a different pixel mode like + * @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform them + * into 8-bit pixmaps. + * + */ typedef enum FT_Render_Mode_ { FT_RENDER_MODE_NORMAL = 0, @@ -2992,6 +3791,7 @@ FT_BEGIN_HEADER FT_RENDER_MODE_MONO, FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V, + FT_RENDER_MODE_SDF, FT_RENDER_MODE_MAX @@ -2999,148 +3799,150 @@ FT_BEGIN_HEADER /* these constants are deprecated; use the corresponding */ - /* `FT_Render_Mode' values instead */ + /* `FT_Render_Mode` values instead */ #define ft_render_mode_normal FT_RENDER_MODE_NORMAL #define ft_render_mode_mono FT_RENDER_MODE_MONO - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Render_Glyph */ - /* */ - /* <Description> */ - /* Convert a given glyph image to a bitmap. It does so by inspecting */ - /* the glyph image format, finding the relevant renderer, and */ - /* invoking it. */ - /* */ - /* <InOut> */ - /* slot :: A handle to the glyph slot containing the image to */ - /* convert. */ - /* */ - /* <Input> */ - /* render_mode :: This is the render mode used to render the glyph */ - /* image into a bitmap. See @FT_Render_Mode for a */ - /* list of possible values. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* To get meaningful results, font scaling values must be set with */ - /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */ - /* */ - /* When FreeType outputs a bitmap of a glyph, it really outputs an */ - /* alpha coverage map. If a pixel is completely covered by a */ - /* filled-in outline, the bitmap contains 0xFF at that pixel, meaning */ - /* that 0xFF/0xFF fraction of that pixel is covered, meaning the */ - /* pixel is 100% black (or 0% bright). If a pixel is only 50% */ - /* covered (value 0x80), the pixel is made 50% black (50% bright or a */ - /* middle shade of grey). 0% covered means 0% black (100% bright or */ - /* white). */ - /* */ - /* On high-DPI screens like on smartphones and tablets, the pixels */ - /* are so small that their chance of being completely covered and */ - /* therefore completely black are fairly good. On the low-DPI */ - /* screens, however, the situation is different. The pixels are too */ - /* large for most of the details of a glyph and shades of gray are */ - /* the norm rather than the exception. */ - /* */ - /* This is relevant because all our screens have a second problem: */ - /* they are not linear. 1~+~1 is not~2. Twice the value does not */ - /* result in twice the brightness. When a pixel is only 50% covered, */ - /* the coverage map says 50% black, and this translates to a pixel */ - /* value of 128 when you use 8~bits per channel (0-255). However, */ - /* this does not translate to 50% brightness for that pixel on our */ - /* sRGB and gamma~2.2 screens. Due to their non-linearity, they */ - /* dwell longer in the darks and only a pixel value of about 186 */ - /* results in 50% brightness – 128 ends up too dark on both bright */ - /* and dark backgrounds. The net result is that dark text looks */ - /* burnt-out, pixely and blotchy on bright background, bright text */ - /* too frail on dark backgrounds, and colored text on colored */ - /* background (for example, red on green) seems to have dark halos or */ - /* `dirt' around it. The situation is especially ugly for diagonal */ - /* stems like in `w' glyph shapes where the quality of FreeType's */ - /* anti-aliasing depends on the correct display of grays. On */ - /* high-DPI screens where smaller, fully black pixels reign supreme, */ - /* this doesn't matter, but on our low-DPI screens with all the gray */ - /* shades, it does. 0% and 100% brightness are the same things in */ - /* linear and non-linear space, just all the shades in-between */ - /* aren't. */ - /* */ - /* The blending function for placing text over a background is */ - /* */ - /* { */ - /* dst = alpha * src + (1 - alpha) * dst , */ - /* } */ - /* */ - /* which is known as the OVER operator. */ - /* */ - /* To correctly composite an antialiased pixel of a glyph onto a */ - /* surface, */ - /* */ - /* 1. take the foreground and background colors (e.g., in sRGB space) */ - /* and apply gamma to get them in a linear space, */ - /* */ - /* 2. use OVER to blend the two linear colors using the glyph pixel */ - /* as the alpha value (remember, the glyph bitmap is an alpha */ - /* coverage bitmap), and */ - /* */ - /* 3. apply inverse gamma to the blended pixel and write it back to */ - /* the image. */ - /* */ - /* Internal testing at Adobe found that a target inverse gamma of~1.8 */ - /* for step~3 gives good results across a wide range of displays with */ - /* an sRGB gamma curve or a similar one. */ - /* */ - /* This process can cost performance. There is an approximation that */ - /* does not need to know about the background color; see */ - /* https://bel.fi/alankila/lcd/ and */ - /* https://bel.fi/alankila/lcd/alpcor.html for details. */ - /* */ - /* *ATTENTION*: Linear blending is even more important when dealing */ - /* with subpixel-rendered glyphs to prevent color-fringing! A */ - /* subpixel-rendered glyph must first be filtered with a filter that */ - /* gives equal weight to the three color primaries and does not */ - /* exceed a sum of 0x100, see section @lcd_filtering. Then the */ - /* only difference to gray linear blending is that subpixel-rendered */ - /* linear blending is done 3~times per pixel: red foreground subpixel */ - /* to red background subpixel and so on for green and blue. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Render_Glyph + * + * @description: + * Convert a given glyph image to a bitmap. It does so by inspecting the + * glyph image format, finding the relevant renderer, and invoking it. + * + * @inout: + * slot :: + * A handle to the glyph slot containing the image to convert. + * + * @input: + * render_mode :: + * The render mode used to render the glyph image into a bitmap. See + * @FT_Render_Mode for a list of possible values. + * + * If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph + * with flag @FT_LOAD_COLOR makes `FT_Render_Glyph` provide a default + * blending of colored glyph layers associated with the current glyph + * slot (provided the font contains such layers) instead of rendering + * the glyph slot's outline. This is an experimental feature; see + * @FT_LOAD_COLOR for more information. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * When FreeType outputs a bitmap of a glyph, it really outputs an alpha + * coverage map. If a pixel is completely covered by a filled-in + * outline, the bitmap contains 0xFF at that pixel, meaning that + * 0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100% + * black (or 0% bright). If a pixel is only 50% covered (value 0x80), + * the pixel is made 50% black (50% bright or a middle shade of grey). + * 0% covered means 0% black (100% bright or white). + * + * On high-DPI screens like on smartphones and tablets, the pixels are so + * small that their chance of being completely covered and therefore + * completely black are fairly good. On the low-DPI screens, however, + * the situation is different. The pixels are too large for most of the + * details of a glyph and shades of gray are the norm rather than the + * exception. + * + * This is relevant because all our screens have a second problem: they + * are not linear. 1~+~1 is not~2. Twice the value does not result in + * twice the brightness. When a pixel is only 50% covered, the coverage + * map says 50% black, and this translates to a pixel value of 128 when + * you use 8~bits per channel (0-255). However, this does not translate + * to 50% brightness for that pixel on our sRGB and gamma~2.2 screens. + * Due to their non-linearity, they dwell longer in the darks and only a + * pixel value of about 186 results in 50% brightness -- 128 ends up too + * dark on both bright and dark backgrounds. The net result is that dark + * text looks burnt-out, pixely and blotchy on bright background, bright + * text too frail on dark backgrounds, and colored text on colored + * background (for example, red on green) seems to have dark halos or + * 'dirt' around it. The situation is especially ugly for diagonal stems + * like in 'w' glyph shapes where the quality of FreeType's anti-aliasing + * depends on the correct display of grays. On high-DPI screens where + * smaller, fully black pixels reign supreme, this doesn't matter, but on + * our low-DPI screens with all the gray shades, it does. 0% and 100% + * brightness are the same things in linear and non-linear space, just + * all the shades in-between aren't. + * + * The blending function for placing text over a background is + * + * ``` + * dst = alpha * src + (1 - alpha) * dst , + * ``` + * + * which is known as the OVER operator. + * + * To correctly composite an anti-aliased pixel of a glyph onto a + * surface, + * + * 1. take the foreground and background colors (e.g., in sRGB space) + * and apply gamma to get them in a linear space, + * + * 2. use OVER to blend the two linear colors using the glyph pixel + * as the alpha value (remember, the glyph bitmap is an alpha coverage + * bitmap), and + * + * 3. apply inverse gamma to the blended pixel and write it back to + * the image. + * + * Internal testing at Adobe found that a target inverse gamma of~1.8 for + * step~3 gives good results across a wide range of displays with an sRGB + * gamma curve or a similar one. + * + * This process can cost performance. There is an approximation that + * does not need to know about the background color; see + * https://bel.fi/alankila/lcd/ and + * https://bel.fi/alankila/lcd/alpcor.html for details. + * + * **ATTENTION**: Linear blending is even more important when dealing + * with subpixel-rendered glyphs to prevent color-fringing! A + * subpixel-rendered glyph must first be filtered with a filter that + * gives equal weight to the three color primaries and does not exceed a + * sum of 0x100, see section @lcd_rendering. Then the only difference to + * gray linear blending is that subpixel-rendered linear blending is done + * 3~times per pixel: red foreground subpixel to red background subpixel + * and so on for green and blue. + */ FT_EXPORT( FT_Error ) FT_Render_Glyph( FT_GlyphSlot slot, FT_Render_Mode render_mode ); - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Kerning_Mode */ - /* */ - /* <Description> */ - /* An enumeration used to specify which kerning values to return in */ - /* @FT_Get_Kerning. */ - /* */ - /* <Values> */ - /* FT_KERNING_DEFAULT :: Return grid-fitted kerning distances in */ - /* pixels (value is~0). Whether they are */ - /* scaled depends on @FT_LOAD_NO_SCALE. */ - /* */ - /* FT_KERNING_UNFITTED :: Return un-grid-fitted kerning distances in */ - /* 26.6 fractional pixels. Whether they are */ - /* scaled depends on @FT_LOAD_NO_SCALE. */ - /* */ - /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */ - /* units. */ - /* */ - /* <Note> */ - /* FT_KERNING_DEFAULT returns full pixel values; it also makes */ - /* FreeType heuristically scale down kerning distances at small ppem */ - /* values so that they don't become too big. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_Kerning_Mode + * + * @description: + * An enumeration to specify the format of kerning values returned by + * @FT_Get_Kerning. + * + * @values: + * FT_KERNING_DEFAULT :: + * Return grid-fitted kerning distances in 26.6 fractional pixels. + * + * FT_KERNING_UNFITTED :: + * Return un-grid-fitted kerning distances in 26.6 fractional pixels. + * + * FT_KERNING_UNSCALED :: + * Return the kerning vector in original font units. + * + * @note: + * `FT_KERNING_DEFAULT` returns full pixel values; it also makes FreeType + * heuristically scale down kerning distances at small ppem values so + * that they don't become too big. + * + * Both `FT_KERNING_DEFAULT` and `FT_KERNING_UNFITTED` use the current + * horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to + * convert font units to pixels. + */ typedef enum FT_Kerning_Mode_ { - FT_KERNING_DEFAULT = 0, + FT_KERNING_DEFAULT = 0, FT_KERNING_UNFITTED, FT_KERNING_UNSCALED @@ -3148,46 +3950,70 @@ FT_BEGIN_HEADER /* these constants are deprecated; use the corresponding */ - /* `FT_Kerning_Mode' values instead */ + /* `FT_Kerning_Mode` values instead */ #define ft_kerning_default FT_KERNING_DEFAULT #define ft_kerning_unfitted FT_KERNING_UNFITTED #define ft_kerning_unscaled FT_KERNING_UNSCALED - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Kerning */ - /* */ - /* <Description> */ - /* Return the kerning vector between two glyphs of a same face. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* left_glyph :: The index of the left glyph in the kern pair. */ - /* */ - /* right_glyph :: The index of the right glyph in the kern pair. */ - /* */ - /* kern_mode :: See @FT_Kerning_Mode for more information. */ - /* Determines the scale and dimension of the returned */ - /* kerning vector. */ - /* */ - /* <Output> */ - /* akerning :: The kerning vector. This is either in font units, */ - /* fractional pixels (26.6 format), or pixels for */ - /* scalable formats, and in pixels for fixed-sizes */ - /* formats. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Only horizontal layouts (left-to-right & right-to-left) are */ - /* supported by this method. Other layouts, or more sophisticated */ - /* kernings, are out of the scope of this API function -- they can be */ - /* implemented through format-specific interfaces. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Kerning + * + * @description: + * Return the kerning vector between two glyphs of the same face. + * + * @input: + * face :: + * A handle to a source face object. + * + * left_glyph :: + * The index of the left glyph in the kern pair. + * + * right_glyph :: + * The index of the right glyph in the kern pair. + * + * kern_mode :: + * See @FT_Kerning_Mode for more information. Determines the scale and + * dimension of the returned kerning vector. + * + * @output: + * akerning :: + * The kerning vector. This is either in font units, fractional pixels + * (26.6 format), or pixels for scalable formats, and in pixels for + * fixed-sizes formats. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Only horizontal layouts (left-to-right & right-to-left) are supported + * by this method. Other layouts, or more sophisticated kernings, are + * out of the scope of this API function -- they can be implemented + * through format-specific interfaces. + * + * Note that, for TrueType fonts only, this can extract data from both + * the 'kern' table and the basic, pair-wise kerning feature from the + * GPOS table (with `TT_CONFIG_OPTION_GPOS_KERNING` enabled), though + * FreeType does not support the more advanced GPOS layout features; use + * a library like HarfBuzz for those instead. If a font has both a + * 'kern' table and kern features of a GPOS table, the 'kern' table will + * be used. + * + * Also note for right-to-left scripts, the functionality may differ for + * fonts with GPOS tables vs. 'kern' tables. For GPOS, right-to-left + * fonts typically use both a placement offset and an advance for pair + * positioning, which this API does not support, so it would output + * kerning values of zero; though if the right-to-left font used only + * advances in GPOS pair positioning, then this API could output kerning + * values for it, but it would use `left_glyph` to mean the first glyph + * for that case. Whereas 'kern' tables are always advance-only and + * always store the left glyph first. + * + * Use @FT_HAS_KERNING to find out whether a font has data that can be + * extracted with `FT_Get_Kerning`. + */ FT_EXPORT( FT_Error ) FT_Get_Kerning( FT_Face face, FT_UInt left_glyph, @@ -3196,39 +4022,42 @@ FT_BEGIN_HEADER FT_Vector *akerning ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Track_Kerning */ - /* */ - /* <Description> */ - /* Return the track kerning for a given face object at a given size. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* point_size :: The point size in 16.16 fractional points. */ - /* */ - /* degree :: The degree of tightness. Increasingly negative */ - /* values represent tighter track kerning, while */ - /* increasingly positive values represent looser track */ - /* kerning. Value zero means no track kerning. */ - /* */ - /* <Output> */ - /* akerning :: The kerning in 16.16 fractional points, to be */ - /* uniformly applied between all glyphs. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* Currently, only the Type~1 font driver supports track kerning, */ - /* using data from AFM files (if attached with @FT_Attach_File or */ - /* @FT_Attach_Stream). */ - /* */ - /* Only very few AFM files come with track kerning data; please refer */ - /* to the Adobe's AFM specification for more details. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Track_Kerning + * + * @description: + * Return the track kerning for a given face object at a given size. + * + * @input: + * face :: + * A handle to a source face object. + * + * point_size :: + * The point size in 16.16 fractional points. + * + * degree :: + * The degree of tightness. Increasingly negative values represent + * tighter track kerning, while increasingly positive values represent + * looser track kerning. Value zero means no track kerning. + * + * @output: + * akerning :: + * The kerning in 16.16 fractional points, to be uniformly applied + * between all glyphs. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Currently, only the Type~1 font driver supports track kerning, using + * data from AFM files (if attached with @FT_Attach_File or + * @FT_Attach_Stream). + * + * Only very few AFM files come with track kerning data; please refer to + * Adobe's AFM specification for more details. + */ FT_EXPORT( FT_Error ) FT_Get_Track_Kerning( FT_Face face, FT_Fixed point_size, @@ -3236,138 +4065,80 @@ FT_BEGIN_HEADER FT_Fixed* akerning ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Glyph_Name */ - /* */ - /* <Description> */ - /* Retrieve the ASCII name of a given glyph in a face. This only */ - /* works for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1. */ - /* */ - /* <Input> */ - /* face :: A handle to a source face object. */ - /* */ - /* glyph_index :: The glyph index. */ - /* */ - /* buffer_max :: The maximum number of bytes available in the */ - /* buffer. */ - /* */ - /* <Output> */ - /* buffer :: A pointer to a target buffer where the name is */ - /* copied to. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* An error is returned if the face doesn't provide glyph names or if */ - /* the glyph index is invalid. In all cases of failure, the first */ - /* byte of `buffer' is set to~0 to indicate an empty name. */ - /* */ - /* The glyph name is truncated to fit within the buffer if it is too */ - /* long. The returned string is always zero-terminated. */ - /* */ - /* Be aware that FreeType reorders glyph indices internally so that */ - /* glyph index~0 always corresponds to the `missing glyph' (called */ - /* `.notdef'). */ - /* */ - /* This function always returns an error if the config macro */ - /* `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoptions.h'. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Get_Glyph_Name( FT_Face face, - FT_UInt glyph_index, - FT_Pointer buffer, - FT_UInt buffer_max ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Postscript_Name */ - /* */ - /* <Description> */ - /* Retrieve the ASCII PostScript name of a given face, if available. */ - /* This only works with PostScript and TrueType fonts. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Return> */ - /* A pointer to the face's PostScript name. NULL if unavailable. */ - /* */ - /* <Note> */ - /* The returned pointer is owned by the face and is destroyed with */ - /* it. */ - /* */ - FT_EXPORT( const char* ) - FT_Get_Postscript_Name( FT_Face face ); - + /************************************************************************** + * + * @section: + * character_mapping + * + */ - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Select_Charmap */ - /* */ - /* <Description> */ - /* Select a given charmap by its encoding tag (as listed in */ - /* `freetype.h'). */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* encoding :: A handle to the selected encoding. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function returns an error if no charmap in the face */ - /* corresponds to the encoding queried here. */ - /* */ - /* Because many fonts contain more than a single cmap for Unicode */ - /* encoding, this function has some special code to select the one */ - /* that covers Unicode best (`best' in the sense that a UCS-4 cmap is */ - /* preferred to a UCS-2 cmap). It is thus preferable to */ - /* @FT_Set_Charmap in this case. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Select_Charmap + * + * @description: + * Select a given charmap by its encoding tag (as listed in + * `freetype.h`). + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * encoding :: + * A handle to the selected encoding. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function returns an error if no charmap in the face corresponds + * to the encoding queried here. + * + * Because many fonts contain more than a single cmap for Unicode + * encoding, this function has some special code to select the one that + * covers Unicode best ('best' in the sense that a UCS-4 cmap is + * preferred to a UCS-2 cmap). It is thus preferable to @FT_Set_Charmap + * in this case. + */ FT_EXPORT( FT_Error ) FT_Select_Charmap( FT_Face face, FT_Encoding encoding ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Charmap */ - /* */ - /* <Description> */ - /* Select a given charmap for character code to glyph index mapping. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Input> */ - /* charmap :: A handle to the selected charmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function returns an error if the charmap is not part of */ - /* the face (i.e., if it is not listed in the `face->charmaps' */ - /* table). */ - /* */ - /* It also fails if a type~14 charmap is selected. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Set_Charmap + * + * @description: + * Select a given charmap for character code to glyph index mapping. + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * charmap :: + * A handle to the selected charmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function returns an error if the charmap is not part of the face + * (i.e., if it is not listed in the `face->charmaps` table). + * + * It also fails if an OpenType type~14 charmap is selected (which + * doesn't map character codes to glyph indices at all). + */ FT_EXPORT( FT_Error ) FT_Set_Charmap( FT_Face face, FT_CharMap charmap ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Get_Charmap_Index @@ -3381,168 +4152,385 @@ FT_BEGIN_HEADER * * @return: * The index into the array of character maps within the face to which - * `charmap' belongs. If an error occurs, -1 is returned. + * `charmap` belongs. If an error occurs, -1 is returned. * */ FT_EXPORT( FT_Int ) FT_Get_Charmap_Index( FT_CharMap charmap ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Char_Index */ - /* */ - /* <Description> */ - /* Return the glyph index of a given character code. This function */ - /* uses a charmap object to do the mapping. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* charcode :: The character code. */ - /* */ - /* <Return> */ - /* The glyph index. 0~means `undefined character code'. */ - /* */ - /* <Note> */ - /* If you use FreeType to manipulate the contents of font files */ - /* directly, be aware that the glyph index returned by this function */ - /* doesn't always correspond to the internal indices used within the */ - /* file. This is done to ensure that value~0 always corresponds to */ - /* the `missing glyph'. If the first glyph is not named `.notdef', */ - /* then for Type~1 and Type~42 fonts, `.notdef' will be moved into */ - /* the glyph ID~0 position, and whatever was there will be moved to */ - /* the position `.notdef' had. For Type~1 fonts, if there is no */ - /* `.notdef' glyph at all, then one will be created at index~0 and */ - /* whatever was there will be moved to the last index -- Type~42 */ - /* fonts are considered invalid under this condition. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Char_Index + * + * @description: + * Return the glyph index of a given character code. This function uses + * the currently selected charmap to do the mapping. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character code. + * + * @return: + * The glyph index. 0~means 'undefined character code'. + * + * @note: + * If you use FreeType to manipulate the contents of font files directly, + * be aware that the glyph index returned by this function doesn't always + * correspond to the internal indices used within the file. This is done + * to ensure that value~0 always corresponds to the 'missing glyph'. If + * the first glyph is not named '.notdef', then for Type~1 and Type~42 + * fonts, '.notdef' will be moved into the glyph ID~0 position, and + * whatever was there will be moved to the position '.notdef' had. For + * Type~1 fonts, if there is no '.notdef' glyph at all, then one will be + * created at index~0 and whatever was there will be moved to the last + * index -- Type~42 fonts are considered invalid under this condition. + */ FT_EXPORT( FT_UInt ) FT_Get_Char_Index( FT_Face face, FT_ULong charcode ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_First_Char */ - /* */ - /* <Description> */ - /* This function is used to return the first character code in the */ - /* current charmap of a given face. It also returns the */ - /* corresponding glyph index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Output> */ - /* agindex :: Glyph index of first character code. 0~if charmap is */ - /* empty. */ - /* */ - /* <Return> */ - /* The charmap's first character code. */ - /* */ - /* <Note> */ - /* You should use this function with @FT_Get_Next_Char to be able to */ - /* parse all character codes available in a given charmap. The code */ - /* should look like this: */ - /* */ - /* { */ - /* FT_ULong charcode; */ - /* FT_UInt gindex; */ - /* */ - /* */ - /* charcode = FT_Get_First_Char( face, &gindex ); */ - /* while ( gindex != 0 ) */ - /* { */ - /* ... do something with (charcode,gindex) pair ... */ - /* */ - /* charcode = FT_Get_Next_Char( face, charcode, &gindex ); */ - /* } */ - /* } */ - /* */ - /* Be aware that character codes can have values up to 0xFFFFFFFF; */ - /* this might happen for non-Unicode or malformed cmaps. However, */ - /* even with regular Unicode encoding, so-called `last resort fonts' */ - /* (using SFNT cmap format 13, see function @FT_Get_CMap_Format) */ - /* normally have entries for all Unicode characters up to 0x1FFFFF, */ - /* which can cause *a lot* of iterations. */ - /* */ - /* Note that `*agindex' is set to~0 if the charmap is empty. The */ - /* result itself can be~0 in two cases: if the charmap is empty or */ - /* if the value~0 is the first valid character code. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_First_Char + * + * @description: + * Return the first character code in the current charmap of a given + * face, together with its corresponding glyph index. + * + * @input: + * face :: + * A handle to the source face object. + * + * @output: + * agindex :: + * Glyph index of first character code. 0~if charmap is empty. + * + * @return: + * The charmap's first character code. + * + * @note: + * You should use this function together with @FT_Get_Next_Char to parse + * all character codes available in a given charmap. The code should + * look like this: + * + * ``` + * FT_ULong charcode; + * FT_UInt gindex; + * + * + * charcode = FT_Get_First_Char( face, &gindex ); + * while ( gindex != 0 ) + * { + * ... do something with (charcode,gindex) pair ... + * + * charcode = FT_Get_Next_Char( face, charcode, &gindex ); + * } + * ``` + * + * Be aware that character codes can have values up to 0xFFFFFFFF; this + * might happen for non-Unicode or malformed cmaps. However, even with + * regular Unicode encoding, so-called 'last resort fonts' (using SFNT + * cmap format 13, see function @FT_Get_CMap_Format) normally have + * entries for all Unicode characters up to 0x1FFFFF, which can cause *a + * lot* of iterations. + * + * Note that `*agindex` is set to~0 if the charmap is empty. The result + * itself can be~0 in two cases: if the charmap is empty or if the + * value~0 is the first valid character code. + */ FT_EXPORT( FT_ULong ) FT_Get_First_Char( FT_Face face, FT_UInt *agindex ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Next_Char */ - /* */ - /* <Description> */ - /* This function is used to return the next character code in the */ - /* current charmap of a given face following the value `char_code', */ - /* as well as the corresponding glyph index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* char_code :: The starting character code. */ - /* */ - /* <Output> */ - /* agindex :: Glyph index of next character code. 0~if charmap */ - /* is empty. */ - /* */ - /* <Return> */ - /* The charmap's next character code. */ - /* */ - /* <Note> */ - /* You should use this function with @FT_Get_First_Char to walk */ - /* over all character codes available in a given charmap. See the */ - /* note for this function for a simple code example. */ - /* */ - /* Note that `*agindex' is set to~0 when there are no more codes in */ - /* the charmap. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Next_Char + * + * @description: + * Return the next character code in the current charmap of a given face + * following the value `char_code`, as well as the corresponding glyph + * index. + * + * @input: + * face :: + * A handle to the source face object. + * + * char_code :: + * The starting character code. + * + * @output: + * agindex :: + * Glyph index of next character code. 0~if charmap is empty. + * + * @return: + * The charmap's next character code. + * + * @note: + * You should use this function with @FT_Get_First_Char to walk over all + * character codes available in a given charmap. See the note for that + * function for a simple code example. + * + * Note that `*agindex` is set to~0 when there are no more codes in the + * charmap. + */ FT_EXPORT( FT_ULong ) FT_Get_Next_Char( FT_Face face, FT_ULong char_code, FT_UInt *agindex ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Name_Index */ - /* */ - /* <Description> */ - /* Return the glyph index of a given glyph name. This function uses */ - /* driver specific objects to do the translation. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* glyph_name :: The glyph name. */ - /* */ - /* <Return> */ - /* The glyph index. 0~means `undefined character code'. */ - /* */ - FT_EXPORT( FT_UInt ) - FT_Get_Name_Index( FT_Face face, - FT_String* glyph_name ); + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @function: + * FT_Face_Properties + * + * @description: + * Set or override certain (library or module-wide) properties on a + * face-by-face basis. Useful for finer-grained control and avoiding + * locks on shared structures (threads can modify their own faces as they + * see fit). + * + * Contrary to @FT_Property_Set, this function uses @FT_Parameter so that + * you can pass multiple properties to the target face in one call. Note + * that only a subset of the available properties can be controlled. + * + * * @FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the + * property `no-stem-darkening` provided by the 'autofit', 'cff', + * 'type1', and 't1cid' modules; see @no-stem-darkening). + * + * * @FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding + * to function @FT_Library_SetLcdFilterWeights). + * + * * @FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type~1, and CID + * 'random' operator, corresponding to the `random-seed` property + * provided by the 'cff', 'type1', and 't1cid' modules; see + * @random-seed). + * + * Pass `NULL` as `data` in @FT_Parameter for a given tag to reset the + * option and use the library or module default again. + * + * @input: + * face :: + * A handle to the source face object. + * + * num_properties :: + * The number of properties that follow. + * + * properties :: + * A handle to an @FT_Parameter array with `num_properties` elements. + * + * @return: + * FreeType error code. 0~means success. + * + * @example: + * Here is an example that sets three properties. You must define + * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` to make the LCD filter examples + * work. + * + * ``` + * FT_Parameter property1; + * FT_Bool darken_stems = 1; + * + * FT_Parameter property2; + * FT_LcdFiveTapFilter custom_weight = + * { 0x11, 0x44, 0x56, 0x44, 0x11 }; + * + * FT_Parameter property3; + * FT_Int32 random_seed = 314159265; + * + * FT_Parameter properties[3] = { property1, + * property2, + * property3 }; + * + * + * property1.tag = FT_PARAM_TAG_STEM_DARKENING; + * property1.data = &darken_stems; + * + * property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; + * property2.data = custom_weight; + * + * property3.tag = FT_PARAM_TAG_RANDOM_SEED; + * property3.data = &random_seed; + * + * FT_Face_Properties( face, 3, properties ); + * ``` + * + * The next example resets a single property to its default value. + * + * ``` + * FT_Parameter property; + * + * + * property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; + * property.data = NULL; + * + * FT_Face_Properties( face, 1, &property ); + * ``` + * + * @since: + * 2.8 + * + */ + FT_EXPORT( FT_Error ) + FT_Face_Properties( FT_Face face, + FT_UInt num_properties, + FT_Parameter* properties ); + + + /************************************************************************** + * + * @section: + * information_retrieval + * + */ + + /************************************************************************** + * + * @function: + * FT_Get_Name_Index + * + * @description: + * Return the glyph index of a given glyph name. This only works + * for those faces where @FT_HAS_GLYPH_NAMES returns true. + * + * @input: + * face :: + * A handle to the source face object. + * + * glyph_name :: + * The glyph name. + * + * @return: + * The glyph index. 0~means 'undefined character code'. + * + * @note: + * Acceptable glyph names might come from the [Adobe Glyph + * List](https://github.com/adobe-type-tools/agl-aglfn). See + * @FT_Get_Glyph_Name for the inverse functionality. + * + * This function has limited capabilities if the config macro + * `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` is not defined in `ftoption.h`: + * It then works only for fonts that actually embed glyph names (which + * many recent OpenType fonts do not). + */ + FT_EXPORT( FT_UInt ) + FT_Get_Name_Index( FT_Face face, + const FT_String* glyph_name ); + + + /************************************************************************** + * + * @function: + * FT_Get_Glyph_Name + * + * @description: + * Retrieve the ASCII name of a given glyph in a face. This only works + * for those faces where @FT_HAS_GLYPH_NAMES returns true. + * + * @input: + * face :: + * A handle to a source face object. + * + * glyph_index :: + * The glyph index. + * + * buffer_max :: + * The maximum number of bytes available in the buffer. + * + * @output: + * buffer :: + * A pointer to a target buffer where the name is copied to. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An error is returned if the face doesn't provide glyph names or if the + * glyph index is invalid. In all cases of failure, the first byte of + * `buffer` is set to~0 to indicate an empty name. + * + * The glyph name is truncated to fit within the buffer if it is too + * long. The returned string is always zero-terminated. + * + * Be aware that FreeType reorders glyph indices internally so that glyph + * index~0 always corresponds to the 'missing glyph' (called '.notdef'). + * + * This function has limited capabilities if the config macro + * `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` is not defined in `ftoption.h`: + * It then works only for fonts that actually embed glyph names (which + * many recent OpenType fonts do not). + */ + FT_EXPORT( FT_Error ) + FT_Get_Glyph_Name( FT_Face face, + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ); - /************************************************************************* + /************************************************************************** * - * @macro: + * @function: + * FT_Get_Postscript_Name + * + * @description: + * Retrieve the ASCII PostScript name of a given face, if available. + * This only works with PostScript, TrueType, and OpenType fonts. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * A pointer to the face's PostScript name. `NULL` if unavailable. + * + * @note: + * The returned pointer is owned by the face and is destroyed with it. + * + * For variation fonts, this string changes if you select a different + * instance, and you have to call `FT_Get_PostScript_Name` again to + * retrieve it. FreeType follows Adobe TechNote #5902, 'Generating + * PostScript Names for Fonts Using OpenType Font Variations'. + * + * https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html + * + * [Since 2.9] Special PostScript names for named instances are only + * returned if the named instance is set with @FT_Set_Named_Instance (and + * the font has corresponding entries in its 'fvar' table or is the + * default named instance). If @FT_IS_VARIATION returns true, the + * algorithmically derived PostScript name is provided, not looking up + * special entries for named instances. + */ + FT_EXPORT( const char* ) + FT_Get_Postscript_Name( FT_Face face ); + + + /************************************************************************** + * + * @enum: * FT_SUBGLYPH_FLAG_XXX * * @description: - * A list of constants used to describe subglyphs. Please refer to the - * TrueType specification for the meaning of the various flags. + * A list of constants describing subglyphs. Please refer to the 'glyf' + * table description in the OpenType specification for the meaning of the + * various flags (which get synthesized for non-OpenType subglyphs). + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description * * @values: * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS :: @@ -3563,15 +4551,15 @@ FT_BEGIN_HEADER #define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 - /************************************************************************* + /************************************************************************** * - * @func: + * @function: * FT_Get_SubGlyph_Info * * @description: * Retrieve a description of a given subglyph. Only use it if - * `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE; an error is - * returned otherwise. + * `glyph->format` is @FT_GLYPH_FORMAT_COMPOSITE; an error is returned + * otherwise. * * @input: * glyph :: @@ -3579,7 +4567,7 @@ FT_BEGIN_HEADER * * sub_index :: * The index of the subglyph. Must be less than - * `glyph->num_subglyphs'. + * `glyph->num_subglyphs`. * * @output: * p_index :: @@ -3601,9 +4589,11 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * The values of `*p_arg1', `*p_arg2', and `*p_transform' must be - * interpreted depending on the flags returned in `*p_flags'. See the - * TrueType specification for details. + * The values of `*p_arg1`, `*p_arg2`, and `*p_transform` must be + * interpreted depending on the flags returned in `*p_flags`. See the + * OpenType specification for details. + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description * */ FT_EXPORT( FT_Error ) @@ -3616,61 +4606,59 @@ FT_BEGIN_HEADER FT_Matrix *p_transform ); - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_FSTYPE_XXX */ - /* */ - /* <Description> */ - /* A list of bit flags used in the `fsType' field of the OS/2 table */ - /* in a TrueType or OpenType font and the `FSType' entry in a */ - /* PostScript font. These bit flags are returned by */ - /* @FT_Get_FSType_Flags; they inform client applications of embedding */ - /* and subsetting restrictions associated with a font. */ - /* */ - /* See */ - /* http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */ - /* for more details. */ - /* */ - /* <Values> */ - /* FT_FSTYPE_INSTALLABLE_EMBEDDING :: */ - /* Fonts with no fsType bit set may be embedded and permanently */ - /* installed on the remote system by an application. */ - /* */ - /* FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING :: */ - /* Fonts that have only this bit set must not be modified, embedded */ - /* or exchanged in any manner without first obtaining permission of */ - /* the font software copyright owner. */ - /* */ - /* FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: */ - /* If this bit is set, the font may be embedded and temporarily */ - /* loaded on the remote system. Documents containing Preview & */ - /* Print fonts must be opened `read-only'; no edits can be applied */ - /* to the document. */ - /* */ - /* FT_FSTYPE_EDITABLE_EMBEDDING :: */ - /* If this bit is set, the font may be embedded but must only be */ - /* installed temporarily on other systems. In contrast to Preview */ - /* & Print fonts, documents containing editable fonts may be opened */ - /* for reading, editing is permitted, and changes may be saved. */ - /* */ - /* FT_FSTYPE_NO_SUBSETTING :: */ - /* If this bit is set, the font may not be subsetted prior to */ - /* embedding. */ - /* */ - /* FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: */ - /* If this bit is set, only bitmaps contained in the font may be */ - /* embedded; no outline data may be embedded. If there are no */ - /* bitmaps available in the font, then the font is unembeddable. */ - /* */ - /* <Note> */ - /* The flags are ORed together, thus more than a single value can be */ - /* returned. */ - /* */ - /* While the fsType flags can indicate that a font may be embedded, a */ - /* license with the font vendor may be separately required to use the */ - /* font in this way. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_FSTYPE_XXX + * + * @description: + * A list of bit flags used in the `fsType` field of the OS/2 table in a + * TrueType or OpenType font and the `FSType` entry in a PostScript font. + * These bit flags are returned by @FT_Get_FSType_Flags; they inform + * client applications of embedding and subsetting restrictions + * associated with a font. + * + * See + * https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf + * for more details. + * + * @values: + * FT_FSTYPE_INSTALLABLE_EMBEDDING :: + * Fonts with no fsType bit set may be embedded and permanently + * installed on the remote system by an application. + * + * FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING :: + * Fonts that have only this bit set must not be modified, embedded or + * exchanged in any manner without first obtaining permission of the + * font software copyright owner. + * + * FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: + * The font may be embedded and temporarily loaded on the remote + * system. Documents containing Preview & Print fonts must be opened + * 'read-only'; no edits can be applied to the document. + * + * FT_FSTYPE_EDITABLE_EMBEDDING :: + * The font may be embedded but must only be installed temporarily on + * other systems. In contrast to Preview & Print fonts, documents + * containing editable fonts may be opened for reading, editing is + * permitted, and changes may be saved. + * + * FT_FSTYPE_NO_SUBSETTING :: + * The font may not be subsetted prior to embedding. + * + * FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: + * Only bitmaps contained in the font may be embedded; no outline data + * may be embedded. If there are no bitmaps available in the font, + * then the font is unembeddable. + * + * @note: + * The flags are ORed together, thus more than a single value can be + * returned. + * + * While the `fsType` flags can indicate that a font may be embedded, a + * license with the font vendor may be separately required to use the + * font in this way. + */ #define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000 #define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002 #define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004 @@ -3679,531 +4667,548 @@ FT_BEGIN_HEADER #define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200 - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_FSType_Flags */ - /* */ - /* <Description> */ - /* Return the fsType flags for a font. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face object. */ - /* */ - /* <Return> */ - /* The fsType flags, @FT_FSTYPE_XXX. */ - /* */ - /* <Note> */ - /* Use this function rather than directly reading the `fs_type' field */ - /* in the @PS_FontInfoRec structure, which is only guaranteed to */ - /* return the correct results for Type~1 fonts. */ - /* */ - /* <Since> */ - /* 2.3.8 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_FSType_Flags + * + * @description: + * Return the `fsType` flags for a font. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * The `fsType` flags, see @FT_FSTYPE_XXX. + * + * @note: + * Use this function rather than directly reading the `fs_type` field in + * the @PS_FontInfoRec structure, which is only guaranteed to return the + * correct results for Type~1 fonts. + * + * @since: + * 2.3.8 + * + */ FT_EXPORT( FT_UShort ) FT_Get_FSType_Flags( FT_Face face ); - /*************************************************************************/ - /* */ - /* <Section> */ - /* glyph_variants */ - /* */ - /* <Title> */ - /* Glyph Variants */ - /* */ - /* <Abstract> */ - /* The FreeType~2 interface to Unicode Ideographic Variation */ - /* Sequences (IVS), using the SFNT cmap format~14. */ - /* */ - /* <Description> */ - /* Many CJK characters have variant forms. They are a sort of grey */ - /* area somewhere between being totally irrelevant and semantically */ - /* distinct; for this reason, the Unicode consortium decided to */ - /* introduce Ideographic Variation Sequences (IVS), consisting of a */ - /* Unicode base character and one of 240 variant selectors */ - /* (U+E0100-U+E01EF), instead of further extending the already huge */ - /* code range for CJK characters. */ - /* */ - /* An IVS is registered and unique; for further details please refer */ - /* to Unicode Technical Standard #37, the Ideographic Variation */ - /* Database: */ - /* */ - /* http://www.unicode.org/reports/tr37/ */ - /* */ - /* To date (November 2014), the character with the most variants is */ - /* U+9089, having 32 such IVS. */ - /* */ - /* Adobe and MS decided to support IVS with a new cmap subtable */ - /* (format~14). It is an odd subtable because it is not a mapping of */ - /* input code points to glyphs, but contains lists of all variants */ - /* supported by the font. */ - /* */ - /* A variant may be either `default' or `non-default'. A default */ - /* variant is the one you will get for that code point if you look it */ - /* up in the standard Unicode cmap. A non-default variant is a */ - /* different glyph. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * glyph_variants + * + * @title: + * Unicode Variation Sequences + * + * @abstract: + * The FreeType~2 interface to Unicode Variation Sequences (UVS), using + * the SFNT cmap format~14. + * + * @description: + * Many characters, especially for CJK scripts, have variant forms. They + * are a sort of grey area somewhere between being totally irrelevant and + * semantically distinct; for this reason, the Unicode consortium decided + * to introduce Variation Sequences (VS), consisting of a Unicode base + * character and a variation selector instead of further extending the + * already huge number of characters. + * + * Unicode maintains two different sets, namely 'Standardized Variation + * Sequences' and registered 'Ideographic Variation Sequences' (IVS), + * collected in the 'Ideographic Variation Database' (IVD). + * + * https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt + * https://unicode.org/reports/tr37/ https://unicode.org/ivd/ + * + * To date (January 2017), the character with the most ideographic + * variations is U+9089, having 32 such IVS. + * + * Three Mongolian Variation Selectors have the values U+180B-U+180D; 256 + * generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F + * and U+E0100-U+E01EF. IVS currently use Variation Selectors from the + * range U+E0100-U+E01EF only. + * + * A VS consists of the base character value followed by a single + * Variation Selector. For example, to get the first variation of + * U+9089, you have to write the character sequence `U+9089 U+E0100`. + * + * Adobe and MS decided to support both standardized and ideographic VS + * with a new cmap subtable (format~14). It is an odd subtable because + * it is not a mapping of input code points to glyphs, but contains lists + * of all variations supported by the font. + * + * A variation may be either 'default' or 'non-default' for a given font. + * A default variation is the one you will get for that code point if you + * look it up in the standard Unicode cmap. A non-default variation is a + * different glyph. + * + */ - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetCharVariantIndex */ - /* */ - /* <Description> */ - /* Return the glyph index of a given character code as modified by */ - /* the variation selector. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* charcode :: */ - /* The character code point in Unicode. */ - /* */ - /* variantSelector :: */ - /* The Unicode code point of the variation selector. */ - /* */ - /* <Return> */ - /* The glyph index. 0~means either `undefined character code', or */ - /* `undefined selector code', or `no variation selector cmap */ - /* subtable', or `current CharMap is not Unicode'. */ - /* */ - /* <Note> */ - /* If you use FreeType to manipulate the contents of font files */ - /* directly, be aware that the glyph index returned by this function */ - /* doesn't always correspond to the internal indices used within */ - /* the file. This is done to ensure that value~0 always corresponds */ - /* to the `missing glyph'. */ - /* */ - /* This function is only meaningful if */ - /* a) the font has a variation selector cmap sub table, */ - /* and */ - /* b) the current charmap has a Unicode encoding. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Face_GetCharVariantIndex + * + * @description: + * Return the glyph index of a given character code as modified by the + * variation selector. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character code point in Unicode. + * + * variantSelector :: + * The Unicode code point of the variation selector. + * + * @return: + * The glyph index. 0~means either 'undefined character code', or + * 'undefined selector code', or 'no variation selector cmap subtable', + * or 'current CharMap is not Unicode'. + * + * @note: + * If you use FreeType to manipulate the contents of font files directly, + * be aware that the glyph index returned by this function doesn't always + * correspond to the internal indices used within the file. This is done + * to ensure that value~0 always corresponds to the 'missing glyph'. + * + * This function is only meaningful if + * a) the font has a variation selector cmap sub table, and + * b) the current charmap has a Unicode encoding. + * + * @since: + * 2.3.6 + * + */ FT_EXPORT( FT_UInt ) FT_Face_GetCharVariantIndex( FT_Face face, FT_ULong charcode, FT_ULong variantSelector ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetCharVariantIsDefault */ - /* */ - /* <Description> */ - /* Check whether this variant of this Unicode character is the one to */ - /* be found in the `cmap'. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* charcode :: */ - /* The character codepoint in Unicode. */ - /* */ - /* variantSelector :: */ - /* The Unicode codepoint of the variation selector. */ - /* */ - /* <Return> */ - /* 1~if found in the standard (Unicode) cmap, 0~if found in the */ - /* variation selector cmap, or -1 if it is not a variant. */ - /* */ - /* <Note> */ - /* This function is only meaningful if the font has a variation */ - /* selector cmap subtable. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Face_GetCharVariantIsDefault + * + * @description: + * Check whether this variation of this Unicode character is the one to + * be found in the charmap. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character codepoint in Unicode. + * + * variantSelector :: + * The Unicode codepoint of the variation selector. + * + * @return: + * 1~if found in the standard (Unicode) cmap, 0~if found in the variation + * selector cmap, or -1 if it is not a variation. + * + * @note: + * This function is only meaningful if the font has a variation selector + * cmap subtable. + * + * @since: + * 2.3.6 + * + */ FT_EXPORT( FT_Int ) FT_Face_GetCharVariantIsDefault( FT_Face face, FT_ULong charcode, FT_ULong variantSelector ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetVariantSelectors */ - /* */ - /* <Description> */ - /* Return a zero-terminated list of Unicode variant selectors found */ - /* in the font. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* <Return> */ - /* A pointer to an array of selector code points, or NULL if there is */ - /* no valid variant selector cmap subtable. */ - /* */ - /* <Note> */ - /* The last item in the array is~0; the array is owned by the */ - /* @FT_Face object but can be overwritten or released on the next */ - /* call to a FreeType function. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Face_GetVariantSelectors + * + * @description: + * Return a zero-terminated list of Unicode variation selectors found in + * the font. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * A pointer to an array of selector code points, or `NULL` if there is + * no valid variation selector cmap subtable. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + * + */ FT_EXPORT( FT_UInt32* ) FT_Face_GetVariantSelectors( FT_Face face ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetVariantsOfChar */ - /* */ - /* <Description> */ - /* Return a zero-terminated list of Unicode variant selectors found */ - /* for the specified character code. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* charcode :: */ - /* The character codepoint in Unicode. */ - /* */ - /* <Return> */ - /* A pointer to an array of variant selector code points that are */ - /* active for the given character, or NULL if the corresponding list */ - /* is empty. */ - /* */ - /* <Note> */ - /* The last item in the array is~0; the array is owned by the */ - /* @FT_Face object but can be overwritten or released on the next */ - /* call to a FreeType function. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Face_GetVariantsOfChar + * + * @description: + * Return a zero-terminated list of Unicode variation selectors found for + * the specified character code. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character codepoint in Unicode. + * + * @return: + * A pointer to an array of variation selector code points that are + * active for the given character, or `NULL` if the corresponding list is + * empty. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + * + */ FT_EXPORT( FT_UInt32* ) FT_Face_GetVariantsOfChar( FT_Face face, FT_ULong charcode ); - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_GetCharsOfVariant */ - /* */ - /* <Description> */ - /* Return a zero-terminated list of Unicode character codes found for */ - /* the specified variant selector. */ - /* */ - /* <Input> */ - /* face :: */ - /* A handle to the source face object. */ - /* */ - /* variantSelector :: */ - /* The variant selector code point in Unicode. */ - /* */ - /* <Return> */ - /* A list of all the code points that are specified by this selector */ - /* (both default and non-default codes are returned) or NULL if there */ - /* is no valid cmap or the variant selector is invalid. */ - /* */ - /* <Note> */ - /* The last item in the array is~0; the array is owned by the */ - /* @FT_Face object but can be overwritten or released on the next */ - /* call to a FreeType function. */ - /* */ - /* <Since> */ - /* 2.3.6 */ - /* */ + + /************************************************************************** + * + * @function: + * FT_Face_GetCharsOfVariant + * + * @description: + * Return a zero-terminated list of Unicode character codes found for the + * specified variation selector. + * + * @input: + * face :: + * A handle to the source face object. + * + * variantSelector :: + * The variation selector code point in Unicode. + * + * @return: + * A list of all the code points that are specified by this selector + * (both default and non-default codes are returned) or `NULL` if there + * is no valid cmap or the variation selector is invalid. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + * + */ FT_EXPORT( FT_UInt32* ) FT_Face_GetCharsOfVariant( FT_Face face, FT_ULong variantSelector ); - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /* <Title> */ - /* Computations */ - /* */ - /* <Abstract> */ - /* Crunching fixed numbers and vectors. */ - /* */ - /* <Description> */ - /* This section contains various functions used to perform */ - /* computations on 16.16 fixed-float numbers or 2d vectors. */ - /* */ - /* <Order> */ - /* FT_MulDiv */ - /* FT_MulFix */ - /* FT_DivFix */ - /* FT_RoundFix */ - /* FT_CeilFix */ - /* FT_FloorFix */ - /* FT_Vector_Transform */ - /* FT_Matrix_Multiply */ - /* FT_Matrix_Invert */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * computations + * + * @title: + * Computations + * + * @abstract: + * Crunching fixed numbers and vectors. + * + * @description: + * This section contains various functions used to perform computations + * on 16.16 fixed-point numbers or 2D vectors. FreeType does not use + * floating-point data types. + * + * **Attention**: Most arithmetic functions take `FT_Long` as arguments. + * For historical reasons, FreeType was designed under the assumption + * that `FT_Long` is a 32-bit integer; results can thus be undefined if + * the arguments don't fit into 32 bits. + * + * @order: + * FT_MulDiv + * FT_MulFix + * FT_DivFix + * FT_RoundFix + * FT_CeilFix + * FT_FloorFix + * FT_Vector_Transform + * FT_Matrix_Multiply + * FT_Matrix_Invert + * + */ - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_MulDiv */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation `(a*b)/c' */ - /* with maximum accuracy (it uses a 64-bit intermediate integer */ - /* whenever necessary). */ - /* */ - /* This function isn't necessarily as fast as some processor specific */ - /* operations, but is at least completely portable. */ - /* */ - /* <Input> */ - /* a :: The first multiplier. */ - /* b :: The second multiplier. */ - /* c :: The divisor. */ - /* */ - /* <Return> */ - /* The result of `(a*b)/c'. This function never traps when trying to */ - /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */ - /* on the signs of `a' and `b'. */ - /* */ + /************************************************************************** + * + * @function: + * FT_MulDiv + * + * @description: + * Compute `(a*b)/c` with maximum accuracy, using a 64-bit intermediate + * integer whenever necessary. + * + * This function isn't necessarily as fast as some processor-specific + * operations, but is at least completely portable. + * + * @input: + * a :: + * The first multiplier. + * + * b :: + * The second multiplier. + * + * c :: + * The divisor. + * + * @return: + * The result of `(a*b)/c`. This function never traps when trying to + * divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on + * the signs of `a` and `b`. + */ FT_EXPORT( FT_Long ) FT_MulDiv( FT_Long a, FT_Long b, FT_Long c ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_MulFix */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation */ - /* `(a*b)/0x10000' with maximum accuracy. Most of the time this is */ - /* used to multiply a given value by a 16.16 fixed-point factor. */ - /* */ - /* <Input> */ - /* a :: The first multiplier. */ - /* b :: The second multiplier. Use a 16.16 factor here whenever */ - /* possible (see note below). */ - /* */ - /* <Return> */ - /* The result of `(a*b)/0x10000'. */ - /* */ - /* <Note> */ - /* This function has been optimized for the case where the absolute */ - /* value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */ - /* As this happens mainly when scaling from notional units to */ - /* fractional pixels in FreeType, it resulted in noticeable speed */ - /* improvements between versions 2.x and 1.x. */ - /* */ - /* As a conclusion, always try to place a 16.16 factor as the */ - /* _second_ argument of this function; this can make a great */ - /* difference. */ - /* */ + /************************************************************************** + * + * @function: + * FT_MulFix + * + * @description: + * Compute `(a*b)/0x10000` with maximum accuracy. Its main use is to + * multiply a given value by a 16.16 fixed-point factor. + * + * @input: + * a :: + * The first multiplier. + * + * b :: + * The second multiplier. Use a 16.16 factor here whenever possible + * (see note below). + * + * @return: + * The result of `(a*b)/0x10000`. + * + * @note: + * This function has been optimized for the case where the absolute value + * of `a` is less than 2048, and `b` is a 16.16 scaling factor. As this + * happens mainly when scaling from notional units to fractional pixels + * in FreeType, it resulted in noticeable speed improvements between + * versions 2.x and 1.x. + * + * As a conclusion, always try to place a 16.16 factor as the _second_ + * argument of this function; this can make a great difference. + */ FT_EXPORT( FT_Long ) FT_MulFix( FT_Long a, FT_Long b ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_DivFix */ - /* */ - /* <Description> */ - /* A very simple function used to perform the computation */ - /* `(a*0x10000)/b' with maximum accuracy. Most of the time, this is */ - /* used to divide a given value by a 16.16 fixed-point factor. */ - /* */ - /* <Input> */ - /* a :: The numerator. */ - /* b :: The denominator. Use a 16.16 factor here. */ - /* */ - /* <Return> */ - /* The result of `(a*0x10000)/b'. */ - /* */ + /************************************************************************** + * + * @function: + * FT_DivFix + * + * @description: + * Compute `(a*0x10000)/b` with maximum accuracy. Its main use is to + * divide a given value by a 16.16 fixed-point factor. + * + * @input: + * a :: + * The numerator. + * + * b :: + * The denominator. Use a 16.16 factor here. + * + * @return: + * The result of `(a*0x10000)/b`. + */ FT_EXPORT( FT_Long ) FT_DivFix( FT_Long a, FT_Long b ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_RoundFix */ - /* */ - /* <Description> */ - /* A very simple function used to round a 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number to be rounded. */ - /* */ - /* <Return> */ - /* `a' rounded to nearest 16.16 fixed integer, halfway cases away */ - /* from zero. */ - /* */ + /************************************************************************** + * + * @function: + * FT_RoundFix + * + * @description: + * Round a 16.16 fixed number. + * + * @input: + * a :: + * The number to be rounded. + * + * @return: + * `a` rounded to the nearest 16.16 fixed integer, halfway cases away + * from zero. + * + * @note: + * The function uses wrap-around arithmetic. + */ FT_EXPORT( FT_Fixed ) FT_RoundFix( FT_Fixed a ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_CeilFix */ - /* */ - /* <Description> */ - /* A very simple function used to compute the ceiling function of a */ - /* 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number for which the ceiling function is to be computed. */ - /* */ - /* <Return> */ - /* `a' rounded towards plus infinity. */ - /* */ + /************************************************************************** + * + * @function: + * FT_CeilFix + * + * @description: + * Compute the smallest following integer of a 16.16 fixed number. + * + * @input: + * a :: + * The number for which the ceiling function is to be computed. + * + * @return: + * `a` rounded towards plus infinity. + * + * @note: + * The function uses wrap-around arithmetic. + */ FT_EXPORT( FT_Fixed ) FT_CeilFix( FT_Fixed a ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_FloorFix */ - /* */ - /* <Description> */ - /* A very simple function used to compute the floor function of a */ - /* 16.16 fixed number. */ - /* */ - /* <Input> */ - /* a :: The number for which the floor function is to be computed. */ - /* */ - /* <Return> */ - /* `a' rounded towards minus infinity. */ - /* */ + /************************************************************************** + * + * @function: + * FT_FloorFix + * + * @description: + * Compute the largest previous integer of a 16.16 fixed number. + * + * @input: + * a :: + * The number for which the floor function is to be computed. + * + * @return: + * `a` rounded towards minus infinity. + */ FT_EXPORT( FT_Fixed ) FT_FloorFix( FT_Fixed a ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Vector_Transform */ - /* */ - /* <Description> */ - /* Transform a single vector through a 2x2 matrix. */ - /* */ - /* <InOut> */ - /* vector :: The target vector to transform. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the source 2x2 matrix. */ - /* */ - /* <Note> */ - /* The result is undefined if either `vector' or `matrix' is invalid. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Vector_Transform + * + * @description: + * Transform a single vector through a 2x2 matrix. + * + * @inout: + * vector :: + * The target vector to transform. + * + * @input: + * matrix :: + * A pointer to the source 2x2 matrix. + * + * @note: + * The result is undefined if either `vector` or `matrix` is invalid. + */ FT_EXPORT( void ) - FT_Vector_Transform( FT_Vector* vec, + FT_Vector_Transform( FT_Vector* vector, const FT_Matrix* matrix ); - /*************************************************************************/ - /* */ - /* <Section> */ - /* version */ - /* */ - /* <Title> */ - /* FreeType Version */ - /* */ - /* <Abstract> */ - /* Functions and macros related to FreeType versions. */ - /* */ - /* <Description> */ - /* Note that those functions and macros are of limited use because */ - /* even a new release of FreeType with only documentation changes */ - /* increases the version number. */ - /* */ - /* <Order> */ - /* FT_Library_Version */ - /* */ - /* FREETYPE_MAJOR */ - /* FREETYPE_MINOR */ - /* FREETYPE_PATCH */ - /* */ - /* FT_Face_CheckTrueTypePatents */ - /* FT_Face_SetUnpatentedHinting */ - /* */ - /* FREETYPE_XXX */ - /* */ - /*************************************************************************/ - + /************************************************************************** + * + * @section: + * library_setup + * + */ - /************************************************************************* + /************************************************************************** * * @enum: * FREETYPE_XXX * * @description: - * These three macros identify the FreeType source code version. - * Use @FT_Library_Version to access them at runtime. + * These three macros identify the FreeType source code version. Use + * @FT_Library_Version to access them at runtime. * * @values: - * FREETYPE_MAJOR :: The major version number. - * FREETYPE_MINOR :: The minor version number. - * FREETYPE_PATCH :: The patch level. + * FREETYPE_MAJOR :: + * The major version number. + * FREETYPE_MINOR :: + * The minor version number. + * FREETYPE_PATCH :: + * The patch level. * * @note: - * The version number of FreeType if built as a dynamic link library - * with the `libtool' package is _not_ controlled by these three - * macros. + * The version number of FreeType if built as a dynamic link library with + * the 'libtool' package is _not_ controlled by these three macros. * */ #define FREETYPE_MAJOR 2 -#define FREETYPE_MINOR 6 +#define FREETYPE_MINOR 13 #define FREETYPE_PATCH 3 - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Library_Version */ - /* */ - /* <Description> */ - /* Return the version of the FreeType library being used. This is */ - /* useful when dynamically linking to the library, since one cannot */ - /* use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and */ - /* @FREETYPE_PATCH. */ - /* */ - /* <Input> */ - /* library :: A source library handle. */ - /* */ - /* <Output> */ - /* amajor :: The major version number. */ - /* */ - /* aminor :: The minor version number. */ - /* */ - /* apatch :: The patch version number. */ - /* */ - /* <Note> */ - /* The reason why this function takes a `library' argument is because */ - /* certain programs implement library initialization in a custom way */ - /* that doesn't use @FT_Init_FreeType. */ - /* */ - /* In such cases, the library version might not be available before */ - /* the library object has been created. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Library_Version + * + * @description: + * Return the version of the FreeType library being used. This is useful + * when dynamically linking to the library, since one cannot use the + * macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and @FREETYPE_PATCH. + * + * @input: + * library :: + * A source library handle. + * + * @output: + * amajor :: + * The major version number. + * + * aminor :: + * The minor version number. + * + * apatch :: + * The patch version number. + * + * @note: + * The reason why this function takes a `library` argument is because + * certain programs implement library initialization in a custom way that + * doesn't use @FT_Init_FreeType. + * + * In such cases, the library version might not be available before the + * library object has been created. + */ FT_EXPORT( void ) FT_Library_Version( FT_Library library, FT_Int *amajor, @@ -4211,52 +5216,64 @@ FT_BEGIN_HEADER FT_Int *apatch ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_CheckTrueTypePatents */ - /* */ - /* <Description> */ - /* Deprecated, does nothing. */ - /* */ - /* <Input> */ - /* face :: A face handle. */ - /* */ - /* <Return> */ - /* Always returns false. */ - /* */ - /* <Note> */ - /* Since May 2010, TrueType hinting is no longer patented. */ - /* */ - /* <Since> */ - /* 2.3.5 */ - /* */ + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @function: + * FT_Face_CheckTrueTypePatents + * + * @description: + * Deprecated, does nothing. + * + * @input: + * face :: + * A face handle. + * + * @return: + * Always returns false. + * + * @note: + * Since May 2010, TrueType hinting is no longer patented. + * + * @since: + * 2.3.5 + * + */ FT_EXPORT( FT_Bool ) FT_Face_CheckTrueTypePatents( FT_Face face ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Face_SetUnpatentedHinting */ - /* */ - /* <Description> */ - /* Deprecated, does nothing. */ - /* */ - /* <Input> */ - /* face :: A face handle. */ - /* */ - /* value :: New boolean setting. */ - /* */ - /* <Return> */ - /* Always returns false. */ - /* */ - /* <Note> */ - /* Since May 2010, TrueType hinting is no longer patented. */ - /* */ - /* <Since> */ - /* 2.3.5 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Face_SetUnpatentedHinting + * + * @description: + * Deprecated, does nothing. + * + * @input: + * face :: + * A face handle. + * + * value :: + * New boolean setting. + * + * @return: + * Always returns false. + * + * @note: + * Since May 2010, TrueType hinting is no longer patented. + * + * @since: + * 2.3.5 + * + */ FT_EXPORT( FT_Bool ) FT_Face_SetUnpatentedHinting( FT_Face face, FT_Bool value ); diff --git a/non-source/foreign/freetype2/freetype/ftadvanc.h b/non-source/foreign/freetype2/freetype/ftadvanc.h index 023dd84b7..85b8ba255 100644 --- a/non-source/foreign/freetype2/freetype/ftadvanc.h +++ b/non-source/foreign/freetype2/freetype/ftadvanc.h @@ -1,27 +1,26 @@ -/***************************************************************************/ -/* */ -/* ftadvanc.h */ -/* */ -/* Quick computation of advance widths (specification only). */ -/* */ -/* Copyright 2008-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftadvanc.h + * + * Quick computation of advance widths (specification only). + * + * Copyright (C) 2008-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTADVANC_H_ #define FTADVANC_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -56,68 +55,68 @@ FT_BEGIN_HEADER */ - /*************************************************************************/ - /* */ - /* <Const> */ - /* FT_ADVANCE_FLAG_FAST_ONLY */ - /* */ - /* <Description> */ - /* A bit-flag to be OR-ed with the `flags' parameter of the */ - /* @FT_Get_Advance and @FT_Get_Advances functions. */ - /* */ - /* If set, it indicates that you want these functions to fail if the */ - /* corresponding hinting mode or font driver doesn't allow for very */ - /* quick advance computation. */ - /* */ - /* Typically, glyphs that are either unscaled, unhinted, bitmapped, */ - /* or light-hinted can have their advance width computed very */ - /* quickly. */ - /* */ - /* Normal and bytecode hinted modes that require loading, scaling, */ - /* and hinting of the glyph outline, are extremely slow by */ - /* comparison. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_ADVANCE_FLAG_FAST_ONLY + * + * @description: + * A bit-flag to be OR-ed with the `flags` parameter of the + * @FT_Get_Advance and @FT_Get_Advances functions. + * + * If set, it indicates that you want these functions to fail if the + * corresponding hinting mode or font driver doesn't allow for very quick + * advance computation. + * + * Typically, glyphs that are either unscaled, unhinted, bitmapped, or + * light-hinted can have their advance width computed very quickly. + * + * Normal and bytecode hinted modes that require loading, scaling, and + * hinting of the glyph outline, are extremely slow by comparison. + */ #define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Advance */ - /* */ - /* <Description> */ - /* Retrieve the advance value of a given glyph outline in an */ - /* @FT_Face. */ - /* */ - /* <Input> */ - /* face :: The source @FT_Face handle. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* load_flags :: A set of bit flags similar to those used when */ - /* calling @FT_Load_Glyph, used to determine what kind */ - /* of advances you need. */ - /* <Output> */ - /* padvance :: The advance value. If scaling is performed (based on */ - /* the value of `load_flags'), the advance value is in */ - /* 16.16 format. Otherwise, it is in font units. */ - /* */ - /* If @FT_LOAD_VERTICAL_LAYOUT is set, this is the */ - /* vertical advance corresponding to a vertical layout. */ - /* Otherwise, it is the horizontal advance in a */ - /* horizontal layout. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */ - /* if the corresponding font backend doesn't have a quick way to */ - /* retrieve the advances. */ - /* */ - /* A scaled advance is returned in 16.16 format but isn't transformed */ - /* by the affine transformation specified by @FT_Set_Transform. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Advance + * + * @description: + * Retrieve the advance value of a given glyph outline in an @FT_Face. + * + * @input: + * face :: + * The source @FT_Face handle. + * + * gindex :: + * The glyph index. + * + * load_flags :: + * A set of bit flags similar to those used when calling + * @FT_Load_Glyph, used to determine what kind of advances you need. + * + * @output: + * padvance :: + * The advance value. If scaling is performed (based on the value of + * `load_flags`), the advance value is in 16.16 format. Otherwise, it + * is in font units. + * + * If @FT_LOAD_VERTICAL_LAYOUT is set, this is the vertical advance + * corresponding to a vertical layout. Otherwise, it is the horizontal + * advance in a horizontal layout. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if + * the corresponding font backend doesn't have a quick way to retrieve + * the advances. + * + * A scaled advance is returned in 16.16 format but isn't transformed by + * the affine transformation specified by @FT_Set_Transform. + */ FT_EXPORT( FT_Error ) FT_Get_Advance( FT_Face face, FT_UInt gindex, @@ -125,50 +124,52 @@ FT_BEGIN_HEADER FT_Fixed *padvance ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Advances */ - /* */ - /* <Description> */ - /* Retrieve the advance values of several glyph outlines in an */ - /* @FT_Face. */ - /* */ - /* <Input> */ - /* face :: The source @FT_Face handle. */ - /* */ - /* start :: The first glyph index. */ - /* */ - /* count :: The number of advance values you want to retrieve. */ - /* */ - /* load_flags :: A set of bit flags similar to those used when */ - /* calling @FT_Load_Glyph. */ - /* */ - /* <Output> */ - /* padvance :: The advance values. This array, to be provided by the */ - /* caller, must contain at least `count' elements. */ - /* */ - /* If scaling is performed (based on the value of */ - /* `load_flags'), the advance values are in 16.16 format. */ - /* Otherwise, they are in font units. */ - /* */ - /* If @FT_LOAD_VERTICAL_LAYOUT is set, these are the */ - /* vertical advances corresponding to a vertical layout. */ - /* Otherwise, they are the horizontal advances in a */ - /* horizontal layout. */ - /* */ - /* <Return> */ - /* FreeType error code. 0 means success. */ - /* */ - /* <Note> */ - /* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */ - /* if the corresponding font backend doesn't have a quick way to */ - /* retrieve the advances. */ - /* */ - /* Scaled advances are returned in 16.16 format but aren't */ - /* transformed by the affine transformation specified by */ - /* @FT_Set_Transform. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Advances + * + * @description: + * Retrieve the advance values of several glyph outlines in an @FT_Face. + * + * @input: + * face :: + * The source @FT_Face handle. + * + * start :: + * The first glyph index. + * + * count :: + * The number of advance values you want to retrieve. + * + * load_flags :: + * A set of bit flags similar to those used when calling + * @FT_Load_Glyph. + * + * @output: + * padvance :: + * The advance values. This array, to be provided by the caller, must + * contain at least `count` elements. + * + * If scaling is performed (based on the value of `load_flags`), the + * advance values are in 16.16 format. Otherwise, they are in font + * units. + * + * If @FT_LOAD_VERTICAL_LAYOUT is set, these are the vertical advances + * corresponding to a vertical layout. Otherwise, they are the + * horizontal advances in a horizontal layout. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if + * the corresponding font backend doesn't have a quick way to retrieve + * the advances. + * + * Scaled advances are returned in 16.16 format but aren't transformed by + * the affine transformation specified by @FT_Set_Transform. + */ FT_EXPORT( FT_Error ) FT_Get_Advances( FT_Face face, FT_UInt start, diff --git a/non-source/foreign/freetype2/freetype/ftautoh.h b/non-source/foreign/freetype2/freetype/ftautoh.h deleted file mode 100644 index 8052dd23d..000000000 --- a/non-source/foreign/freetype2/freetype/ftautoh.h +++ /dev/null @@ -1,503 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftautoh.h */ -/* */ -/* FreeType API for controlling the auto-hinter (specification only). */ -/* */ -/* Copyright 2012-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef FTAUTOH_H_ -#define FTAUTOH_H_ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * @section: - * auto_hinter - * - * @title: - * The auto-hinter - * - * @abstract: - * Controlling the auto-hinting module. - * - * @description: - * While FreeType's auto-hinter doesn't expose API functions by itself, - * it is possible to control its behaviour with @FT_Property_Set and - * @FT_Property_Get. The following lists the available properties - * together with the necessary macros and structures. - * - * Note that the auto-hinter's module name is `autofitter' for - * historical reasons. - * - */ - - - /************************************************************************** - * - * @property: - * glyph-to-script-map - * - * @description: - * *Experimental* *only* - * - * The auto-hinter provides various script modules to hint glyphs. - * Examples of supported scripts are Latin or CJK. Before a glyph is - * auto-hinted, the Unicode character map of the font gets examined, and - * the script is then determined based on Unicode character ranges, see - * below. - * - * OpenType fonts, however, often provide much more glyphs than - * character codes (small caps, superscripts, ligatures, swashes, etc.), - * to be controlled by so-called `features'. Handling OpenType features - * can be quite complicated and thus needs a separate library on top of - * FreeType. - * - * The mapping between glyph indices and scripts (in the auto-hinter - * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an - * array with `num_glyphs' elements, as found in the font's @FT_Face - * structure. The `glyph-to-script-map' property returns a pointer to - * this array, which can be modified as needed. Note that the - * modification should happen before the first glyph gets processed by - * the auto-hinter so that the global analysis of the font shapes - * actually uses the modified mapping. - * - * The following example code demonstrates how to access it (omitting - * the error handling). - * - * { - * FT_Library library; - * FT_Face face; - * FT_Prop_GlyphToScriptMap prop; - * - * - * FT_Init_FreeType( &library ); - * FT_New_Face( library, "foo.ttf", 0, &face ); - * - * prop.face = face; - * - * FT_Property_Get( library, "autofitter", - * "glyph-to-script-map", &prop ); - * - * // adjust `prop.map' as needed right here - * - * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT ); - * } - * - */ - - - /************************************************************************** - * - * @enum: - * FT_AUTOHINTER_SCRIPT_XXX - * - * @description: - * *Experimental* *only* - * - * A list of constants used for the @glyph-to-script-map property to - * specify the script submodule the auto-hinter should use for hinting a - * particular glyph. - * - * @values: - * FT_AUTOHINTER_SCRIPT_NONE :: - * Don't auto-hint this glyph. - * - * FT_AUTOHINTER_SCRIPT_LATIN :: - * Apply the latin auto-hinter. For the auto-hinter, `latin' is a - * very broad term, including Cyrillic and Greek also since characters - * from those scripts share the same design constraints. - * - * By default, characters from the following Unicode ranges are - * assigned to this submodule. - * - * { - * U+0020 - U+007F // Basic Latin (no control characters) - * U+00A0 - U+00FF // Latin-1 Supplement (no control characters) - * U+0100 - U+017F // Latin Extended-A - * U+0180 - U+024F // Latin Extended-B - * U+0250 - U+02AF // IPA Extensions - * U+02B0 - U+02FF // Spacing Modifier Letters - * U+0300 - U+036F // Combining Diacritical Marks - * U+0370 - U+03FF // Greek and Coptic - * U+0400 - U+04FF // Cyrillic - * U+0500 - U+052F // Cyrillic Supplement - * U+1D00 - U+1D7F // Phonetic Extensions - * U+1D80 - U+1DBF // Phonetic Extensions Supplement - * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement - * U+1E00 - U+1EFF // Latin Extended Additional - * U+1F00 - U+1FFF // Greek Extended - * U+2000 - U+206F // General Punctuation - * U+2070 - U+209F // Superscripts and Subscripts - * U+20A0 - U+20CF // Currency Symbols - * U+2150 - U+218F // Number Forms - * U+2460 - U+24FF // Enclosed Alphanumerics - * U+2C60 - U+2C7F // Latin Extended-C - * U+2DE0 - U+2DFF // Cyrillic Extended-A - * U+2E00 - U+2E7F // Supplemental Punctuation - * U+A640 - U+A69F // Cyrillic Extended-B - * U+A720 - U+A7FF // Latin Extended-D - * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) - * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols - * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement - * } - * - * FT_AUTOHINTER_SCRIPT_CJK :: - * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old - * Vietnamese, and some other scripts. - * - * By default, characters from the following Unicode ranges are - * assigned to this submodule. - * - * { - * U+1100 - U+11FF // Hangul Jamo - * U+2E80 - U+2EFF // CJK Radicals Supplement - * U+2F00 - U+2FDF // Kangxi Radicals - * U+2FF0 - U+2FFF // Ideographic Description Characters - * U+3000 - U+303F // CJK Symbols and Punctuation - * U+3040 - U+309F // Hiragana - * U+30A0 - U+30FF // Katakana - * U+3100 - U+312F // Bopomofo - * U+3130 - U+318F // Hangul Compatibility Jamo - * U+3190 - U+319F // Kanbun - * U+31A0 - U+31BF // Bopomofo Extended - * U+31C0 - U+31EF // CJK Strokes - * U+31F0 - U+31FF // Katakana Phonetic Extensions - * U+3200 - U+32FF // Enclosed CJK Letters and Months - * U+3300 - U+33FF // CJK Compatibility - * U+3400 - U+4DBF // CJK Unified Ideographs Extension A - * U+4DC0 - U+4DFF // Yijing Hexagram Symbols - * U+4E00 - U+9FFF // CJK Unified Ideographs - * U+A960 - U+A97F // Hangul Jamo Extended-A - * U+AC00 - U+D7AF // Hangul Syllables - * U+D7B0 - U+D7FF // Hangul Jamo Extended-B - * U+F900 - U+FAFF // CJK Compatibility Ideographs - * U+FE10 - U+FE1F // Vertical forms - * U+FE30 - U+FE4F // CJK Compatibility Forms - * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms - * U+1B000 - U+1B0FF // Kana Supplement - * U+1D300 - U+1D35F // Tai Xuan Hing Symbols - * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement - * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B - * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C - * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D - * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement - * } - * - * FT_AUTOHINTER_SCRIPT_INDIC :: - * Apply the indic auto-hinter, covering all major scripts from the - * Indian sub-continent and some other related scripts like Thai, Lao, - * or Tibetan. - * - * By default, characters from the following Unicode ranges are - * assigned to this submodule. - * - * { - * U+0900 - U+0DFF // Indic Range - * U+0F00 - U+0FFF // Tibetan - * U+1900 - U+194F // Limbu - * U+1B80 - U+1BBF // Sundanese - * U+1C80 - U+1CDF // Meetei Mayak - * U+A800 - U+A82F // Syloti Nagri - * U+11800 - U+118DF // Sharada - * } - * - * Note that currently Indic support is rudimentary only, missing blue - * zone support. - * - */ -#define FT_AUTOHINTER_SCRIPT_NONE 0 -#define FT_AUTOHINTER_SCRIPT_LATIN 1 -#define FT_AUTOHINTER_SCRIPT_CJK 2 -#define FT_AUTOHINTER_SCRIPT_INDIC 3 - - - /************************************************************************** - * - * @struct: - * FT_Prop_GlyphToScriptMap - * - * @description: - * *Experimental* *only* - * - * The data exchange structure for the @glyph-to-script-map property. - * - */ - typedef struct FT_Prop_GlyphToScriptMap_ - { - FT_Face face; - FT_UShort* map; - - } FT_Prop_GlyphToScriptMap; - - - /************************************************************************** - * - * @property: - * fallback-script - * - * @description: - * *Experimental* *only* - * - * If no auto-hinter script module can be assigned to a glyph, a - * fallback script gets assigned to it (see also the - * @glyph-to-script-map property). By default, this is - * @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property, - * this fallback value can be changed. - * - * { - * FT_Library library; - * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "autofitter", - * "fallback-script", &fallback_script ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * It's important to use the right timing for changing this value: The - * creation of the glyph-to-script map that eventually uses the - * fallback script value gets triggered either by setting or reading a - * face-specific property like @glyph-to-script-map, or by auto-hinting - * any glyph from that face. In particular, if you have already created - * an @FT_Face structure but not loaded any glyph (using the - * auto-hinter), a change of the fallback script will affect this face. - * - */ - - - /************************************************************************** - * - * @property: - * default-script - * - * @description: - * *Experimental* *only* - * - * If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make - * the HarfBuzz library access OpenType features for getting better - * glyph coverages, this property sets the (auto-fitter) script to be - * used for the default (OpenType) script data of a font's GSUB table. - * Features for the default script are intended for all scripts not - * explicitly handled in GSUB; an example is a `dlig' feature, - * containing the combination of the characters `T', `E', and `L' to - * form a `TEL' ligature. - * - * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the - * `default-script' property, this default value can be changed. - * - * { - * FT_Library library; - * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "autofitter", - * "default-script", &default_script ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * It's important to use the right timing for changing this value: The - * creation of the glyph-to-script map that eventually uses the - * default script value gets triggered either by setting or reading a - * face-specific property like @glyph-to-script-map, or by auto-hinting - * any glyph from that face. In particular, if you have already created - * an @FT_Face structure but not loaded any glyph (using the - * auto-hinter), a change of the default script will affect this face. - * - */ - - - /************************************************************************** - * - * @property: - * increase-x-height - * - * @description: - * For ppem values in the range 6~<= ppem <= `increase-x-height', round - * up the font's x~height much more often than normally. If the value - * is set to~0, which is the default, this feature is switched off. Use - * this property to improve the legibility of small font sizes if - * necessary. - * - * { - * FT_Library library; - * FT_Face face; - * FT_Prop_IncreaseXHeight prop; - * - * - * FT_Init_FreeType( &library ); - * FT_New_Face( library, "foo.ttf", 0, &face ); - * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 ); - * - * prop.face = face; - * prop.limit = 14; - * - * FT_Property_Set( library, "autofitter", - * "increase-x-height", &prop ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * Set this value right after calling @FT_Set_Char_Size, but before - * loading any glyph (using the auto-hinter). - * - */ - - - /************************************************************************** - * - * @struct: - * FT_Prop_IncreaseXHeight - * - * @description: - * The data exchange structure for the @increase-x-height property. - * - */ - typedef struct FT_Prop_IncreaseXHeight_ - { - FT_Face face; - FT_UInt limit; - - } FT_Prop_IncreaseXHeight; - - - /************************************************************************** - * - * @property: - * warping - * - * @description: - * *Experimental* *only* - * - * If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to - * activate the warp hinting code in the auto-hinter, this property - * switches warping on and off. - * - * Warping only works in `light' auto-hinting mode. The idea of the - * code is to slightly scale and shift a glyph along the non-hinted - * dimension (which is usually the horizontal axis) so that as much of - * its segments are aligned (more or less) to the grid. To find out a - * glyph's optimal scaling and shifting value, various parameter - * combinations are tried and scored. - * - * By default, warping is off. The example below shows how to switch on - * warping (omitting the error handling). - * - * { - * FT_Library library; - * FT_Bool warping = 1; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "autofitter", - * "warping", &warping ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - * The warping code can also change advance widths. Have a look at the - * `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure - * for details on improving inter-glyph distances while rendering. - * - * Since warping is a global property of the auto-hinter it is best to - * change its value before rendering any face. Otherwise, you should - * reload all faces that get auto-hinted in `light' hinting mode. - * - */ - - - /************************************************************************** - * - * @property: - * no-stem-darkening[autofit] - * - * @description: - * *Experimental* *only,* *requires* *linear* *alpha* *blending* *and* - * *gamma* *correction* - * - * Stem darkening emboldens glyphs at smaller sizes to make them more - * readable on common low-DPI screens when using linear alpha blending - * and gamma correction, see @FT_Render_Glyph. When not using linear - * alpha blending and gamma correction, glyphs will appear heavy and - * fuzzy! - * - * Gamma correction essentially lightens fonts since shades of grey are - * shifted to higher pixel values (=~higher brightness) to match the - * original intention to the reality of our screens. The side-effect is - * that glyphs `thin out'. Mac OS~X and Adobe's proprietary font - * rendering library implement a counter-measure: stem darkening at - * smaller sizes where shades of gray dominate. By emboldening a glyph - * slightly in relation to its pixel size, individual pixels get higher - * coverage of filled-in outlines and are therefore `blacker'. This - * counteracts the `thinning out' of glyphs, making text remain readable - * at smaller sizes. All glyphs that pass through the auto-hinter will - * be emboldened unless this property is set to TRUE. - * - * See the description of the CFF driver for algorithmic details. Total - * consistency with the CFF driver is currently not achieved because the - * emboldening method differs and glyphs must be scaled down on the - * Y-axis to keep outline points inside their precomputed blue zones. - * The smaller the size (especially 9ppem and down), the higher the loss - * of emboldening versus the CFF driver. - * - */ - - - /************************************************************************** - * - * @property: - * darkening-parameters[autofit] - * - * @description: - * *Experimental* *only* - * - * See the description of the CFF driver for details. This - * implementation appropriates the - * CFF_CONFIG_OPTION_DARKENING_PARAMETER_* #defines for consistency. - * Note the differences described in @no-stem-darkening[autofit]. - * - */ - - - /* */ - - -FT_END_HEADER - -#endif /* FTAUTOH_H_ */ - - -/* END */ diff --git a/non-source/foreign/freetype2/freetype/ftbbox.h b/non-source/foreign/freetype2/freetype/ftbbox.h index 2a4d21441..12bbfa63a 100644 --- a/non-source/foreign/freetype2/freetype/ftbbox.h +++ b/non-source/foreign/freetype2/freetype/ftbbox.h @@ -1,38 +1,37 @@ -/***************************************************************************/ -/* */ -/* ftbbox.h */ -/* */ -/* FreeType exact bbox computation (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This component has a _single_ role: to compute exact outline bounding */ - /* boxes. */ - /* */ - /* It is separated from the rest of the engine for various technical */ - /* reasons. It may well be integrated in `ftoutln' later. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftbbox.h + * + * FreeType exact bbox computation (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This component has a _single_ role: to compute exact outline bounding + * boxes. + * + * It is separated from the rest of the engine for various technical + * reasons. It may well be integrated in 'ftoutln' later. + * + */ #ifndef FTBBOX_H_ #define FTBBOX_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -44,43 +43,44 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_BBox */ - /* */ - /* <Description> */ - /* Compute the exact bounding box of an outline. This is slower */ - /* than computing the control box. However, it uses an advanced */ - /* algorithm that returns _very_ quickly when the two boxes */ - /* coincide. Otherwise, the outline Bézier arcs are traversed to */ - /* extract their extrema. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source outline. */ - /* */ - /* <Output> */ - /* abbox :: The outline's exact bounding box. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If the font is tricky and the glyph has been loaded with */ - /* @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get */ - /* reasonable values for the BBox it is necessary to load the glyph */ - /* at a large ppem value (so that the hinting instructions can */ - /* properly shift and scale the subglyphs), then extracting the BBox, */ - /* which can be eventually converted back to font units. */ - /* */ + /************************************************************************** + * + * @section: + * outline_processing + * + */ + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_BBox + * + * @description: + * Compute the exact bounding box of an outline. This is slower than + * computing the control box. However, it uses an advanced algorithm + * that returns _very_ quickly when the two boxes coincide. Otherwise, + * the outline Bezier arcs are traversed to extract their extrema. + * + * @input: + * outline :: + * A pointer to the source outline. + * + * @output: + * abbox :: + * The outline's exact bounding box. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the font is tricky and the glyph has been loaded with + * @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get + * reasonable values for the BBox it is necessary to load the glyph at a + * large ppem value (so that the hinting instructions can properly shift + * and scale the subglyphs), then extracting the BBox, which can be + * eventually converted back to font units. + */ FT_EXPORT( FT_Error ) FT_Outline_Get_BBox( FT_Outline* outline, FT_BBox *abbox ); diff --git a/non-source/foreign/freetype2/freetype/ftbdf.h b/non-source/foreign/freetype2/freetype/ftbdf.h index 016dba086..6f63b0b1e 100644 --- a/non-source/foreign/freetype2/freetype/ftbdf.h +++ b/non-source/foreign/freetype2/freetype/ftbdf.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftbdf.h */ -/* */ -/* FreeType API for accessing BDF-specific strings (specification). */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftbdf.h + * + * FreeType API for accessing BDF-specific strings (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTBDF_H_ #define FTBDF_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -32,25 +31,25 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* bdf_fonts */ - /* */ - /* <Title> */ - /* BDF and PCF Files */ - /* */ - /* <Abstract> */ - /* BDF and PCF specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions specific to BDF */ - /* and PCF fonts. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * bdf_fonts + * + * @title: + * BDF and PCF Files + * + * @abstract: + * BDF and PCF specific API. + * + * @description: + * This section contains the declaration of functions specific to BDF and + * PCF fonts. + * + */ - /********************************************************************** + /************************************************************************** * * @enum: * BDF_PropertyType @@ -81,40 +80,40 @@ FT_BEGIN_HEADER } BDF_PropertyType; - /********************************************************************** + /************************************************************************** * * @type: * BDF_Property * * @description: - * A handle to a @BDF_PropertyRec structure to model a given - * BDF/PCF property. + * A handle to a @BDF_PropertyRec structure to model a given BDF/PCF + * property. */ typedef struct BDF_PropertyRec_* BDF_Property; - /********************************************************************** - * - * @struct: - * BDF_PropertyRec - * - * @description: - * This structure models a given BDF/PCF property. - * - * @fields: - * type :: - * The property type. - * - * u.atom :: - * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be - * NULL, indicating an empty string. - * - * u.integer :: - * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER. - * - * u.cardinal :: - * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL. - */ + /************************************************************************** + * + * @struct: + * BDF_PropertyRec + * + * @description: + * This structure models a given BDF/PCF property. + * + * @fields: + * type :: + * The property type. + * + * u.atom :: + * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be + * `NULL`, indicating an empty string. + * + * u.integer :: + * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER. + * + * u.cardinal :: + * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL. + */ typedef struct BDF_PropertyRec_ { BDF_PropertyType type; @@ -128,73 +127,76 @@ FT_BEGIN_HEADER } BDF_PropertyRec; - /********************************************************************** - * - * @function: - * FT_Get_BDF_Charset_ID - * - * @description: - * Retrieve a BDF font character set identity, according to - * the BDF specification. - * - * @input: - * face :: - * A handle to the input face. - * - * @output: - * acharset_encoding :: - * Charset encoding, as a C~string, owned by the face. - * - * acharset_registry :: - * Charset registry, as a C~string, owned by the face. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with BDF faces, returning an error otherwise. - */ + /************************************************************************** + * + * @function: + * FT_Get_BDF_Charset_ID + * + * @description: + * Retrieve a BDF font character set identity, according to the BDF + * specification. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * acharset_encoding :: + * Charset encoding, as a C~string, owned by the face. + * + * acharset_registry :: + * Charset registry, as a C~string, owned by the face. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with BDF faces, returning an error otherwise. + */ FT_EXPORT( FT_Error ) FT_Get_BDF_Charset_ID( FT_Face face, const char* *acharset_encoding, const char* *acharset_registry ); - /********************************************************************** - * - * @function: - * FT_Get_BDF_Property - * - * @description: - * Retrieve a BDF property from a BDF or PCF font file. - * - * @input: - * face :: A handle to the input face. - * - * name :: The property name. - * - * @output: - * aproperty :: The property. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function works with BDF _and_ PCF fonts. It returns an error - * otherwise. It also returns an error if the property is not in the - * font. - * - * A `property' is a either key-value pair within the STARTPROPERTIES - * ... ENDPROPERTIES block of a BDF font or a key-value pair from the - * `info->props' array within a `FontRec' structure of a PCF font. - * - * Integer properties are always stored as `signed' within PCF fonts; - * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value - * for BDF fonts only. - * - * In case of error, `aproperty->type' is always set to - * @BDF_PROPERTY_TYPE_NONE. - */ + /************************************************************************** + * + * @function: + * FT_Get_BDF_Property + * + * @description: + * Retrieve a BDF property from a BDF or PCF font file. + * + * @input: + * face :: + * A handle to the input face. + * + * name :: + * The property name. + * + * @output: + * aproperty :: + * The property. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function works with BDF _and_ PCF fonts. It returns an error + * otherwise. It also returns an error if the property is not in the + * font. + * + * A 'property' is a either key-value pair within the STARTPROPERTIES + * ... ENDPROPERTIES block of a BDF font or a key-value pair from the + * `info->props` array within a `FontRec` structure of a PCF font. + * + * Integer properties are always stored as 'signed' within PCF fonts; + * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value + * for BDF fonts only. + * + * In case of error, `aproperty->type` is always set to + * @BDF_PROPERTY_TYPE_NONE. + */ FT_EXPORT( FT_Error ) FT_Get_BDF_Property( FT_Face face, const char* prop_name, diff --git a/non-source/foreign/freetype2/freetype/ftbitmap.h b/non-source/foreign/freetype2/freetype/ftbitmap.h index 0eac7b9d7..df9d46265 100644 --- a/non-source/foreign/freetype2/freetype/ftbitmap.h +++ b/non-source/foreign/freetype2/freetype/ftbitmap.h @@ -1,27 +1,27 @@ -/***************************************************************************/ -/* */ -/* ftbitmap.h */ -/* */ -/* FreeType utility functions for bitmaps (specification). */ -/* */ -/* Copyright 2004-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftbitmap.h + * + * FreeType utility functions for bitmaps (specification). + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTBITMAP_H_ #define FTBITMAP_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> +#include <freetype/ftcolor.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -33,39 +33,46 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* bitmap_handling */ - /* */ - /* <Title> */ - /* Bitmap Handling */ - /* */ - /* <Abstract> */ - /* Handling FT_Bitmap objects. */ - /* */ - /* <Description> */ - /* This section contains functions for handling @FT_Bitmap objects. */ - /* Note that none of the functions changes the bitmap's `flow' (as */ - /* indicated by the sign of the `pitch' field in `FT_Bitmap'). */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Init */ - /* */ - /* <Description> */ - /* Initialize a pointer to an @FT_Bitmap structure. */ - /* */ - /* <InOut> */ - /* abitmap :: A pointer to the bitmap structure. */ - /* */ - /* <Note> */ - /* A deprecated name for the same function is `FT_Bitmap_New'. */ - /* */ + /************************************************************************** + * + * @section: + * bitmap_handling + * + * @title: + * Bitmap Handling + * + * @abstract: + * Handling FT_Bitmap objects. + * + * @description: + * This section contains functions for handling @FT_Bitmap objects, + * automatically adjusting the target's bitmap buffer size as needed. + * + * Note that none of the functions changes the bitmap's 'flow' (as + * indicated by the sign of the `pitch` field in @FT_Bitmap). + * + * To set the flow, assign an appropriate positive or negative value to + * the `pitch` field of the target @FT_Bitmap object after calling + * @FT_Bitmap_Init but before calling any of the other functions + * described here. + */ + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Init + * + * @description: + * Initialize a pointer to an @FT_Bitmap structure. + * + * @inout: + * abitmap :: + * A pointer to the bitmap structure. + * + * @note: + * A deprecated name for the same function is `FT_Bitmap_New`. + */ FT_EXPORT( void ) FT_Bitmap_Init( FT_Bitmap *abitmap ); @@ -75,66 +82,77 @@ FT_BEGIN_HEADER FT_Bitmap_New( FT_Bitmap *abitmap ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Copy */ - /* */ - /* <Description> */ - /* Copy a bitmap into another one. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* source :: A handle to the source bitmap. */ - /* */ - /* <Output> */ - /* target :: A handle to the target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Bitmap_Copy + * + * @description: + * Copy a bitmap into another one. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * A handle to the source bitmap. + * + * @output: + * target :: + * A handle to the target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ FT_EXPORT( FT_Error ) FT_Bitmap_Copy( FT_Library library, const FT_Bitmap *source, - FT_Bitmap *target); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Embolden */ - /* */ - /* <Description> */ - /* Embolden a bitmap. The new bitmap will be about `xStrength' */ - /* pixels wider and `yStrength' pixels higher. The left and bottom */ - /* borders are kept unchanged. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* xStrength :: How strong the glyph is emboldened horizontally. */ - /* Expressed in 26.6 pixel format. */ - /* */ - /* yStrength :: How strong the glyph is emboldened vertically. */ - /* Expressed in 26.6 pixel format. */ - /* */ - /* <InOut> */ - /* bitmap :: A handle to the target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The current implementation restricts `xStrength' to be less than */ - /* or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */ - /* */ - /* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, */ - /* you should call @FT_GlyphSlot_Own_Bitmap on the slot first. */ - /* */ - /* Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format */ - /* are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). */ - /* */ + FT_Bitmap *target ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Embolden + * + * @description: + * Embolden a bitmap. The new bitmap will be about `xStrength` pixels + * wider and `yStrength` pixels higher. The left and bottom borders are + * kept unchanged. + * + * @input: + * library :: + * A handle to a library object. + * + * xStrength :: + * How strong the glyph is emboldened horizontally. Expressed in 26.6 + * pixel format. + * + * yStrength :: + * How strong the glyph is emboldened vertically. Expressed in 26.6 + * pixel format. + * + * @inout: + * bitmap :: + * A handle to the target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The current implementation restricts `xStrength` to be less than or + * equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. + * + * If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, you + * should call @FT_GlyphSlot_Own_Bitmap on the slot first. + * + * Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format are + * converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). + */ FT_EXPORT( FT_Error ) FT_Bitmap_Embolden( FT_Library library, FT_Bitmap* bitmap, @@ -142,39 +160,46 @@ FT_BEGIN_HEADER FT_Pos yStrength ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Convert */ - /* */ - /* <Description> */ - /* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp */ - /* to a bitmap object with depth 8bpp, making the number of used */ - /* bytes line (a.k.a. the `pitch') a multiple of `alignment'. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* source :: The source bitmap. */ - /* */ - /* alignment :: The pitch of the bitmap is a multiple of this */ - /* parameter. Common values are 1, 2, or 4. */ - /* */ - /* <Output> */ - /* target :: The target bitmap. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* It is possible to call @FT_Bitmap_Convert multiple times without */ - /* calling @FT_Bitmap_Done (the memory is simply reallocated). */ - /* */ - /* Use @FT_Bitmap_Done to finally remove the bitmap object. */ - /* */ - /* The `library' argument is taken to have access to FreeType's */ - /* memory handling functions. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Bitmap_Convert + * + * @description: + * Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to + * a bitmap object with depth 8bpp, making the number of used bytes per + * line (a.k.a. the 'pitch') a multiple of `alignment`. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * The source bitmap. + * + * alignment :: + * The pitch of the bitmap is a multiple of this argument. Common + * values are 1, 2, or 4. + * + * @output: + * target :: + * The target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * It is possible to call @FT_Bitmap_Convert multiple times without + * calling @FT_Bitmap_Done (the memory is simply reallocated). + * + * Use @FT_Bitmap_Done to finally remove the bitmap object. + * + * The `library` argument is taken to have access to FreeType's memory + * handling functions. + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ FT_EXPORT( FT_Error ) FT_Bitmap_Convert( FT_Library library, const FT_Bitmap *source, @@ -182,48 +207,112 @@ FT_BEGIN_HEADER FT_Int alignment ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GlyphSlot_Own_Bitmap */ - /* */ - /* <Description> */ - /* Make sure that a glyph slot owns `slot->bitmap'. */ - /* */ - /* <Input> */ - /* slot :: The glyph slot. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function is to be used in combination with */ - /* @FT_Bitmap_Embolden. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Bitmap_Blend + * + * @description: + * Blend a bitmap onto another bitmap, using a given color. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * The source bitmap, which can have any @FT_Pixel_Mode format. + * + * source_offset :: + * The offset vector to the upper left corner of the source bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * color :: + * The color used to draw `source` onto `target`. + * + * @inout: + * target :: + * A handle to an `FT_Bitmap` object. It should be either initialized + * as empty with a call to @FT_Bitmap_Init, or it should be of type + * @FT_PIXEL_MODE_BGRA. + * + * atarget_offset :: + * The offset vector to the upper left corner of the target bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function doesn't perform clipping. + * + * The bitmap in `target` gets allocated or reallocated as needed; the + * vector `atarget_offset` is updated accordingly. + * + * In case of allocation or reallocation, the bitmap's pitch is set to + * `4 * width`. Both `source` and `target` must have the same bitmap + * flow (as indicated by the sign of the `pitch` field). + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Blend( FT_Library library, + const FT_Bitmap* source, + const FT_Vector source_offset, + FT_Bitmap* target, + FT_Vector *atarget_offset, + FT_Color color ); + + + /************************************************************************** + * + * @function: + * FT_GlyphSlot_Own_Bitmap + * + * @description: + * Make sure that a glyph slot owns `slot->bitmap`. + * + * @input: + * slot :: + * The glyph slot. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function is to be used in combination with @FT_Bitmap_Embolden. + */ FT_EXPORT( FT_Error ) FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Bitmap_Done */ - /* */ - /* <Description> */ - /* Destroy a bitmap object initialized with @FT_Bitmap_Init. */ - /* */ - /* <Input> */ - /* library :: A handle to a library object. */ - /* */ - /* bitmap :: The bitmap object to be freed. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The `library' argument is taken to have access to FreeType's */ - /* memory handling functions. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Bitmap_Done + * + * @description: + * Destroy a bitmap object initialized with @FT_Bitmap_Init. + * + * @input: + * library :: + * A handle to a library object. + * + * bitmap :: + * The bitmap object to be freed. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `library` argument is taken to have access to FreeType's memory + * handling functions. + */ FT_EXPORT( FT_Error ) FT_Bitmap_Done( FT_Library library, FT_Bitmap *bitmap ); diff --git a/non-source/foreign/freetype2/freetype/ftbzip2.h b/non-source/foreign/freetype2/freetype/ftbzip2.h index b7f2eee87..c5baea856 100644 --- a/non-source/foreign/freetype2/freetype/ftbzip2.h +++ b/non-source/foreign/freetype2/freetype/ftbzip2.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftbzip2.h */ -/* */ -/* Bzip2-compressed stream support. */ -/* */ -/* Copyright 2010-2016 by */ -/* Joel Klinghed. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftbzip2.h + * + * Bzip2-compressed stream support. + * + * Copyright (C) 2010-2024 by + * Joel Klinghed. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTBZIP2_H_ #define FTBZIP2_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -31,62 +30,63 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* bzip2 */ - /* */ - /* <Title> */ - /* BZIP2 Streams */ - /* */ - /* <Abstract> */ - /* Using bzip2-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Bzip2-specific functions. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * bzip2 + * + * @title: + * BZIP2 Streams + * + * @abstract: + * Using bzip2-compressed font files. + * + * @description: + * 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. + * + */ - /************************************************************************ - * - * @function: - * FT_Stream_OpenBzip2 - * - * @description: - * Open a new stream to parse bzip2-compressed font files. This is - * mainly used to support the compressed `*.pcf.bz2' fonts that come - * with XFree86. - * - * @input: - * stream :: - * The target embedding stream. - * - * source :: - * The source stream. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream. - * - * In certain builds of the library, bzip2 compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a bzip2 compressed stream - * from it and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with bzip2 support. - */ + /************************************************************************** + * + * @function: + * FT_Stream_OpenBzip2 + * + * @description: + * Open a new stream to parse bzip2-compressed font files. This is + * mainly used to support the compressed `*.pcf.bz2` fonts that come with + * XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with bzip2 support. + */ FT_EXPORT( FT_Error ) FT_Stream_OpenBzip2( FT_Stream stream, FT_Stream source ); diff --git a/non-source/foreign/freetype2/freetype/ftcache.h b/non-source/foreign/freetype2/freetype/ftcache.h index 6c9f2c42b..140df4c96 100644 --- a/non-source/foreign/freetype2/freetype/ftcache.h +++ b/non-source/foreign/freetype2/freetype/ftcache.h @@ -1,106 +1,105 @@ -/***************************************************************************/ -/* */ -/* ftcache.h */ -/* */ -/* FreeType Cache subsystem (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftcache.h + * + * FreeType Cache subsystem (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTCACHE_H_ #define FTCACHE_H_ -#include <ft2build.h> -#include FT_GLYPH_H +#include <freetype/ftglyph.h> FT_BEGIN_HEADER - /************************************************************************* + /************************************************************************** * - * <Section> - * cache_subsystem + * @section: + * cache_subsystem * - * <Title> - * Cache Sub-System + * @title: + * Cache Sub-System * - * <Abstract> - * How to cache face, size, and glyph data with FreeType~2. + * @abstract: + * How to cache face, size, and glyph data with FreeType~2. * - * <Description> + * @description: * This section describes the FreeType~2 cache sub-system, which is used * to limit the number of concurrently opened @FT_Face and @FT_Size * objects, as well as caching information like character maps and glyph * images while limiting their maximum memory usage. * - * Note that all types and functions begin with the `FTC_' prefix. + * Note that all types and functions begin with the `FTC_` prefix rather + * than the usual `FT_` prefix in the rest of FreeType. * - * The cache is highly portable and thus doesn't know anything about the - * fonts installed on your system, or how to access them. This implies - * the following scheme: + * The cache is highly portable and, thus, doesn't know anything about + * the fonts installed on your system, or how to access them. Therefore, + * it requires the following. * - * First, available or installed font faces are uniquely identified by - * @FTC_FaceID values, provided to the cache by the client. Note that - * the cache only stores and compares these values, and doesn't try to - * interpret them in any way. + * * @FTC_FaceID, an arbitrary non-zero value that uniquely identifies + * available or installed font faces, has to be provided to the + * cache by the client. Note that the cache only stores and compares + * these values and doesn't try to interpret them in any way, but they + * have to be persistent on the client side. * - * Second, the cache calls, only when needed, a client-provided function - * to convert an @FTC_FaceID into a new @FT_Face object. The latter is - * then completely managed by the cache, including its termination - * through @FT_Done_Face. To monitor termination of face objects, the - * finalizer callback in the `generic' field of the @FT_Face object can - * be used, which might also be used to store the @FTC_FaceID of the - * face. + * * @FTC_Face_Requester, a method to convert an @FTC_FaceID into a new + * @FT_Face object when necessary, has to be provided to the cache by + * the client. The @FT_Face object is completely managed by the cache, + * including its termination through @FT_Done_Face. To monitor + * termination of face objects, the finalizer callback in the `generic` + * field of the @FT_Face object can be used, which might also be used + * to store the @FTC_FaceID of the face. * - * Clients are free to map face IDs to anything else. The most simple - * usage is to associate them to a (pathname,face_index) pair that is - * used to call @FT_New_Face. However, more complex schemes are also - * possible. + * Clients are free to map face IDs to anything useful. The most simple + * usage is, for example, to associate them to a `{pathname,face_index}` + * pair that is then used by @FTC_Face_Requester to call @FT_New_Face. + * However, more complex schemes are also possible. * * Note that for the cache to work correctly, the face ID values must be - * *persistent*, which means that the contents they point to should not + * **persistent**, which means that the contents they point to should not * change at runtime, or that their value should not become invalid. - * * If this is unavoidable (e.g., when a font is uninstalled at runtime), - * you should call @FTC_Manager_RemoveFaceID as soon as possible, to let - * the cache get rid of any references to the old @FTC_FaceID it may - * keep internally. Failure to do so will lead to incorrect behaviour - * or even crashes. + * you should call @FTC_Manager_RemoveFaceID as soon as possible to let + * the cache get rid of any references to the old @FTC_FaceID it may keep + * internally. Failure to do so will lead to incorrect behaviour or even + * crashes in @FTC_Face_Requester. * * To use the cache, start with calling @FTC_Manager_New to create a new * @FTC_Manager object, which models a single cache instance. You can * then look up @FT_Face and @FT_Size objects with - * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively. - * - * If you want to use the charmap caching, call @FTC_CMapCache_New, then - * later use @FTC_CMapCache_Lookup to perform the equivalent of - * @FT_Get_Char_Index, only much faster. + * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively, and + * use them in any FreeType work stream. You can also cache other + * FreeType objects as follows. * - * If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then - * later use @FTC_ImageCache_Lookup to retrieve the corresponding - * @FT_Glyph objects from the cache. + * * If you want to use the charmap caching, call @FTC_CMapCache_New, + * then later use @FTC_CMapCache_Lookup to perform the equivalent of + * @FT_Get_Char_Index, only much faster. * - * If you need lots of small bitmaps, it is much more memory efficient - * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This - * returns @FTC_SBitRec structures, which are used to store small - * bitmaps directly. (A small bitmap is one whose metrics and - * dimensions all fit into 8-bit integers). + * * If you want to use the @FT_Glyph caching, call @FTC_ImageCache_New, + * then later use @FTC_ImageCache_Lookup to retrieve the corresponding + * @FT_Glyph objects from the cache. * - * We hope to also provide a kerning cache in the near future. + * * If you need lots of small bitmaps, it is much more memory-efficient + * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This + * returns @FTC_SBitRec structures, which are used to store small + * bitmaps directly. (A small bitmap is one whose metrics and + * dimensions all fit into 8-bit integers). * - * - * <Order> + * @order: * FTC_Manager * FTC_FaceID * FTC_Face_Requester @@ -142,19 +141,20 @@ FT_BEGIN_HEADER /*************************************************************************/ - /************************************************************************* + /************************************************************************** * - * @type: FTC_FaceID + * @type: + * FTC_FaceID * * @description: * An opaque pointer type that is used to identity face objects. The * contents of such objects is application-dependent. * - * These pointers are typically used to point to a user-defined - * structure containing a font file path, and face index. + * These pointers are typically used to point to a user-defined structure + * containing a font file path, and face index. * * @note: - * Never use NULL as a valid @FTC_FaceID. + * Never use `NULL` as a valid @FTC_FaceID. * * Face IDs are passed by the client to the cache manager that calls, * when needed, the @FTC_Face_Requester to translate them into new @@ -165,13 +165,13 @@ FT_BEGIN_HEADER * immediately call @FTC_Manager_RemoveFaceID before any other cache * function. * - * Failure to do so will result in incorrect behaviour or even - * memory leaks and crashes. + * Failure to do so will result in incorrect behaviour or even memory + * leaks and crashes. */ typedef FT_Pointer FTC_FaceID; - /************************************************************************ + /************************************************************************** * * @functype: * FTC_Face_Requester @@ -181,7 +181,7 @@ FT_BEGIN_HEADER * the cache manager to translate a given @FTC_FaceID into a new valid * @FT_Face object, on demand. * - * <Input> + * @input: * face_id :: * The face ID to resolve. * @@ -191,15 +191,15 @@ FT_BEGIN_HEADER * req_data :: * Application-provided request data (see note below). * - * <Output> + * @output: * aface :: * A new @FT_Face handle. * - * <Return> + * @return: * FreeType error code. 0~means success. * - * <Note> - * The third parameter `req_data' is the same as the one passed by the + * @note: + * The third parameter `req_data` is the same as the one passed by the * client when @FTC_Manager_New is called. * * The face requester should not perform funny things on the returned @@ -226,84 +226,90 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_Manager */ - /* */ - /* <Description> */ - /* This object corresponds to one instance of the cache-subsystem. */ - /* It is used to cache one or more @FT_Face objects, along with */ - /* corresponding @FT_Size objects. */ - /* */ - /* The manager intentionally limits the total number of opened */ - /* @FT_Face and @FT_Size objects to control memory usage. See the */ - /* `max_faces' and `max_sizes' parameters of @FTC_Manager_New. */ - /* */ - /* The manager is also used to cache `nodes' of various types while */ - /* limiting their total memory usage. */ - /* */ - /* All limitations are enforced by keeping lists of managed objects */ - /* in most-recently-used order, and flushing old nodes to make room */ - /* for new ones. */ - /* */ + /************************************************************************** + * + * @type: + * FTC_Manager + * + * @description: + * This object corresponds to one instance of the cache-subsystem. It is + * used to cache one or more @FT_Face objects, along with corresponding + * @FT_Size objects. + * + * The manager intentionally limits the total number of opened @FT_Face + * and @FT_Size objects to control memory usage. See the `max_faces` and + * `max_sizes` parameters of @FTC_Manager_New. + * + * The manager is also used to cache 'nodes' of various types while + * limiting their total memory usage. + * + * All limitations are enforced by keeping lists of managed objects in + * most-recently-used order, and flushing old nodes to make room for new + * ones. + */ typedef struct FTC_ManagerRec_* FTC_Manager; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_Node */ - /* */ - /* <Description> */ - /* An opaque handle to a cache node object. Each cache node is */ - /* reference-counted. A node with a count of~0 might be flushed */ - /* out of a full cache whenever a lookup request is performed. */ - /* */ - /* If you look up nodes, you have the ability to `acquire' them, */ - /* i.e., to increment their reference count. This will prevent the */ - /* node from being flushed out of the cache until you explicitly */ - /* `release' it (see @FTC_Node_Unref). */ - /* */ - /* See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. */ - /* */ + /************************************************************************** + * + * @type: + * FTC_Node + * + * @description: + * An opaque handle to a cache node object. Each cache node is + * reference-counted. A node with a count of~0 might be flushed out of a + * full cache whenever a lookup request is performed. + * + * If you look up nodes, you have the ability to 'acquire' them, i.e., to + * increment their reference count. This will prevent the node from + * being flushed out of the cache until you explicitly 'release' it (see + * @FTC_Node_Unref). + * + * See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. + */ typedef struct FTC_NodeRec_* FTC_Node; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_New */ - /* */ - /* <Description> */ - /* Create a new cache manager. */ - /* */ - /* <Input> */ - /* library :: The parent FreeType library handle to use. */ - /* */ - /* max_faces :: Maximum number of opened @FT_Face objects managed by */ - /* this cache instance. Use~0 for defaults. */ - /* */ - /* max_sizes :: Maximum number of opened @FT_Size objects managed by */ - /* this cache instance. Use~0 for defaults. */ - /* */ - /* max_bytes :: Maximum number of bytes to use for cached data nodes. */ - /* Use~0 for defaults. Note that this value does not */ - /* account for managed @FT_Face and @FT_Size objects. */ - /* */ - /* requester :: An application-provided callback used to translate */ - /* face IDs into real @FT_Face objects. */ - /* */ - /* req_data :: A generic pointer that is passed to the requester */ - /* each time it is called (see @FTC_Face_Requester). */ - /* */ - /* <Output> */ - /* amanager :: A handle to a new manager object. 0~in case of */ - /* failure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_Manager_New + * + * @description: + * Create a new cache manager. + * + * @input: + * library :: + * The parent FreeType library handle to use. + * + * max_faces :: + * Maximum number of opened @FT_Face objects managed by this cache + * instance. Use~0 for defaults. + * + * max_sizes :: + * Maximum number of opened @FT_Size objects managed by this cache + * instance. Use~0 for defaults. + * + * max_bytes :: + * Maximum number of bytes to use for cached data nodes. Use~0 for + * defaults. Note that this value does not account for managed + * @FT_Face and @FT_Size objects. + * + * requester :: + * An application-provided callback used to translate face IDs into + * real @FT_Face objects. + * + * req_data :: + * A generic pointer that is passed to the requester each time it is + * called (see @FTC_Face_Requester). + * + * @output: + * amanager :: + * A handle to a new manager object. 0~in case of failure. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FTC_Manager_New( FT_Library library, FT_UInt max_faces, @@ -314,114 +320,124 @@ FT_BEGIN_HEADER FTC_Manager *amanager ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_Reset */ - /* */ - /* <Description> */ - /* Empty a given cache manager. This simply gets rid of all the */ - /* currently cached @FT_Face and @FT_Size objects within the manager. */ - /* */ - /* <InOut> */ - /* manager :: A handle to the manager. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_Manager_Reset + * + * @description: + * Empty a given cache manager. This simply gets rid of all the + * currently cached @FT_Face and @FT_Size objects within the manager. + * + * @inout: + * manager :: + * A handle to the manager. + */ FT_EXPORT( void ) FTC_Manager_Reset( FTC_Manager manager ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_Done */ - /* */ - /* <Description> */ - /* Destroy a given manager after emptying it. */ - /* */ - /* <Input> */ - /* manager :: A handle to the target cache manager object. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_Manager_Done + * + * @description: + * Destroy a given manager after emptying it. + * + * @input: + * manager :: + * A handle to the target cache manager object. + */ FT_EXPORT( void ) FTC_Manager_Done( FTC_Manager manager ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_LookupFace */ - /* */ - /* <Description> */ - /* Retrieve the @FT_Face object that corresponds to a given face ID */ - /* through a cache manager. */ - /* */ - /* <Input> */ - /* manager :: A handle to the cache manager. */ - /* */ - /* face_id :: The ID of the face object. */ - /* */ - /* <Output> */ - /* aface :: A handle to the face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned @FT_Face object is always owned by the manager. You */ - /* should never try to discard it yourself. */ - /* */ - /* The @FT_Face object doesn't necessarily have a current size object */ - /* (i.e., face->size can be~0). If you need a specific `font size', */ - /* use @FTC_Manager_LookupSize instead. */ - /* */ - /* Never change the face's transformation matrix (i.e., never call */ - /* the @FT_Set_Transform function) on a returned face! If you need */ - /* to transform glyphs, do it yourself after glyph loading. */ - /* */ - /* When you perform a lookup, out-of-memory errors are detected */ - /* _within_ the lookup and force incremental flushes of the cache */ - /* until enough memory is released for the lookup to succeed. */ - /* */ - /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ - /* already been completely flushed, and still no memory was available */ - /* for the operation. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_Manager_LookupFace + * + * @description: + * Retrieve the @FT_Face object that corresponds to a given face ID + * through a cache manager. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * face_id :: + * The ID of the face object. + * + * @output: + * aface :: + * A handle to the face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned @FT_Face object is always owned by the manager. You + * should never try to discard it yourself. + * + * The @FT_Face object doesn't necessarily have a current size object + * (i.e., face->size can be~0). If you need a specific 'font size', use + * @FTC_Manager_LookupSize instead. + * + * Never change the face's transformation matrix (i.e., never call the + * @FT_Set_Transform function) on a returned face! If you need to + * transform glyphs, do it yourself after glyph loading. + * + * When you perform a lookup, out-of-memory errors are detected _within_ + * the lookup and force incremental flushes of the cache until enough + * memory is released for the lookup to succeed. + * + * If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already + * been completely flushed, and still no memory was available for the + * operation. + */ FT_EXPORT( FT_Error ) FTC_Manager_LookupFace( FTC_Manager manager, FTC_FaceID face_id, FT_Face *aface ); - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_ScalerRec */ - /* */ - /* <Description> */ - /* A structure used to describe a given character size in either */ - /* pixels or points to the cache manager. See */ - /* @FTC_Manager_LookupSize. */ - /* */ - /* <Fields> */ - /* face_id :: The source face ID. */ - /* */ - /* width :: The character width. */ - /* */ - /* height :: The character height. */ - /* */ - /* pixel :: A Boolean. If 1, the `width' and `height' fields are */ - /* interpreted as integer pixel character sizes. */ - /* Otherwise, they are expressed as 1/64th of points. */ - /* */ - /* x_res :: Only used when `pixel' is value~0 to indicate the */ - /* horizontal resolution in dpi. */ - /* */ - /* y_res :: Only used when `pixel' is value~0 to indicate the */ - /* vertical resolution in dpi. */ - /* */ - /* <Note> */ - /* This type is mainly used to retrieve @FT_Size objects through the */ - /* cache manager. */ - /* */ + /************************************************************************** + * + * @struct: + * FTC_ScalerRec + * + * @description: + * A structure used to describe a given character size in either pixels + * or points to the cache manager. See @FTC_Manager_LookupSize. + * + * @fields: + * face_id :: + * The source face ID. + * + * width :: + * The character width. + * + * height :: + * The character height. + * + * pixel :: + * A Boolean. If 1, the `width` and `height` fields are interpreted as + * integer pixel character sizes. Otherwise, they are expressed as + * 1/64 of points. + * + * x_res :: + * Only used when `pixel` is value~0 to indicate the horizontal + * resolution in dpi. + * + * y_res :: + * Only used when `pixel` is value~0 to indicate the vertical + * resolution in dpi. + * + * @note: + * This type is mainly used to retrieve @FT_Size objects through the + * cache manager. + */ typedef struct FTC_ScalerRec_ { FTC_FaceID face_id; @@ -434,89 +450,93 @@ FT_BEGIN_HEADER } FTC_ScalerRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_Scaler */ - /* */ - /* <Description> */ - /* A handle to an @FTC_ScalerRec structure. */ - /* */ + /************************************************************************** + * + * @struct: + * FTC_Scaler + * + * @description: + * A handle to an @FTC_ScalerRec structure. + */ typedef struct FTC_ScalerRec_* FTC_Scaler; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Manager_LookupSize */ - /* */ - /* <Description> */ - /* Retrieve the @FT_Size object that corresponds to a given */ - /* @FTC_ScalerRec pointer through a cache manager. */ - /* */ - /* <Input> */ - /* manager :: A handle to the cache manager. */ - /* */ - /* scaler :: A scaler handle. */ - /* */ - /* <Output> */ - /* asize :: A handle to the size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned @FT_Size object is always owned by the manager. You */ - /* should never try to discard it by yourself. */ - /* */ - /* You can access the parent @FT_Face object simply as `size->face' */ - /* if you need it. Note that this object is also owned by the */ - /* manager. */ - /* */ - /* <Note> */ - /* When you perform a lookup, out-of-memory errors are detected */ - /* _within_ the lookup and force incremental flushes of the cache */ - /* until enough memory is released for the lookup to succeed. */ - /* */ - /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ - /* already been completely flushed, and still no memory is available */ - /* for the operation. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_Manager_LookupSize + * + * @description: + * Retrieve the @FT_Size object that corresponds to a given + * @FTC_ScalerRec pointer through a cache manager. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * scaler :: + * A scaler handle. + * + * @output: + * asize :: + * A handle to the size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned @FT_Size object is always owned by the manager. You + * should never try to discard it by yourself. + * + * You can access the parent @FT_Face object simply as `size->face` if + * you need it. Note that this object is also owned by the manager. + * + * @note: + * When you perform a lookup, out-of-memory errors are detected _within_ + * the lookup and force incremental flushes of the cache until enough + * memory is released for the lookup to succeed. + * + * If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already + * been completely flushed, and still no memory is available for the + * operation. + */ FT_EXPORT( FT_Error ) FTC_Manager_LookupSize( FTC_Manager manager, FTC_Scaler scaler, FT_Size *asize ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_Node_Unref */ - /* */ - /* <Description> */ - /* Decrement a cache node's internal reference count. When the count */ - /* reaches 0, it is not destroyed but becomes eligible for subsequent */ - /* cache flushes. */ - /* */ - /* <Input> */ - /* node :: The cache node handle. */ - /* */ - /* manager :: The cache manager handle. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_Node_Unref + * + * @description: + * Decrement a cache node's internal reference count. When the count + * reaches 0, it is not destroyed but becomes eligible for subsequent + * cache flushes. + * + * @input: + * node :: + * The cache node handle. + * + * manager :: + * The cache manager handle. + */ FT_EXPORT( void ) FTC_Node_Unref( FTC_Node node, FTC_Manager manager ); - /************************************************************************* + /************************************************************************** * * @function: * FTC_Manager_RemoveFaceID * * @description: - * A special function used to indicate to the cache manager that - * a given @FTC_FaceID is no longer valid, either because its - * content changed, or because it was deallocated or uninstalled. + * A special function used to indicate to the cache manager that a given + * @FTC_FaceID is no longer valid, either because its content changed, or + * because it was deallocated or uninstalled. * * @input: * manager :: @@ -527,11 +547,11 @@ FT_BEGIN_HEADER * * @note: * This function flushes all nodes from the cache corresponding to this - * `face_id', with the exception of nodes with a non-null reference + * `face_id`, with the exception of nodes with a non-null reference * count. * - * Such nodes are however modified internally so as to never appear - * in later lookups with the same `face_id' value, and to be immediately + * Such nodes are however modified internally so as to never appear in + * later lookups with the same `face_id` value, and to be immediately * destroyed when released by all their users. * */ @@ -540,27 +560,20 @@ FT_BEGIN_HEADER FTC_FaceID face_id ); - /*************************************************************************/ - /* */ - /* <Section> */ - /* cache_subsystem */ - /* */ - /*************************************************************************/ - - /************************************************************************* + /************************************************************************** * * @type: * FTC_CMapCache * * @description: - * An opaque handle used to model a charmap cache. This cache is to - * hold character codes -> glyph indices mappings. + * An opaque handle used to model a charmap cache. This cache is to hold + * character codes -> glyph indices mappings. * */ typedef struct FTC_CMapCacheRec_* FTC_CMapCache; - /************************************************************************* + /************************************************************************** * * @function: * FTC_CMapCache_New @@ -574,7 +587,7 @@ FT_BEGIN_HEADER * * @output: * acache :: - * A new cache handle. NULL in case of error. + * A new cache handle. `NULL` in case of error. * * @return: * FreeType error code. 0~means success. @@ -589,7 +602,7 @@ FT_BEGIN_HEADER FTC_CMapCache *acache ); - /************************************************************************ + /************************************************************************** * * @function: * FTC_CMapCache_Lookup @@ -613,7 +626,7 @@ FT_BEGIN_HEADER * The character code (in the corresponding charmap). * * @return: - * Glyph index. 0~means `no glyph'. + * Glyph index. 0~means 'no glyph'. * */ FT_EXPORT( FT_UInt ) @@ -623,14 +636,6 @@ FT_BEGIN_HEADER FT_UInt32 char_code ); - /*************************************************************************/ - /* */ - /* <Section> */ - /* cache_subsystem */ - /* */ - /*************************************************************************/ - - /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ @@ -642,7 +647,7 @@ FT_BEGIN_HEADER /*************************************************************************/ - /************************************************************************* + /************************************************************************** * * @struct: * FTC_ImageTypeRec @@ -674,7 +679,7 @@ FT_BEGIN_HEADER } FTC_ImageTypeRec; - /************************************************************************* + /************************************************************************** * * @type: * FTC_ImageType @@ -695,83 +700,87 @@ FT_BEGIN_HEADER (d1)->flags == (d2)->flags ) - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_ImageCache */ - /* */ - /* <Description> */ - /* A handle to a glyph image cache object. They are designed to */ - /* hold many distinct glyph images while not exceeding a certain */ - /* memory threshold. */ - /* */ + /************************************************************************** + * + * @type: + * FTC_ImageCache + * + * @description: + * A handle to a glyph image cache object. They are designed to hold + * many distinct glyph images while not exceeding a certain memory + * threshold. + */ typedef struct FTC_ImageCacheRec_* FTC_ImageCache; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_New */ - /* */ - /* <Description> */ - /* Create a new glyph image cache. */ - /* */ - /* <Input> */ - /* manager :: The parent manager for the image cache. */ - /* */ - /* <Output> */ - /* acache :: A handle to the new glyph image cache object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_ImageCache_New + * + * @description: + * Create a new glyph image cache. + * + * @input: + * manager :: + * The parent manager for the image cache. + * + * @output: + * acache :: + * A handle to the new glyph image cache object. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FTC_ImageCache_New( FTC_Manager manager, FTC_ImageCache *acache ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_Lookup */ - /* */ - /* <Description> */ - /* Retrieve a given glyph image from a glyph image cache. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source glyph image cache. */ - /* */ - /* type :: A pointer to a glyph image type descriptor. */ - /* */ - /* gindex :: The glyph index to retrieve. */ - /* */ - /* <Output> */ - /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */ - /* failure. */ - /* */ - /* anode :: Used to return the address of of the corresponding cache */ - /* node after incrementing its reference count (see note */ - /* below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned glyph is owned and managed by the glyph image cache. */ - /* Never try to transform or discard it manually! You can however */ - /* create a copy with @FT_Glyph_Copy and modify the new one. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the glyph image, after increasing its reference */ - /* count. This ensures that the node (as well as the @FT_Glyph) will */ - /* always be kept in the cache until you call @FTC_Node_Unref to */ - /* `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the @FT_Glyph could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ + /************************************************************************** + * + * @function: + * FTC_ImageCache_Lookup + * + * @description: + * Retrieve a given glyph image from a glyph image cache. + * + * @input: + * cache :: + * A handle to the source glyph image cache. + * + * type :: + * A pointer to a glyph image type descriptor. + * + * gindex :: + * The glyph index to retrieve. + * + * @output: + * aglyph :: + * The corresponding @FT_Glyph object. 0~in case of failure. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned glyph is owned and managed by the glyph image cache. + * Never try to transform or discard it manually! You can however create + * a copy with @FT_Glyph_Copy and modify the new one. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the glyph image, after increasing its reference count. + * This ensures that the node (as well as the @FT_Glyph) will always be + * kept in the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the @FT_Glyph could be flushed out of the cache on the next call + * to one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ FT_EXPORT( FT_Error ) FTC_ImageCache_Lookup( FTC_ImageCache cache, FTC_ImageType type, @@ -780,54 +789,57 @@ FT_BEGIN_HEADER FTC_Node *anode ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_ImageCache_LookupScaler */ - /* */ - /* <Description> */ - /* A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec */ - /* to specify the face ID and its size. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source glyph image cache. */ - /* */ - /* scaler :: A pointer to a scaler descriptor. */ - /* */ - /* load_flags :: The corresponding load flags. */ - /* */ - /* gindex :: The glyph index to retrieve. */ - /* */ - /* <Output> */ - /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */ - /* failure. */ - /* */ - /* anode :: Used to return the address of of the corresponding */ - /* cache node after incrementing its reference count */ - /* (see note below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The returned glyph is owned and managed by the glyph image cache. */ - /* Never try to transform or discard it manually! You can however */ - /* create a copy with @FT_Glyph_Copy and modify the new one. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the glyph image, after increasing its reference */ - /* count. This ensures that the node (as well as the @FT_Glyph) will */ - /* always be kept in the cache until you call @FTC_Node_Unref to */ - /* `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the @FT_Glyph could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ - /* Calls to @FT_Set_Char_Size and friends have no effect on cached */ - /* glyphs; you should always use the FreeType cache API instead. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_ImageCache_LookupScaler + * + * @description: + * A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec to + * specify the face ID and its size. + * + * @input: + * cache :: + * A handle to the source glyph image cache. + * + * scaler :: + * A pointer to a scaler descriptor. + * + * load_flags :: + * The corresponding load flags. + * + * gindex :: + * The glyph index to retrieve. + * + * @output: + * aglyph :: + * The corresponding @FT_Glyph object. 0~in case of failure. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned glyph is owned and managed by the glyph image cache. + * Never try to transform or discard it manually! You can however create + * a copy with @FT_Glyph_Copy and modify the new one. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the glyph image, after increasing its reference count. + * This ensures that the node (as well as the @FT_Glyph) will always be + * kept in the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the @FT_Glyph could be flushed out of the cache on the next call + * to one of the caching sub-system APIs. Don't assume that it is + * persistent! + * + * Calls to @FT_Set_Char_Size and friends have no effect on cached + * glyphs; you should always use the FreeType cache API instead. + */ FT_EXPORT( FT_Error ) FTC_ImageCache_LookupScaler( FTC_ImageCache cache, FTC_Scaler scaler, @@ -837,53 +849,60 @@ FT_BEGIN_HEADER FTC_Node *anode ); - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_SBit */ - /* */ - /* <Description> */ - /* A handle to a small bitmap descriptor. See the @FTC_SBitRec */ - /* structure for details. */ - /* */ + /************************************************************************** + * + * @type: + * FTC_SBit + * + * @description: + * A handle to a small bitmap descriptor. See the @FTC_SBitRec structure + * for details. + */ typedef struct FTC_SBitRec_* FTC_SBit; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FTC_SBitRec */ - /* */ - /* <Description> */ - /* A very compact structure used to describe a small glyph bitmap. */ - /* */ - /* <Fields> */ - /* width :: The bitmap width in pixels. */ - /* */ - /* height :: The bitmap height in pixels. */ - /* */ - /* left :: The horizontal distance from the pen position to the */ - /* left bitmap border (a.k.a. `left side bearing', or */ - /* `lsb'). */ - /* */ - /* top :: The vertical distance from the pen position (on the */ - /* baseline) to the upper bitmap border (a.k.a. `top */ - /* side bearing'). The distance is positive for upwards */ - /* y~coordinates. */ - /* */ - /* format :: The format of the glyph bitmap (monochrome or gray). */ - /* */ - /* max_grays :: Maximum gray level value (in the range 1 to~255). */ - /* */ - /* pitch :: The number of bytes per bitmap line. May be positive */ - /* or negative. */ - /* */ - /* xadvance :: The horizontal advance width in pixels. */ - /* */ - /* yadvance :: The vertical advance height in pixels. */ - /* */ - /* buffer :: A pointer to the bitmap pixels. */ - /* */ + /************************************************************************** + * + * @struct: + * FTC_SBitRec + * + * @description: + * A very compact structure used to describe a small glyph bitmap. + * + * @fields: + * width :: + * The bitmap width in pixels. + * + * height :: + * The bitmap height in pixels. + * + * left :: + * The horizontal distance from the pen position to the left bitmap + * border (a.k.a. 'left side bearing', or 'lsb'). + * + * top :: + * The vertical distance from the pen position (on the baseline) to the + * upper bitmap border (a.k.a. 'top side bearing'). The distance is + * positive for upwards y~coordinates. + * + * format :: + * The format of the glyph bitmap (monochrome or gray). + * + * max_grays :: + * Maximum gray level value (in the range 1 to~255). + * + * pitch :: + * The number of bytes per bitmap line. May be positive or negative. + * + * xadvance :: + * The horizontal advance width in pixels. + * + * yadvance :: + * The vertical advance height in pixels. + * + * buffer :: + * A pointer to the bitmap pixels. + */ typedef struct FTC_SBitRec_ { FT_Byte width; @@ -902,87 +921,93 @@ FT_BEGIN_HEADER } FTC_SBitRec; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FTC_SBitCache */ - /* */ - /* <Description> */ - /* A handle to a small bitmap cache. These are special cache objects */ - /* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */ - /* much more efficient way than the traditional glyph image cache */ - /* implemented by @FTC_ImageCache. */ - /* */ + /************************************************************************** + * + * @type: + * FTC_SBitCache + * + * @description: + * A handle to a small bitmap cache. These are special cache objects + * used to store small glyph bitmaps (and anti-aliased pixmaps) in a much + * more efficient way than the traditional glyph image cache implemented + * by @FTC_ImageCache. + */ typedef struct FTC_SBitCacheRec_* FTC_SBitCache; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_New */ - /* */ - /* <Description> */ - /* Create a new cache to store small glyph bitmaps. */ - /* */ - /* <Input> */ - /* manager :: A handle to the source cache manager. */ - /* */ - /* <Output> */ - /* acache :: A handle to the new sbit cache. NULL in case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FTC_SBitCache_New + * + * @description: + * Create a new cache to store small glyph bitmaps. + * + * @input: + * manager :: + * A handle to the source cache manager. + * + * @output: + * acache :: + * A handle to the new sbit cache. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FTC_SBitCache_New( FTC_Manager manager, FTC_SBitCache *acache ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_Lookup */ - /* */ - /* <Description> */ - /* Look up a given small glyph bitmap in a given sbit cache and */ - /* `lock' it to prevent its flushing from the cache until needed. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source sbit cache. */ - /* */ - /* type :: A pointer to the glyph image type descriptor. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* <Output> */ - /* sbit :: A handle to a small bitmap descriptor. */ - /* */ - /* anode :: Used to return the address of of the corresponding cache */ - /* node after incrementing its reference count (see note */ - /* below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The small bitmap descriptor and its bit buffer are owned by the */ - /* cache and should never be freed by the application. They might */ - /* as well disappear from memory on the next cache lookup, so don't */ - /* treat them as persistent data. */ - /* */ - /* The descriptor's `buffer' field is set to~0 to indicate a missing */ - /* glyph bitmap. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the bitmap, after increasing its reference count. */ - /* This ensures that the node (as well as the image) will always be */ - /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the bitmap could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ + /************************************************************************** + * + * @function: + * FTC_SBitCache_Lookup + * + * @description: + * Look up a given small glyph bitmap in a given sbit cache and 'lock' it + * to prevent its flushing from the cache until needed. + * + * @input: + * cache :: + * A handle to the source sbit cache. + * + * type :: + * A pointer to the glyph image type descriptor. + * + * gindex :: + * The glyph index. + * + * @output: + * sbit :: + * A handle to a small bitmap descriptor. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The small bitmap descriptor and its bit buffer are owned by the cache + * and should never be freed by the application. They might as well + * disappear from memory on the next cache lookup, so don't treat them as + * persistent data. + * + * The descriptor's `buffer` field is set to~0 to indicate a missing + * glyph bitmap. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the bitmap, after increasing its reference count. This + * ensures that the node (as well as the image) will always be kept in + * the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the bitmap could be flushed out of the cache on the next call to + * one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ FT_EXPORT( FT_Error ) FTC_SBitCache_Lookup( FTC_SBitCache cache, FTC_ImageType type, @@ -991,53 +1016,58 @@ FT_BEGIN_HEADER FTC_Node *anode ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FTC_SBitCache_LookupScaler */ - /* */ - /* <Description> */ - /* A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec */ - /* to specify the face ID and its size. */ - /* */ - /* <Input> */ - /* cache :: A handle to the source sbit cache. */ - /* */ - /* scaler :: A pointer to the scaler descriptor. */ - /* */ - /* load_flags :: The corresponding load flags. */ - /* */ - /* gindex :: The glyph index. */ - /* */ - /* <Output> */ - /* sbit :: A handle to a small bitmap descriptor. */ - /* */ - /* anode :: Used to return the address of of the corresponding */ - /* cache node after incrementing its reference count */ - /* (see note below). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The small bitmap descriptor and its bit buffer are owned by the */ - /* cache and should never be freed by the application. They might */ - /* as well disappear from memory on the next cache lookup, so don't */ - /* treat them as persistent data. */ - /* */ - /* The descriptor's `buffer' field is set to~0 to indicate a missing */ - /* glyph bitmap. */ - /* */ - /* If `anode' is _not_ NULL, it receives the address of the cache */ - /* node containing the bitmap, after increasing its reference count. */ - /* This ensures that the node (as well as the image) will always be */ - /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ - /* */ - /* If `anode' is NULL, the cache node is left unchanged, which means */ - /* that the bitmap could be flushed out of the cache on the next */ - /* call to one of the caching sub-system APIs. Don't assume that it */ - /* is persistent! */ - /* */ + /************************************************************************** + * + * @function: + * FTC_SBitCache_LookupScaler + * + * @description: + * A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec to + * specify the face ID and its size. + * + * @input: + * cache :: + * A handle to the source sbit cache. + * + * scaler :: + * A pointer to the scaler descriptor. + * + * load_flags :: + * The corresponding load flags. + * + * gindex :: + * The glyph index. + * + * @output: + * sbit :: + * A handle to a small bitmap descriptor. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The small bitmap descriptor and its bit buffer are owned by the cache + * and should never be freed by the application. They might as well + * disappear from memory on the next cache lookup, so don't treat them as + * persistent data. + * + * The descriptor's `buffer` field is set to~0 to indicate a missing + * glyph bitmap. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the bitmap, after increasing its reference count. This + * ensures that the node (as well as the image) will always be kept in + * the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the bitmap could be flushed out of the cache on the next call to + * one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ FT_EXPORT( FT_Error ) FTC_SBitCache_LookupScaler( FTC_SBitCache cache, FTC_Scaler scaler, diff --git a/non-source/foreign/freetype2/freetype/ftcffdrv.h b/non-source/foreign/freetype2/freetype/ftcffdrv.h deleted file mode 100644 index 9dea980ab..000000000 --- a/non-source/foreign/freetype2/freetype/ftcffdrv.h +++ /dev/null @@ -1,262 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftcffdrv.h */ -/* */ -/* FreeType API for controlling the CFF driver (specification only). */ -/* */ -/* Copyright 2013-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef FTCFFDRV_H_ -#define FTCFFDRV_H_ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * @section: - * cff_driver - * - * @title: - * The CFF driver - * - * @abstract: - * Controlling the CFF driver module. - * - * @description: - * While FreeType's CFF driver doesn't expose API functions by itself, - * it is possible to control its behaviour with @FT_Property_Set and - * @FT_Property_Get. The list below gives the available properties - * together with the necessary macros and structures. - * - * The CFF driver's module name is `cff'. - * - * *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine* - * - * The rasterizer is positioning horizontal features (e.g., ascender - * height & x-height, or crossbars) on the pixel grid and minimizing the - * amount of antialiasing applied to them, while placing vertical - * features (vertical stems) on the pixel grid without hinting, thus - * representing the stem position and weight accurately. Sometimes the - * vertical stems may be only partially black. In this context, - * `antialiasing' means that stems are not positioned exactly on pixel - * borders, causing a fuzzy appearance. - * - * There are two principles behind this approach. - * - * 1) No hinting in the horizontal direction: Unlike `superhinted' - * TrueType, which changes glyph widths to accommodate regular - * inter-glyph spacing, Adobe's approach is `faithful to the design' in - * representing both the glyph width and the inter-glyph spacing - * designed for the font. This makes the screen display as close as it - * can be to the result one would get with infinite resolution, while - * preserving what is considered the key characteristics of each glyph. - * Note that the distances between unhinted and grid-fitted positions at - * small sizes are comparable to kerning values and thus would be - * noticeable (and distracting) while reading if hinting were applied. - * - * One of the reasons to not hint horizontally is antialiasing for LCD - * screens: The pixel geometry of modern displays supplies three - * vertical sub-pixels as the eye moves horizontally across each visible - * pixel. On devices where we can be certain this characteristic is - * present a rasterizer can take advantage of the sub-pixels to add - * increments of weight. In Western writing systems this turns out to - * be the more critical direction anyway; the weights and spacing of - * vertical stems (see above) are central to Armenian, Cyrillic, Greek, - * and Latin type designs. Even when the rasterizer uses greyscale - * antialiasing instead of color (a necessary compromise when one - * doesn't know the screen characteristics), the unhinted vertical - * features preserve the design's weight and spacing much better than - * aliased type would. - * - * 2) Aligment in the vertical direction: Weights and spacing along the - * y~axis are less critical; what is much more important is the visual - * alignment of related features (like cap-height and x-height). The - * sense of alignment for these is enhanced by the sharpness of grid-fit - * edges, while the cruder vertical resolution (full pixels instead of - * 1/3 pixels) is less of a problem. - * - * On the technical side, horizontal alignment zones for ascender, - * x-height, and other important height values (traditionally called - * `blue zones') as defined in the font are positioned independently, - * each being rounded to the nearest pixel edge, taking care of - * overshoot suppression at small sizes, stem darkening, and scaling. - * - * Hstems (this is, hint values defined in the font to help align - * horizontal features) that fall within a blue zone are said to be - * `captured' and are aligned to that zone. Uncaptured stems are moved - * in one of four ways, top edge up or down, bottom edge up or down. - * Unless there are conflicting hstems, the smallest movement is taken - * to minimize distortion. - * - * @order: - * hinting-engine - * no-stem-darkening[cff] - * darkening-parameters[cff] - * - */ - - - /************************************************************************** - * - * @property: - * hinting-engine - * - * @description: - * Thanks to Adobe, which contributed a new hinting (and parsing) - * engine, an application can select between `freetype' and `adobe' if - * compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration - * macro isn't defined, `hinting-engine' does nothing. - * - * The default engine is `freetype' if CFF_CONFIG_OPTION_OLD_ENGINE is - * defined, and `adobe' otherwise. - * - * The following example code demonstrates how to select Adobe's hinting - * engine (omitting the error handling). - * - * { - * FT_Library library; - * FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "cff", - * "hinting-engine", &hinting_engine ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - - /************************************************************************** - * - * @enum: - * FT_CFF_HINTING_XXX - * - * @description: - * A list of constants used for the @hinting-engine property to select - * the hinting engine for CFF fonts. - * - * @values: - * FT_CFF_HINTING_FREETYPE :: - * Use the old FreeType hinting engine. - * - * FT_CFF_HINTING_ADOBE :: - * Use the hinting engine contributed by Adobe. - * - */ -#define FT_CFF_HINTING_FREETYPE 0 -#define FT_CFF_HINTING_ADOBE 1 - - - /************************************************************************** - * - * @property: - * no-stem-darkening[cff] - * - * @description: - * By default, the Adobe CFF engine darkens stems at smaller sizes, - * regardless of hinting, to enhance contrast. This feature requires - * a rendering system with proper gamma correction. Setting this - * property, stem darkening gets switched off. - * - * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set. - * - * { - * FT_Library library; - * FT_Bool no_stem_darkening = TRUE; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "cff", - * "no-stem-darkening", &no_stem_darkening ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - - /************************************************************************** - * - * @property: - * darkening-parameters[cff] - * - * @description: - * By default, the Adobe CFF engine darkens stems as follows (if the - * `no-stem-darkening' property isn't set): - * - * { - * stem width <= 0.5px: darkening amount = 0.4px - * stem width = 1px: darkening amount = 0.275px - * stem width = 1.667px: darkening amount = 0.275px - * stem width >= 2.333px: darkening amount = 0px - * } - * - * and piecewise linear in-between. At configuration time, these four - * control points can be set with the macro - * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'. At runtime, the control - * points can be changed using the `darkening-parameters' property, as - * the following example demonstrates. - * - * { - * FT_Library library; - * FT_Int darken_params[8] = { 500, 300, // x1, y1 - * 1000, 200, // x2, y2 - * 1500, 100, // x3, y3 - * 2000, 0 }; // x4, y4 - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "cff", - * "darkening-parameters", darken_params ); - * } - * - * The x~values give the stem width, and the y~values the darkening - * amount. The unit is 1000th of pixels. All coordinate values must be - * positive; the x~values must be monotonically increasing; the - * y~values must be monotonically decreasing and smaller than or - * equal to 500 (corresponding to half a pixel); the slope of each - * linear piece must be shallower than -1 (e.g., -.4). - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - /* */ - - -FT_END_HEADER - - -#endif /* FTCFFDRV_H_ */ - - -/* END */ diff --git a/non-source/foreign/freetype2/freetype/ftchapters.h b/non-source/foreign/freetype2/freetype/ftchapters.h index ab4389530..7566fbd10 100644 --- a/non-source/foreign/freetype2/freetype/ftchapters.h +++ b/non-source/foreign/freetype2/freetype/ftchapters.h @@ -1,135 +1,168 @@ -/***************************************************************************/ -/* */ -/* This file defines the structure of the FreeType reference. */ -/* It is used by the python script that generates the HTML files. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* general_remarks */ -/* */ -/* <Title> */ -/* General Remarks */ -/* */ -/* <Sections> */ -/* header_inclusion */ -/* user_allocation */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* core_api */ -/* */ -/* <Title> */ -/* Core API */ -/* */ -/* <Sections> */ -/* version */ -/* basic_types */ -/* base_interface */ -/* glyph_variants */ -/* glyph_management */ -/* mac_specific */ -/* sizes_management */ -/* header_file_macros */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* format_specific */ -/* */ -/* <Title> */ -/* Format-Specific API */ -/* */ -/* <Sections> */ -/* multiple_masters */ -/* truetype_tables */ -/* type1_tables */ -/* sfnt_names */ -/* bdf_fonts */ -/* cid_fonts */ -/* pfr_fonts */ -/* winfnt_fonts */ -/* font_formats */ -/* gasp_table */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* module_specific */ -/* */ -/* <Title> */ -/* Controlling FreeType Modules */ -/* */ -/* <Sections> */ -/* auto_hinter */ -/* cff_driver */ -/* tt_driver */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* cache_subsystem */ -/* */ -/* <Title> */ -/* Cache Sub-System */ -/* */ -/* <Sections> */ -/* cache_subsystem */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* support_api */ -/* */ -/* <Title> */ -/* Support API */ -/* */ -/* <Sections> */ -/* computations */ -/* list_processing */ -/* outline_processing */ -/* quick_advance */ -/* bitmap_handling */ -/* raster */ -/* glyph_stroker */ -/* system_interface */ -/* module_management */ -/* gzip */ -/* lzw */ -/* bzip2 */ -/* lcd_filtering */ -/* */ -/***************************************************************************/ - -/***************************************************************************/ -/* */ -/* <Chapter> */ -/* error_codes */ -/* */ -/* <Title> */ -/* Error Codes */ -/* */ -/* <Sections> */ -/* error_enumerations */ -/* error_code_values */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * This file defines the structure of the FreeType reference. + * It is used by the python script that generates the HTML files. + * + */ + + + /************************************************************************** + * + * @chapter: + * general_remarks + * + * @title: + * General Remarks + * + * @sections: + * preamble + * header_inclusion + * user_allocation + * + */ + + + /************************************************************************** + * + * @chapter: + * core_api + * + * @title: + * Core API + * + * @sections: + * basic_types + * library_setup + * face_creation + * font_testing_macros + * sizing_and_scaling + * glyph_retrieval + * character_mapping + * information_retrieval + * other_api_data + * + */ + + + /************************************************************************** + * + * @chapter: + * extended_api + * + * @title: + * Extended API + * + * @sections: + * glyph_variants + * color_management + * layer_management + * glyph_management + * mac_specific + * sizes_management + * header_file_macros + * + */ + + + /************************************************************************** + * + * @chapter: + * format_specific + * + * @title: + * Format-Specific API + * + * @sections: + * multiple_masters + * truetype_tables + * type1_tables + * sfnt_names + * bdf_fonts + * cid_fonts + * pfr_fonts + * winfnt_fonts + * svg_fonts + * font_formats + * gasp_table + * + */ + + + /************************************************************************** + * + * @chapter: + * module_specific + * + * @title: + * Controlling FreeType Modules + * + * @sections: + * auto_hinter + * cff_driver + * t1_cid_driver + * tt_driver + * pcf_driver + * ot_svg_driver + * properties + * parameter_tags + * lcd_rendering + * + */ + + + /************************************************************************** + * + * @chapter: + * cache_subsystem + * + * @title: + * Cache Sub-System + * + * @sections: + * cache_subsystem + * + */ + + + /************************************************************************** + * + * @chapter: + * support_api + * + * @title: + * Support API + * + * @sections: + * computations + * list_processing + * outline_processing + * quick_advance + * bitmap_handling + * raster + * glyph_stroker + * system_interface + * module_management + * gzip + * lzw + * bzip2 + * debugging_apis + * + */ + + + /************************************************************************** + * + * @chapter: + * error_codes + * + * @title: + * Error Codes + * + * @sections: + * error_enumerations + * error_code_values + * + */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/ftcid.h b/non-source/foreign/freetype2/freetype/ftcid.h index 140f2f87f..96b2a90fc 100644 --- a/non-source/foreign/freetype2/freetype/ftcid.h +++ b/non-source/foreign/freetype2/freetype/ftcid.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftcid.h */ -/* */ -/* FreeType API for accessing CID font information (specification). */ -/* */ -/* Copyright 2007-2016 by */ -/* Dereg Clegg and Michael Toftdal. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftcid.h + * + * FreeType API for accessing CID font information (specification). + * + * Copyright (C) 2007-2024 by + * Dereg Clegg and Michael Toftdal. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTCID_H_ #define FTCID_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -32,25 +31,25 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* cid_fonts */ - /* */ - /* <Title> */ - /* CID Fonts */ - /* */ - /* <Abstract> */ - /* CID-keyed font specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of CID-keyed font specific */ - /* functions. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * cid_fonts + * + * @title: + * CID Fonts + * + * @abstract: + * CID-keyed font-specific API. + * + * @description: + * This section contains the declaration of CID-keyed font-specific + * functions. + * + */ - /********************************************************************** + /************************************************************************** * * @function: * FT_Get_CID_Registry_Ordering_Supplement @@ -61,17 +60,17 @@ FT_BEGIN_HEADER * * @input: * face :: - * A handle to the input face. + * A handle to the input face. * * @output: * registry :: - * The registry, as a C~string, owned by the face. + * The registry, as a C~string, owned by the face. * * ordering :: - * The ordering, as a C~string, owned by the face. + * The ordering, as a C~string, owned by the face. * * supplement :: - * The supplement. + * The supplement. * * @return: * FreeType error code. 0~means success. @@ -87,33 +86,33 @@ FT_BEGIN_HEADER FT_Get_CID_Registry_Ordering_Supplement( FT_Face face, const char* *registry, const char* *ordering, - FT_Int *supplement); + FT_Int *supplement ); - /********************************************************************** + /************************************************************************** * * @function: * FT_Get_CID_Is_Internally_CID_Keyed * * @description: - * Retrieve the type of the input face, CID keyed or not. In - * constrast to the @FT_IS_CID_KEYED macro this function returns - * successfully also for CID-keyed fonts in an SNFT wrapper. + * Retrieve the type of the input face, CID keyed or not. In contrast + * to the @FT_IS_CID_KEYED macro this function returns successfully also + * for CID-keyed fonts in an SFNT wrapper. * * @input: * face :: - * A handle to the input face. + * A handle to the input face. * * @output: * is_cid :: - * The type of the face as an @FT_Bool. + * The type of the face as an @FT_Bool. * * @return: * FreeType error code. 0~means success. * * @note: - * This function only works with CID faces and OpenType fonts, - * returning an error otherwise. + * This function only works with CID faces and OpenType fonts, returning + * an error otherwise. * * @since: * 2.3.9 @@ -123,7 +122,7 @@ FT_BEGIN_HEADER FT_Bool *is_cid ); - /********************************************************************** + /************************************************************************** * * @function: * FT_Get_CID_From_Glyph_Index @@ -133,21 +132,21 @@ FT_BEGIN_HEADER * * @input: * face :: - * A handle to the input face. + * A handle to the input face. * * glyph_index :: - * The input glyph index. + * The input glyph index. * * @output: * cid :: - * The CID as an @FT_UInt. + * The CID as an @FT_UInt. * * @return: * FreeType error code. 0~means success. * * @note: - * This function only works with CID faces and OpenType fonts, - * returning an error otherwise. + * This function only works with CID faces and OpenType fonts, returning + * an error otherwise. * * @since: * 2.3.9 diff --git a/non-source/foreign/freetype2/freetype/ftcolor.h b/non-source/foreign/freetype2/freetype/ftcolor.h new file mode 100644 index 000000000..420720ddf --- /dev/null +++ b/non-source/foreign/freetype2/freetype/ftcolor.h @@ -0,0 +1,1667 @@ +/**************************************************************************** + * + * ftcolor.h + * + * FreeType's glyph color management (specification). + * + * Copyright (C) 2018-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTCOLOR_H_ +#define FTCOLOR_H_ + +#include <freetype/freetype.h> + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * color_management + * + * @title: + * Glyph Color Management + * + * @abstract: + * Retrieving and manipulating OpenType's 'CPAL' table data. + * + * @description: + * The functions described here allow access and manipulation of color + * palette entries in OpenType's 'CPAL' tables. + */ + + + /************************************************************************** + * + * @struct: + * FT_Color + * + * @description: + * This structure models a BGRA color value of a 'CPAL' palette entry. + * + * The used color space is sRGB; the colors are not pre-multiplied, and + * alpha values must be explicitly set. + * + * @fields: + * blue :: + * Blue value. + * + * green :: + * Green value. + * + * red :: + * Red value. + * + * alpha :: + * Alpha value, giving the red, green, and blue color's opacity. + * + * @since: + * 2.10 + */ + typedef struct FT_Color_ + { + FT_Byte blue; + FT_Byte green; + FT_Byte red; + FT_Byte alpha; + + } FT_Color; + + + /************************************************************************** + * + * @enum: + * FT_PALETTE_XXX + * + * @description: + * A list of bit field constants used in the `palette_flags` array of the + * @FT_Palette_Data structure to indicate for which background a palette + * with a given index is usable. + * + * @values: + * FT_PALETTE_FOR_LIGHT_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a + * light background such as white. + * + * FT_PALETTE_FOR_DARK_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a dark + * background such as black. + * + * @since: + * 2.10 + */ +#define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01 +#define FT_PALETTE_FOR_DARK_BACKGROUND 0x02 + + + /************************************************************************** + * + * @struct: + * FT_Palette_Data + * + * @description: + * This structure holds the data of the 'CPAL' table. + * + * @fields: + * num_palettes :: + * The number of palettes. + * + * palette_name_ids :: + * 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. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * palette_flags :: + * 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. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * num_palette_entries :: + * The number of entries in a single palette. All palettes have the + * same size. + * + * palette_entry_name_ids :: + * 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 + * palette entry is used for outlines, index~1 might correspond to + * 'fill' to indicate the filling color palette entry, etc. + * + * An empty entry name ID in the 'CPAL' table gets represented as value + * 0xFFFF. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * @note: + * Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to + * name strings. + * + * Use function @FT_Palette_Select to get the colors associated with a + * palette entry. + * + * @since: + * 2.10 + */ + typedef struct FT_Palette_Data_ { + FT_UShort num_palettes; + const FT_UShort* palette_name_ids; + const FT_UShort* palette_flags; + + FT_UShort num_palette_entries; + const FT_UShort* palette_entry_name_ids; + + } FT_Palette_Data; + + + /************************************************************************** + * + * @function: + * FT_Palette_Data_Get + * + * @description: + * Retrieve the face's color palette data. + * + * @input: + * face :: + * The source face handle. + * + * @output: + * apalette :: + * A pointer to an @FT_Palette_Data structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * All arrays in the returned @FT_Palette_Data structure are read-only. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Data_Get( FT_Face face, + FT_Palette_Data *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Select + * + * @description: + * This function has two purposes. + * + * (1) It activates a palette for rendering color glyphs, and + * + * (2) it retrieves all (unmodified) color entries of this palette. This + * function returns a read-write array, which means that a calling + * application can modify the palette entries on demand. + * + * A corollary of (2) is that calling the function, then modifying some + * values, then calling the function again with the same arguments resets + * all color entries to the original 'CPAL' values; all user modifications + * are lost. + * + * @input: + * face :: + * The source face handle. + * + * palette_index :: + * The palette index. + * + * @output: + * apalette :: + * An array of color entries for a palette with index `palette_index`, + * having `num_palette_entries` elements (as found in the + * `FT_Palette_Data` structure). If `apalette` is set to `NULL`, no + * array gets returned (and no color entries can be modified). + * + * In case the font doesn't support color palettes, `NULL` is returned. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The array pointed to by `apalette_entries` is owned and managed by + * FreeType. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Select( FT_Face face, + FT_UShort palette_index, + FT_Color* *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Set_Foreground_Color + * + * @description: + * 'COLR' uses palette index 0xFFFF to indicate a 'text foreground + * color'. This function sets this value. + * + * @input: + * face :: + * The source face handle. + * + * foreground_color :: + * An `FT_Color` structure to define the text foreground color. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If this function isn't called, the text foreground color is set to + * white opaque (BGRA value 0xFFFFFFFF) if + * @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette, + * and black opaque (BGRA value 0x000000FF) otherwise, including the case + * that no palette types are available in the 'CPAL' table. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Set_Foreground_Color( FT_Face face, + FT_Color foreground_color ); + + + /************************************************************************** + * + * @section: + * layer_management + * + * @title: + * Glyph Layer Management + * + * @abstract: + * Retrieving and manipulating OpenType's 'COLR' table data. + * + * @description: + * The functions described here allow access of colored glyph layer data + * in OpenType's 'COLR' tables. + */ + + + /************************************************************************** + * + * @struct: + * FT_LayerIterator + * + * @description: + * This iterator object is needed for @FT_Get_Color_Glyph_Layer. + * + * @fields: + * num_layers :: + * The number of glyph layers for the requested glyph index. Will be + * set by @FT_Get_Color_Glyph_Layer. + * + * layer :: + * The current layer. Will be set by @FT_Get_Color_Glyph_Layer. + * + * p :: + * An opaque pointer into 'COLR' table data. The caller must set this + * to `NULL` before the first call of @FT_Get_Color_Glyph_Layer. + */ + typedef struct FT_LayerIterator_ + { + FT_UInt num_layers; + FT_UInt layer; + FT_Byte* p; + + } FT_LayerIterator; + + + /************************************************************************** + * + * @function: + * FT_Get_Color_Glyph_Layer + * + * @description: + * This is an interface to the 'COLR' table in OpenType fonts to + * iteratively retrieve the colored glyph layers associated with the + * current glyph slot. + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/colr + * + * The glyph layer data for a given glyph index, if present, provides an + * alternative, multi-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. + * + * The returned elements are ordered in the z~direction from bottom to + * top; the 'n'th element should be rendered with the associated palette + * color and blended on top of the already rendered layers (elements 0, + * 1, ..., n-1). + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index the colored glyph layers are associated with. + * + * @inout: + * iterator :: + * An @FT_LayerIterator object. For the first call you should set + * `iterator->p` to `NULL`. For all following calls, simply use the + * same object again. + * + * @output: + * aglyph_index :: + * The glyph index of the current layer. + * + * acolor_index :: + * The color index into the font face's color palette of the current + * layer. The value 0xFFFF is special; it doesn't reference a palette + * entry but indicates that the text foreground color should be used + * instead (to be set up by the application outside of FreeType). + * + * The color palette can be retrieved with @FT_Palette_Select. + * + * @return: + * Value~1 if everything is OK. If there are no more layers (or if there + * are no layers at all), value~0 gets returned. In case of an error, + * value~0 is returned also. + * + * @note: + * This function is necessary if you want to handle glyph layers by + * yourself. In particular, functions that operate with @FT_GlyphRec + * objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access + * to this information. + * + * Note that @FT_Render_Glyph is able to handle colored glyph layers + * automatically if the @FT_LOAD_COLOR flag is passed to a previous call + * to @FT_Load_Glyph. [This is an experimental feature.] + * + * @example: + * ``` + * FT_Color* palette; + * FT_LayerIterator iterator; + * + * FT_Bool have_layers; + * FT_UInt layer_glyph_index; + * FT_UInt layer_color_index; + * + * + * error = FT_Palette_Select( face, palette_index, &palette ); + * if ( error ) + * palette = NULL; + * + * iterator.p = NULL; + * have_layers = FT_Get_Color_Glyph_Layer( face, + * glyph_index, + * &layer_glyph_index, + * &layer_color_index, + * &iterator ); + * + * if ( palette && have_layers ) + * { + * do + * { + * FT_Color layer_color; + * + * + * if ( layer_color_index == 0xFFFF ) + * layer_color = text_foreground_color; + * else + * layer_color = palette[layer_color_index]; + * + * // Load and render glyph `layer_glyph_index', then + * // blend resulting pixmap (using color `layer_color') + * // with previously created pixmaps. + * + * } while ( FT_Get_Color_Glyph_Layer( face, + * glyph_index, + * &layer_glyph_index, + * &layer_color_index, + * &iterator ) ); + * } + * ``` + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Color_Glyph_Layer( FT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator ); + + + /************************************************************************** + * + * @enum: + * FT_PaintFormat + * + * @description: + * Enumeration describing the different paint format types of the v1 + * extensions to the 'COLR' table, see + * 'https://github.com/googlefonts/colr-gradients-spec'. + * + * The enumeration values loosely correspond with the format numbers of + * the specification: FreeType always returns a fully specified 'Paint' + * structure for the 'Transform', 'Translate', 'Scale', 'Rotate', and + * 'Skew' table types even though the specification has different formats + * depending on whether or not a center is specified, whether the scale + * is uniform in x and y~direction or not, etc. Also, only non-variable + * format identifiers are listed in this enumeration; as soon as support + * for variable 'COLR' v1 fonts is implemented, interpolation is + * performed dependent on axis coordinates, which are configured on the + * @FT_Face through @FT_Set_Var_Design_Coordinates. This implies that + * always static, readily interpolated values are returned in the 'Paint' + * structures. + * + * @since: + * 2.13 + */ + typedef enum FT_PaintFormat_ + { + FT_COLR_PAINTFORMAT_COLR_LAYERS = 1, + FT_COLR_PAINTFORMAT_SOLID = 2, + FT_COLR_PAINTFORMAT_LINEAR_GRADIENT = 4, + FT_COLR_PAINTFORMAT_RADIAL_GRADIENT = 6, + FT_COLR_PAINTFORMAT_SWEEP_GRADIENT = 8, + FT_COLR_PAINTFORMAT_GLYPH = 10, + FT_COLR_PAINTFORMAT_COLR_GLYPH = 11, + FT_COLR_PAINTFORMAT_TRANSFORM = 12, + FT_COLR_PAINTFORMAT_TRANSLATE = 14, + FT_COLR_PAINTFORMAT_SCALE = 16, + FT_COLR_PAINTFORMAT_ROTATE = 24, + FT_COLR_PAINTFORMAT_SKEW = 28, + FT_COLR_PAINTFORMAT_COMPOSITE = 32, + FT_COLR_PAINT_FORMAT_MAX = 33, + FT_COLR_PAINTFORMAT_UNSUPPORTED = 255 + + } FT_PaintFormat; + + + /************************************************************************** + * + * @struct: + * FT_ColorStopIterator + * + * @description: + * This iterator object is needed for @FT_Get_Colorline_Stops. It keeps + * state while iterating over the stops of an @FT_ColorLine, representing + * the `ColorLine` struct of the v1 extensions to 'COLR', see + * 'https://github.com/googlefonts/colr-gradients-spec'. Do not manually + * modify fields of this iterator. + * + * @fields: + * num_color_stops :: + * The number of color stops for the requested glyph index. Set by + * @FT_Get_Paint. + * + * current_color_stop :: + * The current color stop. Set by @FT_Get_Colorline_Stops. + * + * p :: + * An opaque pointer into 'COLR' table data. Set by @FT_Get_Paint. + * Updated by @FT_Get_Colorline_Stops. + * + * read_variable :: + * A boolean keeping track of whether variable color lines are to be + * read. Set by @FT_Get_Paint. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorStopIterator_ + { + FT_UInt num_color_stops; + FT_UInt current_color_stop; + + FT_Byte* p; + + FT_Bool read_variable; + + } FT_ColorStopIterator; + + + /************************************************************************** + * + * @struct: + * FT_ColorIndex + * + * @description: + * A structure representing a `ColorIndex` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * + * @fields: + * palette_index :: + * The palette index into a 'CPAL' palette. + * + * alpha :: + * Alpha transparency value multiplied with the value from 'CPAL'. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorIndex_ + { + FT_UInt16 palette_index; + FT_F2Dot14 alpha; + + } FT_ColorIndex; + + + /************************************************************************** + * + * @struct: + * FT_ColorStop + * + * @description: + * A structure representing a `ColorStop` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * + * @fields: + * stop_offset :: + * The stop offset along the gradient, expressed as a 16.16 fixed-point + * coordinate. + * + * color :: + * The color information for this stop, see @FT_ColorIndex. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorStop_ + { + FT_Fixed stop_offset; + FT_ColorIndex color; + + } FT_ColorStop; + + + /************************************************************************** + * + * @enum: + * FT_PaintExtend + * + * @description: + * An enumeration representing the 'Extend' mode of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * It describes how the gradient fill continues at the other boundaries. + * + * @since: + * 2.13 + */ + typedef enum FT_PaintExtend_ + { + FT_COLR_PAINT_EXTEND_PAD = 0, + FT_COLR_PAINT_EXTEND_REPEAT = 1, + FT_COLR_PAINT_EXTEND_REFLECT = 2 + + } FT_PaintExtend; + + + /************************************************************************** + * + * @struct: + * FT_ColorLine + * + * @description: + * A structure representing a `ColorLine` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * It describes a list of color stops along the defined gradient. + * + * @fields: + * extend :: + * The extend mode at the outer boundaries, see @FT_PaintExtend. + * + * color_stop_iterator :: + * The @FT_ColorStopIterator used to enumerate and retrieve the + * actual @FT_ColorStop's. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorLine_ + { + FT_PaintExtend extend; + FT_ColorStopIterator color_stop_iterator; + + } FT_ColorLine; + + + /************************************************************************** + * + * @struct: + * FT_Affine23 + * + * @description: + * A structure used to store a 2x3 matrix. Coefficients are in + * 16.16 fixed-point format. The computation performed is + * + * ``` + * x' = x*xx + y*xy + dx + * y' = x*yx + y*yy + dy + * ``` + * + * @fields: + * xx :: + * Matrix coefficient. + * + * xy :: + * Matrix coefficient. + * + * dx :: + * x translation. + * + * yx :: + * Matrix coefficient. + * + * yy :: + * Matrix coefficient. + * + * dy :: + * y translation. + * + * @since: + * 2.13 + */ + typedef struct FT_Affine_23_ + { + FT_Fixed xx, xy, dx; + FT_Fixed yx, yy, dy; + + } FT_Affine23; + + + /************************************************************************** + * + * @enum: + * FT_Composite_Mode + * + * @description: + * An enumeration listing the 'COLR' v1 composite modes used in + * @FT_PaintComposite. For more details on each paint mode, see + * 'https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators'. + * + * @since: + * 2.13 + */ + typedef enum FT_Composite_Mode_ + { + FT_COLR_COMPOSITE_CLEAR = 0, + FT_COLR_COMPOSITE_SRC = 1, + FT_COLR_COMPOSITE_DEST = 2, + FT_COLR_COMPOSITE_SRC_OVER = 3, + FT_COLR_COMPOSITE_DEST_OVER = 4, + FT_COLR_COMPOSITE_SRC_IN = 5, + FT_COLR_COMPOSITE_DEST_IN = 6, + FT_COLR_COMPOSITE_SRC_OUT = 7, + FT_COLR_COMPOSITE_DEST_OUT = 8, + FT_COLR_COMPOSITE_SRC_ATOP = 9, + FT_COLR_COMPOSITE_DEST_ATOP = 10, + FT_COLR_COMPOSITE_XOR = 11, + FT_COLR_COMPOSITE_PLUS = 12, + FT_COLR_COMPOSITE_SCREEN = 13, + FT_COLR_COMPOSITE_OVERLAY = 14, + FT_COLR_COMPOSITE_DARKEN = 15, + FT_COLR_COMPOSITE_LIGHTEN = 16, + FT_COLR_COMPOSITE_COLOR_DODGE = 17, + FT_COLR_COMPOSITE_COLOR_BURN = 18, + FT_COLR_COMPOSITE_HARD_LIGHT = 19, + FT_COLR_COMPOSITE_SOFT_LIGHT = 20, + FT_COLR_COMPOSITE_DIFFERENCE = 21, + FT_COLR_COMPOSITE_EXCLUSION = 22, + FT_COLR_COMPOSITE_MULTIPLY = 23, + FT_COLR_COMPOSITE_HSL_HUE = 24, + FT_COLR_COMPOSITE_HSL_SATURATION = 25, + FT_COLR_COMPOSITE_HSL_COLOR = 26, + FT_COLR_COMPOSITE_HSL_LUMINOSITY = 27, + FT_COLR_COMPOSITE_MAX = 28 + + } FT_Composite_Mode; + + + /************************************************************************** + * + * @struct: + * FT_OpaquePaint + * + * @description: + * A structure representing an offset to a `Paint` value stored in any + * of the paint tables of a 'COLR' v1 font. Compare Offset<24> there. + * When 'COLR' v1 paint tables represented by FreeType objects such as + * @FT_PaintColrLayers, @FT_PaintComposite, or @FT_PaintTransform + * reference downstream nested paint tables, we do not immediately + * retrieve them but encapsulate their location in this type. Use + * @FT_Get_Paint to retrieve the actual @FT_COLR_Paint object that + * describes the details of the respective paint table. + * + * @fields: + * p :: + * An internal offset to a Paint table, needs to be set to NULL before + * passing this struct as an argument to @FT_Get_Paint. + * + * insert_root_transform :: + * An internal boolean to track whether an initial root transform is + * to be provided. Do not set this value. + * + * @since: + * 2.13 + */ + typedef struct FT_Opaque_Paint_ + { + FT_Byte* p; + FT_Bool insert_root_transform; + } FT_OpaquePaint; + + + /************************************************************************** + * + * @struct: + * FT_PaintColrLayers + * + * @description: + * A structure representing a `PaintColrLayers` table of a 'COLR' v1 + * font. This table describes a set of layers that are to be composited + * with composite mode `FT_COLR_COMPOSITE_SRC_OVER`. The return value + * of this function is an @FT_LayerIterator initialized so that it can + * be used with @FT_Get_Paint_Layers to retrieve the @FT_OpaquePaint + * objects as references to each layer. + * + * @fields: + * layer_iterator :: + * The layer iterator that describes the layers of this paint. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintColrLayers_ + { + FT_LayerIterator layer_iterator; + + } FT_PaintColrLayers; + + + /************************************************************************** + * + * @struct: + * FT_PaintSolid + * + * @description: + * A structure representing a `PaintSolid` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * Using a `PaintSolid` value means that the glyph layer filled with + * this paint is solid-colored and does not contain a gradient. + * + * @fields: + * color :: + * The color information for this solid paint, see @FT_ColorIndex. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintSolid_ + { + FT_ColorIndex color; + + } FT_PaintSolid; + + + /************************************************************************** + * + * @struct: + * FT_PaintLinearGradient + * + * @description: + * A structure representing a `PaintLinearGradient` value of the 'COLR' + * v1 extensions, see + * 'https://github.com/googlefonts/colr-gradients-spec'. The glyph + * layer filled with this paint is drawn filled with a linear gradient. + * + * @fields: + * colorline :: + * The @FT_ColorLine information for this paint, i.e., the list of + * color stops along the gradient. + * + * p0 :: + * The starting point of the gradient definition in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * + * p1 :: + * The end point of the gradient definition in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * + * p2 :: + * Optional point~p2 to rotate the gradient in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * Otherwise equal to~p0. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintLinearGradient_ + { + FT_ColorLine colorline; + + /* TODO: Potentially expose those as x0, y0 etc. */ + FT_Vector p0; + FT_Vector p1; + FT_Vector p2; + + } FT_PaintLinearGradient; + + + /************************************************************************** + * + * @struct: + * FT_PaintRadialGradient + * + * @description: + * A structure representing a `PaintRadialGradient` value of the 'COLR' + * v1 extensions, see + * 'https://github.com/googlefonts/colr-gradients-spec'. The glyph + * layer filled with this paint is drawn filled with a radial gradient. + * + * @fields: + * colorline :: + * The @FT_ColorLine information for this paint, i.e., the list of + * color stops along the gradient. + * + * c0 :: + * The center of the starting point of the radial gradient in font + * units represented as a 16.16 fixed-point `FT_Vector`. + * + * r0 :: + * The radius of the starting circle of the radial gradient in font + * units represented as a 16.16 fixed-point value. + * + * c1 :: + * The center of the end point of the radial gradient in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * + * r1 :: + * The radius of the end circle of the radial gradient in font + * units represented as a 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintRadialGradient_ + { + FT_ColorLine colorline; + + FT_Vector c0; + FT_Pos r0; + FT_Vector c1; + FT_Pos r1; + + } FT_PaintRadialGradient; + + + /************************************************************************** + * + * @struct: + * FT_PaintSweepGradient + * + * @description: + * A structure representing a `PaintSweepGradient` value of the 'COLR' + * v1 extensions, see + * 'https://github.com/googlefonts/colr-gradients-spec'. The glyph + * layer filled with this paint is drawn filled with a sweep gradient + * from `start_angle` to `end_angle`. + * + * @fields: + * colorline :: + * The @FT_ColorLine information for this paint, i.e., the list of + * color stops along the gradient. + * + * center :: + * The center of the sweep gradient in font units represented as a + * vector of 16.16 fixed-point values. + * + * start_angle :: + * The start angle of the sweep gradient in 16.16 fixed-point + * format specifying degrees divided by 180.0 (as in the + * spec). Multiply by 180.0f to receive degrees value. Values are + * given counter-clockwise, starting from the (positive) y~axis. + * + * end_angle :: + * The end angle of the sweep gradient in 16.16 fixed-point + * format specifying degrees divided by 180.0 (as in the + * spec). Multiply by 180.0f to receive degrees value. Values are + * given counter-clockwise, starting from the (positive) y~axis. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintSweepGradient_ + { + FT_ColorLine colorline; + + FT_Vector center; + FT_Fixed start_angle; + FT_Fixed end_angle; + + } FT_PaintSweepGradient; + + + /************************************************************************** + * + * @struct: + * FT_PaintGlyph + * + * @description: + * A structure representing a 'COLR' v1 `PaintGlyph` paint table. + * + * @fields: + * paint :: + * An opaque paint object pointing to a `Paint` table that serves as + * the fill for the glyph ID. + * + * glyphID :: + * The glyph ID from the 'glyf' table, which serves as the contour + * information that is filled with paint. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintGlyph_ + { + FT_OpaquePaint paint; + FT_UInt glyphID; + + } FT_PaintGlyph; + + + /************************************************************************** + * + * @struct: + * FT_PaintColrGlyph + * + * @description: + * A structure representing a 'COLR' v1 `PaintColorGlyph` paint table. + * + * @fields: + * glyphID :: + * The glyph ID from the `BaseGlyphV1List` table that is drawn for + * this paint. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintColrGlyph_ + { + FT_UInt glyphID; + + } FT_PaintColrGlyph; + + + /************************************************************************** + * + * @struct: + * FT_PaintTransform + * + * @description: + * A structure representing a 'COLR' v1 `PaintTransform` paint table. + * + * @fields: + * paint :: + * An opaque paint that is subject to being transformed. + * + * affine :: + * A 2x3 transformation matrix in @FT_Affine23 format containing + * 16.16 fixed-point values. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintTransform_ + { + FT_OpaquePaint paint; + FT_Affine23 affine; + + } FT_PaintTransform; + + + /************************************************************************** + * + * @struct: + * FT_PaintTranslate + * + * @description: + * A structure representing a 'COLR' v1 `PaintTranslate` paint table. + * Used for translating downstream paints by a given x and y~delta. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * rotated. + * + * dx :: + * Translation in x~direction in font units represented as a + * 16.16 fixed-point value. + * + * dy :: + * Translation in y~direction in font units represented as a + * 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintTranslate_ + { + FT_OpaquePaint paint; + + FT_Fixed dx; + FT_Fixed dy; + + } FT_PaintTranslate; + + + /************************************************************************** + * + * @struct: + * FT_PaintScale + * + * @description: + * A structure representing all of the 'COLR' v1 'PaintScale*' paint + * tables. Used for scaling downstream paints by a given x and y~scale, + * with a given center. This structure is used for all 'PaintScale*' + * types that are part of specification; fields of this structure are + * filled accordingly. If there is a center, the center values are set, + * otherwise they are set to the zero coordinate. If the source font + * file has 'PaintScaleUniform*' set, the scale values are set + * accordingly to the same value. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * scaled. + * + * scale_x :: + * Scale factor in x~direction represented as a + * 16.16 fixed-point value. + * + * scale_y :: + * Scale factor in y~direction represented as a + * 16.16 fixed-point value. + * + * center_x :: + * x~coordinate of center point to scale from represented as a + * 16.16 fixed-point value. + * + * center_y :: + * y~coordinate of center point to scale from represented as a + * 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintScale_ + { + FT_OpaquePaint paint; + + FT_Fixed scale_x; + FT_Fixed scale_y; + + FT_Fixed center_x; + FT_Fixed center_y; + + } FT_PaintScale; + + + /************************************************************************** + * + * @struct: + * FT_PaintRotate + * + * @description: + * A structure representing a 'COLR' v1 `PaintRotate` paint table. Used + * for rotating downstream paints with a given center and angle. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * rotated. + * + * angle :: + * The rotation angle that is to be applied in degrees divided by + * 180.0 (as in the spec) represented as a 16.16 fixed-point + * value. Multiply by 180.0f to receive degrees value. + * + * center_x :: + * The x~coordinate of the pivot point of the rotation in font + * units represented as a 16.16 fixed-point value. + * + * center_y :: + * The y~coordinate of the pivot point of the rotation in font + * units represented as a 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + + typedef struct FT_PaintRotate_ + { + FT_OpaquePaint paint; + + FT_Fixed angle; + + FT_Fixed center_x; + FT_Fixed center_y; + + } FT_PaintRotate; + + + /************************************************************************** + * + * @struct: + * FT_PaintSkew + * + * @description: + * A structure representing a 'COLR' v1 `PaintSkew` paint table. Used + * for skewing or shearing downstream paints by a given center and + * angle. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * skewed. + * + * x_skew_angle :: + * The skewing angle in x~direction in degrees divided by 180.0 + * (as in the spec) represented as a 16.16 fixed-point + * value. Multiply by 180.0f to receive degrees. + * + * y_skew_angle :: + * The skewing angle in y~direction in degrees divided by 180.0 + * (as in the spec) represented as a 16.16 fixed-point + * value. Multiply by 180.0f to receive degrees. + * + * center_x :: + * The x~coordinate of the pivot point of the skew in font units + * represented as a 16.16 fixed-point value. + * + * center_y :: + * The y~coordinate of the pivot point of the skew in font units + * represented as a 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintSkew_ + { + FT_OpaquePaint paint; + + FT_Fixed x_skew_angle; + FT_Fixed y_skew_angle; + + FT_Fixed center_x; + FT_Fixed center_y; + + } FT_PaintSkew; + + + /************************************************************************** + * + * @struct: + * FT_PaintComposite + * + * @description: + * A structure representing a 'COLR' v1 `PaintComposite` paint table. + * Used for compositing two paints in a 'COLR' v1 directed acyclic graph. + * + * @fields: + * source_paint :: + * An @FT_OpaquePaint object referencing the source that is to be + * composited. + * + * composite_mode :: + * An @FT_Composite_Mode enum value determining the composition + * operation. + * + * backdrop_paint :: + * An @FT_OpaquePaint object referencing the backdrop paint that + * `source_paint` is composited onto. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintComposite_ + { + FT_OpaquePaint source_paint; + FT_Composite_Mode composite_mode; + FT_OpaquePaint backdrop_paint; + + } FT_PaintComposite; + + + /************************************************************************** + * + * @union: + * FT_COLR_Paint + * + * @description: + * A union object representing format and details of a paint table of a + * 'COLR' v1 font, see + * 'https://github.com/googlefonts/colr-gradients-spec'. Use + * @FT_Get_Paint to retrieve a @FT_COLR_Paint for an @FT_OpaquePaint + * object. + * + * @fields: + * format :: + * The gradient format for this Paint structure. + * + * u :: + * Union of all paint table types: + * + * * @FT_PaintColrLayers + * * @FT_PaintGlyph + * * @FT_PaintSolid + * * @FT_PaintLinearGradient + * * @FT_PaintRadialGradient + * * @FT_PaintSweepGradient + * * @FT_PaintTransform + * * @FT_PaintTranslate + * * @FT_PaintRotate + * * @FT_PaintSkew + * * @FT_PaintComposite + * * @FT_PaintColrGlyph + * + * @since: + * 2.13 + */ + typedef struct FT_COLR_Paint_ + { + FT_PaintFormat format; + + union + { + FT_PaintColrLayers colr_layers; + FT_PaintGlyph glyph; + FT_PaintSolid solid; + FT_PaintLinearGradient linear_gradient; + FT_PaintRadialGradient radial_gradient; + FT_PaintSweepGradient sweep_gradient; + FT_PaintTransform transform; + FT_PaintTranslate translate; + FT_PaintScale scale; + FT_PaintRotate rotate; + FT_PaintSkew skew; + FT_PaintComposite composite; + FT_PaintColrGlyph colr_glyph; + + } u; + + } FT_COLR_Paint; + + + /************************************************************************** + * + * @enum: + * FT_Color_Root_Transform + * + * @description: + * An enumeration to specify whether @FT_Get_Color_Glyph_Paint is to + * return a root transform to configure the client's graphics context + * matrix. + * + * @values: + * FT_COLOR_INCLUDE_ROOT_TRANSFORM :: + * Do include the root transform as the initial @FT_COLR_Paint object. + * + * FT_COLOR_NO_ROOT_TRANSFORM :: + * Do not output an initial root transform. + * + * @since: + * 2.13 + */ + typedef enum FT_Color_Root_Transform_ + { + FT_COLOR_INCLUDE_ROOT_TRANSFORM, + FT_COLOR_NO_ROOT_TRANSFORM, + + FT_COLOR_ROOT_TRANSFORM_MAX + + } FT_Color_Root_Transform; + + + /************************************************************************** + * + * @struct: + * FT_ClipBox + * + * @description: + * A structure representing a 'COLR' v1 'ClipBox' table. 'COLR' v1 + * glyphs may optionally define a clip box for aiding allocation or + * defining a maximum drawable region. Use @FT_Get_Color_Glyph_ClipBox + * to retrieve it. + * + * @fields: + * bottom_left :: + * The bottom left corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * top_left :: + * The top left corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * top_right :: + * The top right corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * bottom_right :: + * The bottom right corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * @since: + * 2.13 + */ + typedef struct FT_ClipBox_ + { + FT_Vector bottom_left; + FT_Vector top_left; + FT_Vector top_right; + FT_Vector bottom_right; + + } FT_ClipBox; + + + /************************************************************************** + * + * @function: + * FT_Get_Color_Glyph_Paint + * + * @description: + * This is the starting point and interface to color gradient + * information in a 'COLR' v1 table in OpenType fonts to recursively + * retrieve the paint tables for the directed acyclic graph of a colored + * glyph, given a glyph ID. + * + * https://github.com/googlefonts/colr-gradients-spec + * + * In a 'COLR' v1 font, each color glyph defines a directed acyclic + * graph of nested paint tables, such as `PaintGlyph`, `PaintSolid`, + * `PaintLinearGradient`, `PaintRadialGradient`, and so on. Using this + * function and specifying a glyph ID, one retrieves the root paint + * table for this glyph ID. + * + * This function allows control whether an initial root transform is + * returned to configure scaling, transform, and translation correctly + * on the client's graphics context. The initial root transform is + * computed and returned according to the values configured for @FT_Size + * and @FT_Set_Transform on the @FT_Face object, see below for details + * of the `root_transform` parameter. This has implications for a + * client 'COLR' v1 implementation: When this function returns an + * initially computed root transform, at the time of executing the + * @FT_PaintGlyph operation, the contours should be retrieved using + * @FT_Load_Glyph at unscaled, untransformed size. This is because the + * root transform applied to the graphics context will take care of + * correct scaling. + * + * Alternatively, to allow hinting of contours, at the time of executing + * @FT_Load_Glyph, the current graphics context transformation matrix + * can be decomposed into a scaling matrix and a remainder, and + * @FT_Load_Glyph can be used to retrieve the contours at scaled size. + * Care must then be taken to blit or clip to the graphics context with + * taking this remainder transformation into account. + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index for which to retrieve the root paint table. + * + * root_transform :: + * Specifies whether an initially computed root is returned by the + * @FT_PaintTransform operation to account for the activated size + * (see @FT_Activate_Size) and the configured transform and translate + * (see @FT_Set_Transform). + * + * This root transform is returned before nodes of the glyph graph of + * the font are returned. Subsequent @FT_COLR_Paint structures + * contain unscaled and untransformed values. The inserted root + * transform enables the client application to apply an initial + * transform to its graphics context. When executing subsequent + * FT_COLR_Paint operations, values from @FT_COLR_Paint operations + * will ultimately be correctly scaled because of the root transform + * applied to the graphics context. Use + * @FT_COLOR_INCLUDE_ROOT_TRANSFORM to include the root transform, use + * @FT_COLOR_NO_ROOT_TRANSFORM to not include it. The latter may be + * useful when traversing the 'COLR' v1 glyph graph and reaching a + * @FT_PaintColrGlyph. When recursing into @FT_PaintColrGlyph and + * painting that inline, no additional root transform is needed as it + * has already been applied to the graphics context at the beginning + * of drawing this glyph. + * + * @output: + * paint :: + * The @FT_OpaquePaint object that references the actual paint table. + * + * The respective actual @FT_COLR_Paint object is retrieved via + * @FT_Get_Paint. + * + * @return: + * Value~1 if everything is OK. If no color glyph is found, or the root + * paint could not be retrieved, value~0 gets returned. In case of an + * error, value~0 is returned also. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Color_Glyph_Paint( FT_Face face, + FT_UInt base_glyph, + FT_Color_Root_Transform root_transform, + FT_OpaquePaint* paint ); + + + /************************************************************************** + * + * @function: + * FT_Get_Color_Glyph_ClipBox + * + * @description: + * Search for a 'COLR' v1 clip box for the specified `base_glyph` and + * fill the `clip_box` parameter with the 'COLR' v1 'ClipBox' information + * if one is found. + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index for which to retrieve the clip box. + * + * @output: + * clip_box :: + * The clip box for the requested `base_glyph` if one is found. The + * clip box is computed taking scale and transformations configured on + * the @FT_Face into account. @FT_ClipBox contains @FT_Vector values + * in 26.6 format. + * + * @return: + * Value~1 if a clip box is found. If no clip box is found or an error + * occured, value~0 is returned. + * + * @note: + * To retrieve the clip box in font units, reset scale to units-per-em + * and remove transforms configured using @FT_Set_Transform. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Color_Glyph_ClipBox( FT_Face face, + FT_UInt base_glyph, + FT_ClipBox* clip_box ); + + + /************************************************************************** + * + * @function: + * FT_Get_Paint_Layers + * + * @description: + * Access the layers of a `PaintColrLayers` table. + * + * If the root paint of a color glyph, or a nested paint of a 'COLR' + * glyph is a `PaintColrLayers` table, this function retrieves the + * layers of the `PaintColrLayers` table. + * + * The @FT_PaintColrLayers object contains an @FT_LayerIterator, which + * is used here to iterate over the layers. Each layer is returned as + * an @FT_OpaquePaint object, which then can be used with @FT_Get_Paint + * to retrieve the actual paint object. + * + * @input: + * face :: + * A handle to the parent face object. + * + * @inout: + * iterator :: + * The @FT_LayerIterator from an @FT_PaintColrLayers object, for which + * the layers are to be retrieved. The internal state of the iterator + * is incremented after one call to this function for retrieving one + * layer. + * + * @output: + * paint :: + * The @FT_OpaquePaint object that references the actual paint table. + * The respective actual @FT_COLR_Paint object is retrieved via + * @FT_Get_Paint. + * + * @return: + * Value~1 if everything is OK. Value~0 gets returned when the paint + * object can not be retrieved or any other error occurs. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Paint_Layers( FT_Face face, + FT_LayerIterator* iterator, + FT_OpaquePaint* paint ); + + + /************************************************************************** + * + * @function: + * FT_Get_Colorline_Stops + * + * @description: + * This is an interface to color gradient information in a 'COLR' v1 + * table in OpenType fonts to iteratively retrieve the gradient and + * solid fill information for colored glyph layers for a specified glyph + * ID. + * + * https://github.com/googlefonts/colr-gradients-spec + * + * @input: + * face :: + * A handle to the parent face object. + * + * @inout: + * iterator :: + * The retrieved @FT_ColorStopIterator, configured on an @FT_ColorLine, + * which in turn got retrieved via paint information in + * @FT_PaintLinearGradient or @FT_PaintRadialGradient. + * + * @output: + * color_stop :: + * Color index and alpha value for the retrieved color stop. + * + * @return: + * Value~1 if everything is OK. If there are no more color stops, + * value~0 gets returned. In case of an error, value~0 is returned + * also. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Colorline_Stops( FT_Face face, + FT_ColorStop* color_stop, + FT_ColorStopIterator* iterator ); + + + /************************************************************************** + * + * @function: + * FT_Get_Paint + * + * @description: + * Access the details of a paint using an @FT_OpaquePaint opaque paint + * object, which internally stores the offset to the respective `Paint` + * object in the 'COLR' table. + * + * @input: + * face :: + * A handle to the parent face object. + * + * opaque_paint :: + * The opaque paint object for which the underlying @FT_COLR_Paint + * data is to be retrieved. + * + * @output: + * paint :: + * The specific @FT_COLR_Paint object containing information coming + * from one of the font's `Paint*` tables. + * + * @return: + * Value~1 if everything is OK. Value~0 if no details can be found for + * this paint or any other error occured. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Paint( FT_Face face, + FT_OpaquePaint opaque_paint, + FT_COLR_Paint* paint ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCOLOR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/ftdriver.h b/non-source/foreign/freetype2/freetype/ftdriver.h new file mode 100644 index 000000000..1b7f539f5 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/ftdriver.h @@ -0,0 +1,1320 @@ +/**************************************************************************** + * + * ftdriver.h + * + * FreeType API for controlling driver modules (specification only). + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTDRIVER_H_ +#define FTDRIVER_H_ + +#include <freetype/freetype.h> +#include <freetype/ftparams.h> + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * auto_hinter + * + * @title: + * The auto-hinter + * + * @abstract: + * Controlling the auto-hinting module. + * + * @description: + * While FreeType's auto-hinter doesn't expose API functions by itself, + * it is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. The following lists the available properties + * together with the necessary macros and structures. + * + * Note that the auto-hinter's module name is 'autofitter' for historical + * reasons. + * + * Available properties are @increase-x-height, @no-stem-darkening + * (experimental), @darkening-parameters (experimental), + * @glyph-to-script-map (experimental), @fallback-script (experimental), + * and @default-script (experimental), as documented in the @properties + * section. + * + */ + + + /************************************************************************** + * + * @section: + * cff_driver + * + * @title: + * The CFF driver + * + * @abstract: + * Controlling the CFF driver module. + * + * @description: + * While FreeType's CFF driver doesn't expose API functions by itself, it + * is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. + * + * The CFF driver's module name is 'cff'. + * + * Available properties are @hinting-engine, @no-stem-darkening, + * @darkening-parameters, and @random-seed, as documented in the + * @properties section. + * + * + * **Hinting and anti-aliasing principles of the new engine** + * + * The rasterizer is positioning horizontal features (e.g., ascender + * height & x-height, or crossbars) on the pixel grid and minimizing the + * amount of anti-aliasing applied to them, while placing vertical + * features (vertical stems) on the pixel grid without hinting, thus + * representing the stem position and weight accurately. Sometimes the + * vertical stems may be only partially black. In this context, + * 'anti-aliasing' means that stems are not positioned exactly on pixel + * borders, causing a fuzzy appearance. + * + * There are two principles behind this approach. + * + * 1) No hinting in the horizontal direction: Unlike 'superhinted' + * TrueType, which changes glyph widths to accommodate regular + * inter-glyph spacing, Adobe's approach is 'faithful to the design' in + * representing both the glyph width and the inter-glyph spacing designed + * for the font. This makes the screen display as close as it can be to + * the result one would get with infinite resolution, while preserving + * what is considered the key characteristics of each glyph. Note that + * the distances between unhinted and grid-fitted positions at small + * sizes are comparable to kerning values and thus would be noticeable + * (and distracting) while reading if hinting were applied. + * + * One of the reasons to not hint horizontally is anti-aliasing for LCD + * screens: The pixel geometry of modern displays supplies three vertical + * subpixels as the eye moves horizontally across each visible pixel. On + * devices where we can be certain this characteristic is present a + * rasterizer can take advantage of the subpixels to add increments of + * weight. In Western writing systems this turns out to be the more + * critical direction anyway; the weights and spacing of vertical stems + * (see above) are central to Armenian, Cyrillic, Greek, and Latin type + * designs. Even when the rasterizer uses greyscale anti-aliasing instead + * of color (a necessary compromise when one doesn't know the screen + * characteristics), the unhinted vertical features preserve the design's + * weight and spacing much better than aliased type would. + * + * 2) Alignment in the vertical direction: Weights and spacing along the + * y~axis are less critical; what is much more important is the visual + * alignment of related features (like cap-height and x-height). The + * sense of alignment for these is enhanced by the sharpness of grid-fit + * edges, while the cruder vertical resolution (full pixels instead of + * 1/3 pixels) is less of a problem. + * + * On the technical side, horizontal alignment zones for ascender, + * x-height, and other important height values (traditionally called + * 'blue zones') as defined in the font are positioned independently, + * each being rounded to the nearest pixel edge, taking care of overshoot + * suppression at small sizes, stem darkening, and scaling. + * + * Hstems (that is, hint values defined in the font to help align + * horizontal features) that fall within a blue zone are said to be + * 'captured' and are aligned to that zone. Uncaptured stems are moved + * in one of four ways, top edge up or down, bottom edge up or down. + * Unless there are conflicting hstems, the smallest movement is taken to + * minimize distortion. + * + */ + + + /************************************************************************** + * + * @section: + * pcf_driver + * + * @title: + * The PCF driver + * + * @abstract: + * Controlling the PCF driver module. + * + * @description: + * While FreeType's PCF driver doesn't expose API functions by itself, it + * is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. Right now, there is a single property + * @no-long-family-names available if FreeType is compiled with + * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES. + * + * The PCF driver's module name is 'pcf'. + * + */ + + + /************************************************************************** + * + * @section: + * t1_cid_driver + * + * @title: + * The Type 1 and CID drivers + * + * @abstract: + * Controlling the Type~1 and CID driver modules. + * + * @description: + * It is possible to control the behaviour of FreeType's Type~1 and + * Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get. + * + * Behind the scenes, both drivers use the Adobe CFF engine for hinting; + * however, the used properties must be specified separately. + * + * The Type~1 driver's module name is 'type1'; the CID driver's module + * name is 't1cid'. + * + * Available properties are @hinting-engine, @no-stem-darkening, + * @darkening-parameters, and @random-seed, as documented in the + * @properties section. + * + * Please see the @cff_driver section for more details on the new hinting + * engine. + * + */ + + + /************************************************************************** + * + * @section: + * tt_driver + * + * @title: + * The TrueType driver + * + * @abstract: + * Controlling the TrueType driver module. + * + * @description: + * While FreeType's TrueType driver doesn't expose API functions by + * itself, it is possible to control its behaviour with @FT_Property_Set + * and @FT_Property_Get. + * + * The TrueType driver's module name is 'truetype'; a single property + * @interpreter-version is available, as documented in the @properties + * section. + * + * To help understand the differences between interpreter versions, we + * introduce a list of definitions, kindly provided by Greg Hitchcock. + * + * _Bi-Level Rendering_ + * + * Monochromatic rendering, exclusively used in the early days of + * TrueType by both Apple and Microsoft. Microsoft's GDI interface + * supported hinting of the right-side bearing point, such that the + * advance width could be non-linear. Most often this was done to + * achieve some level of glyph symmetry. To enable reasonable + * performance (e.g., not having to run hinting on all glyphs just to get + * the widths) there was a bit in the head table indicating if the side + * bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache + * hinting widths across multiple sizes and device aspect ratios. + * + * _Font Smoothing_ + * + * Microsoft's GDI implementation of anti-aliasing. Not traditional + * anti-aliasing as the outlines were hinted before the sampling. The + * widths matched the bi-level rendering. + * + * _ClearType Rendering_ + * + * Technique that uses physical subpixels to improve rendering on LCD + * (and other) displays. Because of the higher resolution, many methods + * of improving symmetry in glyphs through hinting the right-side bearing + * were no longer necessary. This lead to what GDI calls 'natural + * widths' ClearType, see + * http://rastertragedy.com/RTRCh4.htm#Sec21. Since hinting + * has extra resolution, most non-linearity went away, but it is still + * possible for hints to change the advance widths in this mode. + * + * _ClearType Compatible Widths_ + * + * One of the earliest challenges with ClearType was allowing the + * implementation in GDI to be selected without requiring all UI and + * documents to reflow. To address this, a compatible method of + * rendering ClearType was added where the font hints are executed once + * to determine the width in bi-level rendering, and then re-run in + * ClearType, with the difference in widths being absorbed in the font + * hints for ClearType (mostly in the white space of hints); see + * http://rastertragedy.com/RTRCh4.htm#Sec20. Somewhat by + * definition, compatible width ClearType allows for non-linear widths, + * but only when the bi-level version has non-linear widths. + * + * _ClearType Subpixel Positioning_ + * + * One of the nice benefits of ClearType is the ability to more crisply + * display fractional widths; unfortunately, the GDI model of integer + * bitmaps did not support this. However, the WPF and Direct Write + * frameworks do support fractional widths. DWrite calls this 'natural + * mode', not to be confused with GDI's 'natural widths'. Subpixel + * positioning, in the current implementation of Direct Write, + * unfortunately does not support hinted advance widths, see + * http://rastertragedy.com/RTRCh4.htm#Sec22. Note that the + * TrueType interpreter fully allows the advance width to be adjusted in + * this mode, just the DWrite client will ignore those changes. + * + * _ClearType Backward Compatibility_ + * + * This is a set of exceptions made in the TrueType interpreter to + * minimize hinting techniques that were problematic with the extra + * resolution of ClearType; see + * http://rastertragedy.com/RTRCh4.htm#Sec1 and + * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx. + * This technique is not to be confused with ClearType compatible widths. + * ClearType backward compatibility has no direct impact on changing + * advance widths, but there might be an indirect impact on disabling + * some deltas. This could be worked around in backward compatibility + * mode. + * + * _Native ClearType Mode_ + * + * (Not to be confused with 'natural widths'.) This mode removes all the + * exceptions in the TrueType interpreter when running with ClearType. + * Any issues on widths would still apply, though. + * + */ + + + /************************************************************************** + * + * @section: + * ot_svg_driver + * + * @title: + * The SVG driver + * + * @abstract: + * Controlling the external rendering of OT-SVG glyphs. + * + * @description: + * By default, FreeType can only load the 'SVG~' table of OpenType fonts + * if configuration macro `FT_CONFIG_OPTION_SVG` is defined. To make it + * render SVG glyphs, an external SVG rendering library is needed. All + * details on the interface between FreeType and the external library + * via function hooks can be found in section @svg_fonts. + * + * The OT-SVG driver's module name is 'ot-svg'; it supports a single + * property called @svg-hooks, documented below in the @properties + * section. + * + */ + + + /************************************************************************** + * + * @section: + * properties + * + * @title: + * Driver properties + * + * @abstract: + * Controlling driver modules. + * + * @description: + * Driver modules can be controlled by setting and unsetting properties, + * using the functions @FT_Property_Set and @FT_Property_Get. This + * section documents the available properties, together with auxiliary + * macros and structures. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_HINTING_XXX + * + * @description: + * A list of constants used for the @hinting-engine property to select + * the hinting engine for CFF, Type~1, and CID fonts. + * + * @values: + * FT_HINTING_FREETYPE :: + * Use the old FreeType hinting engine. + * + * FT_HINTING_ADOBE :: + * Use the hinting engine contributed by Adobe. + * + * @since: + * 2.9 + * + */ +#define FT_HINTING_FREETYPE 0 +#define FT_HINTING_ADOBE 1 + + /* these constants (introduced in 2.4.12) are deprecated */ +#define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE +#define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE + + + /************************************************************************** + * + * @property: + * hinting-engine + * + * @description: + * Thanks to Adobe, which contributed a new hinting (and parsing) engine, + * an application can select between 'freetype' and 'adobe' if compiled + * with `CFF_CONFIG_OPTION_OLD_ENGINE`. If this configuration macro + * isn't defined, 'hinting-engine' does nothing. + * + * The same holds for the Type~1 and CID modules if compiled with + * `T1_CONFIG_OPTION_OLD_ENGINE`. + * + * For the 'cff' module, the default engine is 'adobe'. For both the + * 'type1' and 't1cid' modules, the default engine is 'adobe', too. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values 'adobe' or 'freetype'). + * + * @example: + * The following example code demonstrates how to select Adobe's hinting + * engine for the 'cff' module (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_UInt hinting_engine = FT_HINTING_ADOBE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "hinting-engine", &hinting_engine ); + * ``` + * + * @since: + * 2.4.12 (for 'cff' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * no-stem-darkening + * + * @description: + * All glyphs that pass through the auto-hinter will be emboldened unless + * this property is set to TRUE. The same is true for the CFF, Type~1, + * and CID font modules if the 'Adobe' engine is selected (which is the + * default). + * + * Stem darkening emboldens glyphs at smaller sizes to make them more + * readable on common low-DPI screens when using linear alpha blending + * and gamma correction, see @FT_Render_Glyph. When not using linear + * alpha blending and gamma correction, glyphs will appear heavy and + * fuzzy! + * + * Gamma correction essentially lightens fonts since shades of grey are + * shifted to higher pixel values (=~higher brightness) to match the + * original intention to the reality of our screens. The side-effect is + * that glyphs 'thin out'. Mac OS~X and Adobe's proprietary font + * rendering library implement a counter-measure: stem darkening at + * smaller sizes where shades of gray dominate. By emboldening a glyph + * slightly in relation to its pixel size, individual pixels get higher + * coverage of filled-in outlines and are therefore 'blacker'. This + * counteracts the 'thinning out' of glyphs, making text remain readable + * at smaller sizes. + * + * For the auto-hinter, stem-darkening is experimental currently and thus + * switched off by default (that is, `no-stem-darkening` is set to TRUE + * by default). Total consistency with the CFF driver is not achieved + * right now because the emboldening method differs and glyphs must be + * scaled down on the Y-axis to keep outline points inside their + * precomputed blue zones. The smaller the size (especially 9ppem and + * down), the higher the loss of emboldening versus the CFF driver. + * + * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values 1 and 0 for 'on' and 'off', respectively). It + * can also be set per face using @FT_Face_Properties with + * @FT_PARAM_TAG_STEM_DARKENING. + * + * @example: + * ``` + * FT_Library library; + * FT_Bool no_stem_darkening = TRUE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "no-stem-darkening", &no_stem_darkening ); + * ``` + * + * @since: + * 2.4.12 (for 'cff' module) + * + * 2.6.2 (for 'autofitter' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * darkening-parameters + * + * @description: + * By default, the Adobe hinting engine, as used by the CFF, Type~1, and + * CID font drivers, darkens stems as follows (if the `no-stem-darkening` + * property isn't set): + * + * ``` + * stem width <= 0.5px: darkening amount = 0.4px + * stem width = 1px: darkening amount = 0.275px + * stem width = 1.667px: darkening amount = 0.275px + * stem width >= 2.333px: darkening amount = 0px + * ``` + * + * and piecewise linear in-between. At configuration time, these four + * control points can be set with the macro + * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID + * drivers share these values. At runtime, the control points can be + * changed using the `darkening-parameters` property (see the example + * below that demonstrates this for the Type~1 driver). + * + * The x~values give the stem width, and the y~values the darkening + * amount. The unit is 1000th of pixels. All coordinate values must be + * positive; the x~values must be monotonically increasing; the y~values + * must be monotonically decreasing and smaller than or equal to 500 + * (corresponding to half a pixel); the slope of each linear piece must + * be shallower than -1 (e.g., -.4). + * + * The auto-hinter provides this property, too, as an experimental + * feature. See @no-stem-darkening for more. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable, using eight comma-separated integers without spaces. Here + * the above example, using `\` to break the line for readability. + * + * ``` + * FREETYPE_PROPERTIES=\ + * type1:darkening-parameters=500,300,1000,200,1500,100,2000,0 + * ``` + * + * @example: + * ``` + * FT_Library library; + * FT_Int darken_params[8] = { 500, 300, // x1, y1 + * 1000, 200, // x2, y2 + * 1500, 100, // x3, y3 + * 2000, 0 }; // x4, y4 + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "type1", + * "darkening-parameters", darken_params ); + * ``` + * + * @since: + * 2.5.1 (for 'cff' module) + * + * 2.6.2 (for 'autofitter' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * random-seed + * + * @description: + * By default, the seed value for the CFF 'random' operator and the + * similar '0 28 callothersubr pop' command for the Type~1 and CID + * drivers is set to a random value. However, mainly for debugging + * purposes, it is often necessary to use a known value as a seed so that + * the pseudo-random number sequences generated by 'random' are + * repeatable. + * + * The `random-seed` property does that. Its argument is a signed 32bit + * integer; if the value is zero or negative, the seed given by the + * `intitialRandomSeed` private DICT operator in a CFF file gets used (or + * a default value if there is no such operator). If the value is + * positive, use it instead of `initialRandomSeed`, which is consequently + * ignored. + * + * @note: + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable. It can also be set per face using @FT_Face_Properties with + * @FT_PARAM_TAG_RANDOM_SEED. + * + * @since: + * 2.8 (for 'cff' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * no-long-family-names + * + * @description: + * If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling + * FreeType, the PCF driver constructs long family names. + * + * There are many PCF fonts just called 'Fixed' which look completely + * different, and which have nothing to do with each other. When + * selecting 'Fixed' in KDE or Gnome one gets results that appear rather + * random, the style changes often if one changes the size and one cannot + * select some fonts at all. The improve this situation, the PCF module + * prepends the foundry name (plus a space) to the family name. It also + * checks whether there are 'wide' characters; all put together, family + * names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed. + * + * If `no-long-family-names` is set, this feature gets switched off. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values 1 and 0 for 'on' and 'off', respectively). + * + * @example: + * ``` + * FT_Library library; + * FT_Bool no_long_family_names = TRUE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "pcf", + * "no-long-family-names", + * &no_long_family_names ); + * ``` + * + * @since: + * 2.8 + */ + + + /************************************************************************** + * + * @enum: + * TT_INTERPRETER_VERSION_XXX + * + * @description: + * A list of constants used for the @interpreter-version property to + * select the hinting engine for Truetype fonts. + * + * The numeric value in the constant names represents the version number + * as returned by the 'GETINFO' bytecode instruction. + * + * @values: + * TT_INTERPRETER_VERSION_35 :: + * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in + * Windows~98; only grayscale and B/W rasterizing is supported. + * + * TT_INTERPRETER_VERSION_38 :: + * Version~38 is the same Version~40. The original 'Infinality' code is + * no longer available. + * + * TT_INTERPRETER_VERSION_40 :: + * Version~40 corresponds to MS rasterizer v.2.1; it is roughly + * equivalent to the hinting provided by DirectWrite ClearType (as can + * be found, for example, in Microsoft's Edge Browser on Windows~10). + * It is used in FreeType to select the 'minimal' subpixel hinting + * code, a stripped-down and higher performance version of the + * 'Infinality' code. + * + * @note: + * This property controls the behaviour of the bytecode interpreter and + * thus how outlines get hinted. It does **not** control how glyph get + * rasterized! In particular, it does not control subpixel color + * filtering. + * + * If FreeType has not been compiled with the configuration option + * `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes + * an `FT_Err_Unimplemented_Feature` error. + * + * Depending on the graphics framework, Microsoft uses different bytecode + * and rendering engines. As a consequence, the version numbers returned + * by a call to the 'GETINFO' bytecode instruction are more convoluted + * than desired. + * + * Here are two tables that try to shed some light on the possible values + * for the MS rasterizer engine, together with the additional features + * introduced by it. + * + * ``` + * GETINFO framework version feature + * ------------------------------------------------------------------- + * 3 GDI (Win 3.1), v1.0 16-bit, first version + * TrueImage + * 33 GDI (Win NT 3.1), v1.5 32-bit + * HP Laserjet + * 34 GDI (Win 95) v1.6 font smoothing, + * new SCANTYPE opcode + * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET + * bits in composite glyphs + * 36 MGDI (Win CE 2) v1.6+ classic ClearType + * 37 GDI (XP and later), v1.8 ClearType + * GDI+ old (before Vista) + * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType, + * WPF Y-direction ClearType, + * additional error checking + * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags + * in GETINFO opcode, + * bug fixes + * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag + * DWrite (Win 8) in GETINFO opcode, + * Gray ClearType + * ``` + * + * The 'version' field gives a rough orientation only, since some + * applications provided certain features much earlier (as an example, + * Microsoft Reader used subpixel and Y-direction ClearType already in + * Windows 2000). Similarly, updates to a given framework might include + * improved hinting support. + * + * ``` + * version sampling rendering comment + * x y x y + * -------------------------------------------------------------- + * v1.0 normal normal B/W B/W bi-level + * v1.6 high high gray gray grayscale + * v1.8 high normal color-filter B/W (GDI) ClearType + * v1.9 high high color-filter gray Color ClearType + * v2.1 high normal gray B/W Gray ClearType + * v2.1 high high gray gray Gray ClearType + * ``` + * + * Color and Gray ClearType are the two available variants of + * 'Y-direction ClearType', meaning grayscale rasterization along the + * Y-direction; the name used in the TrueType specification for this + * feature is 'symmetric smoothing'. 'Classic ClearType' is the original + * algorithm used before introducing a modified version in Win~XP. + * Another name for v1.6's grayscale rendering is 'font smoothing', and + * 'Color ClearType' is sometimes also called 'DWrite ClearType'. To + * differentiate between today's Color ClearType and the earlier + * ClearType variant with B/W rendering along the vertical axis, the + * latter is sometimes called 'GDI ClearType'. + * + * 'Normal' and 'high' sampling describe the (virtual) resolution to + * access the rasterized outline after the hinting process. 'Normal' + * means 1 sample per grid line (i.e., B/W). In the current Microsoft + * implementation, 'high' means an extra virtual resolution of 16x16 (or + * 16x1) grid lines per pixel for bytecode instructions like 'MIRP'. + * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid + * lines for color filtering if Color ClearType is activated. + * + * Note that 'Gray ClearType' is essentially the same as v1.6's grayscale + * rendering. However, the GETINFO instruction handles it differently: + * v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns + * bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19 + * (Gray ClearType). Also, this mode respects bits 2 and~3 for the + * version~1 gasp table exclusively (like Color ClearType), while v1.6 + * only respects the values of version~0 (bits 0 and~1). + * + * Keep in mind that the features of the above interpreter versions might + * not map exactly to FreeType features or behavior because it is a + * fundamentally different library with different internals. + * + */ +#define TT_INTERPRETER_VERSION_35 35 +#define TT_INTERPRETER_VERSION_38 38 +#define TT_INTERPRETER_VERSION_40 40 + + + /************************************************************************** + * + * @property: + * interpreter-version + * + * @description: + * Currently, three versions are available, two representing the bytecode + * interpreter with subpixel hinting support (old 'Infinality' code and + * new stripped-down and higher performance 'minimal' code) and one + * without, respectively. The default is subpixel support if + * `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel + * support otherwise (since it isn't available then). + * + * If subpixel hinting is on, many TrueType bytecode instructions behave + * differently compared to B/W or grayscale rendering (except if 'native + * ClearType' is selected by the font). Microsoft's main idea is to + * render at a much increased horizontal resolution, then sampling down + * the created output to subpixel precision. However, many older fonts + * are not suited to this and must be specially taken care of by applying + * (hardcoded) tweaks in Microsoft's interpreter. + * + * Details on subpixel hinting and some of the necessary tweaks can be + * found in Greg Hitchcock's whitepaper at + * 'https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'. + * Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2, + * or 6x5 supersampling) like discussed in the paper. Depending on the + * chosen interpreter, it simply ignores instructions on vertical stems + * to arrive at very similar results. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values '35', '38', or '40'). + * + * @example: + * The following example code demonstrates how to deactivate subpixel + * hinting (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_Face face; + * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "truetype", + * "interpreter-version", + * &interpreter_version ); + * ``` + * + * @since: + * 2.5 + */ + + + /************************************************************************** + * + * @property: + * spread + * + * @description: + * This property of the 'sdf' and 'bsdf' renderers defines how the signed + * distance field (SDF) is represented in the output bitmap. The output + * values are calculated as follows, '128 * ( SDF / spread + 1 )', with + * the result clamped to the 8-bit range [0..255]. Therefore, 'spread' + * is also the maximum euclidean distance from the edge after which the + * values are clamped. The spread is specified in pixels with the + * default value of 8. For accurate SDF texture mapping (interpolation), + * the spread should be large enough to accommodate the target grid unit. + * + * @example: + * The following example code demonstrates how to set the SDF spread + * (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_Int spread = 2; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "sdf", "spread", &spread ); + * ``` + * + * @note: + * FreeType has two rasterizers for generating SDF, namely: + * + * 1. `sdf` for generating SDF directly from glyph's outline, and + * + * 2. `bsdf` for generating SDF from rasterized bitmaps. + * + * Depending on the glyph type (i.e., outline or bitmap), one of the two + * rasterizers is chosen at runtime and used for generating SDFs. To + * force the use of `bsdf` you should render the glyph with any of the + * FreeType's other rendering modes (e.g., `FT_RENDER_MODE_NORMAL`) and + * then re-render with `FT_RENDER_MODE_SDF`. + * + * There are some issues with stability and possible failures of the SDF + * renderers (specifically `sdf`). + * + * 1. The `sdf` rasterizer is sensitive to really small features (e.g., + * sharp turns that are less than 1~pixel) and imperfections in the + * glyph's outline, causing artifacts in the final output. + * + * 2. The `sdf` rasterizer has limited support for handling intersecting + * contours and *cannot* handle self-intersecting contours whatsoever. + * Self-intersection happens when a single connected contour + * intersects itself at some point; having these in your font + * definitely poses a problem to the rasterizer and cause artifacts, + * too. + * + * 3. Generating SDF for really small glyphs may result in undesirable + * output; the pixel grid (which stores distance information) becomes + * too coarse. + * + * 4. Since the output buffer is normalized, precision at smaller spreads + * is greater than precision at larger spread values because the + * output range of [0..255] gets mapped to a smaller SDF range. A + * spread of~2 should be sufficient in most cases. + * + * Points (1) and (2) can be avoided by using the `bsdf` rasterizer, + * which is more stable than the `sdf` rasterizer in general. + * + * @since: + * 2.11 + */ + + + /************************************************************************** + * + * @property: + * svg-hooks + * + * @description: + * Set up the interface between FreeType and an extern SVG rendering + * library like 'librsvg'. All details on the function hooks can be + * found in section @svg_fonts. + * + * @example: + * The following example code expects that the four hook functions + * `svg_*` are defined elsewhere. Error handling is omitted, too. + * + * ``` + * FT_Library library; + * SVG_RendererHooks hooks = { + * (SVG_Lib_Init_Func)svg_init, + * (SVG_Lib_Free_Func)svg_free, + * (SVG_Lib_Render_Func)svg_render, + * (SVG_Lib_Preset_Slot_Func)svg_preset_slot }; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "ot-svg", + * "svg-hooks", &hooks ); + * ``` + * + * @since: + * 2.12 + */ + + + /************************************************************************** + * + * @property: + * glyph-to-script-map + * + * @description: + * **Experimental only** + * + * The auto-hinter provides various script modules to hint glyphs. + * Examples of supported scripts are Latin or CJK. Before a glyph is + * auto-hinted, the Unicode character map of the font gets examined, and + * the script is then determined based on Unicode character ranges, see + * below. + * + * OpenType fonts, however, often provide much more glyphs than character + * codes (small caps, superscripts, ligatures, swashes, etc.), to be + * controlled by so-called 'features'. Handling OpenType features can be + * quite complicated and thus needs a separate library on top of + * FreeType. + * + * The mapping between glyph indices and scripts (in the auto-hinter + * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array + * with `num_glyphs` elements, as found in the font's @FT_Face structure. + * The `glyph-to-script-map` property returns a pointer to this array, + * which can be modified as needed. Note that the modification should + * happen before the first glyph gets processed by the auto-hinter so + * that the global analysis of the font shapes actually uses the modified + * mapping. + * + * @example: + * The following example code demonstrates how to access it (omitting the + * error handling). + * + * ``` + * FT_Library library; + * FT_Face face; + * FT_Prop_GlyphToScriptMap prop; + * + * + * FT_Init_FreeType( &library ); + * FT_New_Face( library, "foo.ttf", 0, &face ); + * + * prop.face = face; + * + * FT_Property_Get( library, "autofitter", + * "glyph-to-script-map", &prop ); + * + * // adjust `prop.map' as needed right here + * + * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @enum: + * FT_AUTOHINTER_SCRIPT_XXX + * + * @description: + * **Experimental only** + * + * A list of constants used for the @glyph-to-script-map property to + * specify the script submodule the auto-hinter should use for hinting a + * particular glyph. + * + * @values: + * FT_AUTOHINTER_SCRIPT_NONE :: + * Don't auto-hint this glyph. + * + * FT_AUTOHINTER_SCRIPT_LATIN :: + * Apply the latin auto-hinter. For the auto-hinter, 'latin' is a very + * broad term, including Cyrillic and Greek also since characters from + * those scripts share the same design constraints. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+0020 - U+007F // Basic Latin (no control characters) + * U+00A0 - U+00FF // Latin-1 Supplement (no control characters) + * U+0100 - U+017F // Latin Extended-A + * U+0180 - U+024F // Latin Extended-B + * U+0250 - U+02AF // IPA Extensions + * U+02B0 - U+02FF // Spacing Modifier Letters + * U+0300 - U+036F // Combining Diacritical Marks + * U+0370 - U+03FF // Greek and Coptic + * U+0400 - U+04FF // Cyrillic + * U+0500 - U+052F // Cyrillic Supplement + * U+1D00 - U+1D7F // Phonetic Extensions + * U+1D80 - U+1DBF // Phonetic Extensions Supplement + * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement + * U+1E00 - U+1EFF // Latin Extended Additional + * U+1F00 - U+1FFF // Greek Extended + * U+2000 - U+206F // General Punctuation + * U+2070 - U+209F // Superscripts and Subscripts + * U+20A0 - U+20CF // Currency Symbols + * U+2150 - U+218F // Number Forms + * U+2460 - U+24FF // Enclosed Alphanumerics + * U+2C60 - U+2C7F // Latin Extended-C + * U+2DE0 - U+2DFF // Cyrillic Extended-A + * U+2E00 - U+2E7F // Supplemental Punctuation + * U+A640 - U+A69F // Cyrillic Extended-B + * U+A720 - U+A7FF // Latin Extended-D + * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) + * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols + * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement + * ``` + * + * FT_AUTOHINTER_SCRIPT_CJK :: + * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old + * Vietnamese, and some other scripts. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+1100 - U+11FF // Hangul Jamo + * U+2E80 - U+2EFF // CJK Radicals Supplement + * U+2F00 - U+2FDF // Kangxi Radicals + * U+2FF0 - U+2FFF // Ideographic Description Characters + * U+3000 - U+303F // CJK Symbols and Punctuation + * U+3040 - U+309F // Hiragana + * U+30A0 - U+30FF // Katakana + * U+3100 - U+312F // Bopomofo + * U+3130 - U+318F // Hangul Compatibility Jamo + * U+3190 - U+319F // Kanbun + * U+31A0 - U+31BF // Bopomofo Extended + * U+31C0 - U+31EF // CJK Strokes + * U+31F0 - U+31FF // Katakana Phonetic Extensions + * U+3200 - U+32FF // Enclosed CJK Letters and Months + * U+3300 - U+33FF // CJK Compatibility + * U+3400 - U+4DBF // CJK Unified Ideographs Extension A + * U+4DC0 - U+4DFF // Yijing Hexagram Symbols + * U+4E00 - U+9FFF // CJK Unified Ideographs + * U+A960 - U+A97F // Hangul Jamo Extended-A + * U+AC00 - U+D7AF // Hangul Syllables + * U+D7B0 - U+D7FF // Hangul Jamo Extended-B + * U+F900 - U+FAFF // CJK Compatibility Ideographs + * U+FE10 - U+FE1F // Vertical forms + * U+FE30 - U+FE4F // CJK Compatibility Forms + * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms + * U+1B000 - U+1B0FF // Kana Supplement + * U+1D300 - U+1D35F // Tai Xuan Hing Symbols + * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement + * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B + * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C + * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D + * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement + * ``` + * + * FT_AUTOHINTER_SCRIPT_INDIC :: + * Apply the indic auto-hinter, covering all major scripts from the + * Indian sub-continent and some other related scripts like Thai, Lao, + * or Tibetan. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+0900 - U+0DFF // Indic Range + * U+0F00 - U+0FFF // Tibetan + * U+1900 - U+194F // Limbu + * U+1B80 - U+1BBF // Sundanese + * U+A800 - U+A82F // Syloti Nagri + * U+ABC0 - U+ABFF // Meetei Mayek + * U+11800 - U+118DF // Sharada + * ``` + * + * Note that currently Indic support is rudimentary only, missing blue + * zone support. + * + * @since: + * 2.4.11 + * + */ +#define FT_AUTOHINTER_SCRIPT_NONE 0 +#define FT_AUTOHINTER_SCRIPT_LATIN 1 +#define FT_AUTOHINTER_SCRIPT_CJK 2 +#define FT_AUTOHINTER_SCRIPT_INDIC 3 + + + /************************************************************************** + * + * @struct: + * FT_Prop_GlyphToScriptMap + * + * @description: + * **Experimental only** + * + * The data exchange structure for the @glyph-to-script-map property. + * + * @since: + * 2.4.11 + * + */ + typedef struct FT_Prop_GlyphToScriptMap_ + { + FT_Face face; + FT_UShort* map; + + } FT_Prop_GlyphToScriptMap; + + + /************************************************************************** + * + * @property: + * fallback-script + * + * @description: + * **Experimental only** + * + * If no auto-hinter script module can be assigned to a glyph, a fallback + * script gets assigned to it (see also the @glyph-to-script-map + * property). By default, this is @FT_AUTOHINTER_SCRIPT_CJK. Using the + * `fallback-script` property, this fallback value can be changed. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * It's important to use the right timing for changing this value: The + * creation of the glyph-to-script map that eventually uses the fallback + * script value gets triggered either by setting or reading a + * face-specific property like @glyph-to-script-map, or by auto-hinting + * any glyph from that face. In particular, if you have already created + * an @FT_Face structure but not loaded any glyph (using the + * auto-hinter), a change of the fallback script will affect this face. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "fallback-script", &fallback_script ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @property: + * default-script + * + * @description: + * **Experimental only** + * + * If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make + * the HarfBuzz library access OpenType features for getting better glyph + * coverages, this property sets the (auto-fitter) script to be used for + * the default (OpenType) script data of a font's GSUB table. Features + * for the default script are intended for all scripts not explicitly + * handled in GSUB; an example is a 'dlig' feature, containing the + * combination of the characters 'T', 'E', and 'L' to form a 'TEL' + * ligature. + * + * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the + * `default-script` property, this default value can be changed. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * It's important to use the right timing for changing this value: The + * creation of the glyph-to-script map that eventually uses the default + * script value gets triggered either by setting or reading a + * face-specific property like @glyph-to-script-map, or by auto-hinting + * any glyph from that face. In particular, if you have already created + * an @FT_Face structure but not loaded any glyph (using the + * auto-hinter), a change of the default script will affect this face. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "default-script", &default_script ); + * ``` + * + * @since: + * 2.5.3 + * + */ + + + /************************************************************************** + * + * @property: + * increase-x-height + * + * @description: + * For ppem values in the range 6~<= ppem <= `increase-x-height`, round + * up the font's x~height much more often than normally. If the value is + * set to~0, which is the default, this feature is switched off. Use + * this property to improve the legibility of small font sizes if + * necessary. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * Set this value right after calling @FT_Set_Char_Size, but before + * loading any glyph (using the auto-hinter). + * + * @example: + * ``` + * FT_Library library; + * FT_Face face; + * FT_Prop_IncreaseXHeight prop; + * + * + * FT_Init_FreeType( &library ); + * FT_New_Face( library, "foo.ttf", 0, &face ); + * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 ); + * + * prop.face = face; + * prop.limit = 14; + * + * FT_Property_Set( library, "autofitter", + * "increase-x-height", &prop ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Prop_IncreaseXHeight + * + * @description: + * The data exchange structure for the @increase-x-height property. + * + */ + typedef struct FT_Prop_IncreaseXHeight_ + { + FT_Face face; + FT_UInt limit; + + } FT_Prop_IncreaseXHeight; + + + /************************************************************************** + * + * @property: + * warping + * + * @description: + * **Obsolete** + * + * This property was always experimental and probably never worked + * correctly. It was entirely removed from the FreeType~2 sources. This + * entry is only here for historical reference. + * + * Warping only worked in 'normal' auto-hinting mode replacing it. The + * idea of the code was to slightly scale and shift a glyph along the + * non-hinted dimension (which is usually the horizontal axis) so that as + * much of its segments were aligned (more or less) to the grid. To find + * out a glyph's optimal scaling and shifting value, various parameter + * combinations were tried and scored. + * + * @since: + * 2.6 + * + */ + + + /* */ + + +FT_END_HEADER + + +#endif /* FTDRIVER_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/fterrdef.h b/non-source/foreign/freetype2/freetype/fterrdef.h index 3f53dd582..710ca91bb 100644 --- a/non-source/foreign/freetype2/freetype/fterrdef.h +++ b/non-source/foreign/freetype2/freetype/fterrdef.h @@ -1,58 +1,57 @@ -/***************************************************************************/ -/* */ -/* fterrdef.h */ -/* */ -/* FreeType error codes (specification). */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * fterrdef.h + * + * FreeType error codes (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ - /*************************************************************************/ - /* */ - /* <Section> */ - /* error_code_values */ - /* */ - /* <Title> */ - /* Error Code Values */ - /* */ - /* <Abstract> */ - /* All possible error codes returned by FreeType functions. */ - /* */ - /* <Description> */ - /* The list below is taken verbatim from the file `fterrdef.h' */ - /* (loaded automatically by including `FT_FREETYPE_H'). The first */ - /* argument of the `FT_ERROR_DEF_' macro is the error label; by */ - /* default, the prefix `FT_Err_' gets added so that you get error */ - /* names like `FT_Err_Cannot_Open_Resource'. The second argument is */ - /* the error code, and the last argument an error string, which is not */ - /* used by FreeType. */ - /* */ - /* Within your application you should *only* use error names and */ - /* *never* its numeric values! The latter might (and actually do) */ - /* change in forthcoming FreeType versions. */ - /* */ - /* Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero. */ - /* See the `Error Enumerations' subsection how to automatically */ - /* generate a list of error strings. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * error_code_values + * + * @title: + * Error Code Values + * + * @abstract: + * All possible error codes returned by FreeType functions. + * + * @description: + * The list below is taken verbatim from the file `fterrdef.h` (loaded + * automatically by including `FT_FREETYPE_H`). The first argument of the + * `FT_ERROR_DEF_` macro is the error label; by default, the prefix + * `FT_Err_` gets added so that you get error names like + * `FT_Err_Cannot_Open_Resource`. The second argument is the error code, + * and the last argument an error string, which is not used by FreeType. + * + * Within your application you should **only** use error names and + * **never** its numeric values! The latter might (and actually do) + * change in forthcoming FreeType versions. + * + * Macro `FT_NOERRORDEF_` defines `FT_Err_Ok`, which is always zero. See + * the 'Error Enumerations' subsection how to automatically generate a + * list of error strings. + * + */ - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Err_XXX */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @enum: + * FT_Err_XXX + * + */ /* generic errors */ @@ -102,6 +101,8 @@ "too many hints" ) FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, "invalid pixel size" ) + FT_ERRORDEF_( Invalid_SVG_Document, 0x18, + "invalid SVG document" ) /* handle errors */ @@ -231,6 +232,12 @@ "invalid PostScript (post) table format" ) FT_ERRORDEF_( Invalid_Post_Table, 0x9B, "invalid PostScript (post) table" ) + FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C, + "found FDEF or IDEF opcode in glyf bytecode" ) + FT_ERRORDEF_( Missing_Bitmap, 0x9D, + "missing bitmap in strike" ) + FT_ERRORDEF_( Missing_SVG_Hooks, 0x9E, + "SVG hooks have not been set" ) /* CFF, CID, and Type 1 errors */ diff --git a/non-source/foreign/freetype2/freetype/fterrors.h b/non-source/foreign/freetype2/freetype/fterrors.h index e15bfb001..27c0ece5c 100644 --- a/non-source/foreign/freetype2/freetype/fterrors.h +++ b/non-source/foreign/freetype2/freetype/fterrors.h @@ -1,112 +1,122 @@ -/***************************************************************************/ -/* */ -/* fterrors.h */ -/* */ -/* FreeType error code handling (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* error_enumerations */ - /* */ - /* <Title> */ - /* Error Enumerations */ - /* */ - /* <Abstract> */ - /* How to handle errors and error strings. */ - /* */ - /* <Description> */ - /* The header file `fterrors.h' (which is automatically included by */ - /* `freetype.h' defines the handling of FreeType's enumeration */ - /* constants. It can also be used to generate error message strings */ - /* with a small macro trick explained below. */ - /* */ - /* *Error* *Formats* */ - /* */ - /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */ - /* defined in `ftoption.h' in order to make the higher byte indicate */ - /* the module where the error has happened (this is not compatible */ - /* with standard builds of FreeType 2, however). See the file */ - /* `ftmoderr.h' for more details. */ - /* */ - /* *Error* *Message* *Strings* */ - /* */ - /* Error definitions are set up with special macros that allow client */ - /* applications to build a table of error message strings. The */ - /* strings are not included in a normal build of FreeType 2 to */ - /* save space (most client applications do not use them). */ - /* */ - /* To do so, you have to define the following macros before including */ - /* this file. */ - /* */ - /* { */ - /* FT_ERROR_START_LIST */ - /* } */ - /* */ - /* This macro is called before anything else to define the start of */ - /* the error list. It is followed by several FT_ERROR_DEF calls. */ - /* */ - /* { */ - /* FT_ERROR_DEF( e, v, s ) */ - /* } */ - /* */ - /* This macro is called to define one single error. `e' is the error */ - /* code identifier (e.g., `Invalid_Argument'), `v' is the error's */ - /* numerical value, and `s' is the corresponding error string. */ - /* */ - /* { */ - /* FT_ERROR_END_LIST */ - /* } */ - /* */ - /* This macro ends the list. */ - /* */ - /* Additionally, you have to undefine `FTERRORS_H_' before #including */ - /* this file. */ - /* */ - /* Here is a simple example. */ - /* */ - /* { */ - /* #undef FTERRORS_H_ */ - /* #define FT_ERRORDEF( e, v, s ) { e, s }, */ - /* #define FT_ERROR_START_LIST { */ - /* #define FT_ERROR_END_LIST { 0, NULL } }; */ - /* */ - /* const struct */ - /* { */ - /* int err_code; */ - /* const char* err_msg; */ - /* } ft_errors[] = */ - /* */ - /* #include FT_ERRORS_H */ - /* } */ - /* */ - /* Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with */ - /* `FT_NOERRORDEF'; it is always zero. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * fterrors.h + * + * FreeType error code handling (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * @section: + * error_enumerations + * + * @title: + * Error Enumerations + * + * @abstract: + * How to handle errors and error strings. + * + * @description: + * The header file `fterrors.h` (which is automatically included by + * `freetype.h`) defines the handling of FreeType's enumeration + * constants. It can also be used to generate error message strings + * with a small macro trick explained below. + * + * **Error Formats** + * + * The configuration macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` can be + * defined in `ftoption.h` in order to make the higher byte indicate the + * module where the error has happened (this is not compatible with + * standard builds of FreeType~2, however). See the file `ftmoderr.h` + * for more details. + * + * **Error Message Strings** + * + * Error definitions are set up with special macros that allow client + * applications to build a table of error message strings. The strings + * are not included in a normal build of FreeType~2 to save space (most + * client applications do not use them). + * + * To do so, you have to define the following macros before including + * this file. + * + * ``` + * FT_ERROR_START_LIST + * ``` + * + * This macro is called before anything else to define the start of the + * error list. It is followed by several `FT_ERROR_DEF` calls. + * + * ``` + * FT_ERROR_DEF( e, v, s ) + * ``` + * + * This macro is called to define one single error. 'e' is the error + * code identifier (e.g., `Invalid_Argument`), 'v' is the error's + * numerical value, and 's' is the corresponding error string. + * + * ``` + * FT_ERROR_END_LIST + * ``` + * + * This macro ends the list. + * + * Additionally, you have to undefine `FTERRORS_H_` before #including + * this file. + * + * Here is a simple example. + * + * ``` + * #undef FTERRORS_H_ + * #define FT_ERRORDEF( e, v, s ) { e, s }, + * #define FT_ERROR_START_LIST { + * #define FT_ERROR_END_LIST { 0, NULL } }; + * + * const struct + * { + * int err_code; + * const char* err_msg; + * } ft_errors[] = + * + * #include <freetype/fterrors.h> + * ``` + * + * An alternative to using an array is a switch statement. + * + * ``` + * #undef FTERRORS_H_ + * #define FT_ERROR_START_LIST switch ( error_code ) { + * #define FT_ERRORDEF( e, v, s ) case v: return s; + * #define FT_ERROR_END_LIST } + * ``` + * + * If you use `FT_CONFIG_OPTION_USE_MODULE_ERRORS`, `error_code` should + * be replaced with `FT_ERROR_BASE(error_code)` in the last example. + */ /* */ - /* In previous FreeType versions we used `__FTERRORS_H__'. However, */ + /* In previous FreeType versions we used `__FTERRORS_H__`. However, */ /* using two successive underscores in a non-system symbol name */ /* violates the C (and C++) standard, so it was changed to the */ /* current form. In spite of this, we have to make */ /* */ + /* ``` */ /* #undefine __FTERRORS_H__ */ + /* ``` */ /* */ - /* work for backwards compatibility. */ + /* work for backward compatibility. */ /* */ #if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) ) #define FTERRORS_H_ @@ -114,7 +124,7 @@ /* include module base error codes */ -#include FT_MODULE_ERRORS_H +#include <freetype/ftmoderr.h> /*******************************************************************/ @@ -130,7 +140,7 @@ /* FT_ERR_PREFIX is used as a prefix for error identifiers. */ - /* By default, we use `FT_Err_'. */ + /* By default, we use `FT_Err_`. */ /* */ #ifndef FT_ERR_PREFIX #define FT_ERR_PREFIX FT_Err_ @@ -158,6 +168,8 @@ /* */ #ifndef FT_ERRORDEF +#define FT_INCLUDE_ERR_PROTOS + #define FT_ERRORDEF( e, v, s ) e = v, #define FT_ERROR_START_LIST enum { #define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) }; @@ -185,7 +197,7 @@ /* now include the error codes */ -#include FT_ERROR_DEFINITIONS_H +#include <freetype/fterrdef.h> #ifdef FT_ERROR_END_LIST @@ -220,6 +232,64 @@ #undef FT_ERR_PREFIX #endif + /* FT_INCLUDE_ERR_PROTOS: Control whether function prototypes should be */ + /* included with */ + /* */ + /* #include <freetype/fterrors.h> */ + /* */ + /* This is only true where `FT_ERRORDEF` is */ + /* undefined. */ + /* */ + /* FT_ERR_PROTOS_DEFINED: Actual multiple-inclusion protection of */ + /* `fterrors.h`. */ +#ifdef FT_INCLUDE_ERR_PROTOS +#undef FT_INCLUDE_ERR_PROTOS + +#ifndef FT_ERR_PROTOS_DEFINED +#define FT_ERR_PROTOS_DEFINED + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @function: + * FT_Error_String + * + * @description: + * Retrieve the description of a valid FreeType error code. + * + * @input: + * error_code :: + * A valid FreeType error code. + * + * @return: + * A C~string or `NULL`, if any error occurred. + * + * @note: + * FreeType has to be compiled with `FT_CONFIG_OPTION_ERROR_STRINGS` or + * `FT_DEBUG_LEVEL_ERROR` to get meaningful descriptions. + * 'error_string' will be `NULL` otherwise. + * + * Module identification will be ignored: + * + * ```c + * strcmp( FT_Error_String( FT_Err_Unknown_File_Format ), + * FT_Error_String( BDF_Err_Unknown_File_Format ) ) == 0; + * ``` + */ + FT_EXPORT( const char* ) + FT_Error_String( FT_Error error_code ); + + /* */ + +FT_END_HEADER + + +#endif /* FT_ERR_PROTOS_DEFINED */ + +#endif /* FT_INCLUDE_ERR_PROTOS */ + #endif /* !(FTERRORS_H_ && __FTERRORS_H__) */ diff --git a/non-source/foreign/freetype2/freetype/ftfntfmt.h b/non-source/foreign/freetype2/freetype/ftfntfmt.h index bd423247b..7c8b0874a 100644 --- a/non-source/foreign/freetype2/freetype/ftfntfmt.h +++ b/non-source/foreign/freetype2/freetype/ftfntfmt.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftfntfmt.h */ -/* */ -/* Support functions for font formats. */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftfntfmt.h + * + * Support functions for font formats. + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTFNTFMT_H_ #define FTFNTFMT_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -32,49 +31,48 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* font_formats */ - /* */ - /* <Title> */ - /* Font Formats */ - /* */ - /* <Abstract> */ - /* Getting the font format. */ - /* */ - /* <Description> */ - /* The single function in this section can be used to get the font */ - /* format. Note that this information is not needed normally; */ - /* however, there are special cases (like in PDF devices) where it is */ - /* important to differentiate, in spite of FreeType's uniform API. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Font_Format */ - /* */ - /* <Description> */ - /* Return a string describing the format of a given face. Possible */ - /* values are `TrueType', `Type~1', `BDF', `PCF', `Type~42', */ - /* `CID~Type~1', `CFF', `PFR', and `Windows~FNT'. */ - /* */ - /* The return value is suitable to be used as an X11 FONT_PROPERTY. */ - /* */ - /* <Input> */ - /* face :: */ - /* Input face handle. */ - /* */ - /* <Return> */ - /* Font format string. NULL in case of error. */ - /* */ - /* <Note> */ - /* A deprecated name for the same function is */ - /* `FT_Get_X11_Font_Format'. */ - /* */ + /************************************************************************** + * + * @section: + * font_formats + * + * @title: + * Font Formats + * + * @abstract: + * Getting the font format. + * + * @description: + * The single function in this section can be used to get the font format. + * Note that this information is not needed normally; however, there are + * special cases (like in PDF devices) where it is important to + * differentiate, in spite of FreeType's uniform API. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_Font_Format + * + * @description: + * Return a string describing the format of a given face. Possible values + * are 'TrueType', 'Type~1', 'BDF', 'PCF', 'Type~42', 'CID~Type~1', 'CFF', + * 'PFR', and 'Windows~FNT'. + * + * The return value is suitable to be used as an X11 FONT_PROPERTY. + * + * @input: + * face :: + * Input face handle. + * + * @return: + * Font format string. `NULL` in case of error. + * + * @note: + * A deprecated name for the same function is `FT_Get_X11_Font_Format`. + */ FT_EXPORT( const char* ) FT_Get_Font_Format( FT_Face face ); diff --git a/non-source/foreign/freetype2/freetype/ftgasp.h b/non-source/foreign/freetype2/freetype/ftgasp.h index 3f5b3bc69..30e5a9bf8 100644 --- a/non-source/foreign/freetype2/freetype/ftgasp.h +++ b/non-source/foreign/freetype2/freetype/ftgasp.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftgasp.h */ -/* */ -/* Access of TrueType's `gasp' table (specification). */ -/* */ -/* Copyright 2007-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftgasp.h + * + * Access of TrueType's 'gasp' table (specification). + * + * Copyright (C) 2007-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTGASP_H_ #define FTGASP_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -29,7 +28,10 @@ #endif - /*************************************************************************** +FT_BEGIN_HEADER + + + /************************************************************************** * * @section: * gasp_table @@ -38,16 +40,16 @@ * Gasp Table * * @abstract: - * Retrieving TrueType `gasp' table entries. + * Retrieving TrueType 'gasp' table entries. * * @description: * The function @FT_Get_Gasp can be used to query a TrueType or OpenType - * font for specific entries in its `gasp' table, if any. This is - * mainly useful when implementing native TrueType hinting with the - * bytecode interpreter to duplicate the Windows text rendering results. + * font for specific entries in its 'gasp' table, if any. This is mainly + * useful when implementing native TrueType hinting with the bytecode + * interpreter to duplicate the Windows text rendering results. */ - /************************************************************************* + /************************************************************************** * * @enum: * FT_GASP_XXX @@ -63,7 +65,7 @@ * * FT_GASP_DO_GRIDFIT :: * Grid-fitting and hinting should be performed at the specified ppem. - * This *really* means TrueType bytecode interpretation. If this bit + * This **really** means TrueType bytecode interpretation. If this bit * is not set, no hinting gets applied. * * FT_GASP_DO_GRAY :: @@ -77,13 +79,13 @@ * Grid-fitting must be used with ClearType's symmetric smoothing. * * @note: - * The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be + * The bit-flags `FT_GASP_DO_GRIDFIT` and `FT_GASP_DO_GRAY` are to be * used for standard font rasterization only. Independently of that, - * `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to - * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and - * `FT_GASP_DO_GRAY' are consequently ignored). + * `FT_GASP_SYMMETRIC_SMOOTHING` and `FT_GASP_SYMMETRIC_GRIDFIT` are to + * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT` and + * `FT_GASP_DO_GRAY` are consequently ignored). * - * `ClearType' is Microsoft's implementation of LCD rendering, partly + * 'ClearType' is Microsoft's implementation of LCD rendering, partly * protected by patents. * * @since: @@ -92,26 +94,36 @@ #define FT_GASP_NO_TABLE -1 #define FT_GASP_DO_GRIDFIT 0x01 #define FT_GASP_DO_GRAY 0x02 +#define FT_GASP_SYMMETRIC_GRIDFIT 0x04 #define FT_GASP_SYMMETRIC_SMOOTHING 0x08 -#define FT_GASP_SYMMETRIC_GRIDFIT 0x10 - /************************************************************************* + /************************************************************************** * - * @func: + * @function: * FT_Get_Gasp * * @description: - * Read the `gasp' table from a TrueType or OpenType font file and - * return the entry corresponding to a given character pixel size. + * For a TrueType or OpenType font file, return the rasterizer behaviour + * flags from the font's 'gasp' table corresponding to a given character + * pixel size. * * @input: - * face :: The source face handle. - * ppem :: The vertical character pixel size. + * face :: + * The source face handle. + * + * ppem :: + * The vertical character pixel size. * * @return: * Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no - * `gasp' table in the face. + * 'gasp' table in the face. + * + * @note: + * If you want to use the MM functionality of OpenType variation fonts + * (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this + * function **after** setting an instance since the return values can + * change. * * @since: * 2.3.0 @@ -123,6 +135,8 @@ /* */ +FT_END_HEADER + #endif /* FTGASP_H_ */ diff --git a/non-source/foreign/freetype2/freetype/ftglyph.h b/non-source/foreign/freetype2/freetype/ftglyph.h index d9840a81f..dc1eb8873 100644 --- a/non-source/foreign/freetype2/freetype/ftglyph.h +++ b/non-source/foreign/freetype2/freetype/ftglyph.h @@ -1,40 +1,39 @@ -/***************************************************************************/ -/* */ -/* ftglyph.h */ -/* */ -/* FreeType convenience functions to handle glyphs (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file contains the definition of several convenience functions */ - /* that can be used by client applications to easily retrieve glyph */ - /* bitmaps and outlines from a given face. */ - /* */ - /* These functions should be optional if you are writing a font server */ - /* or text layout engine on top of FreeType. However, they are pretty */ - /* handy for many other simple uses of the library. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftglyph.h + * + * FreeType convenience functions to handle glyphs (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file contains the definition of several convenience functions that + * can be used by client applications to easily retrieve glyph bitmaps and + * outlines from a given face. + * + * These functions should be optional if you are writing a font server or + * text layout engine on top of FreeType. However, they are pretty handy + * for many other simple uses of the library. + * + */ #ifndef FTGLYPH_H_ #define FTGLYPH_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -46,65 +45,70 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* glyph_management */ - /* */ - /* <Title> */ - /* Glyph Management */ - /* */ - /* <Abstract> */ - /* Generic interface to manage individual glyph data. */ - /* */ - /* <Description> */ - /* This section contains definitions used to manage glyph data */ - /* through generic FT_Glyph objects. Each of them can contain a */ - /* bitmap, a vector outline, or even images in other formats. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * glyph_management + * + * @title: + * Glyph Management + * + * @abstract: + * Generic interface to manage individual glyph data. + * + * @description: + * This section contains definitions used to manage glyph data through + * generic @FT_Glyph objects. Each of them can contain a bitmap, + * a vector outline, or even images in other formats. These objects are + * detached from @FT_Face, contrary to @FT_GlyphSlot. + * + */ /* forward declaration to a private type */ typedef struct FT_Glyph_Class_ FT_Glyph_Class; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Glyph */ - /* */ - /* <Description> */ - /* Handle to an object used to model generic glyph images. It is a */ - /* pointer to the @FT_GlyphRec structure and can contain a glyph */ - /* bitmap or pointer. */ - /* */ - /* <Note> */ - /* Glyph objects are not owned by the library. You must thus release */ - /* them manually (through @FT_Done_Glyph) _before_ calling */ - /* @FT_Done_FreeType. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Glyph + * + * @description: + * Handle to an object used to model generic glyph images. It is a + * pointer to the @FT_GlyphRec structure and can contain a glyph bitmap + * or pointer. + * + * @note: + * Glyph objects are not owned by the library. You must thus release + * them manually (through @FT_Done_Glyph) _before_ calling + * @FT_Done_FreeType. + */ typedef struct FT_GlyphRec_* FT_Glyph; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_GlyphRec */ - /* */ - /* <Description> */ - /* The root glyph structure contains a given glyph image plus its */ - /* advance width in 16.16 fixed-point format. */ - /* */ - /* <Fields> */ - /* library :: A handle to the FreeType library object. */ - /* */ - /* clazz :: A pointer to the glyph's class. Private. */ - /* */ - /* format :: The format of the glyph's image. */ - /* */ - /* advance :: A 16.16 vector that gives the glyph's advance width. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_GlyphRec + * + * @description: + * The root glyph structure contains a given glyph image plus its advance + * width in 16.16 fixed-point format. + * + * @fields: + * library :: + * A handle to the FreeType library object. + * + * clazz :: + * A pointer to the glyph's class. Private. + * + * format :: + * The format of the glyph's image. + * + * advance :: + * A 16.16 vector that gives the glyph's advance width. + */ typedef struct FT_GlyphRec_ { FT_Library library; @@ -115,48 +119,51 @@ FT_BEGIN_HEADER } FT_GlyphRec; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_BitmapGlyph */ - /* */ - /* <Description> */ - /* A handle to an object used to model a bitmap glyph image. This is */ - /* a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. */ - /* */ + /************************************************************************** + * + * @type: + * FT_BitmapGlyph + * + * @description: + * A handle to an object used to model a bitmap glyph image. This is a + * 'sub-class' of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. + */ typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_BitmapGlyphRec */ - /* */ - /* <Description> */ - /* A structure used for bitmap glyph images. This really is a */ - /* `sub-class' of @FT_GlyphRec. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Glyph fields. */ - /* */ - /* left :: The left-side bearing, i.e., the horizontal distance */ - /* from the current pen position to the left border of the */ - /* glyph bitmap. */ - /* */ - /* top :: The top-side bearing, i.e., the vertical distance from */ - /* the current pen position to the top border of the glyph */ - /* bitmap. This distance is positive for upwards~y! */ - /* */ - /* bitmap :: A descriptor for the bitmap. */ - /* */ - /* <Note> */ - /* You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have */ - /* `glyph->format == FT_GLYPH_FORMAT_BITMAP'. This lets you access */ - /* the bitmap's contents easily. */ - /* */ - /* The corresponding pixel buffer is always owned by @FT_BitmapGlyph */ - /* and is thus created and destroyed with it. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_BitmapGlyphRec + * + * @description: + * A structure used for bitmap glyph images. This really is a + * 'sub-class' of @FT_GlyphRec. + * + * @fields: + * root :: + * The root fields of @FT_Glyph. + * + * left :: + * The left-side bearing, i.e., the horizontal distance from the + * current pen position to the left border of the glyph bitmap. + * + * top :: + * The top-side bearing, i.e., the vertical distance from the current + * pen position to the top border of the glyph bitmap. This distance + * is positive for upwards~y! + * + * bitmap :: + * A descriptor for the bitmap. + * + * @note: + * You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have + * `glyph->format == FT_GLYPH_FORMAT_BITMAP`. This lets you access the + * bitmap's contents easily. + * + * The corresponding pixel buffer is always owned by @FT_BitmapGlyph and + * is thus created and destroyed with it. + */ typedef struct FT_BitmapGlyphRec_ { FT_GlyphRec root; @@ -167,44 +174,46 @@ FT_BEGIN_HEADER } FT_BitmapGlyphRec; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_OutlineGlyph */ - /* */ - /* <Description> */ - /* A handle to an object used to model an outline glyph image. This */ - /* is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */ - /* */ + /************************************************************************** + * + * @type: + * FT_OutlineGlyph + * + * @description: + * A handle to an object used to model an outline glyph image. This is a + * 'sub-class' of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. + */ typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_OutlineGlyphRec */ - /* */ - /* <Description> */ - /* A structure used for outline (vectorial) glyph images. This */ - /* really is a `sub-class' of @FT_GlyphRec. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Glyph fields. */ - /* */ - /* outline :: A descriptor for the outline. */ - /* */ - /* <Note> */ - /* You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have */ - /* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access */ - /* the outline's content easily. */ - /* */ - /* As the outline is extracted from a glyph slot, its coordinates are */ - /* expressed normally in 26.6 pixels, unless the flag */ - /* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */ - /* */ - /* The outline's tables are always owned by the object and are */ - /* destroyed with it. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_OutlineGlyphRec + * + * @description: + * A structure used for outline (vectorial) glyph images. This really is + * a 'sub-class' of @FT_GlyphRec. + * + * @fields: + * root :: + * The root @FT_Glyph fields. + * + * outline :: + * A descriptor for the outline. + * + * @note: + * You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have + * `glyph->format == FT_GLYPH_FORMAT_OUTLINE`. This lets you access the + * outline's content easily. + * + * As the outline is extracted from a glyph slot, its coordinates are + * expressed normally in 26.6 pixels, unless the flag @FT_LOAD_NO_SCALE + * was used in @FT_Load_Glyph or @FT_Load_Char. + * + * The outline's tables are always owned by the object and are destroyed + * with it. + */ typedef struct FT_OutlineGlyphRec_ { FT_GlyphRec root; @@ -213,107 +222,236 @@ FT_BEGIN_HEADER } FT_OutlineGlyphRec; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Glyph */ - /* */ - /* <Description> */ - /* A function used to extract a glyph image from a slot. Note that */ - /* the created @FT_Glyph object must be released with @FT_Done_Glyph. */ - /* */ - /* <Input> */ - /* slot :: A handle to the source glyph slot. */ - /* */ - /* <Output> */ - /* aglyph :: A handle to the glyph object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @type: + * FT_SvgGlyph + * + * @description: + * A handle to an object used to model an SVG glyph. This is a + * 'sub-class' of @FT_Glyph, and a pointer to @FT_SvgGlyphRec. + * + * @since: + * 2.12 + */ + typedef struct FT_SvgGlyphRec_* FT_SvgGlyph; + + + /************************************************************************** + * + * @struct: + * FT_SvgGlyphRec + * + * @description: + * A structure used for OT-SVG glyphs. This is a 'sub-class' of + * @FT_GlyphRec. + * + * @fields: + * root :: + * The root @FT_GlyphRec fields. + * + * svg_document :: + * A pointer to the SVG document. + * + * svg_document_length :: + * The length of `svg_document`. + * + * glyph_index :: + * The index of the glyph to be rendered. + * + * metrics :: + * A metrics object storing the size information. + * + * units_per_EM :: + * The size of the EM square. + * + * start_glyph_id :: + * The first glyph ID in the glyph range covered by this document. + * + * end_glyph_id :: + * The last glyph ID in the glyph range covered by this document. + * + * transform :: + * A 2x2 transformation matrix to apply to the glyph while rendering + * it. + * + * delta :: + * Translation to apply to the glyph while rendering. + * + * @note: + * The Glyph Management API requires @FT_Glyph or its 'sub-class' to have + * all the information needed to completely define the glyph's rendering. + * Outline-based glyphs can directly apply transformations to the outline + * but this is not possible for an SVG document that hasn't been parsed. + * Therefore, the transformation is stored along with the document. In + * the absence of a 'ViewBox' or 'Width'/'Height' attribute, the size of + * the ViewPort should be assumed to be 'units_per_EM'. + */ + typedef struct FT_SvgGlyphRec_ + { + FT_GlyphRec root; + + FT_Byte* svg_document; + FT_ULong svg_document_length; + + FT_UInt glyph_index; + + FT_Size_Metrics metrics; + FT_UShort units_per_EM; + + FT_UShort start_glyph_id; + FT_UShort end_glyph_id; + + FT_Matrix transform; + FT_Vector delta; + + } FT_SvgGlyphRec; + + + /************************************************************************** + * + * @function: + * FT_New_Glyph + * + * @description: + * A function used to create a new empty glyph image. Note that the + * created @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * library :: + * A handle to the FreeType library object. + * + * format :: + * The format of the glyph's image. + * + * @output: + * aglyph :: + * A handle to the glyph object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_New_Glyph( FT_Library library, + FT_Glyph_Format format, + FT_Glyph *aglyph ); + + + /************************************************************************** + * + * @function: + * FT_Get_Glyph + * + * @description: + * A function used to extract a glyph image from a slot. Note that the + * created @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * slot :: + * A handle to the source glyph slot. + * + * @output: + * aglyph :: + * A handle to the glyph object. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Because `*aglyph->advance.x` and `*aglyph->advance.y` are 16.16 + * fixed-point numbers, `slot->advance.x` and `slot->advance.y` (which + * are in 26.6 fixed-point format) must be in the range ]-32768;32768[. + */ FT_EXPORT( FT_Error ) FT_Get_Glyph( FT_GlyphSlot slot, FT_Glyph *aglyph ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Copy */ - /* */ - /* <Description> */ - /* A function used to copy a glyph image. Note that the created */ - /* @FT_Glyph object must be released with @FT_Done_Glyph. */ - /* */ - /* <Input> */ - /* source :: A handle to the source glyph object. */ - /* */ - /* <Output> */ - /* target :: A handle to the target glyph object. 0~in case of */ - /* error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Glyph_Copy + * + * @description: + * A function used to copy a glyph image. Note that the created + * @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * source :: + * A handle to the source glyph object. + * + * @output: + * target :: + * A handle to the target glyph object. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Glyph_Copy( FT_Glyph source, FT_Glyph *target ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Transform */ - /* */ - /* <Description> */ - /* Transform a glyph image if its format is scalable. */ - /* */ - /* <InOut> */ - /* glyph :: A handle to the target glyph object. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to a 2x2 matrix to apply. */ - /* */ - /* delta :: A pointer to a 2d vector to apply. Coordinates are */ - /* expressed in 1/64th of a pixel. */ - /* */ - /* <Return> */ - /* FreeType error code (if not 0, the glyph format is not scalable). */ - /* */ - /* <Note> */ - /* The 2x2 transformation matrix is also applied to the glyph's */ - /* advance vector. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Glyph_Transform + * + * @description: + * Transform a glyph image if its format is scalable. + * + * @inout: + * glyph :: + * A handle to the target glyph object. + * + * @input: + * matrix :: + * A pointer to a 2x2 matrix to apply. + * + * delta :: + * A pointer to a 2d vector to apply. Coordinates are expressed in + * 1/64 of a pixel. + * + * @return: + * FreeType error code (if not 0, the glyph format is not scalable). + * + * @note: + * The 2x2 transformation matrix is also applied to the glyph's advance + * vector. + */ FT_EXPORT( FT_Error ) - FT_Glyph_Transform( FT_Glyph glyph, - FT_Matrix* matrix, - FT_Vector* delta ); - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Glyph_BBox_Mode */ - /* */ - /* <Description> */ - /* The mode how the values of @FT_Glyph_Get_CBox are returned. */ - /* */ - /* <Values> */ - /* FT_GLYPH_BBOX_UNSCALED :: */ - /* Return unscaled font units. */ - /* */ - /* FT_GLYPH_BBOX_SUBPIXELS :: */ - /* Return unfitted 26.6 coordinates. */ - /* */ - /* FT_GLYPH_BBOX_GRIDFIT :: */ - /* Return grid-fitted 26.6 coordinates. */ - /* */ - /* FT_GLYPH_BBOX_TRUNCATE :: */ - /* Return coordinates in integer pixels. */ - /* */ - /* FT_GLYPH_BBOX_PIXELS :: */ - /* Return grid-fitted pixel coordinates. */ - /* */ + FT_Glyph_Transform( FT_Glyph glyph, + const FT_Matrix* matrix, + const FT_Vector* delta ); + + + /************************************************************************** + * + * @enum: + * FT_Glyph_BBox_Mode + * + * @description: + * The mode how the values of @FT_Glyph_Get_CBox are returned. + * + * @values: + * FT_GLYPH_BBOX_UNSCALED :: + * Return unscaled font units. + * + * FT_GLYPH_BBOX_SUBPIXELS :: + * Return unfitted 26.6 coordinates. + * + * FT_GLYPH_BBOX_GRIDFIT :: + * Return grid-fitted 26.6 coordinates. + * + * FT_GLYPH_BBOX_TRUNCATE :: + * Return coordinates in integer pixels. + * + * FT_GLYPH_BBOX_PIXELS :: + * Return grid-fitted pixel coordinates. + */ typedef enum FT_Glyph_BBox_Mode_ { FT_GLYPH_BBOX_UNSCALED = 0, @@ -326,7 +464,7 @@ FT_BEGIN_HEADER /* these constants are deprecated; use the corresponding */ - /* `FT_Glyph_BBox_Mode' values instead */ + /* `FT_Glyph_BBox_Mode` values instead */ #define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED #define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS #define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT @@ -334,205 +472,207 @@ FT_BEGIN_HEADER #define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_Get_CBox */ - /* */ - /* <Description> */ - /* Return a glyph's `control box'. The control box encloses all the */ - /* outline's points, including Bézier control points. Though it */ - /* coincides with the exact bounding box for most glyphs, it can be */ - /* slightly larger in some situations (like when rotating an outline */ - /* that contains Bézier outside arcs). */ - /* */ - /* Computing the control box is very fast, while getting the bounding */ - /* box can take much more time as it needs to walk over all segments */ - /* and arcs in the outline. To get the latter, you can use the */ - /* `ftbbox' component, which is dedicated to this single task. */ - /* */ - /* <Input> */ - /* glyph :: A handle to the source glyph object. */ - /* */ - /* mode :: The mode that indicates how to interpret the returned */ - /* bounding box values. */ - /* */ - /* <Output> */ - /* acbox :: The glyph coordinate bounding box. Coordinates are */ - /* expressed in 1/64th of pixels if it is grid-fitted. */ - /* */ - /* <Note> */ - /* Coordinates are relative to the glyph origin, using the y~upwards */ - /* convention. */ - /* */ - /* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode' */ - /* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font */ - /* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */ - /* is another name for this constant. */ - /* */ - /* If the font is tricky and the glyph has been loaded with */ - /* @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get */ - /* reasonable values for the CBox it is necessary to load the glyph */ - /* at a large ppem value (so that the hinting instructions can */ - /* properly shift and scale the subglyphs), then extracting the CBox, */ - /* which can be eventually converted back to font units. */ - /* */ - /* Note that the maximum coordinates are exclusive, which means that */ - /* one can compute the width and height of the glyph image (be it in */ - /* integer or 26.6 pixels) as: */ - /* */ - /* { */ - /* width = bbox.xMax - bbox.xMin; */ - /* height = bbox.yMax - bbox.yMin; */ - /* } */ - /* */ - /* Note also that for 26.6 coordinates, if `bbox_mode' is set to */ - /* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, */ - /* which corresponds to: */ - /* */ - /* { */ - /* bbox.xMin = FLOOR(bbox.xMin); */ - /* bbox.yMin = FLOOR(bbox.yMin); */ - /* bbox.xMax = CEILING(bbox.xMax); */ - /* bbox.yMax = CEILING(bbox.yMax); */ - /* } */ - /* */ - /* To get the bbox in pixel coordinates, set `bbox_mode' to */ - /* @FT_GLYPH_BBOX_TRUNCATE. */ - /* */ - /* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode' */ - /* to @FT_GLYPH_BBOX_PIXELS. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Glyph_Get_CBox + * + * @description: + * Return a glyph's 'control box'. The control box encloses all the + * outline's points, including Bezier control points. Though it + * coincides with the exact bounding box for most glyphs, it can be + * slightly larger in some situations (like when rotating an outline that + * contains Bezier outside arcs). + * + * Computing the control box is very fast, while getting the bounding box + * can take much more time as it needs to walk over all segments and arcs + * in the outline. To get the latter, you can use the 'ftbbox' + * component, which is dedicated to this single task. + * + * @input: + * glyph :: + * A handle to the source glyph object. + * + * mode :: + * The mode that indicates how to interpret the returned bounding box + * values. + * + * @output: + * acbox :: + * The glyph coordinate bounding box. Coordinates are expressed in + * 1/64 of pixels if it is grid-fitted. + * + * @note: + * Coordinates are relative to the glyph origin, using the y~upwards + * convention. + * + * If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode` must + * be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6 + * pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS is another name for + * this constant. + * + * If the font is tricky and the glyph has been loaded with + * @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get + * reasonable values for the CBox it is necessary to load the glyph at a + * large ppem value (so that the hinting instructions can properly shift + * and scale the subglyphs), then extracting the CBox, which can be + * eventually converted back to font units. + * + * Note that the maximum coordinates are exclusive, which means that one + * can compute the width and height of the glyph image (be it in integer + * or 26.6 pixels) as: + * + * ``` + * width = bbox.xMax - bbox.xMin; + * height = bbox.yMax - bbox.yMin; + * ``` + * + * Note also that for 26.6 coordinates, if `bbox_mode` is set to + * @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, + * which corresponds to: + * + * ``` + * bbox.xMin = FLOOR(bbox.xMin); + * bbox.yMin = FLOOR(bbox.yMin); + * bbox.xMax = CEILING(bbox.xMax); + * bbox.yMax = CEILING(bbox.yMax); + * ``` + * + * To get the bbox in pixel coordinates, set `bbox_mode` to + * @FT_GLYPH_BBOX_TRUNCATE. + * + * To get the bbox in grid-fitted pixel coordinates, set `bbox_mode` to + * @FT_GLYPH_BBOX_PIXELS. + */ FT_EXPORT( void ) FT_Glyph_Get_CBox( FT_Glyph glyph, FT_UInt bbox_mode, FT_BBox *acbox ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Glyph_To_Bitmap */ - /* */ - /* <Description> */ - /* Convert a given glyph object to a bitmap glyph object. */ - /* */ - /* <InOut> */ - /* the_glyph :: A pointer to a handle to the target glyph. */ - /* */ - /* <Input> */ - /* render_mode :: An enumeration that describes how the data is */ - /* rendered. */ - /* */ - /* origin :: A pointer to a vector used to translate the glyph */ - /* image before rendering. Can be~0 (if no */ - /* translation). The origin is expressed in */ - /* 26.6 pixels. */ - /* */ - /* destroy :: A boolean that indicates that the original glyph */ - /* image should be destroyed by this function. It is */ - /* never destroyed in case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function does nothing if the glyph format isn't scalable. */ - /* */ - /* The glyph image is translated with the `origin' vector before */ - /* rendering. */ - /* */ - /* The first parameter is a pointer to an @FT_Glyph handle, that will */ - /* be _replaced_ by this function (with newly allocated data). */ - /* Typically, you would use (omitting error handling): */ - /* */ - /* */ - /* { */ - /* FT_Glyph glyph; */ - /* FT_BitmapGlyph glyph_bitmap; */ - /* */ - /* */ - /* // load glyph */ - /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT ); */ - /* */ - /* // extract glyph image */ - /* error = FT_Get_Glyph( face->glyph, &glyph ); */ - /* */ - /* // convert to a bitmap (default render mode + destroying old) */ - /* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */ - /* { */ - /* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, */ - /* 0, 1 ); */ - /* if ( error ) // `glyph' unchanged */ - /* ... */ - /* } */ - /* */ - /* // access bitmap content by typecasting */ - /* glyph_bitmap = (FT_BitmapGlyph)glyph; */ - /* */ - /* // do funny stuff with it, like blitting/drawing */ - /* ... */ - /* */ - /* // discard glyph image (bitmap or not) */ - /* FT_Done_Glyph( glyph ); */ - /* } */ - /* */ - /* */ - /* Here another example, again without error handling: */ - /* */ - /* */ - /* { */ - /* FT_Glyph glyphs[MAX_GLYPHS] */ - /* */ - /* */ - /* ... */ - /* */ - /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */ - /* error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || */ - /* FT_Get_Glyph ( face->glyph, &glyph[idx] ); */ - /* */ - /* ... */ - /* */ - /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */ - /* { */ - /* FT_Glyph bitmap = glyphs[idx]; */ - /* */ - /* */ - /* ... */ - /* */ - /* // after this call, `bitmap' no longer points into */ - /* // the `glyphs' array (and the old value isn't destroyed) */ - /* FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); */ - /* */ - /* ... */ - /* */ - /* FT_Done_Glyph( bitmap ); */ - /* } */ - /* */ - /* ... */ - /* */ - /* for ( idx = 0; i < MAX_GLYPHS; i++ ) */ - /* FT_Done_Glyph( glyphs[idx] ); */ - /* } */ - /* */ + /************************************************************************** + * + * @function: + * FT_Glyph_To_Bitmap + * + * @description: + * Convert a given glyph object to a bitmap glyph object. + * + * @inout: + * the_glyph :: + * A pointer to a handle to the target glyph. + * + * @input: + * render_mode :: + * An enumeration that describes how the data is rendered. + * + * origin :: + * A pointer to a vector used to translate the glyph image before + * rendering. Can be~0 (if no translation). The origin is expressed + * in 26.6 pixels. + * + * destroy :: + * A boolean that indicates that the original glyph image should be + * destroyed by this function. It is never destroyed in case of error. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function does nothing if the glyph format isn't scalable. + * + * The glyph image is translated with the `origin` vector before + * rendering. + * + * The first parameter is a pointer to an @FT_Glyph handle that will be + * _replaced_ by this function (with newly allocated data). Typically, + * you would do something like the following (omitting error handling). + * + * ``` + * FT_Glyph glyph; + * FT_BitmapGlyph glyph_bitmap; + * + * + * // load glyph + * error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); + * + * // extract glyph image + * error = FT_Get_Glyph( face->glyph, &glyph ); + * + * // convert to a bitmap (default render mode + destroying old) + * if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) + * { + * error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, + * 0, 1 ); + * if ( error ) // `glyph' unchanged + * ... + * } + * + * // access bitmap content by typecasting + * glyph_bitmap = (FT_BitmapGlyph)glyph; + * + * // do funny stuff with it, like blitting/drawing + * ... + * + * // discard glyph image (bitmap or not) + * FT_Done_Glyph( glyph ); + * ``` + * + * Here is another example, again without error handling. + * + * ``` + * FT_Glyph glyphs[MAX_GLYPHS] + * + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || + * FT_Get_Glyph ( face->glyph, &glyphs[idx] ); + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * { + * FT_Glyph bitmap = glyphs[idx]; + * + * + * ... + * + * // after this call, `bitmap' no longer points into + * // the `glyphs' array (and the old value isn't destroyed) + * FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); + * + * ... + * + * FT_Done_Glyph( bitmap ); + * } + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * FT_Done_Glyph( glyphs[idx] ); + * ``` + */ FT_EXPORT( FT_Error ) - FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, - FT_Render_Mode render_mode, - FT_Vector* origin, - FT_Bool destroy ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Glyph */ - /* */ - /* <Description> */ - /* Destroy a given glyph. */ - /* */ - /* <Input> */ - /* glyph :: A handle to the target glyph object. */ - /* */ + FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, + FT_Render_Mode render_mode, + const FT_Vector* origin, + FT_Bool destroy ); + + + /************************************************************************** + * + * @function: + * FT_Done_Glyph + * + * @description: + * Destroy a given glyph. + * + * @input: + * glyph :: + * A handle to the target glyph object. Can be `NULL`. + */ FT_EXPORT( void ) FT_Done_Glyph( FT_Glyph glyph ); @@ -541,51 +681,56 @@ FT_BEGIN_HEADER /* other helpful functions */ - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Matrix_Multiply */ - /* */ - /* <Description> */ - /* Perform the matrix operation `b = a*b'. */ - /* */ - /* <Input> */ - /* a :: A pointer to matrix `a'. */ - /* */ - /* <InOut> */ - /* b :: A pointer to matrix `b'. */ - /* */ - /* <Note> */ - /* The result is undefined if either `a' or `b' is zero. */ - /* */ + /************************************************************************** + * + * @section: + * computations + * + */ + + + /************************************************************************** + * + * @function: + * FT_Matrix_Multiply + * + * @description: + * Perform the matrix operation `b = a*b`. + * + * @input: + * a :: + * A pointer to matrix `a`. + * + * @inout: + * b :: + * A pointer to matrix `b`. + * + * @note: + * The result is undefined if either `a` or `b` is zero. + * + * Since the function uses wrap-around arithmetic, results become + * meaningless if the arguments are very large. + */ FT_EXPORT( void ) FT_Matrix_Multiply( const FT_Matrix* a, FT_Matrix* b ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Matrix_Invert */ - /* */ - /* <Description> */ - /* Invert a 2x2 matrix. Return an error if it can't be inverted. */ - /* */ - /* <InOut> */ - /* matrix :: A pointer to the target matrix. Remains untouched in */ - /* case of error. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Matrix_Invert + * + * @description: + * Invert a 2x2 matrix. Return an error if it can't be inverted. + * + * @inout: + * matrix :: + * A pointer to the target matrix. Remains untouched in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Matrix_Invert( FT_Matrix* matrix ); diff --git a/non-source/foreign/freetype2/freetype/ftgxval.h b/non-source/foreign/freetype2/freetype/ftgxval.h index a58e86a04..065cd53cc 100644 --- a/non-source/foreign/freetype2/freetype/ftgxval.h +++ b/non-source/foreign/freetype2/freetype/ftgxval.h @@ -1,35 +1,34 @@ -/***************************************************************************/ -/* */ -/* ftgxval.h */ -/* */ -/* FreeType API for validating TrueTypeGX/AAT tables (specification). */ -/* */ -/* Copyright 2004-2016 by */ -/* Masatake YAMATO, Redhat K.K, */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - -/***************************************************************************/ -/* */ -/* gxvalid is derived from both gxlayout module and otvalid module. */ -/* Development of gxlayout is supported by the Information-technology */ -/* Promotion Agency(IPA), Japan. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftgxval.h + * + * FreeType API for validating TrueTypeGX/AAT tables (specification). + * + * Copyright (C) 2004-2024 by + * Masatake YAMATO, Redhat K.K, + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +/**************************************************************************** + * + * gxvalid is derived from both gxlayout module and otvalid module. + * Development of gxlayout is supported by the Information-technology + * Promotion Agency(IPA), Japan. + * + */ #ifndef FTGXVAL_H_ #define FTGXVAL_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -41,43 +40,43 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* gx_validation */ - /* */ - /* <Title> */ - /* TrueTypeGX/AAT Validation */ - /* */ - /* <Abstract> */ - /* An API to validate TrueTypeGX/AAT tables. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions to validate */ - /* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */ - /* trak, prop, lcar). */ - /* */ - /* <Order> */ - /* FT_TrueTypeGX_Validate */ - /* FT_TrueTypeGX_Free */ - /* */ - /* FT_ClassicKern_Validate */ - /* FT_ClassicKern_Free */ - /* */ - /* FT_VALIDATE_GX_LENGTH */ - /* FT_VALIDATE_GXXXX */ - /* FT_VALIDATE_CKERNXXX */ - /* */ - /*************************************************************************/ - - /*************************************************************************/ - /* */ - /* */ - /* Warning: Use FT_VALIDATE_XXX to validate a table. */ - /* Following definitions are for gxvalid developers. */ - /* */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * gx_validation + * + * @title: + * TrueTypeGX/AAT Validation + * + * @abstract: + * An API to validate TrueTypeGX/AAT tables. + * + * @description: + * This section contains the declaration of functions to validate some + * TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, + * prop, lcar). + * + * @order: + * FT_TrueTypeGX_Validate + * FT_TrueTypeGX_Free + * + * FT_ClassicKern_Validate + * FT_ClassicKern_Free + * + * FT_VALIDATE_GX_LENGTH + * FT_VALIDATE_GXXXX + * FT_VALIDATE_CKERNXXX + * + */ + + /************************************************************************** + * + * + * Warning: Use `FT_VALIDATE_XXX` to validate a table. + * Following definitions are for gxvalid developers. + * + * + */ #define FT_VALIDATE_feat_INDEX 0 #define FT_VALIDATE_mort_INDEX 1 @@ -92,71 +91,71 @@ FT_BEGIN_HEADER #define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX - /************************************************************************* + /************************************************************************** * * @macro: * FT_VALIDATE_GX_LENGTH * * @description: * The number of tables checked in this module. Use it as a parameter - * for the `table-length' argument of function @FT_TrueTypeGX_Validate. + * for the `table-length` argument of function @FT_TrueTypeGX_Validate. */ -#define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1) +#define FT_VALIDATE_GX_LENGTH ( FT_VALIDATE_GX_LAST_INDEX + 1 ) /* */ /* Up to 0x1000 is used by otvalid. Ox2xxx is reserved for feature OT extension. */ -#define FT_VALIDATE_GX_START 0x4000 -#define FT_VALIDATE_GX_BITFIELD( tag ) \ - ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) - - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_GXXXX - * - * @description: - * A list of bit-field constants used with @FT_TrueTypeGX_Validate to - * indicate which TrueTypeGX/AAT Type tables should be validated. - * - * @values: - * FT_VALIDATE_feat :: - * Validate `feat' table. - * - * FT_VALIDATE_mort :: - * Validate `mort' table. - * - * FT_VALIDATE_morx :: - * Validate `morx' table. - * - * FT_VALIDATE_bsln :: - * Validate `bsln' table. - * - * FT_VALIDATE_just :: - * Validate `just' table. - * - * FT_VALIDATE_kern :: - * Validate `kern' table. - * - * FT_VALIDATE_opbd :: - * Validate `opbd' table. - * - * FT_VALIDATE_trak :: - * Validate `trak' table. - * - * FT_VALIDATE_prop :: - * Validate `prop' table. - * - * FT_VALIDATE_lcar :: - * Validate `lcar' table. - * - * FT_VALIDATE_GX :: - * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, - * opbd, trak, prop and lcar). - * - */ +#define FT_VALIDATE_GX_START 0x4000 +#define FT_VALIDATE_GX_BITFIELD( tag ) \ + ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_GXXXX + * + * @description: + * A list of bit-field constants used with @FT_TrueTypeGX_Validate to + * indicate which TrueTypeGX/AAT Type tables should be validated. + * + * @values: + * FT_VALIDATE_feat :: + * Validate 'feat' table. + * + * FT_VALIDATE_mort :: + * Validate 'mort' table. + * + * FT_VALIDATE_morx :: + * Validate 'morx' table. + * + * FT_VALIDATE_bsln :: + * Validate 'bsln' table. + * + * FT_VALIDATE_just :: + * Validate 'just' table. + * + * FT_VALIDATE_kern :: + * Validate 'kern' table. + * + * FT_VALIDATE_opbd :: + * Validate 'opbd' table. + * + * FT_VALIDATE_trak :: + * Validate 'trak' table. + * + * FT_VALIDATE_prop :: + * Validate 'prop' table. + * + * FT_VALIDATE_lcar :: + * Validate 'lcar' table. + * + * FT_VALIDATE_GX :: + * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, + * opbd, trak, prop and lcar). + * + */ #define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat ) #define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort ) @@ -181,47 +180,47 @@ FT_BEGIN_HEADER FT_VALIDATE_lcar ) - /********************************************************************** - * - * @function: - * FT_TrueTypeGX_Validate - * - * @description: - * Validate various TrueTypeGX tables to assure that all offsets and - * indices are valid. The idea is that a higher-level library that - * actually does the text layout can access those tables without - * error checking (which can be quite time consuming). - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field that specifies the tables to be validated. See - * @FT_VALIDATE_GXXXX for possible values. - * - * table_length :: - * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH - * should be passed. - * - * @output: - * tables :: - * The array where all validated sfnt tables are stored. - * The array itself must be allocated by a client. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with TrueTypeGX fonts, returning an error - * otherwise. - * - * After use, the application should deallocate the buffers pointed to by - * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value - * indicates that the table either doesn't exist in the font, the - * application hasn't asked for validation, or the validator doesn't have - * the ability to validate the sfnt table. - */ + /************************************************************************** + * + * @function: + * FT_TrueTypeGX_Validate + * + * @description: + * Validate various TrueTypeGX tables to assure that all offsets and + * indices are valid. The idea is that a higher-level library that + * actually does the text layout can access those tables without error + * checking (which can be quite time consuming). + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the tables to be validated. See + * @FT_VALIDATE_GXXXX for possible values. + * + * table_length :: + * The size of the `tables` array. Normally, @FT_VALIDATE_GX_LENGTH + * should be passed. + * + * @output: + * tables :: + * The array where all validated sfnt tables are stored. The array + * itself must be allocated by a client. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with TrueTypeGX fonts, returning an error + * otherwise. + * + * After use, the application should deallocate the buffers pointed to by + * each `tables` element, by calling @FT_TrueTypeGX_Free. A `NULL` value + * indicates that the table either doesn't exist in the font, the + * application hasn't asked for validation, or the validator doesn't have + * the ability to validate the sfnt table. + */ FT_EXPORT( FT_Error ) FT_TrueTypeGX_Validate( FT_Face face, FT_UInt validation_flags, @@ -229,119 +228,117 @@ FT_BEGIN_HEADER FT_UInt table_length ); - /********************************************************************** - * - * @function: - * FT_TrueTypeGX_Free - * - * @description: - * Free the buffer allocated by TrueTypeGX validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer allocated by - * @FT_TrueTypeGX_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_TrueTypeGX_Validate only. - */ + /************************************************************************** + * + * @function: + * FT_TrueTypeGX_Free + * + * @description: + * Free the buffer allocated by TrueTypeGX validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer allocated by @FT_TrueTypeGX_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_TrueTypeGX_Validate only. + */ FT_EXPORT( void ) FT_TrueTypeGX_Free( FT_Face face, FT_Bytes table ); - /********************************************************************** - * - * @enum: - * FT_VALIDATE_CKERNXXX - * - * @description: - * A list of bit-field constants used with @FT_ClassicKern_Validate - * to indicate the classic kern dialect or dialects. If the selected - * type doesn't fit, @FT_ClassicKern_Validate regards the table as - * invalid. - * - * @values: - * FT_VALIDATE_MS :: - * Handle the `kern' table as a classic Microsoft kern table. - * - * FT_VALIDATE_APPLE :: - * Handle the `kern' table as a classic Apple kern table. - * - * FT_VALIDATE_CKERN :: - * Handle the `kern' as either classic Apple or Microsoft kern table. - */ + /************************************************************************** + * + * @enum: + * FT_VALIDATE_CKERNXXX + * + * @description: + * A list of bit-field constants used with @FT_ClassicKern_Validate to + * indicate the classic kern dialect or dialects. If the selected type + * doesn't fit, @FT_ClassicKern_Validate regards the table as invalid. + * + * @values: + * FT_VALIDATE_MS :: + * Handle the 'kern' table as a classic Microsoft kern table. + * + * FT_VALIDATE_APPLE :: + * Handle the 'kern' table as a classic Apple kern table. + * + * FT_VALIDATE_CKERN :: + * Handle the 'kern' as either classic Apple or Microsoft kern table. + */ #define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 ) #define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 ) #define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE ) - /********************************************************************** - * - * @function: - * FT_ClassicKern_Validate - * - * @description: - * Validate classic (16-bit format) kern table to assure that the offsets - * and indices are valid. The idea is that a higher-level library that - * actually does the text layout can access those tables without error - * checking (which can be quite time consuming). - * - * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both - * the new 32-bit format and the classic 16-bit format, while - * FT_ClassicKern_Validate only supports the classic 16-bit format. - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field that specifies the dialect to be validated. See - * @FT_VALIDATE_CKERNXXX for possible values. - * - * @output: - * ckern_table :: - * A pointer to the kern table. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * After use, the application should deallocate the buffers pointed to by - * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value - * indicates that the table doesn't exist in the font. - */ + /************************************************************************** + * + * @function: + * FT_ClassicKern_Validate + * + * @description: + * Validate classic (16-bit format) kern table to assure that the + * offsets and indices are valid. The idea is that a higher-level + * library that actually does the text layout can access those tables + * without error checking (which can be quite time consuming). + * + * The 'kern' table validator in @FT_TrueTypeGX_Validate deals with both + * the new 32-bit format and the classic 16-bit format, while + * FT_ClassicKern_Validate only supports the classic 16-bit format. + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the dialect to be validated. See + * @FT_VALIDATE_CKERNXXX for possible values. + * + * @output: + * ckern_table :: + * A pointer to the kern table. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * After use, the application should deallocate the buffers pointed to by + * `ckern_table`, by calling @FT_ClassicKern_Free. A `NULL` value + * indicates that the table doesn't exist in the font. + */ FT_EXPORT( FT_Error ) FT_ClassicKern_Validate( FT_Face face, FT_UInt validation_flags, FT_Bytes *ckern_table ); - /********************************************************************** - * - * @function: - * FT_ClassicKern_Free - * - * @description: - * Free the buffer allocated by classic Kern validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer that is allocated by - * @FT_ClassicKern_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_ClassicKern_Validate only. - */ + /************************************************************************** + * + * @function: + * FT_ClassicKern_Free + * + * @description: + * Free the buffer allocated by classic Kern validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer that is allocated by + * @FT_ClassicKern_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_ClassicKern_Validate only. + */ FT_EXPORT( void ) FT_ClassicKern_Free( FT_Face face, FT_Bytes table ); diff --git a/non-source/foreign/freetype2/freetype/ftgzip.h b/non-source/foreign/freetype2/freetype/ftgzip.h index 9e658b0df..9516dc030 100644 --- a/non-source/foreign/freetype2/freetype/ftgzip.h +++ b/non-source/foreign/freetype2/freetype/ftgzip.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftgzip.h */ -/* */ -/* Gzip-compressed stream support. */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftgzip.h + * + * Gzip-compressed stream support. + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTGZIP_H_ #define FTGZIP_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -31,105 +30,109 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* gzip */ - /* */ - /* <Title> */ - /* GZIP Streams */ - /* */ - /* <Abstract> */ - /* Using gzip-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Gzip-specific functions. */ - /* */ - /*************************************************************************/ - - - /************************************************************************ - * - * @function: - * FT_Stream_OpenGzip - * - * @description: - * Open a new stream to parse gzip-compressed font files. This is - * mainly used to support the compressed `*.pcf.gz' fonts that come - * with XFree86. - * - * @input: - * stream :: - * The target embedding stream. - * - * source :: - * The source stream. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream. - * - * In certain builds of the library, gzip compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a gzipped stream from - * it and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with zlib support. - */ + /************************************************************************** + * + * @section: + * gzip + * + * @title: + * GZIP Streams + * + * @abstract: + * Using gzip-compressed font files. + * + * @description: + * 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. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Stream_OpenGzip + * + * @description: + * Open a new stream to parse gzip-compressed font files. This is mainly + * used to support the compressed `*.pcf.gz` fonts that come with + * XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with zlib support. + */ FT_EXPORT( FT_Error ) FT_Stream_OpenGzip( FT_Stream stream, FT_Stream source ); - /************************************************************************ - * - * @function: - * FT_Gzip_Uncompress - * - * @description: - * Decompress a zipped input buffer into an output buffer. This function - * is modeled after zlib's `uncompress' function. - * - * @input: - * memory :: - * A FreeType memory handle. - * - * input :: - * The input buffer. - * - * input_len :: - * The length of the input buffer. - * - * @output: - * output:: - * The output buffer. - * - * @inout: - * output_len :: - * Before calling the function, this is the the total size of the - * output buffer, which must be large enough to hold the entire - * uncompressed data (so the size of the uncompressed data must be - * known in advance). After calling the function, `output_len' is the - * size of the used data in `output'. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with zlib support. - */ + /************************************************************************** + * + * @function: + * FT_Gzip_Uncompress + * + * @description: + * Decompress a zipped input buffer into an output buffer. This function + * is modeled after zlib's `uncompress` function. + * + * @input: + * memory :: + * A FreeType memory handle. + * + * input :: + * The input buffer. + * + * input_len :: + * The length of the input buffer. + * + * @output: + * output :: + * The output buffer. + * + * @inout: + * output_len :: + * Before calling the function, this is the total size of the output + * buffer, which must be large enough to hold the entire uncompressed + * data (so the size of the uncompressed data must be known in + * advance). After calling the function, `output_len` is the size of + * the used data in `output`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with zlib support. + * + * @since: + * 2.5.1 + */ FT_EXPORT( FT_Error ) FT_Gzip_Uncompress( FT_Memory memory, FT_Byte* output, diff --git a/non-source/foreign/freetype2/freetype/ftimage.h b/non-source/foreign/freetype2/freetype/ftimage.h index 1d557c93f..2b4b4ac60 100644 --- a/non-source/foreign/freetype2/freetype/ftimage.h +++ b/non-source/foreign/freetype2/freetype/ftimage.h @@ -1,76 +1,77 @@ -/***************************************************************************/ -/* */ -/* ftimage.h */ -/* */ -/* FreeType glyph image formats and default raster interface */ -/* (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - /*************************************************************************/ - /* */ - /* Note: A `raster' is simply a scan-line converter, used to render */ - /* FT_Outlines into FT_Bitmaps. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftimage.h + * + * FreeType glyph image formats and default raster interface + * (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * Note: A 'raster' is simply a scan-line converter, used to render + * `FT_Outline`s into `FT_Bitmap`s. + * + * Note: This file can be used for `STANDALONE_` compilation of raster + * (B/W) and smooth (anti-aliased) renderers. Therefore, it must + * rely on standard variable types only instead of aliases in + * `fttypes.h`. + * + */ #ifndef FTIMAGE_H_ #define FTIMAGE_H_ - /* STANDALONE_ is from ftgrays.c */ -#ifndef STANDALONE_ -#include <ft2build.h> -#endif - - FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Pos */ - /* */ - /* <Description> */ - /* The type FT_Pos is used to store vectorial coordinates. Depending */ - /* on the context, these can represent distances in integer font */ - /* units, or 16.16, or 26.6 fixed-point pixel coordinates. */ - /* */ + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @type: + * FT_Pos + * + * @description: + * The type FT_Pos is used to store vectorial coordinates. Depending on + * the context, these can represent distances in integer font units, or + * 16.16, or 26.6 fixed-point pixel coordinates. + */ typedef signed long FT_Pos; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Vector */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2D vector; coordinates are of */ - /* the FT_Pos type. */ - /* */ - /* <Fields> */ - /* x :: The horizontal coordinate. */ - /* y :: The vertical coordinate. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Vector + * + * @description: + * A simple structure used to store a 2D vector; coordinates are of the + * FT_Pos type. + * + * @fields: + * x :: + * The horizontal coordinate. + * y :: + * The vertical coordinate. + */ typedef struct FT_Vector_ { FT_Pos x; @@ -79,39 +80,41 @@ FT_BEGIN_HEADER } FT_Vector; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_BBox */ - /* */ - /* <Description> */ - /* A structure used to hold an outline's bounding box, i.e., the */ - /* coordinates of its extrema in the horizontal and vertical */ - /* directions. */ - /* */ - /* <Fields> */ - /* xMin :: The horizontal minimum (left-most). */ - /* */ - /* yMin :: The vertical minimum (bottom-most). */ - /* */ - /* xMax :: The horizontal maximum (right-most). */ - /* */ - /* yMax :: The vertical maximum (top-most). */ - /* */ - /* <Note> */ - /* The bounding box is specified with the coordinates of the lower */ - /* left and the upper right corner. In PostScript, those values are */ - /* often called (llx,lly) and (urx,ury), respectively. */ - /* */ - /* If `yMin' is negative, this value gives the glyph's descender. */ - /* Otherwise, the glyph doesn't descend below the baseline. */ - /* Similarly, if `ymax' is positive, this value gives the glyph's */ - /* ascender. */ - /* */ - /* `xMin' gives the horizontal distance from the glyph's origin to */ - /* the left edge of the glyph's bounding box. If `xMin' is negative, */ - /* the glyph extends to the left of the origin. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_BBox + * + * @description: + * A structure used to hold an outline's bounding box, i.e., the + * coordinates of its extrema in the horizontal and vertical directions. + * + * @fields: + * xMin :: + * The horizontal minimum (left-most). + * + * yMin :: + * The vertical minimum (bottom-most). + * + * xMax :: + * The horizontal maximum (right-most). + * + * yMax :: + * The vertical maximum (top-most). + * + * @note: + * The bounding box is specified with the coordinates of the lower left + * and the upper right corner. In PostScript, those values are often + * called (llx,lly) and (urx,ury), respectively. + * + * If `yMin` is negative, this value gives the glyph's descender. + * Otherwise, the glyph doesn't descend below the baseline. Similarly, + * if `ymax` is positive, this value gives the glyph's ascender. + * + * `xMin` gives the horizontal distance from the glyph's origin to the + * left edge of the glyph's bounding box. If `xMin` is negative, the + * glyph extends to the left of the origin. + */ typedef struct FT_BBox_ { FT_Pos xMin, yMin; @@ -120,63 +123,60 @@ FT_BEGIN_HEADER } FT_BBox; - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Pixel_Mode */ - /* */ - /* <Description> */ - /* An enumeration type used to describe the format of pixels in a */ - /* given bitmap. Note that additional formats may be added in the */ - /* future. */ - /* */ - /* <Values> */ - /* FT_PIXEL_MODE_NONE :: */ - /* Value~0 is reserved. */ - /* */ - /* FT_PIXEL_MODE_MONO :: */ - /* A monochrome bitmap, using 1~bit per pixel. Note that pixels */ - /* are stored in most-significant order (MSB), which means that */ - /* the left-most pixel in a byte has value 128. */ - /* */ - /* FT_PIXEL_MODE_GRAY :: */ - /* An 8-bit bitmap, generally used to represent anti-aliased glyph */ - /* images. Each pixel is stored in one byte. Note that the number */ - /* of `gray' levels is stored in the `num_grays' field of the */ - /* @FT_Bitmap structure (it generally is 256). */ - /* */ - /* FT_PIXEL_MODE_GRAY2 :: */ - /* A 2-bit per pixel bitmap, used to represent embedded */ - /* anti-aliased bitmaps in font files according to the OpenType */ - /* specification. We haven't found a single font using this */ - /* format, however. */ - /* */ - /* FT_PIXEL_MODE_GRAY4 :: */ - /* A 4-bit per pixel bitmap, representing embedded anti-aliased */ - /* bitmaps in font files according to the OpenType specification. */ - /* We haven't found a single font using this format, however. */ - /* */ - /* FT_PIXEL_MODE_LCD :: */ - /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */ - /* used for display on LCD displays; the bitmap is three times */ - /* wider than the original glyph image. See also */ - /* @FT_RENDER_MODE_LCD. */ - /* */ - /* FT_PIXEL_MODE_LCD_V :: */ - /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */ - /* used for display on rotated LCD displays; the bitmap is three */ - /* times taller than the original glyph image. See also */ - /* @FT_RENDER_MODE_LCD_V. */ - /* */ - /* FT_PIXEL_MODE_BGRA :: */ - /* An image with four 8-bit channels per pixel, representing a */ - /* color image (such as emoticons) with alpha channel. For each */ - /* pixel, the format is BGRA, which means, the blue channel comes */ - /* first in memory. The color channels are pre-multiplied and in */ - /* the sRGB colorspace. For example, full red at half-translucent */ - /* opacity will be represented as `00,00,80,80', not `00,00,FF,80'. */ - /* See also @FT_LOAD_COLOR. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_Pixel_Mode + * + * @description: + * An enumeration type used to describe the format of pixels in a given + * bitmap. Note that additional formats may be added in the future. + * + * @values: + * FT_PIXEL_MODE_NONE :: + * Value~0 is reserved. + * + * FT_PIXEL_MODE_MONO :: + * A monochrome bitmap, using 1~bit per pixel. Note that pixels are + * stored in most-significant order (MSB), which means that the + * left-most pixel in a byte has value 128. + * + * FT_PIXEL_MODE_GRAY :: + * An 8-bit bitmap, generally used to represent anti-aliased glyph + * images. Each pixel is stored in one byte. Note that the number of + * 'gray' levels is stored in the `num_grays` field of the @FT_Bitmap + * structure (it generally is 256). + * + * FT_PIXEL_MODE_GRAY2 :: + * A 2-bit per pixel bitmap, used to represent embedded anti-aliased + * bitmaps in font files according to the OpenType specification. We + * haven't found a single font using this format, however. + * + * FT_PIXEL_MODE_GRAY4 :: + * A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps + * in font files according to the OpenType specification. We haven't + * found a single font using this format, however. + * + * FT_PIXEL_MODE_LCD :: + * An 8-bit bitmap, representing RGB or BGR decimated glyph images used + * for display on LCD displays; the bitmap is three times wider than + * the original glyph image. See also @FT_RENDER_MODE_LCD. + * + * FT_PIXEL_MODE_LCD_V :: + * An 8-bit bitmap, representing RGB or BGR decimated glyph images used + * for display on rotated LCD displays; the bitmap is three times + * taller than the original glyph image. See also + * @FT_RENDER_MODE_LCD_V. + * + * FT_PIXEL_MODE_BGRA :: + * [Since 2.5] An image with four 8-bit channels per pixel, + * representing a color image (such as emoticons) with alpha channel. + * For each pixel, the format is BGRA, which means, the blue channel + * comes first in memory. The color channels are pre-multiplied and in + * the sRGB colorspace. For example, full red at half-translucent + * opacity will be represented as '00,00,80,80', not '00,00,FF,80'. + * See also @FT_LOAD_COLOR. + */ typedef enum FT_Pixel_Mode_ { FT_PIXEL_MODE_NONE = 0, @@ -193,7 +193,7 @@ FT_BEGIN_HEADER } FT_Pixel_Mode; - /* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */ + /* these constants are deprecated; use the corresponding `FT_Pixel_Mode` */ /* values instead. */ #define ft_pixel_mode_none FT_PIXEL_MODE_NONE #define ft_pixel_mode_mono FT_PIXEL_MODE_MONO @@ -201,63 +201,73 @@ FT_BEGIN_HEADER #define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 #define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 + /* */ - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Bitmap */ - /* */ - /* <Description> */ - /* A structure used to describe a bitmap or pixmap to the raster. */ - /* Note that we now manage pixmaps of various depths through the */ - /* `pixel_mode' field. */ - /* */ - /* <Fields> */ - /* rows :: The number of bitmap rows. */ - /* */ - /* width :: The number of pixels in bitmap row. */ - /* */ - /* pitch :: The pitch's absolute value is the number of bytes */ - /* taken by one bitmap row, including padding. */ - /* However, the pitch is positive when the bitmap has */ - /* a `down' flow, and negative when it has an `up' */ - /* flow. In all cases, the pitch is an offset to add */ - /* to a bitmap pointer in order to go down one row. */ - /* */ - /* Note that `padding' means the alignment of a */ - /* bitmap to a byte border, and FreeType functions */ - /* normally align to the smallest possible integer */ - /* value. */ - /* */ - /* For the B/W rasterizer, `pitch' is always an even */ - /* number. */ - /* */ - /* To change the pitch of a bitmap (say, to make it a */ - /* multiple of 4), use @FT_Bitmap_Convert. */ - /* Alternatively, you might use callback functions to */ - /* directly render to the application's surface; see */ - /* the file `example2.cpp' in the tutorial for a */ - /* demonstration. */ - /* */ - /* buffer :: A typeless pointer to the bitmap buffer. This */ - /* value should be aligned on 32-bit boundaries in */ - /* most cases. */ - /* */ - /* num_grays :: This field is only used with */ - /* @FT_PIXEL_MODE_GRAY; it gives the number of gray */ - /* levels used in the bitmap. */ - /* */ - /* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */ - /* See @FT_Pixel_Mode for possible values. */ - /* */ - /* palette_mode :: This field is intended for paletted pixel modes; */ - /* it indicates how the palette is stored. Not */ - /* used currently. */ - /* */ - /* palette :: A typeless pointer to the bitmap palette; this */ - /* field is intended for paletted pixel modes. Not */ - /* used currently. */ - /* */ + /* For debugging, the @FT_Pixel_Mode enumeration must stay in sync */ + /* with the `pixel_modes` array in file `ftobjs.c`. */ + + + /************************************************************************** + * + * @struct: + * FT_Bitmap + * + * @description: + * A structure used to describe a bitmap or pixmap to the raster. Note + * that we now manage pixmaps of various depths through the `pixel_mode` + * field. + * + * @fields: + * rows :: + * The number of bitmap rows. + * + * width :: + * The number of pixels in bitmap row. + * + * pitch :: + * The pitch's absolute value is the number of bytes taken by one + * bitmap row, including padding. However, the pitch is positive when + * the bitmap has a 'down' flow, and negative when it has an 'up' flow. + * In all cases, the pitch is an offset to add to a bitmap pointer in + * order to go down one row. + * + * Note that 'padding' means the alignment of a bitmap to a byte + * border, and FreeType functions normally align to the smallest + * possible integer value. + * + * For the B/W rasterizer, `pitch` is always an even number. + * + * To change the pitch of a bitmap (say, to make it a multiple of 4), + * use @FT_Bitmap_Convert. Alternatively, you might use callback + * functions to directly render to the application's surface; see the + * file `example2.cpp` in the tutorial for a demonstration. + * + * buffer :: + * A typeless pointer to the bitmap buffer. This value should be + * aligned on 32-bit boundaries in most cases. + * + * num_grays :: + * This field is only used with @FT_PIXEL_MODE_GRAY; it gives the + * number of gray levels used in the bitmap. + * + * pixel_mode :: + * The pixel mode, i.e., how pixel bits are stored. See @FT_Pixel_Mode + * for possible values. + * + * palette_mode :: + * This field is intended for paletted pixel modes; it indicates how + * the palette is stored. Not used currently. + * + * palette :: + * A typeless pointer to the bitmap palette; this field is intended for + * paletted pixel modes. Not used currently. + * + * @note: + * `width` and `rows` refer to the *physical* size of the bitmap, not the + * *logical* one. For example, if @FT_Pixel_Mode is set to + * `FT_PIXEL_MODE_LCD`, the logical width is a just a third of the + * physical one. + */ typedef struct FT_Bitmap_ { unsigned int rows; @@ -272,75 +282,78 @@ FT_BEGIN_HEADER } FT_Bitmap; - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Outline */ - /* */ - /* <Description> */ - /* This structure is used to describe an outline to the scan-line */ - /* converter. */ - /* */ - /* <Fields> */ - /* n_contours :: The number of contours in the outline. */ - /* */ - /* n_points :: The number of points in the outline. */ - /* */ - /* points :: A pointer to an array of `n_points' @FT_Vector */ - /* elements, giving the outline's point coordinates. */ - /* */ - /* tags :: A pointer to an array of `n_points' chars, giving */ - /* each outline point's type. */ - /* */ - /* If bit~0 is unset, the point is `off' the curve, */ - /* i.e., a Bézier control point, while it is `on' if */ - /* set. */ - /* */ - /* Bit~1 is meaningful for `off' points only. If set, */ - /* it indicates a third-order Bézier arc control point; */ - /* and a second-order control point if unset. */ - /* */ - /* If bit~2 is set, bits 5-7 contain the drop-out mode */ - /* (as defined in the OpenType specification; the value */ - /* is the same as the argument to the SCANMODE */ - /* instruction). */ - /* */ - /* Bits 3 and~4 are reserved for internal purposes. */ - /* */ - /* contours :: An array of `n_contours' shorts, giving the end */ - /* point of each contour within the outline. For */ - /* example, the first contour is defined by the points */ - /* `0' to `contours[0]', the second one is defined by */ - /* the points `contours[0]+1' to `contours[1]', etc. */ - /* */ - /* flags :: A set of bit flags used to characterize the outline */ - /* and give hints to the scan-converter and hinter on */ - /* how to convert/grid-fit it. See @FT_OUTLINE_XXX. */ - /* */ - /* <Note> */ - /* The B/W rasterizer only checks bit~2 in the `tags' array for the */ - /* first point of each contour. The drop-out mode as given with */ - /* @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and */ - /* @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden. */ - /* */ + /************************************************************************** + * + * @section: + * outline_processing + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Outline + * + * @description: + * This structure is used to describe an outline to the scan-line + * converter. + * + * @fields: + * n_contours :: + * The number of contours in the outline. + * + * n_points :: + * The number of points in the outline. + * + * points :: + * A pointer to an array of `n_points` @FT_Vector elements, giving the + * outline's point coordinates. + * + * tags :: + * A pointer to an array of `n_points` chars, giving each outline + * point's type. + * + * If bit~0 is unset, the point is 'off' the curve, i.e., a Bezier + * control point, while it is 'on' if set. + * + * Bit~1 is meaningful for 'off' points only. If set, it indicates a + * third-order Bezier arc control point; and a second-order control + * point if unset. + * + * If bit~2 is set, bits 5-7 contain the drop-out mode (as defined in + * the OpenType specification; the value is the same as the argument to + * the 'SCANTYPE' instruction). + * + * Bits 3 and~4 are reserved for internal purposes. + * + * contours :: + * An array of `n_contours` shorts, giving the end point of each + * contour within the outline. For example, the first contour is + * defined by the points '0' to `contours[0]`, the second one is + * defined by the points `contours[0]+1` to `contours[1]`, etc. + * + * flags :: + * A set of bit flags used to characterize the outline and give hints + * to the scan-converter and hinter on how to convert/grid-fit it. See + * @FT_OUTLINE_XXX. + * + * @note: + * The B/W rasterizer only checks bit~2 in the `tags` array for the first + * point of each contour. The drop-out mode as given with + * @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and + * @FT_OUTLINE_INCLUDE_STUBS in `flags` is then overridden. + */ typedef struct FT_Outline_ { - short n_contours; /* number of contours in glyph */ - short n_points; /* number of points in the glyph */ + unsigned short n_contours; /* number of contours in glyph */ + unsigned short n_points; /* number of points in the glyph */ - FT_Vector* points; /* the outline's points */ - char* tags; /* the points flags */ - short* contours; /* the contour end points */ + FT_Vector* points; /* the outline's points */ + unsigned char* tags; /* the points flags */ + unsigned short* contours; /* the contour end points */ - int flags; /* outline masks */ + int flags; /* outline masks */ } FT_Outline; @@ -348,82 +361,87 @@ FT_BEGIN_HEADER /* Following limits must be consistent with */ /* FT_Outline.{n_contours,n_points} */ -#define FT_OUTLINE_CONTOURS_MAX SHRT_MAX -#define FT_OUTLINE_POINTS_MAX SHRT_MAX - - - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_OUTLINE_XXX */ - /* */ - /* <Description> */ - /* A list of bit-field constants use for the flags in an outline's */ - /* `flags' field. */ - /* */ - /* <Values> */ - /* FT_OUTLINE_NONE :: */ - /* Value~0 is reserved. */ - /* */ - /* FT_OUTLINE_OWNER :: */ - /* If set, this flag indicates that the outline's field arrays */ - /* (i.e., `points', `flags', and `contours') are `owned' by the */ - /* outline object, and should thus be freed when it is destroyed. */ - /* */ - /* FT_OUTLINE_EVEN_ODD_FILL :: */ - /* By default, outlines are filled using the non-zero winding rule. */ - /* If set to 1, the outline will be filled using the even-odd fill */ - /* rule (only works with the smooth rasterizer). */ - /* */ - /* FT_OUTLINE_REVERSE_FILL :: */ - /* By default, outside contours of an outline are oriented in */ - /* clock-wise direction, as defined in the TrueType specification. */ - /* This flag is set if the outline uses the opposite direction */ - /* (typically for Type~1 fonts). This flag is ignored by the scan */ - /* converter. */ - /* */ - /* FT_OUTLINE_IGNORE_DROPOUTS :: */ - /* By default, the scan converter will try to detect drop-outs in */ - /* an outline and correct the glyph bitmap to ensure consistent */ - /* shape continuity. If set, this flag hints the scan-line */ - /* converter to ignore such cases. See below for more information. */ - /* */ - /* FT_OUTLINE_SMART_DROPOUTS :: */ - /* Select smart dropout control. If unset, use simple dropout */ - /* control. Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See */ - /* below for more information. */ - /* */ - /* FT_OUTLINE_INCLUDE_STUBS :: */ - /* If set, turn pixels on for `stubs', otherwise exclude them. */ - /* Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for */ - /* more information. */ - /* */ - /* FT_OUTLINE_HIGH_PRECISION :: */ - /* This flag indicates that the scan-line converter should try to */ - /* convert this outline to bitmaps with the highest possible */ - /* quality. It is typically set for small character sizes. Note */ - /* that this is only a hint that might be completely ignored by a */ - /* given scan-converter. */ - /* */ - /* FT_OUTLINE_SINGLE_PASS :: */ - /* This flag is set to force a given scan-converter to only use a */ - /* single pass over the outline to render a bitmap glyph image. */ - /* Normally, it is set for very large character sizes. It is only */ - /* a hint that might be completely ignored by a given */ - /* scan-converter. */ - /* */ - /* <Note> */ - /* The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */ - /* and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth */ - /* rasterizer. */ - /* */ - /* There exists a second mechanism to pass the drop-out mode to the */ - /* B/W rasterizer; see the `tags' field in @FT_Outline. */ - /* */ - /* Please refer to the description of the `SCANTYPE' instruction in */ - /* the OpenType specification (in file `ttinst1.doc') how simple */ - /* drop-outs, smart drop-outs, and stubs are defined. */ - /* */ +#define FT_OUTLINE_CONTOURS_MAX USHRT_MAX +#define FT_OUTLINE_POINTS_MAX USHRT_MAX + + + /************************************************************************** + * + * @enum: + * FT_OUTLINE_XXX + * + * @description: + * A list of bit-field constants used for the flags in an outline's + * `flags` field. + * + * @values: + * FT_OUTLINE_NONE :: + * Value~0 is reserved. + * + * FT_OUTLINE_OWNER :: + * If set, this flag indicates that the outline's field arrays (i.e., + * `points`, `flags`, and `contours`) are 'owned' by the outline + * object, and should thus be freed when it is destroyed. + * + * FT_OUTLINE_EVEN_ODD_FILL :: + * By default, outlines are filled using the non-zero winding rule. If + * set to 1, the outline will be filled using the even-odd fill rule + * (only works with the smooth rasterizer). + * + * FT_OUTLINE_REVERSE_FILL :: + * By default, outside contours of an outline are oriented in + * clock-wise direction, as defined in the TrueType specification. + * This flag is set if the outline uses the opposite direction + * (typically for Type~1 fonts). This flag is ignored by the scan + * converter. + * + * FT_OUTLINE_IGNORE_DROPOUTS :: + * By default, the scan converter will try to detect drop-outs in an + * outline and correct the glyph bitmap to ensure consistent shape + * continuity. If set, this flag hints the scan-line converter to + * ignore such cases. See below for more information. + * + * FT_OUTLINE_SMART_DROPOUTS :: + * Select smart dropout control. If unset, use simple dropout control. + * Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more + * information. + * + * FT_OUTLINE_INCLUDE_STUBS :: + * If set, turn pixels on for 'stubs', otherwise exclude them. Ignored + * if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more + * information. + * + * FT_OUTLINE_OVERLAP :: + * [Since 2.10.3] This flag indicates that this outline contains + * overlapping contours 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. + * It is typically set for small character sizes. Note that this is + * only a hint that might be completely ignored by a given + * scan-converter. + * + * FT_OUTLINE_SINGLE_PASS :: + * This flag is set to force a given scan-converter to only use a + * single pass over the outline to render a bitmap glyph image. + * Normally, it is set for very large character sizes. It is only a + * hint that might be completely ignored by a given scan-converter. + * + * @note: + * The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and + * @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth rasterizer. + * + * There exists a second mechanism to pass the drop-out mode to the B/W + * rasterizer; see the `tags` field in @FT_Outline. + * + * Please refer to the description of the 'SCANTYPE' instruction in the + * [OpenType specification](https://learn.microsoft.com/en-us/typography/opentype/spec/tt_instructions#scantype) + * how simple drop-outs, smart drop-outs, and stubs are defined. + */ #define FT_OUTLINE_NONE 0x0 #define FT_OUTLINE_OWNER 0x1 #define FT_OUTLINE_EVEN_ODD_FILL 0x2 @@ -431,13 +449,14 @@ 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 /* these constants are deprecated; use the corresponding */ - /* `FT_OUTLINE_XXX' values instead */ + /* `FT_OUTLINE_XXX` values instead */ #define ft_outline_none FT_OUTLINE_NONE #define ft_outline_owner FT_OUTLINE_OWNER #define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL @@ -448,20 +467,25 @@ FT_BEGIN_HEADER /* */ -#define FT_CURVE_TAG( flag ) ( flag & 3 ) +#define FT_CURVE_TAG( flag ) ( flag & 0x03 ) -#define FT_CURVE_TAG_ON 1 -#define FT_CURVE_TAG_CONIC 0 -#define FT_CURVE_TAG_CUBIC 2 + /* see the `tags` field in `FT_Outline` for a description of the values */ +#define FT_CURVE_TAG_ON 0x01 +#define FT_CURVE_TAG_CONIC 0x00 +#define FT_CURVE_TAG_CUBIC 0x02 -#define FT_CURVE_TAG_HAS_SCANMODE 4 +#define FT_CURVE_TAG_HAS_SCANMODE 0x04 -#define FT_CURVE_TAG_TOUCH_X 8 /* reserved for the TrueType hinter */ -#define FT_CURVE_TAG_TOUCH_Y 16 /* reserved for the TrueType hinter */ +#define FT_CURVE_TAG_TOUCH_X 0x08 /* reserved for TrueType hinter */ +#define FT_CURVE_TAG_TOUCH_Y 0x10 /* reserved for TrueType hinter */ #define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \ FT_CURVE_TAG_TOUCH_Y ) + /* values 0x20, 0x40, and 0x80 are reserved */ + + /* these constants are deprecated; use the corresponding */ + /* `FT_CURVE_TAG_XXX` values instead */ #define FT_Curve_Tag_On FT_CURVE_TAG_ON #define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC #define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC @@ -469,26 +493,28 @@ FT_BEGIN_HEADER #define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_MoveToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `move */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `move to' is emitted to start a new contour in an outline. */ - /* */ - /* <Input> */ - /* to :: A pointer to the target point of the `move to'. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of the */ - /* decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Outline_MoveToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'move to' + * function during outline walking/decomposition. + * + * A 'move to' is emitted to start a new contour in an outline. + * + * @input: + * to :: + * A pointer to the target point of the 'move to'. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ typedef int (*FT_Outline_MoveToFunc)( const FT_Vector* to, void* user ); @@ -496,26 +522,28 @@ FT_BEGIN_HEADER #define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_LineToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `line */ - /* to' function during outline walking/decomposition. */ - /* */ - /* A `line to' is emitted to indicate a segment in the outline. */ - /* */ - /* <Input> */ - /* to :: A pointer to the target point of the `line to'. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of the */ - /* decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Outline_LineToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'line to' + * function during outline walking/decomposition. + * + * A 'line to' is emitted to indicate a segment in the outline. + * + * @input: + * to :: + * A pointer to the target point of the 'line to'. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ typedef int (*FT_Outline_LineToFunc)( const FT_Vector* to, void* user ); @@ -523,30 +551,33 @@ FT_BEGIN_HEADER #define FT_Outline_LineTo_Func FT_Outline_LineToFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_ConicToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `conic */ - /* to' function during outline walking or decomposition. */ - /* */ - /* A `conic to' is emitted to indicate a second-order Bézier arc in */ - /* the outline. */ - /* */ - /* <Input> */ - /* control :: An intermediate control point between the last position */ - /* and the new target in `to'. */ - /* */ - /* to :: A pointer to the target end point of the conic arc. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of */ - /* the decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Outline_ConicToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'conic to' + * function during outline walking or decomposition. + * + * A 'conic to' is emitted to indicate a second-order Bezier arc in the + * outline. + * + * @input: + * control :: + * An intermediate control point between the last position and the new + * target in `to`. + * + * to :: + * A pointer to the target end point of the conic arc. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ typedef int (*FT_Outline_ConicToFunc)( const FT_Vector* control, const FT_Vector* to, @@ -555,30 +586,34 @@ FT_BEGIN_HEADER #define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Outline_CubicToFunc */ - /* */ - /* <Description> */ - /* A function pointer type used to describe the signature of a `cubic */ - /* to' function during outline walking or decomposition. */ - /* */ - /* A `cubic to' is emitted to indicate a third-order Bézier arc. */ - /* */ - /* <Input> */ - /* control1 :: A pointer to the first Bézier control point. */ - /* */ - /* control2 :: A pointer to the second Bézier control point. */ - /* */ - /* to :: A pointer to the target end point. */ - /* */ - /* user :: A typeless pointer, which is passed from the caller of */ - /* the decomposition function. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Outline_CubicToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'cubic to' + * function during outline walking or decomposition. + * + * A 'cubic to' is emitted to indicate a third-order Bezier arc. + * + * @input: + * control1 :: + * A pointer to the first Bezier control point. + * + * control2 :: + * A pointer to the second Bezier control point. + * + * to :: + * A pointer to the target end point. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ typedef int (*FT_Outline_CubicToFunc)( const FT_Vector* control1, const FT_Vector* control2, @@ -588,43 +623,49 @@ FT_BEGIN_HEADER #define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Outline_Funcs */ - /* */ - /* <Description> */ - /* A structure to hold various function pointers used during outline */ - /* decomposition in order to emit segments, conic, and cubic Béziers. */ - /* */ - /* <Fields> */ - /* move_to :: The `move to' emitter. */ - /* */ - /* line_to :: The segment emitter. */ - /* */ - /* conic_to :: The second-order Bézier arc emitter. */ - /* */ - /* cubic_to :: The third-order Bézier arc emitter. */ - /* */ - /* shift :: The shift that is applied to coordinates before they */ - /* are sent to the emitter. */ - /* */ - /* delta :: The delta that is applied to coordinates before they */ - /* are sent to the emitter, but after the shift. */ - /* */ - /* <Note> */ - /* The point coordinates sent to the emitters are the transformed */ - /* version of the original coordinates (this is important for high */ - /* accuracy during scan-conversion). The transformation is simple: */ - /* */ - /* { */ - /* x' = (x << shift) - delta */ - /* y' = (x << shift) - delta */ - /* } */ - /* */ - /* Set the values of `shift' and `delta' to~0 to get the original */ - /* point coordinates. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Outline_Funcs + * + * @description: + * A structure to hold various function pointers used during outline + * decomposition in order to emit segments, conic, and cubic Beziers. + * + * @fields: + * move_to :: + * The 'move to' emitter. + * + * line_to :: + * The segment emitter. + * + * conic_to :: + * The second-order Bezier arc emitter. + * + * cubic_to :: + * The third-order Bezier arc emitter. + * + * shift :: + * The shift that is applied to coordinates before they are sent to the + * emitter. + * + * delta :: + * The delta that is applied to coordinates before they are sent to the + * emitter, but after the shift. + * + * @note: + * The point coordinates sent to the emitters are the transformed version + * of the original coordinates (this is important for high accuracy + * during scan-conversion). The transformation is simple: + * + * ``` + * x' = (x << shift) - delta + * y' = (y << shift) - delta + * ``` + * + * Set the values of `shift` and `delta` to~0 to get the original point + * coordinates. + */ typedef struct FT_Outline_Funcs_ { FT_Outline_MoveToFunc move_to; @@ -638,80 +679,84 @@ FT_BEGIN_HEADER } FT_Outline_Funcs; - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @macro: + * FT_IMAGE_TAG + * + * @description: + * This macro converts four-letter tags to an unsigned long type. + * + * @note: + * Since many 16-bit compilers don't like 32-bit enumerations, you should + * redefine this macro in case of problems to something like this: + * + * ``` + * #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value + * ``` + * + * to get a simple enumeration without assigning special numbers. + */ +#ifndef FT_IMAGE_TAG +#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \ + value = ( ( FT_STATIC_BYTE_CAST( unsigned long, _x1 ) << 24 ) | \ + ( FT_STATIC_BYTE_CAST( unsigned long, _x2 ) << 16 ) | \ + ( FT_STATIC_BYTE_CAST( unsigned long, _x3 ) << 8 ) | \ + FT_STATIC_BYTE_CAST( unsigned long, _x4 ) ) - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_IMAGE_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags to an unsigned long type. */ - /* */ - /* <Note> */ - /* Since many 16-bit compilers don't like 32-bit enumerations, you */ - /* should redefine this macro in case of problems to something like */ - /* this: */ - /* */ - /* { */ - /* #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value */ - /* } */ - /* */ - /* to get a simple enumeration without assigning special numbers. */ - /* */ -#ifndef FT_IMAGE_TAG -#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \ - value = ( ( (unsigned long)_x1 << 24 ) | \ - ( (unsigned long)_x2 << 16 ) | \ - ( (unsigned long)_x3 << 8 ) | \ - (unsigned long)_x4 ) #endif /* FT_IMAGE_TAG */ - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Glyph_Format */ - /* */ - /* <Description> */ - /* An enumeration type used to describe the format of a given glyph */ - /* image. Note that this version of FreeType only supports two image */ - /* formats, even though future font drivers will be able to register */ - /* their own format. */ - /* */ - /* <Values> */ - /* FT_GLYPH_FORMAT_NONE :: */ - /* The value~0 is reserved. */ - /* */ - /* FT_GLYPH_FORMAT_COMPOSITE :: */ - /* The glyph image is a composite of several other images. This */ - /* format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to */ - /* report compound glyphs (like accented characters). */ - /* */ - /* FT_GLYPH_FORMAT_BITMAP :: */ - /* The glyph image is a bitmap, and can be described as an */ - /* @FT_Bitmap. You generally need to access the `bitmap' field of */ - /* the @FT_GlyphSlotRec structure to read it. */ - /* */ - /* FT_GLYPH_FORMAT_OUTLINE :: */ - /* The glyph image is a vectorial outline made of line segments */ - /* and Bézier arcs; it can be described as an @FT_Outline; you */ - /* generally want to access the `outline' field of the */ - /* @FT_GlyphSlotRec structure to read it. */ - /* */ - /* FT_GLYPH_FORMAT_PLOTTER :: */ - /* The glyph image is a vectorial path with no inside and outside */ - /* contours. Some Type~1 fonts, like those in the Hershey family, */ - /* contain glyphs in this format. These are described as */ - /* @FT_Outline, but FreeType isn't currently capable of rendering */ - /* them correctly. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_Glyph_Format + * + * @description: + * An enumeration type used to describe the format of a given glyph + * image. Note that this version of FreeType only supports two image + * formats, even though future font drivers will be able to register + * their own format. + * + * @values: + * FT_GLYPH_FORMAT_NONE :: + * The value~0 is reserved. + * + * FT_GLYPH_FORMAT_COMPOSITE :: + * The glyph image is a composite of several other images. This format + * is _only_ used with @FT_LOAD_NO_RECURSE, and is used to report + * compound glyphs (like accented characters). + * + * FT_GLYPH_FORMAT_BITMAP :: + * The glyph image is a bitmap, and can be described as an @FT_Bitmap. + * You generally need to access the `bitmap` field of the + * @FT_GlyphSlotRec structure to read it. + * + * FT_GLYPH_FORMAT_OUTLINE :: + * The glyph image is a vectorial outline made of line segments and + * Bezier arcs; it can be described as an @FT_Outline; you generally + * want to access the `outline` field of the @FT_GlyphSlotRec structure + * to read it. + * + * FT_GLYPH_FORMAT_PLOTTER :: + * The glyph image is a vectorial path with no inside and outside + * contours. Some Type~1 fonts, like those in the Hershey family, + * contain glyphs in this format. These are described as @FT_Outline, + * but FreeType isn't currently capable of rendering them correctly. + * + * FT_GLYPH_FORMAT_SVG :: + * [Since 2.12] The glyph is represented by an SVG document in the + * 'SVG~' table. + */ typedef enum FT_Glyph_Format_ { FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ), @@ -719,13 +764,14 @@ FT_BEGIN_HEADER FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ), FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ), FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ), - FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ) + FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_SVG, 'S', 'V', 'G', ' ' ) } FT_Glyph_Format; /* these constants are deprecated; use the corresponding */ - /* `FT_Glyph_Format' values instead. */ + /* `FT_Glyph_Format` values instead. */ #define ft_glyph_format_none FT_GLYPH_FORMAT_NONE #define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE #define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP @@ -744,87 +790,85 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* A raster is a scan converter, in charge of rendering an outline into */ - /* a a bitmap. This section contains the public API for rasters. */ - /* */ - /* Note that in FreeType 2, all rasters are now encapsulated within */ - /* specific modules called `renderers'. See `ftrender.h' for more */ - /* details on renderers. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Section> */ - /* raster */ - /* */ - /* <Title> */ - /* Scanline Converter */ - /* */ - /* <Abstract> */ - /* How vectorial outlines are converted into bitmaps and pixmaps. */ - /* */ - /* <Description> */ - /* This section contains technical definitions. */ - /* */ - /* <Order> */ - /* FT_Raster */ - /* FT_Span */ - /* FT_SpanFunc */ - /* */ - /* FT_Raster_Params */ - /* FT_RASTER_FLAG_XXX */ - /* */ - /* FT_Raster_NewFunc */ - /* FT_Raster_DoneFunc */ - /* FT_Raster_ResetFunc */ - /* FT_Raster_SetModeFunc */ - /* FT_Raster_RenderFunc */ - /* FT_Raster_Funcs */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Raster */ - /* */ - /* <Description> */ - /* An opaque handle (pointer) to a raster object. Each object can be */ - /* used independently to convert an outline into a bitmap or pixmap. */ - /* */ - typedef struct FT_RasterRec_* FT_Raster; - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Span */ - /* */ - /* <Description> */ - /* A structure used to model a single span of gray pixels when */ - /* rendering an anti-aliased bitmap. */ - /* */ - /* <Fields> */ - /* x :: The span's horizontal start position. */ - /* */ - /* len :: The span's length in pixels. */ - /* */ - /* coverage :: The span color/coverage, ranging from 0 (background) */ - /* to 255 (foreground). */ - /* */ - /* <Note> */ - /* This structure is used by the span drawing callback type named */ - /* @FT_SpanFunc that takes the y~coordinate of the span as a */ - /* parameter. */ - /* */ - /* The coverage value is always between 0 and 255. If you want less */ - /* gray values, the callback function has to reduce them. */ - /* */ + /************************************************************************** + * + * @section: + * raster + * + * @title: + * Scanline Converter + * + * @abstract: + * How vectorial outlines are converted into bitmaps and pixmaps. + * + * @description: + * A raster or a rasterizer is a scan converter in charge of producing a + * pixel coverage bitmap that can be used as an alpha channel when + * compositing a glyph with a background. FreeType comes with two + * rasterizers: bilevel `raster1` and anti-aliased `smooth` are two + * separate modules. They are usually called from the high-level + * @FT_Load_Glyph or @FT_Render_Glyph functions and produce the entire + * coverage bitmap at once, while staying largely invisible to users. + * + * Instead of working with complete coverage bitmaps, it is also possible + * to intercept consecutive pixel runs on the same scanline with the same + * coverage, called _spans_, and process them individually. Only the + * `smooth` rasterizer permits this when calling @FT_Outline_Render with + * @FT_Raster_Params as described below. + * + * Working with either complete bitmaps or spans it is important to think + * of them as colorless coverage objects suitable as alpha channels to + * blend arbitrary colors with a background. For best results, it is + * recommended to use gamma correction, too. + * + * This section also describes the public API needed to set up alternative + * @FT_Renderer modules. + * + * @order: + * FT_Span + * FT_SpanFunc + * FT_Raster_Params + * FT_RASTER_FLAG_XXX + * + * FT_Raster + * FT_Raster_NewFunc + * FT_Raster_DoneFunc + * FT_Raster_ResetFunc + * FT_Raster_SetModeFunc + * FT_Raster_RenderFunc + * FT_Raster_Funcs + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Span + * + * @description: + * A structure to model a single span of consecutive pixels when + * rendering an anti-aliased bitmap. + * + * @fields: + * x :: + * The span's horizontal start position. + * + * len :: + * The span's length in pixels. + * + * coverage :: + * The span color/coverage, ranging from 0 (background) to 255 + * (foreground). + * + * @note: + * This structure is used by the span drawing callback type named + * @FT_SpanFunc that takes the y~coordinate of the span as a parameter. + * + * The anti-aliased rasterizer produces coverage values from 0 to 255, + * that is, from completely transparent to completely opaque. + */ typedef struct FT_Span_ { short x; @@ -834,42 +878,37 @@ FT_BEGIN_HEADER } FT_Span; - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_SpanFunc */ - /* */ - /* <Description> */ - /* A function used as a call-back by the anti-aliased renderer in */ - /* order to let client applications draw themselves the gray pixel */ - /* spans on each scan line. */ - /* */ - /* <Input> */ - /* y :: The scanline's y~coordinate. */ - /* */ - /* count :: The number of spans to draw on this scanline. */ - /* */ - /* spans :: A table of `count' spans to draw on the scanline. */ - /* */ - /* user :: User-supplied data that is passed to the callback. */ - /* */ - /* <Note> */ - /* This callback allows client applications to directly render the */ - /* gray spans of the anti-aliased bitmap to any kind of surfaces. */ - /* */ - /* This can be used to write anti-aliased outlines directly to a */ - /* given background bitmap, and even perform translucency. */ - /* */ - /* Note that the `count' field cannot be greater than a fixed value */ - /* defined by the `FT_MAX_GRAY_SPANS' configuration macro in */ - /* `ftoption.h'. By default, this value is set to~32, which means */ - /* that if there are more than 32~spans on a given scanline, the */ - /* callback is called several times with the same `y' parameter in */ - /* order to draw all callbacks. */ - /* */ - /* Otherwise, the callback is only called once per scan-line, and */ - /* only for those scanlines that do have `gray' pixels on them. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_SpanFunc + * + * @description: + * A function used as a call-back by the anti-aliased renderer in order + * to let client applications draw themselves the pixel spans on each + * scan line. + * + * @input: + * y :: + * The scanline's upward y~coordinate. + * + * count :: + * The number of spans to draw on this scanline. + * + * spans :: + * A table of `count` spans to draw on the scanline. + * + * user :: + * User-supplied data that is passed to the callback. + * + * @note: + * This callback allows client applications to directly render the spans + * of the anti-aliased bitmap to any kind of surfaces. + * + * This can be used to write anti-aliased outlines directly to a given + * background bitmap using alpha compositing. It can also be used for + * oversampling and averaging. + */ typedef void (*FT_SpanFunc)( int y, int count, @@ -879,131 +918,141 @@ FT_BEGIN_HEADER #define FT_Raster_Span_Func FT_SpanFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_BitTest_Func */ - /* */ - /* <Description> */ - /* Deprecated, unimplemented. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Raster_BitTest_Func + * + * @description: + * Deprecated, unimplemented. + */ typedef int (*FT_Raster_BitTest_Func)( int y, int x, void* user ); - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_BitSet_Func */ - /* */ - /* <Description> */ - /* Deprecated, unimplemented. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Raster_BitSet_Func + * + * @description: + * Deprecated, unimplemented. + */ typedef void (*FT_Raster_BitSet_Func)( int y, int x, void* user ); - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_RASTER_FLAG_XXX */ - /* */ - /* <Description> */ - /* A list of bit flag constants as used in the `flags' field of a */ - /* @FT_Raster_Params structure. */ - /* */ - /* <Values> */ - /* FT_RASTER_FLAG_DEFAULT :: This value is 0. */ - /* */ - /* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */ - /* anti-aliased glyph image should be */ - /* generated. Otherwise, it will be */ - /* monochrome (1-bit). */ - /* */ - /* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */ - /* rendering. In this mode, client */ - /* applications must provide their own span */ - /* callback. This lets them directly */ - /* draw or compose over an existing bitmap. */ - /* If this bit is not set, the target */ - /* pixmap's buffer _must_ be zeroed before */ - /* rendering. */ - /* */ - /* Direct rendering is only possible with */ - /* anti-aliased glyphs. */ - /* */ - /* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */ - /* rendering mode. If set, the output will */ - /* be clipped to a box specified in the */ - /* `clip_box' field of the */ - /* @FT_Raster_Params structure. */ - /* */ - /* Note that by default, the glyph bitmap */ - /* is clipped to the target pixmap, except */ - /* in direct rendering mode where all spans */ - /* are generated if no clipping box is set. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_RASTER_FLAG_XXX + * + * @description: + * A list of bit flag constants as used in the `flags` field of a + * @FT_Raster_Params structure. + * + * @values: + * FT_RASTER_FLAG_DEFAULT :: + * This value is 0. + * + * FT_RASTER_FLAG_AA :: + * This flag is set to indicate that an anti-aliased glyph image should + * be generated. Otherwise, it will be monochrome (1-bit). + * + * FT_RASTER_FLAG_DIRECT :: + * This flag is set to indicate direct rendering. In this mode, client + * applications must provide their own span callback. This lets them + * directly draw or compose over an existing bitmap. If this bit is + * _not_ set, the target pixmap's buffer _must_ be zeroed before + * rendering and the output will be clipped to its size. + * + * Direct rendering is only possible with anti-aliased glyphs. + * + * FT_RASTER_FLAG_CLIP :: + * This flag is only used in direct rendering mode. If set, the output + * will be clipped to a box specified in the `clip_box` field of the + * @FT_Raster_Params structure. Otherwise, the `clip_box` is + * effectively set to the bounding box and all spans are generated. + * + * FT_RASTER_FLAG_SDF :: + * This flag is set to indicate that a signed distance field glyph + * image should be generated. This is only used while rendering with + * the @FT_RENDER_MODE_SDF render mode. + */ #define FT_RASTER_FLAG_DEFAULT 0x0 #define FT_RASTER_FLAG_AA 0x1 #define FT_RASTER_FLAG_DIRECT 0x2 #define FT_RASTER_FLAG_CLIP 0x4 +#define FT_RASTER_FLAG_SDF 0x8 /* these constants are deprecated; use the corresponding */ - /* `FT_RASTER_FLAG_XXX' values instead */ + /* `FT_RASTER_FLAG_XXX` values instead */ #define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT #define ft_raster_flag_aa FT_RASTER_FLAG_AA #define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT #define ft_raster_flag_clip FT_RASTER_FLAG_CLIP - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Raster_Params */ - /* */ - /* <Description> */ - /* A structure to hold the arguments used by a raster's render */ - /* function. */ - /* */ - /* <Fields> */ - /* target :: The target bitmap. */ - /* */ - /* source :: A pointer to the source glyph image (e.g., an */ - /* @FT_Outline). */ - /* */ - /* flags :: The rendering flags. */ - /* */ - /* gray_spans :: The gray span drawing callback. */ - /* */ - /* black_spans :: Unused. */ - /* */ - /* bit_test :: Unused. */ - /* */ - /* bit_set :: Unused. */ - /* */ - /* user :: User-supplied data that is passed to each drawing */ - /* callback. */ - /* */ - /* clip_box :: An optional clipping box. It is only used in */ - /* direct rendering mode. Note that coordinates here */ - /* should be expressed in _integer_ pixels (and not in */ - /* 26.6 fixed-point units). */ - /* */ - /* <Note> */ - /* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */ - /* bit flag is set in the `flags' field, otherwise a monochrome */ - /* bitmap is generated. */ - /* */ - /* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */ - /* raster will call the `gray_spans' callback to draw gray pixel */ - /* spans. This allows direct composition over a pre-existing bitmap */ - /* through user-provided callbacks to perform the span drawing and */ - /* composition. Not supported by the monochrome rasterizer. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Raster_Params + * + * @description: + * A structure to hold the parameters used by a raster's render function, + * passed as an argument to @FT_Outline_Render. + * + * @fields: + * target :: + * The target bitmap. + * + * source :: + * A pointer to the source glyph image (e.g., an @FT_Outline). + * + * flags :: + * The rendering flags. + * + * gray_spans :: + * The gray span drawing callback. + * + * black_spans :: + * Unused. + * + * bit_test :: + * Unused. + * + * bit_set :: + * Unused. + * + * user :: + * User-supplied data that is passed to each drawing callback. + * + * clip_box :: + * An optional span clipping box expressed in _integer_ pixels + * (not in 26.6 fixed-point units). + * + * @note: + * 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 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_ { const FT_Bitmap* target; @@ -1019,30 +1068,49 @@ FT_BEGIN_HEADER } FT_Raster_Params; - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_NewFunc */ - /* */ - /* <Description> */ - /* A function used to create a new raster object. */ - /* */ - /* <Input> */ - /* memory :: A handle to the memory allocator. */ - /* */ - /* <Output> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - /* <Note> */ - /* The `memory' parameter is a typeless pointer in order to avoid */ - /* un-wanted dependencies on the rest of the FreeType code. In */ - /* practice, it is an @FT_Memory object, i.e., a handle to the */ - /* standard FreeType memory allocator. However, this field can be */ - /* completely ignored by a given raster implementation. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Raster + * + * @description: + * An opaque handle (pointer) to a raster object. Each object can be + * used independently to convert an outline into a bitmap or pixmap. + * + * @note: + * In FreeType 2, all rasters are now encapsulated within specific + * @FT_Renderer modules and only used in their context. + * + */ + typedef struct FT_RasterRec_* FT_Raster; + + + /************************************************************************** + * + * @functype: + * FT_Raster_NewFunc + * + * @description: + * A function used to create a new raster object. + * + * @input: + * memory :: + * A handle to the memory allocator. + * + * @output: + * raster :: + * A handle to the new raster object. + * + * @return: + * Error code. 0~means success. + * + * @note: + * The `memory` parameter is a typeless pointer in order to avoid + * un-wanted dependencies on the rest of the FreeType code. In practice, + * it is an @FT_Memory object, i.e., a handle to the standard FreeType + * memory allocator. However, this field can be completely ignored by a + * given raster implementation. + */ typedef int (*FT_Raster_NewFunc)( void* memory, FT_Raster* raster ); @@ -1050,49 +1118,52 @@ FT_BEGIN_HEADER #define FT_Raster_New_Func FT_Raster_NewFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_DoneFunc */ - /* */ - /* <Description> */ - /* A function used to destroy a given raster object. */ - /* */ - /* <Input> */ - /* raster :: A handle to the raster object. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Raster_DoneFunc + * + * @description: + * A function used to destroy a given raster object. + * + * @input: + * raster :: + * A handle to the raster object. + */ typedef void (*FT_Raster_DoneFunc)( FT_Raster raster ); #define FT_Raster_Done_Func FT_Raster_DoneFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_ResetFunc */ - /* */ - /* <Description> */ - /* FreeType used to provide an area of memory called the `render */ - /* pool' available to all registered rasters. This was not thread */ - /* safe however and now FreeType never allocates this pool. NULL */ - /* is always passed in as pool_base. */ - /* */ - /* This function is called each time the render pool changes, or just */ - /* after a new raster object is created. */ - /* */ - /* <Input> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* pool_base :: The address in memory of the render pool. */ - /* */ - /* pool_size :: The size in bytes of the render pool. */ - /* */ - /* <Note> */ - /* Rasters should ignore the render pool and rely on dynamic or stack */ - /* allocation if they want to (a handle to the memory allocator is */ - /* passed to the raster constructor). */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Raster_ResetFunc + * + * @description: + * FreeType used to provide an area of memory called the 'render pool' + * available to all registered rasterizers. This was not thread safe, + * however, and now FreeType never allocates this pool. + * + * This function is called after a new raster object is created. + * + * @input: + * raster :: + * A handle to the new raster object. + * + * pool_base :: + * Previously, the address in memory of the render pool. Set this to + * `NULL`. + * + * pool_size :: + * Previously, the size in bytes of the render pool. Set this to 0. + * + * @note: + * Rasterizers should rely on dynamic or stack allocation if they want to + * (a handle to the memory allocator is passed to the rasterizer + * constructor). + */ typedef void (*FT_Raster_ResetFunc)( FT_Raster raster, unsigned char* pool_base, @@ -1101,24 +1172,26 @@ FT_BEGIN_HEADER #define FT_Raster_Reset_Func FT_Raster_ResetFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_SetModeFunc */ - /* */ - /* <Description> */ - /* This function is a generic facility to change modes or attributes */ - /* in a given raster. This can be used for debugging purposes, or */ - /* simply to allow implementation-specific `features' in a given */ - /* raster module. */ - /* */ - /* <Input> */ - /* raster :: A handle to the new raster object. */ - /* */ - /* mode :: A 4-byte tag used to name the mode or property. */ - /* */ - /* args :: A pointer to the new mode/property to use. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Raster_SetModeFunc + * + * @description: + * This function is a generic facility to change modes or attributes in a + * given raster. This can be used for debugging purposes, or simply to + * allow implementation-specific 'features' in a given raster module. + * + * @input: + * raster :: + * A handle to the new raster object. + * + * mode :: + * A 4-byte tag used to name the mode or property. + * + * args :: + * A pointer to the new mode/property to use. + */ typedef int (*FT_Raster_SetModeFunc)( FT_Raster raster, unsigned long mode, @@ -1127,40 +1200,36 @@ FT_BEGIN_HEADER #define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Raster_RenderFunc */ - /* */ - /* <Description> */ - /* Invoke a given raster to scan-convert a given glyph image into a */ - /* target bitmap. */ - /* */ - /* <Input> */ - /* raster :: A handle to the raster object. */ - /* */ - /* params :: A pointer to an @FT_Raster_Params structure used to */ - /* store the rendering parameters. */ - /* */ - /* <Return> */ - /* Error code. 0~means success. */ - /* */ - /* <Note> */ - /* The exact format of the source image depends on the raster's glyph */ - /* format defined in its @FT_Raster_Funcs structure. It can be an */ - /* @FT_Outline or anything else in order to support a large array of */ - /* glyph formats. */ - /* */ - /* Note also that the render function can fail and return a */ - /* `FT_Err_Unimplemented_Feature' error code if the raster used does */ - /* not support direct composition. */ - /* */ - /* XXX: For now, the standard raster doesn't support direct */ - /* composition but this should change for the final release (see */ - /* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */ - /* for examples of distinct implementations that support direct */ - /* composition). */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Raster_RenderFunc + * + * @description: + * Invoke a given raster to scan-convert a given glyph image into a + * target bitmap. + * + * @input: + * raster :: + * A handle to the raster object. + * + * params :: + * A pointer to an @FT_Raster_Params structure used to store the + * rendering parameters. + * + * @return: + * Error code. 0~means success. + * + * @note: + * The exact format of the source image depends on the raster's glyph + * format defined in its @FT_Raster_Funcs structure. It can be an + * @FT_Outline or anything else in order to support a large array of + * glyph formats. + * + * Note also that the render function can fail and return a + * `FT_Err_Unimplemented_Feature` error code if the raster used does not + * support direct composition. + */ typedef int (*FT_Raster_RenderFunc)( FT_Raster raster, const FT_Raster_Params* params ); @@ -1168,28 +1237,34 @@ FT_BEGIN_HEADER #define FT_Raster_Render_Func FT_Raster_RenderFunc - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Raster_Funcs */ - /* */ - /* <Description> */ - /* A structure used to describe a given raster class to the library. */ - /* */ - /* <Fields> */ - /* glyph_format :: The supported glyph format for this raster. */ - /* */ - /* raster_new :: The raster constructor. */ - /* */ - /* raster_reset :: Used to reset the render pool within the raster. */ - /* */ - /* raster_render :: A function to render a glyph into a given bitmap. */ - /* */ - /* raster_done :: The raster destructor. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Raster_Funcs + * + * @description: + * A structure used to describe a given raster class to the library. + * + * @fields: + * glyph_format :: + * The supported glyph format for this raster. + * + * raster_new :: + * The raster constructor. + * + * raster_reset :: + * Used to reset the render pool within the raster. + * + * raster_render :: + * A function to render a glyph into a given bitmap. + * + * raster_done :: + * The raster destructor. + */ typedef struct FT_Raster_Funcs_ { FT_Glyph_Format glyph_format; + FT_Raster_NewFunc raster_new; FT_Raster_ResetFunc raster_reset; FT_Raster_SetModeFunc raster_set_mode; diff --git a/non-source/foreign/freetype2/freetype/ftincrem.h b/non-source/foreign/freetype2/freetype/ftincrem.h index 46b58b791..816581b78 100644 --- a/non-source/foreign/freetype2/freetype/ftincrem.h +++ b/non-source/foreign/freetype2/freetype/ftincrem.h @@ -1,26 +1,26 @@ -/***************************************************************************/ -/* */ -/* ftincrem.h */ -/* */ -/* FreeType incremental loading (specification). */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftincrem.h + * + * FreeType incremental loading (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTINCREM_H_ #define FTINCREM_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> +#include <freetype/ftparams.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -31,7 +31,7 @@ FT_BEGIN_HEADER - /*************************************************************************** + /************************************************************************** * * @section: * incremental @@ -44,7 +44,7 @@ FT_BEGIN_HEADER * * @description: * This section contains various functions used to perform so-called - * `incremental' glyph loading. This is a mode where all glyphs loaded + * 'incremental' glyph loading. This is a mode where all glyphs loaded * from a given @FT_Face are provided by the client application. * * Apart from that, all other tables are loaded normally from the font @@ -59,23 +59,24 @@ FT_BEGIN_HEADER */ - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental * * @description: * An opaque type describing a user-provided object used to implement - * `incremental' glyph loading within FreeType. This is used to support - * embedded fonts in certain environments (e.g., PostScript interpreters), - * where the glyph data isn't in the font file, or must be overridden by - * different values. + * 'incremental' glyph loading within FreeType. This is used to support + * embedded fonts in certain environments (e.g., PostScript + * interpreters), where the glyph data isn't in the font file, or must be + * overridden by different values. * * @note: - * It is up to client applications to create and implement @FT_Incremental - * objects, as long as they provide implementations for the methods - * @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc - * and @FT_Incremental_GetGlyphMetricsFunc. + * It is up to client applications to create and implement + * @FT_Incremental objects, as long as they provide implementations for + * the methods @FT_Incremental_GetGlyphDataFunc, + * @FT_Incremental_FreeGlyphDataFunc and + * @FT_Incremental_GetGlyphMetricsFunc. * * See the description of @FT_Incremental_InterfaceRec to understand how * to use incremental objects with FreeType. @@ -84,14 +85,14 @@ FT_BEGIN_HEADER typedef struct FT_IncrementalRec_* FT_Incremental; - /*************************************************************************** + /************************************************************************** * * @struct: * FT_Incremental_MetricsRec * * @description: - * A small structure used to contain the basic glyph metrics returned - * by the @FT_Incremental_GetGlyphMetricsFunc method. + * A small structure used to contain the basic glyph metrics returned by + * the @FT_Incremental_GetGlyphMetricsFunc method. * * @fields: * bearing_x :: @@ -108,7 +109,7 @@ FT_BEGIN_HEADER * * @note: * These correspond to horizontal or vertical metrics depending on the - * value of the `vertical' argument to the function + * value of the `vertical` argument to the function * @FT_Incremental_GetGlyphMetricsFunc. * */ @@ -122,7 +123,7 @@ FT_BEGIN_HEADER } FT_Incremental_MetricsRec; - /*************************************************************************** + /************************************************************************** * * @struct: * FT_Incremental_Metrics @@ -134,7 +135,7 @@ FT_BEGIN_HEADER typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics; - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_GetGlyphDataFunc @@ -146,8 +147,8 @@ FT_BEGIN_HEADER * * Note that the format of the glyph's data bytes depends on the font * file format. For TrueType, it must correspond to the raw bytes within - * the `glyf' table. For PostScript formats, it must correspond to the - * *unencrypted* charstring bytes, without any `lenIV' header. It is + * the 'glyf' table. For PostScript formats, it must correspond to the + * **unencrypted** charstring bytes, without any `lenIV` header. It is * undefined for any other format. * * @input: @@ -168,8 +169,8 @@ FT_BEGIN_HEADER * * @note: * If this function returns successfully the method - * @FT_Incremental_FreeGlyphDataFunc will be called later to release - * the data bytes. + * @FT_Incremental_FreeGlyphDataFunc will be called later to release the + * data bytes. * * Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for * compound glyphs. @@ -181,7 +182,7 @@ FT_BEGIN_HEADER FT_Data* adata ); - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_FreeGlyphDataFunc @@ -205,16 +206,21 @@ FT_BEGIN_HEADER FT_Data* data ); - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_GetGlyphMetricsFunc * * @description: * A function used to retrieve the basic metrics of a given glyph index - * before accessing its data. This is necessary because, in certain - * formats like TrueType, the metrics are stored in a different place from - * the glyph images proper. + * before accessing its data. This allows for handling font types such + * as PCL~XL Format~1, Class~2 downloaded TrueType fonts, where the glyph + * metrics (`hmtx` and `vmtx` tables) are permitted to be omitted from + * the font, and the relevant metrics included in the header of the glyph + * outline data. Importantly, this is not intended to allow custom glyph + * metrics (for example, Postscript Metrics dictionaries), because that + * conflicts with the requirements of outline hinting. Such custom + * metrics must be handled separately, by the calling application. * * @input: * incremental :: @@ -228,13 +234,13 @@ FT_BEGIN_HEADER * If true, return vertical metrics. * * ametrics :: - * This parameter is used for both input and output. - * The original glyph metrics, if any, in font units. If metrics are - * not available all the values must be set to zero. + * This parameter is used for both input and output. The original + * glyph metrics, if any, in font units. If metrics are not available + * all the values must be set to zero. * * @output: * ametrics :: - * The replacement glyph metrics in font units. + * The glyph metrics in font units. * */ typedef FT_Error @@ -251,8 +257,8 @@ FT_BEGIN_HEADER * FT_Incremental_FuncsRec * * @description: - * A table of functions for accessing fonts that load data - * incrementally. Used in @FT_Incremental_InterfaceRec. + * A table of functions for accessing fonts that load data incrementally. + * Used in @FT_Incremental_InterfaceRec. * * @fields: * get_glyph_data :: @@ -262,8 +268,8 @@ FT_BEGIN_HEADER * The function to release glyph data. Must not be null. * * get_glyph_metrics :: - * The function to get glyph metrics. May be null if the font does - * not provide overriding glyph metrics. + * The function to get glyph metrics. May be null if the font does not + * require it. * */ typedef struct FT_Incremental_FuncsRec_ @@ -275,7 +281,7 @@ FT_BEGIN_HEADER } FT_Incremental_FuncsRec; - /*************************************************************************** + /************************************************************************** * * @struct: * FT_Incremental_InterfaceRec @@ -285,30 +291,30 @@ FT_BEGIN_HEADER * wants to support incremental glyph loading. You should use it with * @FT_PARAM_TAG_INCREMENTAL as in the following example: * - * { - * FT_Incremental_InterfaceRec inc_int; - * FT_Parameter parameter; - * FT_Open_Args open_args; + * ``` + * FT_Incremental_InterfaceRec inc_int; + * FT_Parameter parameter; + * FT_Open_Args open_args; * * - * // set up incremental descriptor - * inc_int.funcs = my_funcs; - * inc_int.object = my_object; + * // set up incremental descriptor + * inc_int.funcs = my_funcs; + * inc_int.object = my_object; * - * // set up optional parameter - * parameter.tag = FT_PARAM_TAG_INCREMENTAL; - * parameter.data = &inc_int; + * // set up optional parameter + * parameter.tag = FT_PARAM_TAG_INCREMENTAL; + * parameter.data = &inc_int; * - * // set up FT_Open_Args structure - * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; - * open_args.pathname = my_font_pathname; - * open_args.num_params = 1; - * open_args.params = ¶meter; // we use one optional argument + * // set up FT_Open_Args structure + * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; + * open_args.pathname = my_font_pathname; + * open_args.num_params = 1; + * open_args.params = ¶meter; // we use one optional argument * - * // open the font - * error = FT_Open_Face( library, &open_args, index, &face ); - * ... - * } + * // open the font + * error = FT_Open_Face( library, &open_args, index, &face ); + * ... + * ``` * */ typedef struct FT_Incremental_InterfaceRec_ @@ -319,7 +325,7 @@ FT_BEGIN_HEADER } FT_Incremental_InterfaceRec; - /*************************************************************************** + /************************************************************************** * * @type: * FT_Incremental_Interface @@ -331,18 +337,6 @@ FT_BEGIN_HEADER typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface; - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_INCREMENTAL - * - * @description: - * A constant used as the tag of @FT_Parameter structures to indicate - * an incremental loading object to be used by FreeType. - * - */ -#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' ) - /* */ diff --git a/non-source/foreign/freetype2/freetype/ftlcdfil.h b/non-source/foreign/freetype2/freetype/ftlcdfil.h index e06a8957f..25274dc4a 100644 --- a/non-source/foreign/freetype2/freetype/ftlcdfil.h +++ b/non-source/foreign/freetype2/freetype/ftlcdfil.h @@ -1,27 +1,27 @@ -/***************************************************************************/ -/* */ -/* ftlcdfil.h */ -/* */ -/* FreeType API for color filtering of subpixel bitmap glyphs */ -/* (specification). */ -/* */ -/* Copyright 2006-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftlcdfil.h + * + * FreeType API for color filtering of subpixel bitmap glyphs + * (specification). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTLCDFIL_H_ #define FTLCDFIL_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> +#include <freetype/ftparams.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -32,104 +32,97 @@ FT_BEGIN_HEADER - /*************************************************************************** + /************************************************************************** * * @section: - * lcd_filtering + * lcd_rendering * * @title: - * LCD Filtering + * Subpixel Rendering * * @abstract: - * Reduce color fringes of subpixel-rendered bitmaps. + * API to control subpixel rendering. * * @description: - * Subpixel rendering exploits the color-striped structure of LCD - * pixels, increasing the available resolution in the direction of the - * stripe (usually horizontal RGB) by a factor of~3. Since these - * subpixels are color pixels, using them unfiltered creates severe - * color fringes. Use the @FT_Library_SetLcdFilter API to specify a - * low-pass filter, which is then applied to subpixel-rendered bitmaps - * generated through @FT_Render_Glyph. The filter sacrifices some of - * the higher resolution to reduce color fringes, making the glyph image - * slightly blurrier. Positional improvements will remain. - * - * Note that no filter is active by default, and that this function is - * *not* implemented in default builds of the library. You need to - * #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file - * in order to activate it and explicitly call @FT_Library_SetLcdFilter - * to enable it. - * - * A filter should have two properties: - * - * 1) It should be normalized, meaning the sum of the 5~components - * should be 256 (0x100). It is possible to go above or under this - * target sum, however: going under means tossing out contrast, going - * over means invoking clamping and thereby non-linearities that - * increase contrast somewhat at the expense of greater distortion - * and color-fringing. Contrast is better enhanced through stem - * darkening. - * - * 2) It should be color-balanced, meaning a filter `{~a, b, c, b, a~}' - * where a~+ b~=~c. It distributes the computed coverage for one - * subpixel to all subpixels equally, sacrificing some won resolution - * but drastically reducing color-fringing. Positioning improvements - * remain! Note that color-fringing can only really be minimized - * when using a color-balanced filter and alpha-blending the glyph - * onto a surface in linear space; see @FT_Render_Glyph. - * - * Regarding the form, a filter can be a `boxy' filter or a `beveled' - * filter. Boxy filters are sharper but are less forgiving of non-ideal - * gamma curves of a screen (viewing angles!), beveled filters are - * fuzzier but more tolerant. - * - * Examples: - * - * - [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor - * normalized. - * - * - [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not - * normalized. - * - * - [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not - * balanced. - * - * - [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not - * balanced. - * - * - [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost - * balanced. - * - * - [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost - * balanced. - * - * The filter affects glyph bitmaps rendered through @FT_Render_Glyph, - * @FT_Load_Glyph, and @FT_Load_Char. It does _not_ affect the output - * of @FT_Outline_Render and @FT_Outline_Get_Bitmap. - * - * If this feature is activated, the dimensions of LCD glyph bitmaps are - * either wider or taller than the dimensions of the corresponding - * outline with regard to the pixel grid. For example, for - * @FT_RENDER_MODE_LCD, the filter adds 3~subpixels to the left, and - * 3~subpixels to the right. The bitmap offset values are adjusted - * accordingly, so clients shouldn't need to modify their layout and - * glyph positioning code when enabling the filter. - * - * It is important to understand that linear alpha blending and gamma - * correction is critical for correctly rendering glyphs onto surfaces - * without artifacts and even more critical when subpixel rendering is - * involved. - * - * Each of the 3~alpha values (subpixels) is independently used to blend - * one color channel. That is, red alpha blends the red channel of the - * text color with the red channel of the background pixel. The - * distribution of density values by the color-balanced filter assumes - * alpha blending is done in linear space; only then color artifacts - * cancel out. + * FreeType provides two alternative subpixel rendering technologies. + * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your + * `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 + * and does nothing otherwise. + * + * ClearType-style LCD rendering exploits the color-striped structure of + * LCD pixels, increasing the available resolution in the direction of + * the stripe (usually horizontal RGB) by a factor of~3. Using the + * subpixel coverages unfiltered can create severe color fringes + * especially when rendering thin features. Indeed, to produce + * black-on-white text, the nearby color subpixels must be dimmed + * evenly. Therefore, an equalizing 5-tap FIR filter should be applied + * to subpixel coverages regardless of pixel boundaries and should have + * these properties: + * + * 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid + * any shifts in appearance. + * + * 2. It should be color-balanced, meaning a~+ b~=~c, to reduce color + * fringes by distributing the computed coverage for one subpixel to + * all subpixels equally. + * + * 3. It should be normalized, meaning 2a~+ 2b~+ c~=~1.0 to maintain + * overall brightness. + * + * Boxy 3-tap filter {0, 1/3, 1/3, 1/3, 0} is sharper but is less + * forgiving of non-ideal gamma curves of a screen (and viewing angles), + * beveled filters are fuzzier but more tolerant. + * + * Use the @FT_Library_SetLcdFilter or @FT_Library_SetLcdFilterWeights + * API to specify a low-pass filter, which is then applied to + * subpixel-rendered bitmaps generated through @FT_Render_Glyph. + * + * Harmony LCD rendering is suitable to panels with any regular subpixel + * structure, not just monitors with 3 color striped subpixels, as long + * as the color subpixels have fixed positions relative to the pixel + * center. In this case, each color channel can be rendered separately + * after shifting the outline opposite to the subpixel shift so that the + * coverage maps are aligned. This method is immune to color fringes + * because the shifts do not change integral coverage. + * + * The subpixel geometry must be specified by xy-coordinates for each + * subpixel. By convention they may come in the RGB order: {{-1/3, 0}, + * {0, 0}, {1/3, 0}} for standard RGB striped panel or {{-1/6, 1/4}, + * {-1/6, -1/4}, {1/3, 0}} for a certain PenTile panel. + * + * Use the @FT_Library_SetLcdGeometry API to specify subpixel positions. + * If one follows the RGB order convention, the same order applies to the + * resulting @FT_PIXEL_MODE_LCD and @FT_PIXEL_MODE_LCD_V bitmaps. Note, + * however, that the coordinate frame for the latter must be rotated + * clockwise. Harmony with default LCD geometry is equivalent to + * ClearType with light filter. + * + * As a result of ClearType filtering or Harmony shifts, the resulting + * dimensions of LCD bitmaps can be slightly wider or taller than the + * dimensions the original outline with regard to the pixel grid. + * For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to + * the left, and 2~subpixels to the right. The bitmap offset values are + * adjusted accordingly, so clients shouldn't need to modify their layout + * and glyph positioning code when enabling the filter. + * + * The ClearType and Harmony rendering is applicable to glyph bitmaps + * rendered through @FT_Render_Glyph, @FT_Load_Glyph, @FT_Load_Char, and + * @FT_Glyph_To_Bitmap, when @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V + * is specified. This API does not control @FT_Outline_Render and + * @FT_Outline_Get_Bitmap. + * + * The described algorithms can completely remove color artefacts when + * combined with gamma-corrected alpha blending in linear space. Each of + * the 3~alpha values (subpixels) must by independently used to blend one + * color channel. That is, red alpha blends the red channel of the text + * color with the red channel of the background pixel. */ - /**************************************************************************** + /************************************************************************** * * @enum: * FT_LcdFilter @@ -143,47 +136,25 @@ FT_BEGIN_HEADER * results in sometimes severe color fringes. * * FT_LCD_FILTER_DEFAULT :: - * The default filter reduces color fringes considerably, at the cost - * of a slight blurriness in the output. - * - * It is a beveled, normalized, and color-balanced five-tap filter - * that is more forgiving to screens with non-ideal gamma curves and - * viewing angles. Note that while color-fringing is reduced, it can - * only be minimized by using linear alpha blending and gamma - * correction to render glyphs onto surfaces. The default filter - * weights are [0x08 0x4D 0x56 0x4D 0x08]. + * This is a beveled, normalized, and color-balanced five-tap filter + * with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256 units. * * FT_LCD_FILTER_LIGHT :: - * The light filter is a variant that is sharper at the cost of - * slightly more color fringes than the default one. - * - * It is a boxy, normalized, and color-balanced three-tap filter that - * is less forgiving to screens with non-ideal gamma curves and - * viewing angles. This filter works best when the rendering system - * uses linear alpha blending and gamma correction to render glyphs - * onto surfaces. The light filter weights are - * [0x00 0x55 0x56 0x55 0x00]. + * this is a boxy, normalized, and color-balanced three-tap filter with + * weights of [0x00 0x55 0x56 0x55 0x00] in 1/256 units. * * FT_LCD_FILTER_LEGACY :: + * FT_LCD_FILTER_LEGACY1 :: * This filter corresponds to the original libXft color filter. It * provides high contrast output but can exhibit really bad color * fringes if glyphs are not extremely well hinted to the pixel grid. - * In other words, it only works well if the TrueType bytecode - * interpreter is enabled *and* high-quality hinted fonts are used. - * * This filter is only provided for comparison purposes, and might be - * disabled or stay unsupported in the future. - * - * FT_LCD_FILTER_LEGACY1 :: - * For historical reasons, the FontConfig library returns a different - * enumeration value for legacy LCD filtering. To make code work that - * (incorrectly) forwards FontConfig's enumeration value to - * @FT_Library_SetLcdFilter without proper mapping, it is thus easiest - * to have another enumeration value, which is completely equal to - * `FT_LCD_FILTER_LEGACY'. + * disabled or stay unsupported in the future. The second value is + * provided for compatibility with FontConfig, which historically used + * different enumeration, sometimes incorrectly forwarded to FreeType. * * @since: - * 2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2) + * 2.3.0 (`FT_LCD_FILTER_LEGACY1` since 2.6.2) */ typedef enum FT_LcdFilter_ { @@ -200,11 +171,11 @@ FT_BEGIN_HEADER /************************************************************************** * - * @func: + * @function: * 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. * @@ -216,22 +187,21 @@ FT_BEGIN_HEADER * The filter type. * * You can use @FT_LCD_FILTER_NONE here to disable this feature, or - * @FT_LCD_FILTER_DEFAULT to use a default filter that should work - * well on most LCD screens. + * @FT_LCD_FILTER_DEFAULT to use a default filter that should work well + * on most LCD screens. * * @return: * FreeType error code. 0~means success. * * @note: - * This feature is always disabled by default. Clients must make an - * explicit call to this function with a `filter' value other than - * @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 @@ -243,7 +213,7 @@ FT_BEGIN_HEADER /************************************************************************** * - * @func: + * @function: * FT_Library_SetLcdFilterWeights * * @description: @@ -256,17 +226,18 @@ FT_BEGIN_HEADER * * weights :: * A pointer to an array; the function copies the first five bytes and - * uses them to specify the filter weights. + * uses them to specify the filter weights in 1/256 units. * * @return: * FreeType error code. 0~means success. * * @note: - * Due to *PATENTS* covering subpixel rendering, this function doesn't - * do anything except returning `FT_Err_Unimplemented_Feature' if the - * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not - * defined in your build of the library, which should correspond to all - * default builds of FreeType. + * 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. * * @since: * 2.4.0 @@ -275,6 +246,72 @@ FT_BEGIN_HEADER FT_Library_SetLcdFilterWeights( FT_Library library, unsigned char *weights ); + + /************************************************************************** + * + * @type: + * FT_LcdFiveTapFilter + * + * @description: + * A typedef for passing the five LCD filter weights to + * @FT_Face_Properties within an @FT_Parameter structure. + * + * @since: + * 2.8 + * + */ +#define FT_LCD_FILTER_FIVE_TAPS 5 + + typedef FT_Byte FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS]; + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdGeometry + * + * @description: + * This function can be used to modify default positions of color + * subpixels, which controls Harmony LCD rendering. + * + * @input: + * library :: + * A handle to the target library instance. + * + * sub :: + * A pointer to an array of 3 vectors in 26.6 fractional pixel format; + * the function modifies the default values, see the note below. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Subpixel geometry examples: + * + * - {{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color + * stripes shifted by a third of a pixel. This could be an RGB panel. + * + * - {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can + * specify a BGR panel instead, while keeping the bitmap in the same + * RGB888 format. + * + * - {{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap + * stays RGB888 as a result. + * + * - {{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement. + * + * This function does nothing and returns `FT_Err_Unimplemented_Feature` + * in the context of ClearType-style subpixel rendering when + * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is defined in your build of the + * library. + * + * @since: + * 2.10.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdGeometry( FT_Library library, + FT_Vector sub[3] ); + /* */ diff --git a/non-source/foreign/freetype2/freetype/ftlist.h b/non-source/foreign/freetype2/freetype/ftlist.h index 82f437ac6..972fbfa2f 100644 --- a/non-source/foreign/freetype2/freetype/ftlist.h +++ b/non-source/foreign/freetype2/freetype/ftlist.h @@ -1,35 +1,34 @@ -/***************************************************************************/ -/* */ -/* ftlist.h */ -/* */ -/* Generic list support for FreeType (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file implements functions relative to list processing. Its */ - /* data structures are defined in `freetype.h'. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftlist.h + * + * Generic list support for FreeType (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file implements functions relative to list processing. Its data + * structures are defined in `freetype.h`. + * + */ #ifndef FTLIST_H_ #define FTLIST_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -41,224 +40,245 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* list_processing */ - /* */ - /* <Title> */ - /* List Processing */ - /* */ - /* <Abstract> */ - /* Simple management of lists. */ - /* */ - /* <Description> */ - /* This section contains various definitions related to list */ - /* processing using doubly-linked nodes. */ - /* */ - /* <Order> */ - /* FT_List */ - /* FT_ListNode */ - /* FT_ListRec */ - /* FT_ListNodeRec */ - /* */ - /* FT_List_Add */ - /* FT_List_Insert */ - /* FT_List_Find */ - /* FT_List_Remove */ - /* FT_List_Up */ - /* FT_List_Iterate */ - /* FT_List_Iterator */ - /* FT_List_Finalize */ - /* FT_List_Destructor */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Find */ - /* */ - /* <Description> */ - /* Find the list node for a given listed object. */ - /* */ - /* <Input> */ - /* list :: A pointer to the parent list. */ - /* data :: The address of the listed object. */ - /* */ - /* <Return> */ - /* List node. NULL if it wasn't found. */ - /* */ + /************************************************************************** + * + * @section: + * list_processing + * + * @title: + * List Processing + * + * @abstract: + * Simple management of lists. + * + * @description: + * This section contains various definitions related to list processing + * using doubly-linked nodes. + * + * @order: + * FT_List + * FT_ListNode + * FT_ListRec + * FT_ListNodeRec + * + * FT_List_Add + * FT_List_Insert + * FT_List_Find + * FT_List_Remove + * FT_List_Up + * FT_List_Iterate + * FT_List_Iterator + * FT_List_Finalize + * FT_List_Destructor + * + */ + + + /************************************************************************** + * + * @function: + * FT_List_Find + * + * @description: + * Find the list node for a given listed object. + * + * @input: + * list :: + * A pointer to the parent list. + * data :: + * The address of the listed object. + * + * @return: + * List node. `NULL` if it wasn't found. + */ FT_EXPORT( FT_ListNode ) FT_List_Find( FT_List list, void* data ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Add */ - /* */ - /* <Description> */ - /* Append an element to the end of a list. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* node :: The node to append. */ - /* */ + /************************************************************************** + * + * @function: + * FT_List_Add + * + * @description: + * Append an element to the end of a list. + * + * @inout: + * list :: + * A pointer to the parent list. + * node :: + * The node to append. + */ FT_EXPORT( void ) FT_List_Add( FT_List list, FT_ListNode node ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Insert */ - /* */ - /* <Description> */ - /* Insert an element at the head of a list. */ - /* */ - /* <InOut> */ - /* list :: A pointer to parent list. */ - /* node :: The node to insert. */ - /* */ + /************************************************************************** + * + * @function: + * FT_List_Insert + * + * @description: + * Insert an element at the head of a list. + * + * @inout: + * list :: + * A pointer to parent list. + * node :: + * The node to insert. + */ FT_EXPORT( void ) FT_List_Insert( FT_List list, FT_ListNode node ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Remove */ - /* */ - /* <Description> */ - /* Remove a node from a list. This function doesn't check whether */ - /* the node is in the list! */ - /* */ - /* <Input> */ - /* node :: The node to remove. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* */ + /************************************************************************** + * + * @function: + * FT_List_Remove + * + * @description: + * Remove a node from a list. This function doesn't check whether the + * node is in the list! + * + * @input: + * node :: + * The node to remove. + * + * @inout: + * list :: + * A pointer to the parent list. + */ FT_EXPORT( void ) FT_List_Remove( FT_List list, FT_ListNode node ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Up */ - /* */ - /* <Description> */ - /* Move a node to the head/top of a list. Used to maintain LRU */ - /* lists. */ - /* */ - /* <InOut> */ - /* list :: A pointer to the parent list. */ - /* node :: The node to move. */ - /* */ + /************************************************************************** + * + * @function: + * FT_List_Up + * + * @description: + * Move a node to the head/top of a list. Used to maintain LRU lists. + * + * @inout: + * list :: + * A pointer to the parent list. + * node :: + * The node to move. + */ FT_EXPORT( void ) FT_List_Up( FT_List list, FT_ListNode node ); - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_List_Iterator */ - /* */ - /* <Description> */ - /* An FT_List iterator function that is called during a list parse */ - /* by @FT_List_Iterate. */ - /* */ - /* <Input> */ - /* node :: The current iteration list node. */ - /* */ - /* user :: A typeless pointer passed to @FT_List_Iterate. */ - /* Can be used to point to the iteration's state. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_List_Iterator + * + * @description: + * An FT_List iterator function that is called during a list parse by + * @FT_List_Iterate. + * + * @input: + * node :: + * The current iteration list node. + * + * user :: + * A typeless pointer passed to @FT_List_Iterate. Can be used to point + * to the iteration's state. + */ typedef FT_Error (*FT_List_Iterator)( FT_ListNode node, void* user ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Iterate */ - /* */ - /* <Description> */ - /* Parse a list and calls a given iterator function on each element. */ - /* Note that parsing is stopped as soon as one of the iterator calls */ - /* returns a non-zero value. */ - /* */ - /* <Input> */ - /* list :: A handle to the list. */ - /* iterator :: An iterator function, called on each node of the list. */ - /* user :: A user-supplied field that is passed as the second */ - /* argument to the iterator. */ - /* */ - /* <Return> */ - /* The result (a FreeType error code) of the last iterator call. */ - /* */ + /************************************************************************** + * + * @function: + * FT_List_Iterate + * + * @description: + * Parse a list and calls a given iterator function on each element. + * Note that parsing is stopped as soon as one of the iterator calls + * returns a non-zero value. + * + * @input: + * list :: + * A handle to the list. + * iterator :: + * An iterator function, called on each node of the list. + * user :: + * A user-supplied field that is passed as the second argument to the + * iterator. + * + * @return: + * The result (a FreeType error code) of the last iterator call. + */ FT_EXPORT( FT_Error ) FT_List_Iterate( FT_List list, FT_List_Iterator iterator, void* user ); - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_List_Destructor */ - /* */ - /* <Description> */ - /* An @FT_List iterator function that is called during a list */ - /* finalization by @FT_List_Finalize to destroy all elements in a */ - /* given list. */ - /* */ - /* <Input> */ - /* system :: The current system object. */ - /* */ - /* data :: The current object to destroy. */ - /* */ - /* user :: A typeless pointer passed to @FT_List_Iterate. It can */ - /* be used to point to the iteration's state. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_List_Destructor + * + * @description: + * An @FT_List iterator function that is called during a list + * finalization by @FT_List_Finalize to destroy all elements in a given + * list. + * + * @input: + * system :: + * The current system object. + * + * data :: + * The current object to destroy. + * + * user :: + * A typeless pointer passed to @FT_List_Iterate. It can be used to + * point to the iteration's state. + */ typedef void (*FT_List_Destructor)( FT_Memory memory, void* data, void* user ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_List_Finalize */ - /* */ - /* <Description> */ - /* Destroy all elements in the list as well as the list itself. */ - /* */ - /* <Input> */ - /* list :: A handle to the list. */ - /* */ - /* destroy :: A list destructor that will be applied to each element */ - /* of the list. Set this to NULL if not needed. */ - /* */ - /* memory :: The current memory object that handles deallocation. */ - /* */ - /* user :: A user-supplied field that is passed as the last */ - /* argument to the destructor. */ - /* */ - /* <Note> */ - /* This function expects that all nodes added by @FT_List_Add or */ - /* @FT_List_Insert have been dynamically allocated. */ - /* */ + /************************************************************************** + * + * @function: + * FT_List_Finalize + * + * @description: + * Destroy all elements in the list as well as the list itself. + * + * @input: + * list :: + * A handle to the list. + * + * destroy :: + * A list destructor that will be applied to each element of the list. + * Set this to `NULL` if not needed. + * + * memory :: + * The current memory object that handles deallocation. + * + * user :: + * A user-supplied field that is passed as the last argument to the + * destructor. + * + * @note: + * This function expects that all nodes added by @FT_List_Add or + * @FT_List_Insert have been dynamically allocated. + */ FT_EXPORT( void ) FT_List_Finalize( FT_List list, FT_List_Destructor destroy, diff --git a/non-source/foreign/freetype2/freetype/ftlogging.h b/non-source/foreign/freetype2/freetype/ftlogging.h new file mode 100644 index 000000000..1813cfc2c --- /dev/null +++ b/non-source/foreign/freetype2/freetype/ftlogging.h @@ -0,0 +1,184 @@ +/**************************************************************************** + * + * ftlogging.h + * + * Additional debugging APIs. + * + * Copyright (C) 2020-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTLOGGING_H_ +#define FTLOGGING_H_ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * debugging_apis + * + * @title: + * External Debugging APIs + * + * @abstract: + * Public APIs to control the `FT_DEBUG_LOGGING` macro. + * + * @description: + * This section contains the declarations of public functions that + * enables fine control of what the `FT_DEBUG_LOGGING` macro outputs. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Trace_Set_Level + * + * @description: + * Change the levels of tracing components of FreeType at run time. + * + * @input: + * tracing_level :: + * New tracing value. + * + * @example: + * The following call makes FreeType trace everything but the 'memory' + * component. + * + * ``` + * FT_Trace_Set_Level( "any:7 memory:0" ); + * ``` + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Trace_Set_Level( const char* tracing_level ); + + + /************************************************************************** + * + * @function: + * FT_Trace_Set_Default_Level + * + * @description: + * Reset tracing value of FreeType's components to the default value + * (i.e., to the value of the `FT2_DEBUG` environment value or to NULL + * if `FT2_DEBUG` is not set). + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Trace_Set_Default_Level( void ); + + + /************************************************************************** + * + * @functype: + * FT_Custom_Log_Handler + * + * @description: + * A function typedef that is used to handle the logging of tracing and + * debug messages on a file system. + * + * @input: + * ft_component :: + * The name of `FT_COMPONENT` from which the current debug or error + * message is produced. + * + * fmt :: + * Actual debug or tracing message. + * + * args:: + * Arguments of debug or tracing messages. + * + * @since: + * 2.11 + * + */ + typedef void + (*FT_Custom_Log_Handler)( const char* ft_component, + const char* fmt, + va_list args ); + + + /************************************************************************** + * + * @function: + * FT_Set_Log_Handler + * + * @description: + * A function to set a custom log handler. + * + * @input: + * handler :: + * New logging function. + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Set_Log_Handler( FT_Custom_Log_Handler handler ); + + + /************************************************************************** + * + * @function: + * FT_Set_Default_Log_Handler + * + * @description: + * A function to undo the effect of @FT_Set_Log_Handler, resetting the + * log handler to FreeType's built-in version. + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Set_Default_Log_Handler( void ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLOGGING_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/ftlzw.h b/non-source/foreign/freetype2/freetype/ftlzw.h index 582e2c146..bcf59ba70 100644 --- a/non-source/foreign/freetype2/freetype/ftlzw.h +++ b/non-source/foreign/freetype2/freetype/ftlzw.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftlzw.h */ -/* */ -/* LZW-compressed stream support. */ -/* */ -/* Copyright 2004-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftlzw.h + * + * LZW-compressed stream support. + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTLZW_H_ #define FTLZW_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -31,59 +30,61 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* lzw */ - /* */ - /* <Title> */ - /* LZW Streams */ - /* */ - /* <Abstract> */ - /* Using LZW-compressed font files. */ - /* */ - /* <Description> */ - /* This section contains the declaration of LZW-specific functions. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * lzw + * + * @title: + * LZW Streams + * + * @abstract: + * Using LZW-compressed font files. + * + * @description: + * 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. + * + */ - /************************************************************************ - * - * @function: - * FT_Stream_OpenLZW - * - * @description: - * Open a new stream to parse LZW-compressed font files. This is - * mainly used to support the compressed `*.pcf.Z' fonts that come - * with XFree86. - * - * @input: - * stream :: The target embedding stream. - * - * source :: The source stream. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * The source stream must be opened _before_ calling this function. - * - * Calling the internal function `FT_Stream_Close' on the new stream will - * *not* call `FT_Stream_Close' on the source stream. None of the stream - * objects will be released to the heap. - * - * The stream implementation is very basic and resets the decompression - * process each time seeking backwards is needed within the stream - * - * In certain builds of the library, LZW compression recognition is - * automatically handled when calling @FT_New_Face or @FT_Open_Face. - * This means that if no font driver is capable of handling the raw - * compressed file, the library will try to open a LZW stream from it - * and re-open the face with it. - * - * This function may return `FT_Err_Unimplemented_Feature' if your build - * of FreeType was not compiled with LZW support. - */ + /************************************************************************** + * + * @function: + * FT_Stream_OpenLZW + * + * @description: + * Open a new stream to parse LZW-compressed font files. This is mainly + * used to support the compressed `*.pcf.Z` fonts that come with XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with LZW support. + */ FT_EXPORT( FT_Error ) FT_Stream_OpenLZW( FT_Stream stream, FT_Stream source ); diff --git a/non-source/foreign/freetype2/freetype/ftmac.h b/non-source/foreign/freetype2/freetype/ftmac.h index adb15cadf..e4efde33d 100644 --- a/non-source/foreign/freetype2/freetype/ftmac.h +++ b/non-source/foreign/freetype2/freetype/ftmac.h @@ -1,101 +1,104 @@ -/***************************************************************************/ -/* */ -/* ftmac.h */ -/* */ -/* Additional Mac-specific API. */ -/* */ -/* Copyright 1996-2016 by */ -/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftmac.h + * + * Additional Mac-specific API. + * + * Copyright (C) 1996-2024 by + * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ -/***************************************************************************/ -/* */ -/* NOTE: Include this file after FT_FREETYPE_H and after any */ -/* Mac-specific headers (because this header uses Mac types such as */ -/* Handle, FSSpec, FSRef, etc.) */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * NOTE: Include this file after `FT_FREETYPE_H` and after any + * Mac-specific headers (because this header uses Mac types such as + * 'Handle', 'FSSpec', 'FSRef', etc.) + * + */ #ifndef FTMAC_H_ #define FTMAC_H_ -#include <ft2build.h> FT_BEGIN_HEADER -/* gcc-3.4.1 and later can warn about functions tagged as deprecated */ + /* gcc-3.1 and later can warn about functions tagged as deprecated */ #ifndef FT_DEPRECATED_ATTRIBUTE -#if defined(__GNUC__) && \ - ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) -#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) +#if defined( __GNUC__ ) && \ + ( ( __GNUC__ >= 4 ) || \ + ( ( __GNUC__ == 3 ) && ( __GNUC_MINOR__ >= 1 ) ) ) +#define FT_DEPRECATED_ATTRIBUTE __attribute__(( deprecated )) #else #define FT_DEPRECATED_ATTRIBUTE #endif #endif - /*************************************************************************/ - /* */ - /* <Section> */ - /* mac_specific */ - /* */ - /* <Title> */ - /* Mac Specific Interface */ - /* */ - /* <Abstract> */ - /* Only available on the Macintosh. */ - /* */ - /* <Description> */ - /* The following definitions are only available if FreeType is */ - /* compiled on a Macintosh. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * mac_specific + * + * @title: + * Mac Specific Interface + * + * @abstract: + * Only available on the Macintosh. + * + * @description: + * The following definitions are only available if FreeType is compiled + * on a Macintosh. + * + */ - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FOND */ - /* */ - /* <Description> */ - /* Create a new face object from a FOND resource. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* fond :: A FOND resource. */ - /* */ - /* face_index :: Only supported for the -1 `sanity check' special */ - /* case. */ - /* */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Notes> */ - /* This function can be used to create @FT_Face objects from fonts */ - /* that are installed in the system as follows. */ - /* */ - /* { */ - /* fond = GetResource( 'FOND', fontName ); */ - /* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */ - /* } */ - /* */ + /************************************************************************** + * + * @function: + * FT_New_Face_From_FOND + * + * @description: + * Create a new face object from a FOND resource. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * fond :: + * A FOND resource. + * + * face_index :: + * Only supported for the -1 'sanity check' special case. + * + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @example: + * This function can be used to create @FT_Face objects from fonts that + * are installed in the system as follows. + * + * ``` + * fond = GetResource( 'FOND', fontName ); + * error = FT_New_Face_From_FOND( library, fond, 0, &face ); + * ``` + */ FT_EXPORT( FT_Error ) FT_New_Face_From_FOND( FT_Library library, Handle fond, @@ -104,28 +107,28 @@ FT_BEGIN_HEADER FT_DEPRECATED_ATTRIBUTE; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFile_From_Mac_Name */ - /* */ - /* <Description> */ - /* Return an FSSpec for the disk file containing the named font. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font (e.g., Times New Roman */ - /* Bold). */ - /* */ - /* <Output> */ - /* pathSpec :: FSSpec to the file. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* face_index :: Index of the face. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_GetFile_From_Mac_Name + * + * @description: + * Return an FSSpec for the disk file containing the named font. + * + * @input: + * fontName :: + * Mac OS name of the font (e.g., Times New Roman Bold). + * + * @output: + * pathSpec :: + * FSSpec to the file. For passing to @FT_New_Face_From_FSSpec. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face_From_FSSpec. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_GetFile_From_Mac_Name( const char* fontName, FSSpec* pathSpec, @@ -133,27 +136,28 @@ FT_BEGIN_HEADER FT_DEPRECATED_ATTRIBUTE; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFile_From_Mac_ATS_Name */ - /* */ - /* <Description> */ - /* Return an FSSpec for the disk file containing the named font. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font in ATS framework. */ - /* */ - /* <Output> */ - /* pathSpec :: FSSpec to the file. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* face_index :: Index of the face. For passing to */ - /* @FT_New_Face_From_FSSpec. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_GetFile_From_Mac_ATS_Name + * + * @description: + * Return an FSSpec for the disk file containing the named font. + * + * @input: + * fontName :: + * Mac OS name of the font in ATS framework. + * + * @output: + * pathSpec :: + * FSSpec to the file. For passing to @FT_New_Face_From_FSSpec. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face_From_FSSpec. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_GetFile_From_Mac_ATS_Name( const char* fontName, FSSpec* pathSpec, @@ -161,30 +165,33 @@ FT_BEGIN_HEADER FT_DEPRECATED_ATTRIBUTE; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_GetFilePath_From_Mac_ATS_Name */ - /* */ - /* <Description> */ - /* Return a pathname of the disk file and face index for given font */ - /* name that is handled by ATS framework. */ - /* */ - /* <Input> */ - /* fontName :: Mac OS name of the font in ATS framework. */ - /* */ - /* <Output> */ - /* path :: Buffer to store pathname of the file. For passing */ - /* to @FT_New_Face. The client must allocate this */ - /* buffer before calling this function. */ - /* */ - /* maxPathSize :: Lengths of the buffer `path' that client allocated. */ - /* */ - /* face_index :: Index of the face. For passing to @FT_New_Face. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_GetFilePath_From_Mac_ATS_Name + * + * @description: + * Return a pathname of the disk file and face index for given font name + * that is handled by ATS framework. + * + * @input: + * fontName :: + * Mac OS name of the font in ATS framework. + * + * @output: + * path :: + * Buffer to store pathname of the file. For passing to @FT_New_Face. + * The client must allocate this buffer before calling this function. + * + * maxPathSize :: + * Lengths of the buffer `path` that client allocated. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_GetFilePath_From_Mac_ATS_Name( const char* fontName, UInt8* path, @@ -193,33 +200,37 @@ FT_BEGIN_HEADER FT_DEPRECATED_ATTRIBUTE; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FSSpec */ - /* */ - /* <Description> */ - /* Create a new face object from a given resource and typeface index */ - /* using an FSSpec to the font file. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* spec :: FSSpec to the font file. */ - /* */ - /* face_index :: The index of the face within the resource. The */ - /* first face has index~0. */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* @FT_New_Face_From_FSSpec is identical to @FT_New_Face except */ - /* it accepts an FSSpec instead of a path. */ - /* */ + /************************************************************************** + * + * @function: + * FT_New_Face_From_FSSpec + * + * @description: + * Create a new face object from a given resource and typeface index + * using an FSSpec to the font file. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * spec :: + * FSSpec to the font file. + * + * face_index :: + * The index of the face within the resource. The first face has + * index~0. + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * @FT_New_Face_From_FSSpec is identical to @FT_New_Face except it + * accepts an FSSpec instead of a path. + */ FT_EXPORT( FT_Error ) FT_New_Face_From_FSSpec( FT_Library library, const FSSpec *spec, @@ -228,33 +239,37 @@ FT_BEGIN_HEADER FT_DEPRECATED_ATTRIBUTE; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Face_From_FSRef */ - /* */ - /* <Description> */ - /* Create a new face object from a given resource and typeface index */ - /* using an FSRef to the font file. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library resource. */ - /* */ - /* <Input> */ - /* spec :: FSRef to the font file. */ - /* */ - /* face_index :: The index of the face within the resource. The */ - /* first face has index~0. */ - /* <Output> */ - /* aface :: A handle to a new face object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* @FT_New_Face_From_FSRef is identical to @FT_New_Face except */ - /* it accepts an FSRef instead of a path. */ - /* */ + /************************************************************************** + * + * @function: + * FT_New_Face_From_FSRef + * + * @description: + * Create a new face object from a given resource and typeface index + * using an FSRef to the font file. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * spec :: + * FSRef to the font file. + * + * face_index :: + * The index of the face within the resource. The first face has + * index~0. + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * @FT_New_Face_From_FSRef is identical to @FT_New_Face except it accepts + * an FSRef instead of a path. + */ FT_EXPORT( FT_Error ) FT_New_Face_From_FSRef( FT_Library library, const FSRef *ref, diff --git a/non-source/foreign/freetype2/freetype/ftmm.h b/non-source/foreign/freetype2/freetype/ftmm.h index 6c05f0c39..35ed039c8 100644 --- a/non-source/foreign/freetype2/freetype/ftmm.h +++ b/non-source/foreign/freetype2/freetype/ftmm.h @@ -1,75 +1,109 @@ -/***************************************************************************/ -/* */ -/* ftmm.h */ -/* */ -/* FreeType Multiple Master font interface (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftmm.h + * + * FreeType Multiple Master font interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTMM_H_ #define FTMM_H_ +#include <freetype/freetype.h> -#include <ft2build.h> -#include FT_TYPE1_TABLES_H +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* multiple_masters */ - /* */ - /* <Title> */ - /* Multiple Masters */ - /* */ - /* <Abstract> */ - /* How to manage Multiple Masters fonts. */ - /* */ - /* <Description> */ - /* The following types and functions are used to manage Multiple */ - /* Master fonts, i.e., the selection of specific design instances by */ - /* setting design axis coordinates. */ - /* */ - /* George Williams has extended this interface to make it work with */ - /* both Type~1 Multiple Masters fonts and GX distortable (var) */ - /* fonts. Some of these routines only work with MM fonts, others */ - /* will work with both types. They are similar enough that a */ - /* consistent interface makes sense. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_MM_Axis */ - /* */ - /* <Description> */ - /* A simple structure used to model a given axis in design space for */ - /* Multiple Masters fonts. */ - /* */ - /* This structure can't be used for GX var fonts. */ - /* */ - /* <Fields> */ - /* name :: The axis's name. */ - /* */ - /* minimum :: The axis's minimum design coordinate. */ - /* */ - /* maximum :: The axis's maximum design coordinate. */ - /* */ + /************************************************************************** + * + * @section: + * multiple_masters + * + * @title: + * Multiple Masters + * + * @abstract: + * How to manage Multiple Masters fonts. + * + * @description: + * The following types and functions are used to manage Multiple Master + * fonts, i.e., the selection of specific design instances by setting + * design axis coordinates. + * + * Besides Adobe MM fonts, the interface supports Apple's TrueType GX and + * OpenType variation fonts. Some of the routines only work with Adobe + * MM fonts, others will work with all three types. They are similar + * enough that a consistent interface makes sense. + * + * For Adobe MM fonts, macro @FT_IS_SFNT returns false. For GX and + * OpenType variation fonts, it returns true. + * + */ + + + /************************************************************************** + * + * @enum: + * T1_MAX_MM_XXX + * + * @description: + * Multiple Masters limits as defined in their specifications. + * + * @values: + * T1_MAX_MM_AXIS :: + * The maximum number of Multiple Masters axes. + * + * T1_MAX_MM_DESIGNS :: + * The maximum number of Multiple Masters designs. + * + * T1_MAX_MM_MAP_POINTS :: + * The maximum number of elements in a design map. + * + */ +#define T1_MAX_MM_AXIS 4 +#define T1_MAX_MM_DESIGNS 16 +#define T1_MAX_MM_MAP_POINTS 20 + + + /************************************************************************** + * + * @struct: + * FT_MM_Axis + * + * @description: + * A structure to model a given axis in design space for Multiple Masters + * fonts. + * + * This structure can't be used for TrueType GX or OpenType variation + * fonts. + * + * @fields: + * name :: + * The axis's name. + * + * minimum :: + * The axis's minimum design coordinate. + * + * maximum :: + * The axis's maximum design coordinate. + */ typedef struct FT_MM_Axis_ { FT_String* name; @@ -79,27 +113,29 @@ FT_BEGIN_HEADER } FT_MM_Axis; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Multi_Master */ - /* */ - /* <Description> */ - /* A structure used to model the axes and space of a Multiple Masters */ - /* font. */ - /* */ - /* This structure can't be used for GX var fonts. */ - /* */ - /* <Fields> */ - /* num_axis :: Number of axes. Cannot exceed~4. */ - /* */ - /* num_designs :: Number of designs; should be normally 2^num_axis */ - /* even though the Type~1 specification strangely */ - /* allows for intermediate designs to be present. */ - /* This number cannot exceed~16. */ - /* */ - /* axis :: A table of axis descriptors. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Multi_Master + * + * @description: + * A structure to model the axes and space of a Multiple Masters font. + * + * This structure can't be used for TrueType GX or OpenType variation + * fonts. + * + * @fields: + * num_axis :: + * Number of axes. Cannot exceed~4. + * + * num_designs :: + * Number of designs; should be normally 2^num_axis even though the + * Type~1 specification strangely allows for intermediate designs to be + * present. This number cannot exceed~16. + * + * axis :: + * A table of axis descriptors. + */ typedef struct FT_Multi_Master_ { FT_UInt num_axis; @@ -109,34 +145,45 @@ FT_BEGIN_HEADER } FT_Multi_Master; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Var_Axis */ - /* */ - /* <Description> */ - /* A simple structure used to model a given axis in design space for */ - /* Multiple Masters and GX var fonts. */ - /* */ - /* <Fields> */ - /* name :: The axis's name. */ - /* Not always meaningful for GX. */ - /* */ - /* minimum :: The axis's minimum design coordinate. */ - /* */ - /* def :: The axis's default design coordinate. */ - /* FreeType computes meaningful default values for MM; it */ - /* is then an integer value, not in 16.16 format. */ - /* */ - /* maximum :: The axis's maximum design coordinate. */ - /* */ - /* tag :: The axis's tag (the GX equivalent to `name'). */ - /* FreeType provides default values for MM if possible. */ - /* */ - /* strid :: The entry in `name' table (another GX version of */ - /* `name'). */ - /* Not meaningful for MM. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Var_Axis + * + * @description: + * A structure to model a given axis in design space for Multiple + * Masters, TrueType GX, and OpenType variation fonts. + * + * @fields: + * name :: + * The axis's name. Not always meaningful for TrueType GX or OpenType + * variation fonts. + * + * minimum :: + * The axis's minimum design coordinate. + * + * def :: + * The axis's default design coordinate. FreeType computes meaningful + * default values for Adobe MM fonts. + * + * maximum :: + * The axis's maximum design coordinate. + * + * tag :: + * The axis's tag (the equivalent to 'name' for TrueType GX and + * OpenType variation fonts). FreeType provides default values for + * Adobe MM fonts if possible. + * + * strid :: + * The axis name entry in the font's 'name' table. This is another + * (and often better) version of the 'name' field for TrueType GX or + * OpenType variation fonts. Not meaningful for Adobe MM fonts. + * + * @note: + * The fields `minimum`, `def`, and `maximum` are 16.16 fractional values + * for TrueType GX and OpenType variation fonts. For Adobe MM fonts, the + * values are whole numbers (i.e., the fractional part is zero). + */ typedef struct FT_Var_Axis_ { FT_String* name; @@ -151,66 +198,79 @@ FT_BEGIN_HEADER } FT_Var_Axis; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Var_Named_Style */ - /* */ - /* <Description> */ - /* A simple structure used to model a named style in a GX var font. */ - /* */ - /* This structure can't be used for MM fonts. */ - /* */ - /* <Fields> */ - /* coords :: The design coordinates for this style. */ - /* This is an array with one entry for each axis. */ - /* */ - /* strid :: The entry in `name' table identifying this style. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Var_Named_Style + * + * @description: + * A structure to model a named instance in a TrueType GX or OpenType + * variation font. + * + * This structure can't be used for Adobe MM fonts. + * + * @fields: + * coords :: + * The design coordinates for this instance. This is an array with one + * entry for each axis. + * + * strid :: + * The entry in 'name' table identifying this instance. + * + * psid :: + * The entry in 'name' table identifying a PostScript name for this + * instance. Value 0xFFFF indicates a missing entry. + */ typedef struct FT_Var_Named_Style_ { FT_Fixed* coords; FT_UInt strid; + FT_UInt psid; /* since 2.7.1 */ } FT_Var_Named_Style; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_MM_Var */ - /* */ - /* <Description> */ - /* A structure used to model the axes and space of a Multiple Masters */ - /* or GX var distortable font. */ - /* */ - /* Some fields are specific to one format and not to the other. */ - /* */ - /* <Fields> */ - /* num_axis :: The number of axes. The maximum value is~4 for */ - /* MM; no limit in GX. */ - /* */ - /* num_designs :: The number of designs; should be normally */ - /* 2^num_axis for MM fonts. Not meaningful for GX */ - /* (where every glyph could have a different */ - /* number of designs). */ - /* */ - /* num_namedstyles :: The number of named styles; only meaningful for */ - /* GX that allows certain design coordinates to */ - /* have a string ID (in the `name' table) */ - /* associated with them. The font can tell the */ - /* user that, for example, Weight=1.5 is `Bold'. */ - /* */ - /* axis :: An axis descriptor table. */ - /* GX fonts contain slightly more data than MM. */ - /* Memory management of this pointer is done */ - /* internally by FreeType. */ - /* */ - /* namedstyle :: A named style table. */ - /* Only meaningful with GX. */ - /* Memory management of this pointer is done */ - /* internally by FreeType. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_MM_Var + * + * @description: + * A structure to model the axes and space of an Adobe MM, TrueType GX, + * or OpenType variation font. + * + * Some fields are specific to one format and not to the others. + * + * @fields: + * num_axis :: + * The number of axes. The maximum value is~4 for Adobe MM fonts; no + * limit in TrueType GX or OpenType variation fonts. + * + * num_designs :: + * The number of designs; should be normally 2^num_axis for Adobe MM + * fonts. Not meaningful for TrueType GX or OpenType variation fonts + * (where every glyph could have a different number of designs). + * + * num_namedstyles :: + * The number of named styles; a 'named style' is a tuple of design + * coordinates that has a string ID (in the 'name' table) associated + * with it. The font can tell the user that, for example, + * [Weight=1.5,Width=1.1] is 'Bold'. Another name for 'named style' is + * 'named instance'. + * + * For Adobe Multiple Masters fonts, this value is always zero because + * the format does not support named styles. + * + * axis :: + * An axis descriptor table. TrueType GX and OpenType variation fonts + * contain slightly more data than Adobe MM fonts. Memory management + * of this pointer is done internally by FreeType. + * + * namedstyle :: + * A named style (instance) table. Only meaningful for TrueType GX and + * OpenType variation fonts. Memory management of this pointer is done + * internally by FreeType. + */ typedef struct FT_MM_Var_ { FT_UInt num_axis; @@ -222,157 +282,547 @@ FT_BEGIN_HEADER } FT_MM_Var; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Multi_Master */ - /* */ - /* <Description> */ - /* Retrieve the Multiple Master descriptor of a given font. */ - /* */ - /* This function can't be used with GX fonts. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Output> */ - /* amaster :: The Multiple Masters descriptor. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Multi_Master + * + * @description: + * Retrieve a variation descriptor of a given Adobe MM font. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * amaster :: + * The Multiple Masters descriptor. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Get_Multi_Master( FT_Face face, FT_Multi_Master *amaster ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_MM_Var */ - /* */ - /* <Description> */ - /* Retrieve the Multiple Master/GX var descriptor of a given font. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Output> */ - /* amaster :: The Multiple Masters/GX var descriptor. */ - /* Allocates a data structure, which the user must */ - /* deallocate with `free' after use. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_MM_Var + * + * @description: + * Retrieve a variation descriptor for a given font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * amaster :: + * The variation descriptor. Allocates a data structure, which the + * user must deallocate with a call to @FT_Done_MM_Var after use. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Get_MM_Var( FT_Face face, FT_MM_Var* *amaster ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_MM_Design_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Masters fonts, choose an interpolated font design */ - /* through design coordinates. */ - /* */ - /* This function can't be used with GX fonts. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of available design coordinates. If it */ - /* is larger than the number of axes, ignore the excess */ - /* values. If it is smaller than the number of axes, */ - /* use default values for the remaining axes. */ - /* */ - /* coords :: An array of design coordinates. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Done_MM_Var + * + * @description: + * Free the memory allocated by @FT_Get_MM_Var. + * + * @input: + * library :: + * A handle of the face's parent library object that was used in the + * call to @FT_Get_MM_Var to create `amaster`. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Done_MM_Var( FT_Library library, + FT_MM_Var *amaster ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_Design_Coordinates + * + * @description: + * For Adobe MM fonts, choose an interpolated font design through design + * coordinates. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * An array of design coordinates. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero, + * this bit flag gets unset. + */ FT_EXPORT( FT_Error ) FT_Set_MM_Design_Coordinates( FT_Face face, FT_UInt num_coords, FT_Long* coords ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Var_Design_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Master or GX Var fonts, choose an interpolated font */ - /* design through design coordinates. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of available design coordinates. If it */ - /* is larger than the number of axes, ignore the excess */ - /* values. If it is smaller than the number of axes, */ - /* use default values for the remaining axes. */ - /* */ - /* coords :: An array of design coordinates. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Set_Var_Design_Coordinates + * + * @description: + * Choose an interpolated font design through design coordinates. + * + * This function works with all supported variation formats. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * An array of design coordinates. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The design coordinates are 16.16 fractional values for TrueType GX and + * OpenType variation fonts. For Adobe MM fonts, the values are supposed + * to be whole numbers (i.e., the fractional part is zero). + * + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * [Since 2.9] 'Default values' means the currently selected named + * instance (or the base font if no named instance is selected). + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero, + * this bit flag gets unset. + */ FT_EXPORT( FT_Error ) FT_Set_Var_Design_Coordinates( FT_Face face, FT_UInt num_coords, FT_Fixed* coords ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_MM_Blend_Coordinates */ - /* */ - /* <Description> */ - /* For Multiple Masters and GX var fonts, choose an interpolated font */ - /* design through normalized blend coordinates. */ - /* */ - /* <InOut> */ - /* face :: A handle to the source face. */ - /* */ - /* <Input> */ - /* num_coords :: The number of available design coordinates. If it */ - /* is larger than the number of axes, ignore the excess */ - /* values. If it is smaller than the number of axes, */ - /* use default values for the remaining axes. */ - /* */ - /* coords :: The design coordinates array (each element must be */ - /* between 0 and 1.0). */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Var_Design_Coordinates + * + * @description: + * Get the design coordinates of the currently selected interpolated + * font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * num_coords :: + * The number of design coordinates to retrieve. If it is larger than + * the number of axes, set the excess values to~0. + * + * @output: + * coords :: + * The design coordinates array. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The design coordinates are 16.16 fractional values for TrueType GX and + * OpenType variation fonts. For Adobe MM fonts, the values are whole + * numbers (i.e., the fractional part is zero). + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Design_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_Blend_Coordinates + * + * @description: + * Choose an interpolated font design through normalized blend + * coordinates. + * + * This function works with all supported variation formats. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * The design coordinates array. Each element is a 16.16 fractional + * value and must be between 0 and 1.0 for Adobe MM fonts, and between + * -1.0 and 1.0 for TrueType GX and OpenType variation fonts. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * [Since 2.9] 'Default values' means the currently selected named + * instance (or the base font if no named instance is selected). + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION will return true). If `num_coords` is zero, + * this bit flag gets unset. + */ FT_EXPORT( FT_Error ) FT_Set_MM_Blend_Coordinates( FT_Face face, FT_UInt num_coords, FT_Fixed* coords ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Var_Blend_Coordinates */ - /* */ - /* <Description> */ - /* This is another name of @FT_Set_MM_Blend_Coordinates. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_MM_Blend_Coordinates + * + * @description: + * Get the normalized blend coordinates of the currently selected + * interpolated font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * num_coords :: + * The number of normalized blend coordinates to retrieve. If it is + * larger than the number of axes, set the excess values to~0.5 for + * Adobe MM fonts, and to~0 for TrueType GX and OpenType variation + * fonts. + * + * @output: + * coords :: + * The normalized blend coordinates array (as 16.16 fractional values). + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_Var_Blend_Coordinates + * + * @description: + * This is another name of @FT_Set_MM_Blend_Coordinates. + */ FT_EXPORT( FT_Error ) FT_Set_Var_Blend_Coordinates( FT_Face face, FT_UInt num_coords, FT_Fixed* coords ); + + /************************************************************************** + * + * @function: + * FT_Get_Var_Blend_Coordinates + * + * @description: + * This is another name of @FT_Get_MM_Blend_Coordinates. + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_WeightVector + * + * @description: + * For Adobe MM fonts, choose an interpolated font design by directly + * setting the weight vector. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * len :: + * The length of the weight vector array. If it is larger than the + * number of designs, the extra values are ignored. If it is less than + * the number of designs, the remaining values are set to zero. + * + * weightvector :: + * An array representing the weight vector. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe Multiple Master fonts limit the number of designs, and thus the + * length of the weight vector to 16~elements. + * + * If `len` is larger than zero, this function sets the + * @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field (i.e., + * @FT_IS_VARIATION will return true). If `len` is zero, this bit flag + * is unset and the weight vector array is reset to the default values. + * + * The Adobe documentation also states that the values in the + * WeightVector array must total 1.0 +/-~0.001. In practice this does + * not seem to be enforced, so is not enforced here, either. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_WeightVector( FT_Face face, + FT_UInt len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_WeightVector + * + * @description: + * For Adobe MM fonts, retrieve the current weight vector of the font. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * len :: + * A pointer to the size of the array to be filled. If the size of the + * array is less than the number of designs, `FT_Err_Invalid_Argument` + * is returned, and `len` is set to the required size (the number of + * designs). If the size of the array is greater than the number of + * designs, the remaining entries are set to~0. On successful + * completion, `len` is set to the number of designs (i.e., the number + * of values written to the array). + * + * @output: + * weightvector :: + * An array to be filled. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe Multiple Master fonts limit the number of designs, and thus the + * length of the WeightVector to~16. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_WeightVector( FT_Face face, + FT_UInt* len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @enum: + * FT_VAR_AXIS_FLAG_XXX + * + * @description: + * A list of bit flags used in the return value of + * @FT_Get_Var_Axis_Flags. + * + * @values: + * FT_VAR_AXIS_FLAG_HIDDEN :: + * The variation axis should not be exposed to user interfaces. + * + * @since: + * 2.8.1 + */ +#define FT_VAR_AXIS_FLAG_HIDDEN 1 + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Axis_Flags + * + * @description: + * Get the 'flags' field of an OpenType Variation Axis Record. + * + * Not meaningful for Adobe MM fonts (`*flags` is always zero). + * + * @input: + * master :: + * The variation descriptor. + * + * axis_index :: + * The index of the requested variation axis. + * + * @output: + * flags :: + * The 'flags' field. See @FT_VAR_AXIS_FLAG_XXX for possible values. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.8.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Axis_Flags( FT_MM_Var* master, + FT_UInt axis_index, + FT_UInt* flags ); + + + /************************************************************************** + * + * @function: + * FT_Set_Named_Instance + * + * @description: + * Set or change the current named instance. + * + * @input: + * face :: + * A handle to the source face. + * + * instance_index :: + * The index of the requested instance, starting with value 1. If set + * to value 0, FreeType switches to font access without a named + * instance. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The function uses the value of `instance_index` to set bits 16-30 of + * the face's `face_index` field. It also resets any variation applied + * to the font, and the @FT_FACE_FLAG_VARIATION bit of the face's + * `face_flags` field gets reset to zero (i.e., @FT_IS_VARIATION will + * return false). + * + * For Adobe MM fonts (which don't have named instances) this function + * simply resets the current face to the default instance. + * + * @since: + * 2.9 + */ + FT_EXPORT( FT_Error ) + FT_Set_Named_Instance( FT_Face face, + FT_UInt instance_index ); + + + /************************************************************************** + * + * @function: + * FT_Get_Default_Named_Instance + * + * @description: + * Retrieve the index of the default named instance, to be used with + * @FT_Set_Named_Instance. + * + * The default instance of a variation font is that instance for which + * the nth axis coordinate is equal to `axis[n].def` (as specified in the + * @FT_MM_Var structure), with~n covering all axes. + * + * FreeType synthesizes a named instance for the default instance if the + * font does not contain such an entry. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * instance_index :: + * The index of the default named instance. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * For Adobe MM fonts (which don't have named instances) this function + * always returns zero for `instance_index`. + * + * @since: + * 2.13.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Default_Named_Instance( FT_Face face, + FT_UInt *instance_index ); + /* */ diff --git a/non-source/foreign/freetype2/freetype/ftmodapi.h b/non-source/foreign/freetype2/freetype/ftmodapi.h index b4d2758ef..0ee715898 100644 --- a/non-source/foreign/freetype2/freetype/ftmodapi.h +++ b/non-source/foreign/freetype2/freetype/ftmodapi.h @@ -1,27 +1,26 @@ -/***************************************************************************/ -/* */ -/* ftmodapi.h */ -/* */ -/* FreeType modules public interface (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftmodapi.h + * + * FreeType modules public interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTMODAPI_H_ #define FTMODAPI_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -33,76 +32,80 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /* <Title> */ - /* Module Management */ - /* */ - /* <Abstract> */ - /* How to add, upgrade, remove, and control modules from FreeType. */ - /* */ - /* <Description> */ - /* The definitions below are used to manage modules within FreeType. */ - /* Modules can be added, upgraded, and removed at runtime. */ - /* Additionally, some module properties can be controlled also. */ - /* */ - /* Here is a list of possible values of the `module_name' field in */ - /* the @FT_Module_Class structure. */ - /* */ - /* { */ - /* autofitter */ - /* bdf */ - /* cff */ - /* gxvalid */ - /* otvalid */ - /* pcf */ - /* pfr */ - /* psaux */ - /* pshinter */ - /* psnames */ - /* raster1 */ - /* sfnt */ - /* smooth, smooth-lcd, smooth-lcdv */ - /* truetype */ - /* type1 */ - /* type42 */ - /* t1cid */ - /* winfonts */ - /* } */ - /* */ - /* Note that the FreeType Cache sub-system is not a FreeType module. */ - /* */ - /* <Order> */ - /* FT_Module */ - /* FT_Module_Constructor */ - /* FT_Module_Destructor */ - /* FT_Module_Requester */ - /* FT_Module_Class */ - /* */ - /* FT_Add_Module */ - /* FT_Get_Module */ - /* FT_Remove_Module */ - /* FT_Add_Default_Modules */ - /* */ - /* FT_Property_Set */ - /* FT_Property_Get */ - /* */ - /* FT_New_Library */ - /* FT_Done_Library */ - /* FT_Reference_Library */ - /* */ - /* FT_Renderer */ - /* FT_Renderer_Class */ - /* */ - /* FT_Get_Renderer */ - /* FT_Set_Renderer */ - /* */ - /* FT_Set_Debug_Hook */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * module_management + * + * @title: + * Module Management + * + * @abstract: + * How to add, upgrade, remove, and control modules from FreeType. + * + * @description: + * The definitions below are used to manage modules within FreeType. + * Internal and external modules can be added, upgraded, and removed at + * runtime. For example, an alternative renderer or proprietary font + * driver can be registered and prioritized. Additionally, some module + * properties can also be controlled. + * + * Here is a list of existing values of the `module_name` field in the + * @FT_Module_Class structure. + * + * ``` + * autofitter + * bdf + * cff + * gxvalid + * otvalid + * pcf + * pfr + * psaux + * pshinter + * psnames + * raster1 + * sfnt + * smooth + * truetype + * type1 + * type42 + * t1cid + * winfonts + * ``` + * + * Note that the FreeType Cache sub-system is not a FreeType module. + * + * @order: + * FT_Module + * FT_Module_Constructor + * FT_Module_Destructor + * FT_Module_Requester + * FT_Module_Class + * + * FT_Add_Module + * FT_Get_Module + * FT_Remove_Module + * FT_Add_Default_Modules + * + * FT_FACE_DRIVER_NAME + * FT_Property_Set + * FT_Property_Get + * FT_Set_Default_Properties + * + * FT_New_Library + * FT_Done_Library + * FT_Reference_Library + * + * FT_Renderer + * FT_Renderer_Class + * + * FT_Get_Renderer + * FT_Set_Renderer + * + * FT_Set_Debug_Hook + * + */ /* module bit flags */ @@ -136,83 +139,99 @@ FT_BEGIN_HEADER typedef FT_Pointer FT_Module_Interface; - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Module_Constructor */ - /* */ - /* <Description> */ - /* A function used to initialize (not create) a new module object. */ - /* */ - /* <Input> */ - /* module :: The module to initialize. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Module_Constructor + * + * @description: + * A function used to initialize (not create) a new module object. + * + * @input: + * module :: + * The module to initialize. + */ typedef FT_Error (*FT_Module_Constructor)( FT_Module module ); - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Module_Destructor */ - /* */ - /* <Description> */ - /* A function used to finalize (not destroy) a given module object. */ - /* */ - /* <Input> */ - /* module :: The module to finalize. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Module_Destructor + * + * @description: + * A function used to finalize (not destroy) a given module object. + * + * @input: + * module :: + * The module to finalize. + */ typedef void (*FT_Module_Destructor)( FT_Module module ); - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Module_Requester */ - /* */ - /* <Description> */ - /* A function used to query a given module for a specific interface. */ - /* */ - /* <Input> */ - /* module :: The module to be searched. */ - /* */ - /* name :: The name of the interface in the module. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Module_Requester + * + * @description: + * A function used to query a given module for a specific interface. + * + * @input: + * module :: + * The module to be searched. + * + * name :: + * The name of the interface in the module. + */ typedef FT_Module_Interface (*FT_Module_Requester)( FT_Module module, const char* name ); - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Module_Class */ - /* */ - /* <Description> */ - /* The module class descriptor. */ - /* */ - /* <Fields> */ - /* module_flags :: Bit flags describing the module. */ - /* */ - /* module_size :: The size of one module object/instance in */ - /* bytes. */ - /* */ - /* module_name :: The name of the module. */ - /* */ - /* module_version :: The version, as a 16.16 fixed number */ - /* (major.minor). */ - /* */ - /* module_requires :: The version of FreeType this module requires, */ - /* as a 16.16 fixed number (major.minor). Starts */ - /* at version 2.0, i.e., 0x20000. */ - /* */ - /* module_init :: The initializing function. */ - /* */ - /* module_done :: The finalizing function. */ - /* */ - /* get_interface :: The interface requesting function. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Module_Class + * + * @description: + * The module class descriptor. While being a public structure necessary + * for FreeType's module bookkeeping, most of the fields are essentially + * internal, not to be used directly by an application. + * + * @fields: + * module_flags :: + * Bit flags describing the module. + * + * module_size :: + * The size of one module object/instance in bytes. + * + * module_name :: + * The name of the module. + * + * module_version :: + * The version, as a 16.16 fixed number (major.minor). + * + * module_requires :: + * The version of FreeType this module requires, as a 16.16 fixed + * number (major.minor). Starts at version 2.0, i.e., 0x20000. + * + * module_interface :: + * A typeless pointer to a structure (which varies between different + * modules) that holds the module's interface functions. This is + * essentially what `get_interface` returns. + * + * module_init :: + * The initializing function. + * + * module_done :: + * The finalizing function. + * + * get_interface :: + * The interface requesting function. + */ typedef struct FT_Module_Class_ { FT_ULong module_flags; @@ -230,83 +249,110 @@ FT_BEGIN_HEADER } FT_Module_Class; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Add_Module */ - /* */ - /* <Description> */ - /* Add a new module to a given library instance. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* clazz :: A pointer to class descriptor for the module. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* An error will be returned if a module already exists by that name, */ - /* or if the module requires a version of FreeType that is too great. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Add_Module + * + * @description: + * Add a new module to a given library instance. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * clazz :: + * A pointer to class descriptor for the module. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An error will be returned if a module already exists by that name, or + * if the module requires a version of FreeType that is too great. + */ FT_EXPORT( FT_Error ) FT_Add_Module( FT_Library library, const FT_Module_Class* clazz ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Module */ - /* */ - /* <Description> */ - /* Find a module by its name. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object. */ - /* */ - /* module_name :: The module's name (as an ASCII string). */ - /* */ - /* <Return> */ - /* A module handle. 0~if none was found. */ - /* */ - /* <Note> */ - /* FreeType's internal modules aren't documented very well, and you */ - /* should look up the source code for details. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Module + * + * @description: + * Find a module by its name. + * + * @input: + * library :: + * A handle to the library object. + * + * module_name :: + * The module's name (as an ASCII string). + * + * @return: + * A module handle. 0~if none was found. + * + * @note: + * FreeType's internal modules aren't documented very well, and you + * should look up the source code for details. + */ FT_EXPORT( FT_Module ) FT_Get_Module( FT_Library library, const char* module_name ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Remove_Module */ - /* */ - /* <Description> */ - /* Remove a given module from a library instance. */ - /* */ - /* <InOut> */ - /* library :: A handle to a library object. */ - /* */ - /* <Input> */ - /* module :: A handle to a module object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The module object is destroyed by the function in case of success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Remove_Module + * + * @description: + * Remove a given module from a library instance. + * + * @inout: + * library :: + * A handle to a library object. + * + * @input: + * module :: + * A handle to a module object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The module object is destroyed by the function in case of success. + */ FT_EXPORT( FT_Error ) FT_Remove_Module( FT_Library library, FT_Module module ); - /********************************************************************** + /************************************************************************** + * + * @macro: + * FT_FACE_DRIVER_NAME + * + * @description: + * A macro that retrieves the name of a font driver from a face object. + * + * @note: + * The font driver name is a valid `module_name` for @FT_Property_Set + * and @FT_Property_Get. This is not the same as @FT_Get_Font_Format. + * + * @since: + * 2.11 + * + */ +#define FT_FACE_DRIVER_NAME( face ) \ + ( ( *FT_REINTERPRET_CAST( FT_Module_Class**, \ + ( face )->driver ) )->module_name ) + + + /************************************************************************** * * @function: * FT_Property_Set @@ -316,54 +362,51 @@ FT_BEGIN_HEADER * * @input: * library :: - * A handle to the library the module is part of. + * A handle to the library the module is part of. * * module_name :: - * The module name. + * The module name. * * property_name :: - * The property name. Properties are described in the `Synopsis' - * subsection of the module's documentation. + * The property name. Properties are described in section + * @properties. * - * Note that only a few modules have properties. + * Note that only a few modules have properties. * * value :: - * A generic pointer to a variable or structure that gives the new - * value of the property. The exact definition of `value' is - * dependent on the property; see the `Synopsis' subsection of the - * module's documentation. + * A generic pointer to a variable or structure that gives the new + * value of the property. The exact definition of `value` is + * dependent on the property; see section @properties. * * @return: * FreeType error code. 0~means success. * * @note: - * If `module_name' isn't a valid module name, or `property_name' - * doesn't specify a valid property, or if `value' doesn't represent a + * If `module_name` isn't a valid module name, or `property_name` + * doesn't specify a valid property, or if `value` doesn't represent a * valid value for the given property, an error is returned. * - * The following example sets property `bar' (a simple integer) in - * module `foo' to value~1. + * The following example sets property 'bar' (a simple integer) in + * module 'foo' to value~1. * - * { + * ``` * FT_UInt bar; * * * bar = 1; * FT_Property_Set( library, "foo", "bar", &bar ); - * } + * ``` * * Note that the FreeType Cache sub-system doesn't recognize module * property changes. To avoid glyph lookup confusion within the cache - * you should call @FTC_Manager_Reset to completely flush the cache if - * a module property gets changed after @FTC_Manager_New has been - * called. + * you should call @FTC_Manager_Reset to completely flush the cache if a + * module property gets changed after @FTC_Manager_New has been called. * - * It is not possible to set properties of the FreeType Cache - * sub-system itself with FT_Property_Set; use @FTC_Property_Set - * instead. + * It is not possible to set properties of the FreeType Cache sub-system + * itself with FT_Property_Set; use @FTC_Property_Set instead. * - * @since: - * 2.4.11 + * @since: + * 2.4.11 * */ FT_EXPORT( FT_Error ) @@ -373,7 +416,7 @@ FT_BEGIN_HEADER const void* value ); - /********************************************************************** + /************************************************************************** * * @function: * FT_Property_Get @@ -383,33 +426,32 @@ FT_BEGIN_HEADER * * @input: * library :: - * A handle to the library the module is part of. + * A handle to the library the module is part of. * * module_name :: - * The module name. + * The module name. * * property_name :: - * The property name. Properties are described in the `Synopsis' - * subsection of the module's documentation. + * The property name. Properties are described in section + * @properties. * * @inout: * value :: - * A generic pointer to a variable or structure that gives the - * value of the property. The exact definition of `value' is - * dependent on the property; see the `Synopsis' subsection of the - * module's documentation. + * A generic pointer to a variable or structure that gives the value + * of the property. The exact definition of `value` is dependent on + * the property; see section @properties. * * @return: * FreeType error code. 0~means success. * * @note: - * If `module_name' isn't a valid module name, or `property_name' - * doesn't specify a valid property, or if `value' doesn't represent a + * If `module_name` isn't a valid module name, or `property_name` + * doesn't specify a valid property, or if `value` doesn't represent a * valid value for the given property, an error is returned. * - * The following example gets property `baz' (a range) in module `foo'. + * The following example gets property 'baz' (a range) in module 'foo'. * - * { + * ``` * typedef range_ * { * FT_Int32 min; @@ -421,13 +463,13 @@ FT_BEGIN_HEADER * * * FT_Property_Get( library, "foo", "baz", &baz ); - * } + * ``` * * It is not possible to retrieve properties of the FreeType Cache * sub-system with FT_Property_Get; use @FTC_Property_Get instead. * - * @since: - * 2.4.11 + * @since: + * 2.4.11 * */ FT_EXPORT( FT_Error ) @@ -437,144 +479,242 @@ FT_BEGIN_HEADER void* value ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Reference_Library */ - /* */ - /* <Description> */ - /* A counter gets initialized to~1 at the time an @FT_Library */ - /* structure is created. This function increments the counter. */ - /* @FT_Done_Library then only destroys a library if the counter is~1, */ - /* otherwise it simply decrements the counter. */ - /* */ - /* This function helps in managing life-cycles of structures that */ - /* reference @FT_Library objects. */ - /* */ - /* <Input> */ - /* library :: A handle to a target library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Since> */ - /* 2.4.2 */ - /* */ + /************************************************************************** + * + * @function: + * FT_Set_Default_Properties + * + * @description: + * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is + * set, this function reads the `FREETYPE_PROPERTIES` environment + * variable to control driver properties. See section @properties for + * more. + * + * If the compilation option is not set, this function does nothing. + * + * `FREETYPE_PROPERTIES` has the following syntax form (broken here into + * multiple lines for better readability). + * + * ``` + * <optional whitespace> + * <module-name1> ':' + * <property-name1> '=' <property-value1> + * <whitespace> + * <module-name2> ':' + * <property-name2> '=' <property-value2> + * ... + * ``` + * + * Example: + * + * ``` + * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ + * cff:no-stem-darkening=0 + * ``` + * + * @inout: + * library :: + * A handle to a new library object. + * + * @since: + * 2.8 + */ + FT_EXPORT( void ) + FT_Set_Default_Properties( FT_Library library ); + + + /************************************************************************** + * + * @function: + * FT_Reference_Library + * + * @description: + * A counter gets initialized to~1 at the time an @FT_Library structure + * is created. This function increments the counter. @FT_Done_Library + * then only destroys a library if the counter is~1, otherwise it simply + * decrements the counter. + * + * This function helps in managing life-cycles of structures that + * reference @FT_Library objects. + * + * @input: + * library :: + * A handle to a target library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.4.2 + */ FT_EXPORT( FT_Error ) FT_Reference_Library( FT_Library library ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Library */ - /* */ - /* <Description> */ - /* This function is used to create a new FreeType library instance */ - /* from a given memory object. It is thus possible to use libraries */ - /* with distinct memory allocators within the same program. Note, */ - /* however, that the used @FT_Memory structure is expected to remain */ - /* valid for the life of the @FT_Library object. */ - /* */ - /* Normally, you would call this function (followed by a call to */ - /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module) */ - /* instead of @FT_Init_FreeType to initialize the FreeType library. */ - /* */ - /* Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a */ - /* library instance. */ - /* */ - /* <Input> */ - /* memory :: A handle to the original memory object. */ - /* */ - /* <Output> */ - /* alibrary :: A pointer to handle of a new library object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* See the discussion of reference counters in the description of */ - /* @FT_Reference_Library. */ - /* */ + /************************************************************************** + * + * @function: + * FT_New_Library + * + * @description: + * This function is used to create a new FreeType library instance from a + * given memory object. It is thus possible to use libraries with + * distinct memory allocators within the same program. Note, however, + * that the used @FT_Memory structure is expected to remain valid for the + * life of the @FT_Library object. + * + * Normally, you would call this function (followed by a call to + * @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, and a + * call to @FT_Set_Default_Properties) instead of @FT_Init_FreeType to + * initialize the FreeType library. + * + * Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a library + * instance. + * + * @input: + * memory :: + * A handle to the original memory object. + * + * @output: + * alibrary :: + * A pointer to handle of a new library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Library. + */ FT_EXPORT( FT_Error ) FT_New_Library( FT_Memory memory, FT_Library *alibrary ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Library */ - /* */ - /* <Description> */ - /* Discard a given library object. This closes all drivers and */ - /* discards all resource objects. */ - /* */ - /* <Input> */ - /* library :: A handle to the target library. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* See the discussion of reference counters in the description of */ - /* @FT_Reference_Library. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Done_Library + * + * @description: + * Discard a given library object. This closes all drivers and discards + * all resource objects. + * + * @input: + * library :: + * A handle to the target library. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Library. + */ FT_EXPORT( FT_Error ) FT_Done_Library( FT_Library library ); - /* */ - typedef void + /************************************************************************** + * + * @functype: + * FT_DebugHook_Func + * + * @description: + * A drop-in replacement (or rather a wrapper) for the bytecode or + * charstring interpreter's main loop function. + * + * Its job is essentially + * + * - to activate debug mode to enforce single-stepping, + * + * - to call the main loop function to interpret the next opcode, and + * + * - to show the changed context to the user. + * + * An example for such a main loop function is `TT_RunIns` (declared in + * FreeType's internal header file `src/truetype/ttinterp.h`). + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of a drop-in replacement. + * + * @inout: + * arg :: + * A typeless pointer, to be cast to the main loop function's data + * structure (which depends on the font module). For TrueType fonts + * it is bytecode interpreter's execution context, `TT_ExecContext`, + * which is declared in FreeType's internal header file `tttypes.h`. + */ + typedef FT_Error (*FT_DebugHook_Func)( void* arg ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Debug_Hook */ - /* */ - /* <Description> */ - /* Set a debug hook function for debugging the interpreter of a font */ - /* format. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* hook_index :: The index of the debug hook. You should use the */ - /* values defined in `ftobjs.h', e.g., */ - /* `FT_DEBUG_HOOK_TRUETYPE'. */ - /* */ - /* debug_hook :: The function used to debug the interpreter. */ - /* */ - /* <Note> */ - /* Currently, four debug hook slots are available, but only two (for */ - /* the TrueType and the Type~1 interpreter) are defined. */ - /* */ - /* Since the internal headers of FreeType are no longer installed, */ - /* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */ - /* This is a bug and will be fixed in a forthcoming release. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_DEBUG_HOOK_XXX + * + * @description: + * A list of named debug hook indices. + * + * @values: + * FT_DEBUG_HOOK_TRUETYPE:: + * This hook index identifies the TrueType bytecode debugger. + */ +#define FT_DEBUG_HOOK_TRUETYPE 0 + + + /************************************************************************** + * + * @function: + * FT_Set_Debug_Hook + * + * @description: + * Set a debug hook function for debugging the interpreter of a font + * format. + * + * While this is a public API function, an application needs access to + * FreeType's internal header files to do something useful. + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of its usage. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * hook_index :: + * The index of the debug hook. You should use defined enumeration + * macros like @FT_DEBUG_HOOK_TRUETYPE. + * + * debug_hook :: + * The function used to debug the interpreter. + * + * @note: + * Currently, four debug hook slots are available, but only one (for the + * TrueType interpreter) is defined. + */ FT_EXPORT( void ) FT_Set_Debug_Hook( FT_Library library, FT_UInt hook_index, FT_DebugHook_Func debug_hook ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Add_Default_Modules */ - /* */ - /* <Description> */ - /* Add the set of default drivers to a given library object. */ - /* This is only useful when you create a library object with */ - /* @FT_New_Library (usually to plug a custom memory manager). */ - /* */ - /* <InOut> */ - /* library :: A handle to a new library object. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Add_Default_Modules + * + * @description: + * Add the set of default drivers to a given library object. This is + * only useful when you create a library object with @FT_New_Library + * (usually to plug a custom memory manager). + * + * @inout: + * library :: + * A handle to a new library object. + */ FT_EXPORT( void ) FT_Add_Default_Modules( FT_Library library ); @@ -600,28 +740,28 @@ FT_BEGIN_HEADER /************************************************************************** * - * @enum: - * FT_TrueTypeEngineType + * @enum: + * FT_TrueTypeEngineType * - * @description: - * A list of values describing which kind of TrueType bytecode - * engine is implemented in a given FT_Library instance. It is used - * by the @FT_Get_TrueType_Engine_Type function. + * @description: + * A list of values describing which kind of TrueType bytecode engine is + * implemented in a given FT_Library instance. It is used by the + * @FT_Get_TrueType_Engine_Type function. * - * @values: - * FT_TRUETYPE_ENGINE_TYPE_NONE :: - * The library doesn't implement any kind of bytecode interpreter. + * @values: + * FT_TRUETYPE_ENGINE_TYPE_NONE :: + * The library doesn't implement any kind of bytecode interpreter. * - * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: - * Deprecated and removed. + * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: + * Deprecated and removed. * - * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: - * The library implements a bytecode interpreter that covers - * the full instruction set of the TrueType virtual machine (this - * was governed by patents until May 2010, hence the name). + * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: + * The library implements a bytecode interpreter that covers the full + * instruction set of the TrueType virtual machine (this was governed + * by patents until May 2010, hence the name). * - * @since: - * 2.2 + * @since: + * 2.2 * */ typedef enum FT_TrueTypeEngineType_ @@ -635,22 +775,22 @@ FT_BEGIN_HEADER /************************************************************************** * - * @func: - * FT_Get_TrueType_Engine_Type + * @function: + * FT_Get_TrueType_Engine_Type * - * @description: - * Return an @FT_TrueTypeEngineType value to indicate which level of - * the TrueType virtual machine a given library instance supports. + * @description: + * Return an @FT_TrueTypeEngineType value to indicate which level of the + * TrueType virtual machine a given library instance supports. * - * @input: - * library :: - * A library instance. + * @input: + * library :: + * A library instance. * - * @return: - * A value indicating which level is supported. + * @return: + * A value indicating which level is supported. * - * @since: - * 2.2 + * @since: + * 2.2 * */ FT_EXPORT( FT_TrueTypeEngineType ) diff --git a/non-source/foreign/freetype2/freetype/ftmoderr.h b/non-source/foreign/freetype2/freetype/ftmoderr.h index 2a7671c81..6722fbf8b 100644 --- a/non-source/foreign/freetype2/freetype/ftmoderr.h +++ b/non-source/foreign/freetype2/freetype/ftmoderr.h @@ -1,94 +1,103 @@ -/***************************************************************************/ -/* */ -/* ftmoderr.h */ -/* */ -/* FreeType module error offsets (specification). */ -/* */ -/* Copyright 2001-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This file is used to define the FreeType module error codes. */ - /* */ - /* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is */ - /* set, the lower byte of an error value identifies the error code as */ - /* usual. In addition, the higher byte identifies the module. For */ - /* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */ - /* error `TT_Err_Invalid_File_Format' has value 0x1303, the error */ - /* `T1_Err_Invalid_File_Format' has value 0x1403, etc. */ - /* */ - /* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero, */ - /* including the high byte. */ - /* */ - /* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of */ - /* an error value is set to zero. */ - /* */ - /* To hide the various `XXX_Err_' prefixes in the source code, FreeType */ - /* provides some macros in `fttypes.h'. */ - /* */ - /* FT_ERR( err ) */ - /* Add current error module prefix (as defined with the */ - /* `FT_ERR_PREFIX' macro) to `err'. For example, in the BDF module */ - /* the line */ - /* */ - /* error = FT_ERR( Invalid_Outline ); */ - /* */ - /* expands to */ - /* */ - /* error = BDF_Err_Invalid_Outline; */ - /* */ - /* For simplicity, you can always use `FT_Err_Ok' directly instead */ - /* of `FT_ERR( Ok )'. */ - /* */ - /* FT_ERR_EQ( errcode, err ) */ - /* FT_ERR_NEQ( errcode, err ) */ - /* Compare error code `errcode' with the error `err' for equality */ - /* and inequality, respectively. Example: */ - /* */ - /* if ( FT_ERR_EQ( error, Invalid_Outline ) ) */ - /* ... */ - /* */ - /* Using this macro you don't have to think about error prefixes. */ - /* Of course, if module errors are not active, the above example is */ - /* the same as */ - /* */ - /* if ( error == FT_Err_Invalid_Outline ) */ - /* ... */ - /* */ - /* FT_ERROR_BASE( errcode ) */ - /* FT_ERROR_MODULE( errcode ) */ - /* Get base error and module error code, respectively. */ - /* */ - /* */ - /* It can also be used to create a module error message table easily */ - /* with something like */ - /* */ - /* { */ - /* #undef FTMODERR_H_ */ - /* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */ - /* #define FT_MODERR_START_LIST { */ - /* #define FT_MODERR_END_LIST { 0, 0 } }; */ - /* */ - /* const struct */ - /* { */ - /* int mod_err_offset; */ - /* const char* mod_err_msg */ - /* } ft_mod_errors[] = */ - /* */ - /* #include FT_MODULE_ERRORS_H */ - /* } */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftmoderr.h + * + * FreeType module error offsets (specification). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the FreeType module error codes. + * + * If the macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` in `ftoption.h` is + * set, the lower byte of an error value identifies the error code as + * usual. In addition, the higher byte identifies the module. For + * example, the error `FT_Err_Invalid_File_Format` has value 0x0003, the + * error `TT_Err_Invalid_File_Format` has value 0x1303, the error + * `T1_Err_Invalid_File_Format` has value 0x1403, etc. + * + * Note that `FT_Err_Ok`, `TT_Err_Ok`, etc. are always equal to zero, + * including the high byte. + * + * If `FT_CONFIG_OPTION_USE_MODULE_ERRORS` isn't set, the higher byte of an + * error value is set to zero. + * + * To hide the various `XXX_Err_` prefixes in the source code, FreeType + * provides some macros in `fttypes.h`. + * + * FT_ERR( err ) + * + * Add current error module prefix (as defined with the `FT_ERR_PREFIX` + * macro) to `err`. For example, in the BDF module the line + * + * ``` + * error = FT_ERR( Invalid_Outline ); + * ``` + * + * expands to + * + * ``` + * error = BDF_Err_Invalid_Outline; + * ``` + * + * For simplicity, you can always use `FT_Err_Ok` directly instead of + * `FT_ERR( Ok )`. + * + * FT_ERR_EQ( errcode, err ) + * FT_ERR_NEQ( errcode, err ) + * + * Compare error code `errcode` with the error `err` for equality and + * inequality, respectively. Example: + * + * ``` + * if ( FT_ERR_EQ( error, Invalid_Outline ) ) + * ... + * ``` + * + * Using this macro you don't have to think about error prefixes. Of + * course, if module errors are not active, the above example is the + * same as + * + * ``` + * if ( error == FT_Err_Invalid_Outline ) + * ... + * ``` + * + * FT_ERROR_BASE( errcode ) + * FT_ERROR_MODULE( errcode ) + * + * Get base error and module error code, respectively. + * + * It can also be used to create a module error message table easily with + * something like + * + * ``` + * #undef FTMODERR_H_ + * #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, + * #define FT_MODERR_START_LIST { + * #define FT_MODERR_END_LIST { 0, 0 } }; + * + * const struct + * { + * int mod_err_offset; + * const char* mod_err_msg + * } ft_mod_errors[] = + * + * #include <freetype/ftmoderr.h> + * ``` + * + */ #ifndef FTMODERR_H_ @@ -162,6 +171,7 @@ FT_MODERRDEF( Type42, 0x1400, "Type 42 module" ) FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" ) FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" ) + FT_MODERRDEF( Sdf, 0x1700, "Signed distance field raster module" ) #ifdef FT_MODERR_END_LIST diff --git a/non-source/foreign/freetype2/freetype/ftotval.h b/non-source/foreign/freetype2/freetype/ftotval.h index c678ef344..810200b38 100644 --- a/non-source/foreign/freetype2/freetype/ftotval.h +++ b/non-source/foreign/freetype2/freetype/ftotval.h @@ -1,37 +1,36 @@ -/***************************************************************************/ -/* */ -/* ftotval.h */ -/* */ -/* FreeType API for validating OpenType tables (specification). */ -/* */ -/* Copyright 2004-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -/***************************************************************************/ -/* */ -/* */ -/* Warning: This module might be moved to a different library in the */ -/* future to avoid a tight dependency between FreeType and the */ -/* OpenType specification. */ -/* */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftotval.h + * + * FreeType API for validating OpenType tables (specification). + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +/**************************************************************************** + * + * + * Warning: This module might be moved to a different library in the + * future to avoid a tight dependency between FreeType and the + * OpenType specification. + * + * + */ #ifndef FTOTVAL_H_ #define FTOTVAL_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -43,62 +42,62 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* ot_validation */ - /* */ - /* <Title> */ - /* OpenType Validation */ - /* */ - /* <Abstract> */ - /* An API to validate OpenType tables. */ - /* */ - /* <Description> */ - /* This section contains the declaration of functions to validate */ - /* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). */ - /* */ - /* <Order> */ - /* FT_OpenType_Validate */ - /* FT_OpenType_Free */ - /* */ - /* FT_VALIDATE_OTXXX */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @enum: - * FT_VALIDATE_OTXXX - * - * @description: - * A list of bit-field constants used with @FT_OpenType_Validate to - * indicate which OpenType tables should be validated. - * - * @values: - * FT_VALIDATE_BASE :: - * Validate BASE table. - * - * FT_VALIDATE_GDEF :: - * Validate GDEF table. - * - * FT_VALIDATE_GPOS :: - * Validate GPOS table. - * - * FT_VALIDATE_GSUB :: - * Validate GSUB table. - * - * FT_VALIDATE_JSTF :: - * Validate JSTF table. - * - * FT_VALIDATE_MATH :: - * Validate MATH table. - * - * FT_VALIDATE_OT :: - * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). - * - */ + /************************************************************************** + * + * @section: + * ot_validation + * + * @title: + * OpenType Validation + * + * @abstract: + * An API to validate OpenType tables. + * + * @description: + * This section contains the declaration of functions to validate some + * OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). + * + * @order: + * FT_OpenType_Validate + * FT_OpenType_Free + * + * FT_VALIDATE_OTXXX + * + */ + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_OTXXX + * + * @description: + * A list of bit-field constants used with @FT_OpenType_Validate to + * indicate which OpenType tables should be validated. + * + * @values: + * FT_VALIDATE_BASE :: + * Validate BASE table. + * + * FT_VALIDATE_GDEF :: + * Validate GDEF table. + * + * FT_VALIDATE_GPOS :: + * Validate GPOS table. + * + * FT_VALIDATE_GSUB :: + * Validate GSUB table. + * + * FT_VALIDATE_JSTF :: + * Validate JSTF table. + * + * FT_VALIDATE_MATH :: + * Validate MATH table. + * + * FT_VALIDATE_OT :: + * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). + * + */ #define FT_VALIDATE_BASE 0x0100 #define FT_VALIDATE_GDEF 0x0200 #define FT_VALIDATE_GPOS 0x0400 @@ -106,60 +105,61 @@ FT_BEGIN_HEADER #define FT_VALIDATE_JSTF 0x1000 #define FT_VALIDATE_MATH 0x2000 -#define FT_VALIDATE_OT FT_VALIDATE_BASE | \ - FT_VALIDATE_GDEF | \ - FT_VALIDATE_GPOS | \ - FT_VALIDATE_GSUB | \ - FT_VALIDATE_JSTF | \ - FT_VALIDATE_MATH - - /********************************************************************** - * - * @function: - * FT_OpenType_Validate - * - * @description: - * Validate various OpenType tables to assure that all offsets and - * indices are valid. The idea is that a higher-level library that - * actually does the text layout can access those tables without - * error checking (which can be quite time consuming). - * - * @input: - * face :: - * A handle to the input face. - * - * validation_flags :: - * A bit field that specifies the tables to be validated. See - * @FT_VALIDATE_OTXXX for possible values. - * - * @output: - * BASE_table :: - * A pointer to the BASE table. - * - * GDEF_table :: - * A pointer to the GDEF table. - * - * GPOS_table :: - * A pointer to the GPOS table. - * - * GSUB_table :: - * A pointer to the GSUB table. - * - * JSTF_table :: - * A pointer to the JSTF table. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function only works with OpenType fonts, returning an error - * otherwise. - * - * After use, the application should deallocate the five tables with - * @FT_OpenType_Free. A NULL value indicates that the table either - * doesn't exist in the font, or the application hasn't asked for - * validation. - */ +#define FT_VALIDATE_OT ( FT_VALIDATE_BASE | \ + FT_VALIDATE_GDEF | \ + FT_VALIDATE_GPOS | \ + FT_VALIDATE_GSUB | \ + FT_VALIDATE_JSTF | \ + FT_VALIDATE_MATH ) + + + /************************************************************************** + * + * @function: + * FT_OpenType_Validate + * + * @description: + * Validate various OpenType tables to assure that all offsets and + * indices are valid. The idea is that a higher-level library that + * actually does the text layout can access those tables without error + * checking (which can be quite time consuming). + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the tables to be validated. See + * @FT_VALIDATE_OTXXX for possible values. + * + * @output: + * BASE_table :: + * A pointer to the BASE table. + * + * GDEF_table :: + * A pointer to the GDEF table. + * + * GPOS_table :: + * A pointer to the GPOS table. + * + * GSUB_table :: + * A pointer to the GSUB table. + * + * JSTF_table :: + * A pointer to the JSTF table. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with OpenType fonts, returning an error + * otherwise. + * + * After use, the application should deallocate the five tables with + * @FT_OpenType_Free. A `NULL` value indicates that the table either + * doesn't exist in the font, or the application hasn't asked for + * validation. + */ FT_EXPORT( FT_Error ) FT_OpenType_Validate( FT_Face face, FT_UInt validation_flags, @@ -169,30 +169,32 @@ FT_BEGIN_HEADER FT_Bytes *GSUB_table, FT_Bytes *JSTF_table ); - /********************************************************************** - * - * @function: - * FT_OpenType_Free - * - * @description: - * Free the buffer allocated by OpenType validator. - * - * @input: - * face :: - * A handle to the input face. - * - * table :: - * The pointer to the buffer that is allocated by - * @FT_OpenType_Validate. - * - * @note: - * This function must be used to free the buffer allocated by - * @FT_OpenType_Validate only. - */ + + /************************************************************************** + * + * @function: + * FT_OpenType_Free + * + * @description: + * Free the buffer allocated by OpenType validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer that is allocated by + * @FT_OpenType_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_OpenType_Validate only. + */ FT_EXPORT( void ) FT_OpenType_Free( FT_Face face, FT_Bytes table ); + /* */ diff --git a/non-source/foreign/freetype2/freetype/ftoutln.h b/non-source/foreign/freetype2/freetype/ftoutln.h index 6a6451207..44e94b4f5 100644 --- a/non-source/foreign/freetype2/freetype/ftoutln.h +++ b/non-source/foreign/freetype2/freetype/ftoutln.h @@ -1,28 +1,27 @@ -/***************************************************************************/ -/* */ -/* ftoutln.h */ -/* */ -/* Support for the FT_Outline type used to store glyph shapes of */ -/* most scalable font formats (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftoutln.h + * + * Support for the FT_Outline type used to store glyph shapes of + * most scalable font formats (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTOUTLN_H_ #define FTOUTLN_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -34,123 +33,133 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* outline_processing */ - /* */ - /* <Title> */ - /* Outline Processing */ - /* */ - /* <Abstract> */ - /* Functions to create, transform, and render vectorial glyph images. */ - /* */ - /* <Description> */ - /* This section contains routines used to create and destroy scalable */ - /* glyph images known as `outlines'. These can also be measured, */ - /* transformed, and converted into bitmaps and pixmaps. */ - /* */ - /* <Order> */ - /* FT_Outline */ - /* FT_Outline_New */ - /* FT_Outline_Done */ - /* FT_Outline_Copy */ - /* FT_Outline_Translate */ - /* FT_Outline_Transform */ - /* FT_Outline_Embolden */ - /* FT_Outline_EmboldenXY */ - /* FT_Outline_Reverse */ - /* FT_Outline_Check */ - /* */ - /* FT_Outline_Get_CBox */ - /* FT_Outline_Get_BBox */ - /* */ - /* FT_Outline_Get_Bitmap */ - /* FT_Outline_Render */ - /* FT_Outline_Decompose */ - /* FT_Outline_Funcs */ - /* FT_Outline_MoveToFunc */ - /* FT_Outline_LineToFunc */ - /* FT_Outline_ConicToFunc */ - /* FT_Outline_CubicToFunc */ - /* */ - /* FT_Orientation */ - /* FT_Outline_Get_Orientation */ - /* */ - /* FT_OUTLINE_XXX */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Decompose */ - /* */ - /* <Description> */ - /* Walk over an outline's structure to decompose it into individual */ - /* segments and Bézier arcs. This function also emits `move to' */ - /* operations to indicate the start of new contours in the outline. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source target. */ - /* */ - /* func_interface :: A table of `emitters', i.e., function pointers */ - /* called during decomposition to indicate path */ - /* operations. */ - /* */ - /* <InOut> */ - /* user :: A typeless pointer that is passed to each */ - /* emitter during the decomposition. It can be */ - /* used to store the state during the */ - /* decomposition. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* A contour that contains a single point only is represented by a */ - /* `move to' operation followed by `line to' to the same point. In */ - /* most cases, it is best to filter this out before using the */ - /* outline for stroking purposes (otherwise it would result in a */ - /* visible dot when round caps are used). */ - /* */ + /************************************************************************** + * + * @section: + * outline_processing + * + * @title: + * Outline Processing + * + * @abstract: + * Functions to create, transform, and render vectorial glyph images. + * + * @description: + * This section contains routines used to create and destroy scalable + * glyph images known as 'outlines'. These can also be measured, + * transformed, and converted into bitmaps and pixmaps. + * + * @order: + * FT_Outline + * FT_Outline_New + * FT_Outline_Done + * FT_Outline_Copy + * FT_Outline_Translate + * FT_Outline_Transform + * FT_Outline_Embolden + * FT_Outline_EmboldenXY + * FT_Outline_Reverse + * FT_Outline_Check + * + * FT_Outline_Get_CBox + * FT_Outline_Get_BBox + * + * FT_Outline_Get_Bitmap + * FT_Outline_Render + * FT_Outline_Decompose + * FT_Outline_Funcs + * FT_Outline_MoveToFunc + * FT_Outline_LineToFunc + * FT_Outline_ConicToFunc + * FT_Outline_CubicToFunc + * + * FT_Orientation + * FT_Outline_Get_Orientation + * + * FT_OUTLINE_XXX + * + */ + + + /************************************************************************** + * + * @function: + * FT_Outline_Decompose + * + * @description: + * Walk over an outline's structure to decompose it into individual + * segments and Bezier arcs. This function also emits 'move to' + * operations to indicate the start of new contours in the outline. + * + * @input: + * outline :: + * A pointer to the source target. + * + * func_interface :: + * A table of 'emitters', i.e., function pointers called during + * decomposition to indicate path operations. + * + * @inout: + * user :: + * A typeless pointer that is passed to each emitter during the + * decomposition. It can be used to store the state during the + * decomposition. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Degenerate contours, segments, and Bezier arcs may be reported. In + * most cases, it is best to filter these out before using the outline + * for stroking or other path modification purposes (which may cause + * degenerate segments to become non-degenerate and visible, like when + * stroke caps are used or the path is otherwise outset). Some glyph + * outlines may contain deliberate degenerate single points for mark + * attachement. + * + * Similarly, the function returns success for an empty outline also + * (doing nothing, that is, not calling any emitter); if necessary, you + * should filter this out, too. + */ FT_EXPORT( FT_Error ) FT_Outline_Decompose( FT_Outline* outline, const FT_Outline_Funcs* func_interface, void* user ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_New */ - /* */ - /* <Description> */ - /* Create a new outline of a given size. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object from where the */ - /* outline is allocated. Note however that the new */ - /* outline will *not* necessarily be *freed*, when */ - /* destroying the library, by @FT_Done_FreeType. */ - /* */ - /* numPoints :: The maximum number of points within the outline. */ - /* Must be smaller than or equal to 0xFFFF (65535). */ - /* */ - /* numContours :: The maximum number of contours within the outline. */ - /* This value must be in the range 0 to `numPoints'. */ - /* */ - /* <Output> */ - /* anoutline :: A handle to the new outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The reason why this function takes a `library' parameter is simply */ - /* to use the library's memory allocator. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_New + * + * @description: + * Create a new outline of a given size. + * + * @input: + * library :: + * A handle to the library object from where the outline is allocated. + * Note however that the new outline will **not** necessarily be + * **freed**, when destroying the library, by @FT_Done_FreeType. + * + * numPoints :: + * The maximum number of points within the outline. Must be smaller + * than or equal to 0xFFFF (65535). + * + * numContours :: + * The maximum number of contours within the outline. This value must + * be in the range 0 to `numPoints`. + * + * @output: + * anoutline :: + * A handle to the new outline. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The reason why this function takes a `library` parameter is simply to + * use the library's memory allocator. + */ FT_EXPORT( FT_Error ) FT_Outline_New( FT_Library library, FT_UInt numPoints, @@ -158,368 +167,372 @@ FT_BEGIN_HEADER FT_Outline *anoutline ); - FT_EXPORT( FT_Error ) - FT_Outline_New_Internal( FT_Memory memory, - FT_UInt numPoints, - FT_Int numContours, - FT_Outline *anoutline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Done */ - /* */ - /* <Description> */ - /* Destroy an outline created with @FT_Outline_New. */ - /* */ - /* <Input> */ - /* library :: A handle of the library object used to allocate the */ - /* outline. */ - /* */ - /* outline :: A pointer to the outline object to be discarded. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If the outline's `owner' field is not set, only the outline */ - /* descriptor will be released. */ - /* */ - /* The reason why this function takes an `library' parameter is */ - /* simply to use ft_mem_free(). */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Done + * + * @description: + * Destroy an outline created with @FT_Outline_New. + * + * @input: + * library :: + * A handle of the library object used to allocate the outline. + * + * outline :: + * A pointer to the outline object to be discarded. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the outline's 'owner' field is not set, only the outline descriptor + * will be released. + */ FT_EXPORT( FT_Error ) FT_Outline_Done( FT_Library library, FT_Outline* outline ); - FT_EXPORT( FT_Error ) - FT_Outline_Done_Internal( FT_Memory memory, - FT_Outline* outline ); - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Check */ - /* */ - /* <Description> */ - /* Check the contents of an outline descriptor. */ - /* */ - /* <Input> */ - /* outline :: A handle to a source outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Check + * + * @description: + * Check the contents of an outline descriptor. + * + * @input: + * outline :: + * A handle to a source outline. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An empty outline, or an outline with a single point only is also + * valid. + */ FT_EXPORT( FT_Error ) FT_Outline_Check( FT_Outline* outline ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_CBox */ - /* */ - /* <Description> */ - /* Return an outline's `control box'. The control box encloses all */ - /* the outline's points, including Bézier control points. Though it */ - /* coincides with the exact bounding box for most glyphs, it can be */ - /* slightly larger in some situations (like when rotating an outline */ - /* that contains Bézier outside arcs). */ - /* */ - /* Computing the control box is very fast, while getting the bounding */ - /* box can take much more time as it needs to walk over all segments */ - /* and arcs in the outline. To get the latter, you can use the */ - /* `ftbbox' component, which is dedicated to this single task. */ - /* */ - /* <Input> */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <Output> */ - /* acbox :: The outline's control box. */ - /* */ - /* <Note> */ - /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Get_CBox + * + * @description: + * Return an outline's 'control box'. The control box encloses all the + * outline's points, including Bezier control points. Though it + * coincides with the exact bounding box for most glyphs, it can be + * slightly larger in some situations (like when rotating an outline that + * contains Bezier outside arcs). + * + * Computing the control box is very fast, while getting the bounding box + * can take much more time as it needs to walk over all segments and arcs + * in the outline. To get the latter, you can use the 'ftbbox' + * component, which is dedicated to this single task. + * + * @input: + * outline :: + * A pointer to the source outline descriptor. + * + * @output: + * acbox :: + * The outline's control box. + * + * @note: + * See @FT_Glyph_Get_CBox for a discussion of tricky fonts. + */ FT_EXPORT( void ) FT_Outline_Get_CBox( const FT_Outline* outline, FT_BBox *acbox ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Translate */ - /* */ - /* <Description> */ - /* Apply a simple translation to the points of an outline. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Input> */ - /* xOffset :: The horizontal offset. */ - /* */ - /* yOffset :: The vertical offset. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Translate + * + * @description: + * Apply a simple translation to the points of an outline. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @input: + * xOffset :: + * The horizontal offset. + * + * yOffset :: + * The vertical offset. + */ FT_EXPORT( void ) FT_Outline_Translate( const FT_Outline* outline, FT_Pos xOffset, FT_Pos yOffset ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Copy */ - /* */ - /* <Description> */ - /* Copy an outline into another one. Both objects must have the */ - /* same sizes (number of points & number of contours) when this */ - /* function is called. */ - /* */ - /* <Input> */ - /* source :: A handle to the source outline. */ - /* */ - /* <Output> */ - /* target :: A handle to the target outline. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Copy + * + * @description: + * Copy an outline into another one. Both objects must have the same + * sizes (number of points & number of contours) when this function is + * called. + * + * @input: + * source :: + * A handle to the source outline. + * + * @output: + * target :: + * A handle to the target outline. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Outline_Copy( const FT_Outline* source, FT_Outline *target ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Transform */ - /* */ - /* <Description> */ - /* Apply a simple 2x2 matrix to all of an outline's points. Useful */ - /* for applying rotations, slanting, flipping, etc. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Input> */ - /* matrix :: A pointer to the transformation matrix. */ - /* */ - /* <Note> */ - /* You can use @FT_Outline_Translate if you need to translate the */ - /* outline's points. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Transform + * + * @description: + * Apply a simple 2x2 matrix to all of an outline's points. Useful for + * applying rotations, slanting, flipping, etc. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @input: + * matrix :: + * A pointer to the transformation matrix. + * + * @note: + * You can use @FT_Outline_Translate if you need to translate the + * outline's points. + */ FT_EXPORT( void ) FT_Outline_Transform( const FT_Outline* outline, const FT_Matrix* matrix ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Embolden */ - /* */ - /* <Description> */ - /* Embolden an outline. The new outline will be at most 4~times */ - /* `strength' pixels wider and higher. You may think of the left and */ - /* bottom borders as unchanged. */ - /* */ - /* Negative `strength' values to reduce the outline thickness are */ - /* possible also. */ - /* */ - /* <InOut> */ - /* outline :: A handle to the target outline. */ - /* */ - /* <Input> */ - /* strength :: How strong the glyph is emboldened. Expressed in */ - /* 26.6 pixel format. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The used algorithm to increase or decrease the thickness of the */ - /* glyph doesn't change the number of points; this means that certain */ - /* situations like acute angles or intersections are sometimes */ - /* handled incorrectly. */ - /* */ - /* If you need `better' metrics values you should call */ - /* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. */ - /* */ - /* Example call: */ - /* */ - /* { */ - /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */ - /* if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) */ - /* FT_Outline_Embolden( &face->glyph->outline, strength ); */ - /* } */ - /* */ - /* To get meaningful results, font scaling values must be set with */ - /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Embolden + * + * @description: + * Embolden an outline. The new outline will be at most 4~times + * `strength` pixels wider and higher. You may think of the left and + * bottom borders as unchanged. + * + * Negative `strength` values to reduce the outline thickness are + * possible also. + * + * @inout: + * outline :: + * A handle to the target outline. + * + * @input: + * strength :: + * How strong the glyph is emboldened. Expressed in 26.6 pixel format. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The used algorithm to increase or decrease the thickness of the glyph + * doesn't change the number of points; this means that certain + * situations like acute angles or intersections are sometimes handled + * incorrectly. + * + * If you need 'better' metrics values you should call + * @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. + * + * To get meaningful results, font scaling values must be set with + * functions like @FT_Set_Char_Size before calling FT_Render_Glyph. + * + * @example: + * ``` + * FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); + * + * if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) + * FT_Outline_Embolden( &face->glyph->outline, strength ); + * ``` + * + */ FT_EXPORT( FT_Error ) FT_Outline_Embolden( FT_Outline* outline, FT_Pos strength ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_EmboldenXY */ - /* */ - /* <Description> */ - /* Embolden an outline. The new outline will be `xstrength' pixels */ - /* wider and `ystrength' pixels higher. Otherwise, it is similar to */ - /* @FT_Outline_Embolden, which uses the same strength in both */ - /* directions. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_EmboldenXY + * + * @description: + * Embolden an outline. The new outline will be `xstrength` pixels wider + * and `ystrength` pixels higher. Otherwise, it is similar to + * @FT_Outline_Embolden, which uses the same strength in both directions. + * + * @since: + * 2.4.10 + */ FT_EXPORT( FT_Error ) FT_Outline_EmboldenXY( FT_Outline* outline, FT_Pos xstrength, FT_Pos ystrength ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Reverse */ - /* */ - /* <Description> */ - /* Reverse the drawing direction of an outline. This is used to */ - /* ensure consistent fill conventions for mirrored glyphs. */ - /* */ - /* <InOut> */ - /* outline :: A pointer to the target outline descriptor. */ - /* */ - /* <Note> */ - /* This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */ - /* the outline's `flags' field. */ - /* */ - /* It shouldn't be used by a normal client application, unless it */ - /* knows what it is doing. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Reverse + * + * @description: + * Reverse the drawing direction of an outline. This is used to ensure + * consistent fill conventions for mirrored glyphs. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @note: + * This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in the + * outline's `flags` field. + * + * It shouldn't be used by a normal client application, unless it knows + * what it is doing. + */ FT_EXPORT( void ) FT_Outline_Reverse( FT_Outline* outline ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Get_Bitmap */ - /* */ - /* <Description> */ - /* Render an outline within a bitmap. The outline's image is simply */ - /* OR-ed to the target bitmap. */ - /* */ - /* <Input> */ - /* library :: A handle to a FreeType library object. */ - /* */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <InOut> */ - /* abitmap :: A pointer to the target bitmap descriptor. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* This function does NOT CREATE the bitmap, it only renders an */ - /* outline image within the one you pass to it! Consequently, the */ - /* various fields in `abitmap' should be set accordingly. */ - /* */ - /* It will use the raster corresponding to the default glyph format. */ - /* */ - /* The value of the `num_grays' field in `abitmap' is ignored. If */ - /* you select the gray-level rasterizer, and you want less than 256 */ - /* gray levels, you have to use @FT_Outline_Render directly. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Get_Bitmap + * + * @description: + * Render an outline within a bitmap. The outline's image is simply + * OR-ed to the target bitmap. + * + * @input: + * library :: + * A handle to a FreeType library object. + * + * outline :: + * A pointer to the source outline descriptor. + * + * @inout: + * abitmap :: + * A pointer to the target bitmap descriptor. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function does **not create** the bitmap, it only renders an + * outline image within the one you pass to it! Consequently, the + * various fields in `abitmap` should be set accordingly. + * + * It will use the raster corresponding to the default glyph format. + * + * The value of the `num_grays` field in `abitmap` is ignored. If you + * select the gray-level rasterizer, and you want less than 256 gray + * levels, you have to use @FT_Outline_Render directly. + */ FT_EXPORT( FT_Error ) FT_Outline_Get_Bitmap( FT_Library library, FT_Outline* outline, const FT_Bitmap *abitmap ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Outline_Render */ - /* */ - /* <Description> */ - /* Render an outline within a bitmap using the current scan-convert. */ - /* This function uses an @FT_Raster_Params structure as an argument, */ - /* allowing advanced features like direct composition, translucency, */ - /* etc. */ - /* */ - /* <Input> */ - /* library :: A handle to a FreeType library object. */ - /* */ - /* outline :: A pointer to the source outline descriptor. */ - /* */ - /* <InOut> */ - /* params :: A pointer to an @FT_Raster_Params structure used to */ - /* describe the rendering operation. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You should know what you are doing and how @FT_Raster_Params works */ - /* to use this function. */ - /* */ - /* The field `params.source' will be set to `outline' before the scan */ - /* converter is called, which means that the value you give to it is */ - /* actually ignored. */ - /* */ - /* The gray-level rasterizer always uses 256 gray levels. If you */ - /* want less gray levels, you have to provide your own span callback. */ - /* See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the */ - /* @FT_Raster_Params structure for more details. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Outline_Render + * + * @description: + * Render an outline within a bitmap using the current scan-convert. + * + * @input: + * library :: + * A handle to a FreeType library object. + * + * outline :: + * A pointer to the source outline descriptor. + * + * @inout: + * params :: + * A pointer to an @FT_Raster_Params structure used to describe the + * rendering operation. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This advanced function uses @FT_Raster_Params as an argument. + * 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. 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, FT_Outline* outline, FT_Raster_Params* params ); - /************************************************************************** - * - * @enum: - * FT_Orientation - * - * @description: - * A list of values used to describe an outline's contour orientation. - * - * The TrueType and PostScript specifications use different conventions - * to determine whether outline contours should be filled or unfilled. - * - * @values: - * FT_ORIENTATION_TRUETYPE :: - * According to the TrueType specification, clockwise contours must - * be filled, and counter-clockwise ones must be unfilled. - * - * FT_ORIENTATION_POSTSCRIPT :: - * According to the PostScript specification, counter-clockwise contours - * must be filled, and clockwise ones must be unfilled. - * - * FT_ORIENTATION_FILL_RIGHT :: - * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to - * remember that in TrueType, everything that is to the right of - * the drawing direction of a contour must be filled. - * - * FT_ORIENTATION_FILL_LEFT :: - * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to - * remember that in PostScript, everything that is to the left of - * the drawing direction of a contour must be filled. - * - * FT_ORIENTATION_NONE :: - * The orientation cannot be determined. That is, different parts of - * the glyph have different orientation. - * - */ + /************************************************************************** + * + * @enum: + * FT_Orientation + * + * @description: + * A list of values used to describe an outline's contour orientation. + * + * The TrueType and PostScript specifications use different conventions + * to determine whether outline contours should be filled or unfilled. + * + * @values: + * FT_ORIENTATION_TRUETYPE :: + * According to the TrueType specification, clockwise contours must be + * filled, and counter-clockwise ones must be unfilled. + * + * FT_ORIENTATION_POSTSCRIPT :: + * According to the PostScript specification, counter-clockwise + * contours must be filled, and clockwise ones must be unfilled. + * + * FT_ORIENTATION_FILL_RIGHT :: + * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to + * remember that in TrueType, everything that is to the right of the + * drawing direction of a contour must be filled. + * + * FT_ORIENTATION_FILL_LEFT :: + * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to + * remember that in PostScript, everything that is to the left of the + * drawing direction of a contour must be filled. + * + * FT_ORIENTATION_NONE :: + * The orientation cannot be determined. That is, different parts of + * the glyph have different orientation. + * + */ typedef enum FT_Orientation_ { FT_ORIENTATION_TRUETYPE = 0, @@ -531,33 +544,34 @@ FT_BEGIN_HEADER } FT_Orientation; - /************************************************************************** - * - * @function: - * FT_Outline_Get_Orientation - * - * @description: - * This function analyzes a glyph outline and tries to compute its - * fill orientation (see @FT_Orientation). This is done by integrating - * the total area covered by the outline. The positive integral - * corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT - * is returned. The negative integral corresponds to the counter-clockwise - * orientation and @FT_ORIENTATION_TRUETYPE is returned. - * - * Note that this will return @FT_ORIENTATION_TRUETYPE for empty - * outlines. - * - * @input: - * outline :: - * A handle to the source outline. - * - * @return: - * The orientation. - * - */ + /************************************************************************** + * + * @function: + * FT_Outline_Get_Orientation + * + * @description: + * This function analyzes a glyph outline and tries to compute its fill + * orientation (see @FT_Orientation). This is done by integrating the + * total area covered by the outline. The positive integral corresponds + * to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT is + * returned. The negative integral corresponds to the counter-clockwise + * orientation and @FT_ORIENTATION_TRUETYPE is returned. + * + * Note that this will return @FT_ORIENTATION_TRUETYPE for empty + * outlines. + * + * @input: + * outline :: + * A handle to the source outline. + * + * @return: + * The orientation. + * + */ FT_EXPORT( FT_Orientation ) FT_Outline_Get_Orientation( FT_Outline* outline ); + /* */ diff --git a/non-source/foreign/freetype2/freetype/ftparams.h b/non-source/foreign/freetype2/freetype/ftparams.h new file mode 100644 index 000000000..43bf69c20 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/ftparams.h @@ -0,0 +1,218 @@ +/**************************************************************************** + * + * ftparams.h + * + * FreeType API for possible FT_Parameter tags (specification only). + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTPARAMS_H_ +#define FTPARAMS_H_ + +#include <freetype/freetype.h> + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * parameter_tags + * + * @title: + * Parameter Tags + * + * @abstract: + * Macros for driver property and font loading parameter tags. + * + * @description: + * This section contains macros for the @FT_Parameter structure that are + * used with various functions to activate some special functionality or + * different behaviour of various components of FreeType. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic + * family names in the 'name' table (introduced in OpenType version 1.4). + * Use this for backward compatibility with legacy systems that have a + * four-faces-per-family restriction. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \ + FT_MAKE_TAG( 'i', 'g', 'p', 'f' ) + + + /* this constant is deprecated */ +#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \ + FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic + * subfamily names in the 'name' table (introduced in OpenType version + * 1.4). Use this for backward compatibility with legacy systems that + * have a four-faces-per-family restriction. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \ + FT_MAKE_TAG( 'i', 'g', 'p', 's' ) + + + /* this constant is deprecated */ +#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \ + FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_INCREMENTAL + * + * @description: + * An @FT_Parameter tag to be used with @FT_Open_Face to indicate + * incremental glyph loading. + * + */ +#define FT_PARAM_TAG_INCREMENTAL \ + FT_MAKE_TAG( 'i', 'n', 'c', 'r' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_SBIX + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore an 'sbix' table + * while loading a font. Use this if @FT_FACE_FLAG_SBIX is set and you + * want to access the outline glyphs in the font. + * + */ +#define FT_PARAM_TAG_IGNORE_SBIX \ + FT_MAKE_TAG( 'i', 's', 'b', 'x' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_LCD_FILTER_WEIGHTS + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding argument specifies the five LCD filter weights for a + * given face (if using @FT_LOAD_TARGET_LCD, for example), overriding the + * global default values or the values set up with + * @FT_Library_SetLcdFilterWeights. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \ + FT_MAKE_TAG( 'l', 'c', 'd', 'f' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_RANDOM_SEED + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding 32bit signed integer argument overrides the font + * driver's random seed value with a face-specific one; see @random-seed. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_RANDOM_SEED \ + FT_MAKE_TAG( 's', 'e', 'e', 'd' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_STEM_DARKENING + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding Boolean argument specifies whether to apply stem + * darkening, overriding the global default values or the values set up + * with @FT_Property_Set (see @no-stem-darkening). + * + * This is a passive setting that only takes effect if the font driver or + * autohinter honors it, which the CFF, Type~1, and CID drivers always + * do, but the autohinter only in 'light' hinting mode (as of version + * 2.9). + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_STEM_DARKENING \ + FT_MAKE_TAG( 'd', 'a', 'r', 'k' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_UNPATENTED_HINTING + * + * @description: + * Deprecated, no effect. + * + * Previously: A constant used as the tag of an @FT_Parameter structure + * to indicate that unpatented methods only should be used by the + * TrueType bytecode interpreter for a typeface opened by @FT_Open_Face. + * + */ +#define FT_PARAM_TAG_UNPATENTED_HINTING \ + FT_MAKE_TAG( 'u', 'n', 'p', 'a' ) + + + /* */ + + +FT_END_HEADER + + +#endif /* FTPARAMS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/ftpfr.h b/non-source/foreign/freetype2/freetype/ftpfr.h index 2e1bff2f6..1a712b955 100644 --- a/non-source/foreign/freetype2/freetype/ftpfr.h +++ b/non-source/foreign/freetype2/freetype/ftpfr.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftpfr.h */ -/* */ -/* FreeType API for accessing PFR-specific data (specification only). */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftpfr.h + * + * FreeType API for accessing PFR-specific data (specification only). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTPFR_H_ #define FTPFR_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -32,60 +31,61 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* pfr_fonts */ - /* */ - /* <Title> */ - /* PFR Fonts */ - /* */ - /* <Abstract> */ - /* PFR/TrueDoc specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of PFR-specific functions. */ - /* */ - /*************************************************************************/ - - - /********************************************************************** - * - * @function: - * FT_Get_PFR_Metrics - * - * @description: - * Return the outline and metrics resolutions of a given PFR face. - * - * @input: - * face :: Handle to the input face. It can be a non-PFR face. - * - * @output: - * aoutline_resolution :: - * Outline resolution. This is equivalent to `face->units_per_EM' - * for non-PFR fonts. Optional (parameter can be NULL). - * - * ametrics_resolution :: - * Metrics resolution. This is equivalent to `outline_resolution' - * for non-PFR fonts. Optional (parameter can be NULL). - * - * ametrics_x_scale :: - * A 16.16 fixed-point number used to scale distance expressed - * in metrics units to device sub-pixels. This is equivalent to - * `face->size->x_scale', but for metrics only. Optional (parameter - * can be NULL). - * - * ametrics_y_scale :: - * Same as `ametrics_x_scale' but for the vertical direction. - * optional (parameter can be NULL). - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * If the input face is not a PFR, this function will return an error. - * However, in all cases, it will return valid values. - */ + /************************************************************************** + * + * @section: + * pfr_fonts + * + * @title: + * PFR Fonts + * + * @abstract: + * PFR/TrueDoc-specific API. + * + * @description: + * This section contains the declaration of PFR-specific functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_PFR_Metrics + * + * @description: + * Return the outline and metrics resolutions of a given PFR face. + * + * @input: + * face :: + * Handle to the input face. It can be a non-PFR face. + * + * @output: + * aoutline_resolution :: + * Outline resolution. This is equivalent to `face->units_per_EM` for + * non-PFR fonts. Optional (parameter can be `NULL`). + * + * ametrics_resolution :: + * Metrics resolution. This is equivalent to `outline_resolution` for + * non-PFR fonts. Optional (parameter can be `NULL`). + * + * ametrics_x_scale :: + * A 16.16 fixed-point number used to scale distance expressed in + * metrics units to device subpixels. This is equivalent to + * `face->size->x_scale`, but for metrics only. Optional (parameter + * can be `NULL`). + * + * ametrics_y_scale :: + * Same as `ametrics_x_scale` but for the vertical direction. + * optional (parameter can be `NULL`). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the input face is not a PFR, this function will return an error. + * However, in all cases, it will return valid values. + */ FT_EXPORT( FT_Error ) FT_Get_PFR_Metrics( FT_Face face, FT_UInt *aoutline_resolution, @@ -94,37 +94,41 @@ FT_BEGIN_HEADER FT_Fixed *ametrics_y_scale ); - /********************************************************************** - * - * @function: - * FT_Get_PFR_Kerning - * - * @description: - * Return the kerning pair corresponding to two glyphs in a PFR face. - * The distance is expressed in metrics units, unlike the result of - * @FT_Get_Kerning. - * - * @input: - * face :: A handle to the input face. - * - * left :: Index of the left glyph. - * - * right :: Index of the right glyph. - * - * @output: - * avector :: A kerning vector. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * This function always return distances in original PFR metrics - * units. This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED - * mode, which always returns distances converted to outline units. - * - * You can use the value of the `x_scale' and `y_scale' parameters - * returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels. - */ + /************************************************************************** + * + * @function: + * FT_Get_PFR_Kerning + * + * @description: + * Return the kerning pair corresponding to two glyphs in a PFR face. + * The distance is expressed in metrics units, unlike the result of + * @FT_Get_Kerning. + * + * @input: + * face :: + * A handle to the input face. + * + * left :: + * Index of the left glyph. + * + * right :: + * Index of the right glyph. + * + * @output: + * avector :: + * A kerning vector. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function always return distances in original PFR metrics units. + * This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED mode, + * which always returns distances converted to outline units. + * + * You can use the value of the `x_scale` and `y_scale` parameters + * returned by @FT_Get_PFR_Metrics to scale these to device subpixels. + */ FT_EXPORT( FT_Error ) FT_Get_PFR_Kerning( FT_Face face, FT_UInt left, @@ -132,30 +136,33 @@ FT_BEGIN_HEADER FT_Vector *avector ); - /********************************************************************** - * - * @function: - * FT_Get_PFR_Advance - * - * @description: - * Return a given glyph advance, expressed in original metrics units, - * from a PFR font. - * - * @input: - * face :: A handle to the input face. - * - * gindex :: The glyph index. - * - * @output: - * aadvance :: The glyph advance in metrics units. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics - * to convert the advance to device sub-pixels (i.e., 1/64th of pixels). - */ + /************************************************************************** + * + * @function: + * FT_Get_PFR_Advance + * + * @description: + * Return a given glyph advance, expressed in original metrics units, + * from a PFR font. + * + * @input: + * face :: + * A handle to the input face. + * + * gindex :: + * The glyph index. + * + * @output: + * aadvance :: + * The glyph advance in metrics units. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You can use the `x_scale` or `y_scale` results of @FT_Get_PFR_Metrics + * to convert the advance to device subpixels (i.e., 1/64 of pixels). + */ FT_EXPORT( FT_Error ) FT_Get_PFR_Advance( FT_Face face, FT_UInt gindex, diff --git a/non-source/foreign/freetype2/freetype/ftrender.h b/non-source/foreign/freetype2/freetype/ftrender.h index 9f7ed9e9d..dc5018a1b 100644 --- a/non-source/foreign/freetype2/freetype/ftrender.h +++ b/non-source/foreign/freetype2/freetype/ftrender.h @@ -1,39 +1,38 @@ -/***************************************************************************/ -/* */ -/* ftrender.h */ -/* */ -/* FreeType renderer modules public interface (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftrender.h + * + * FreeType renderer modules public interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTRENDER_H_ #define FTRENDER_H_ -#include <ft2build.h> -#include FT_MODULE_H -#include FT_GLYPH_H +#include <freetype/ftmodapi.h> +#include <freetype/ftglyph.h> FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* module_management */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * module_management + * + */ /* create a new glyph object */ @@ -75,6 +74,7 @@ FT_BEGIN_HEADER { FT_Long glyph_size; FT_Glyph_Format glyph_format; + FT_Glyph_InitFunc glyph_init; FT_Glyph_DoneFunc glyph_done; FT_Glyph_CopyFunc glyph_copy; @@ -87,7 +87,7 @@ FT_BEGIN_HEADER typedef FT_Error (*FT_Renderer_RenderFunc)( FT_Renderer renderer, FT_GlyphSlot slot, - FT_UInt mode, + FT_Render_Mode mode, const FT_Vector* origin ); typedef FT_Error @@ -115,32 +115,38 @@ FT_BEGIN_HEADER #define FTRenderer_setMode FT_Renderer_SetModeFunc - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Renderer_Class */ - /* */ - /* <Description> */ - /* The renderer module class descriptor. */ - /* */ - /* <Fields> */ - /* root :: The root @FT_Module_Class fields. */ - /* */ - /* glyph_format :: The glyph image format this renderer handles. */ - /* */ - /* render_glyph :: A method used to render the image that is in a */ - /* given glyph slot into a bitmap. */ - /* */ - /* transform_glyph :: A method used to transform the image that is in */ - /* a given glyph slot. */ - /* */ - /* get_glyph_cbox :: A method used to access the glyph's cbox. */ - /* */ - /* set_mode :: A method used to pass additional parameters. */ - /* */ - /* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */ - /* This is a pointer to its raster's class. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Renderer_Class + * + * @description: + * The renderer module class descriptor. + * + * @fields: + * root :: + * The root @FT_Module_Class fields. + * + * glyph_format :: + * The glyph image format this renderer handles. + * + * render_glyph :: + * A method used to render the image that is in a given glyph slot into + * a bitmap. + * + * transform_glyph :: + * A method used to transform the image that is in a given glyph slot. + * + * get_glyph_cbox :: + * A method used to access the glyph's cbox. + * + * set_mode :: + * A method used to pass additional parameters. + * + * raster_class :: + * For @FT_GLYPH_FORMAT_OUTLINE renderers only. This is a pointer to + * its raster's class. + */ typedef struct FT_Renderer_Class_ { FT_Module_Class root; @@ -152,69 +158,75 @@ FT_BEGIN_HEADER FT_Renderer_GetCBoxFunc get_glyph_cbox; FT_Renderer_SetModeFunc set_mode; - FT_Raster_Funcs* raster_class; + const FT_Raster_Funcs* raster_class; } FT_Renderer_Class; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Renderer */ - /* */ - /* <Description> */ - /* Retrieve the current renderer for a given glyph format. */ - /* */ - /* <Input> */ - /* library :: A handle to the library object. */ - /* */ - /* format :: The glyph format. */ - /* */ - /* <Return> */ - /* A renderer handle. 0~if none found. */ - /* */ - /* <Note> */ - /* An error will be returned if a module already exists by that name, */ - /* or if the module requires a version of FreeType that is too great. */ - /* */ - /* To add a new renderer, simply use @FT_Add_Module. To retrieve a */ - /* renderer by its name, use @FT_Get_Module. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Renderer + * + * @description: + * Retrieve the current renderer for a given glyph format. + * + * @input: + * library :: + * A handle to the library object. + * + * format :: + * The glyph format. + * + * @return: + * A renderer handle. 0~if none found. + * + * @note: + * An error will be returned if a module already exists by that name, or + * if the module requires a version of FreeType that is too great. + * + * To add a new renderer, simply use @FT_Add_Module. To retrieve a + * renderer by its name, use @FT_Get_Module. + */ FT_EXPORT( FT_Renderer ) FT_Get_Renderer( FT_Library library, FT_Glyph_Format format ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Set_Renderer */ - /* */ - /* <Description> */ - /* Set the current renderer to use, and set additional mode. */ - /* */ - /* <InOut> */ - /* library :: A handle to the library object. */ - /* */ - /* <Input> */ - /* renderer :: A handle to the renderer object. */ - /* */ - /* num_params :: The number of additional parameters. */ - /* */ - /* parameters :: Additional parameters. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* In case of success, the renderer will be used to convert glyph */ - /* images in the renderer's known format into bitmaps. */ - /* */ - /* This doesn't change the current renderer for other formats. */ - /* */ - /* Currently, no FreeType renderer module uses `parameters'; you */ - /* should thus always pass NULL as the value. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Set_Renderer + * + * @description: + * Set the current renderer to use, and set additional mode. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * renderer :: + * A handle to the renderer object. + * + * num_params :: + * The number of additional parameters. + * + * parameters :: + * Additional parameters. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * In case of success, the renderer will be used to convert glyph images + * in the renderer's known format into bitmaps. + * + * This doesn't change the current renderer for other formats. + * + * Currently, no FreeType renderer module uses `parameters`; you should + * thus always pass `NULL` as the value. + */ FT_EXPORT( FT_Error ) FT_Set_Renderer( FT_Library library, FT_Renderer renderer, diff --git a/non-source/foreign/freetype2/freetype/ftsizes.h b/non-source/foreign/freetype2/freetype/ftsizes.h index 55e0d5ccf..4ef5c7955 100644 --- a/non-source/foreign/freetype2/freetype/ftsizes.h +++ b/non-source/foreign/freetype2/freetype/ftsizes.h @@ -1,36 +1,35 @@ -/***************************************************************************/ -/* */ -/* ftsizes.h */ -/* */ -/* FreeType size objects management (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* Typical application would normally not need to use these functions. */ - /* However, they have been placed in a public API for the rare cases */ - /* where they are needed. */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ftsizes.h + * + * FreeType size objects management (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * Typical application would normally not need to use these functions. + * However, they have been placed in a public API for the rare cases where + * they are needed. + * + */ #ifndef FTSIZES_H_ #define FTSIZES_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -42,109 +41,110 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* sizes_management */ - /* */ - /* <Title> */ - /* Size Management */ - /* */ - /* <Abstract> */ - /* Managing multiple sizes per face. */ - /* */ - /* <Description> */ - /* When creating a new face object (e.g., with @FT_New_Face), an */ - /* @FT_Size object is automatically created and used to store all */ - /* pixel-size dependent information, available in the `face->size' */ - /* field. */ - /* */ - /* It is however possible to create more sizes for a given face, */ - /* mostly in order to manage several character pixel sizes of the */ - /* same font family and style. See @FT_New_Size and @FT_Done_Size. */ - /* */ - /* Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only */ - /* modify the contents of the current `active' size; you thus need */ - /* to use @FT_Activate_Size to change it. */ - /* */ - /* 99% of applications won't need the functions provided here, */ - /* especially if they use the caching sub-system, so be cautious */ - /* when using these. */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_New_Size */ - /* */ - /* <Description> */ - /* Create a new size object from a given face object. */ - /* */ - /* <Input> */ - /* face :: A handle to a parent face object. */ - /* */ - /* <Output> */ - /* asize :: A handle to a new size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* You need to call @FT_Activate_Size in order to select the new size */ - /* for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, */ - /* @FT_Load_Glyph, @FT_Load_Char, etc. */ - /* */ + /************************************************************************** + * + * @section: + * sizes_management + * + * @title: + * Size Management + * + * @abstract: + * Managing multiple sizes per face. + * + * @description: + * When creating a new face object (e.g., with @FT_New_Face), an @FT_Size + * object is automatically created and used to store all pixel-size + * dependent information, available in the `face->size` field. + * + * It is however possible to create more sizes for a given face, mostly + * in order to manage several character pixel sizes of the same font + * family and style. See @FT_New_Size and @FT_Done_Size. + * + * Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only modify the + * contents of the current 'active' size; you thus need to use + * @FT_Activate_Size to change it. + * + * 99% of applications won't need the functions provided here, especially + * if they use the caching sub-system, so be cautious when using these. + * + */ + + + /************************************************************************** + * + * @function: + * FT_New_Size + * + * @description: + * Create a new size object from a given face object. + * + * @input: + * face :: + * A handle to a parent face object. + * + * @output: + * asize :: + * A handle to a new size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You need to call @FT_Activate_Size in order to select the new size for + * upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, + * @FT_Load_Glyph, @FT_Load_Char, etc. + */ FT_EXPORT( FT_Error ) FT_New_Size( FT_Face face, FT_Size* size ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Done_Size */ - /* */ - /* <Description> */ - /* Discard a given size object. Note that @FT_Done_Face */ - /* automatically discards all size objects allocated with */ - /* @FT_New_Size. */ - /* */ - /* <Input> */ - /* size :: A handle to a target size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Done_Size + * + * @description: + * Discard a given size object. Note that @FT_Done_Face automatically + * discards all size objects allocated with @FT_New_Size. + * + * @input: + * size :: + * A handle to a target size object. + * + * @return: + * FreeType error code. 0~means success. + */ FT_EXPORT( FT_Error ) FT_Done_Size( FT_Size size ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Activate_Size */ - /* */ - /* <Description> */ - /* Even though it is possible to create several size objects for a */ - /* given face (see @FT_New_Size for details), functions like */ - /* @FT_Load_Glyph or @FT_Load_Char only use the one that has been */ - /* activated last to determine the `current character pixel size'. */ - /* */ - /* This function can be used to `activate' a previously created size */ - /* object. */ - /* */ - /* <Input> */ - /* size :: A handle to a target size object. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* If `face' is the size's parent face object, this function changes */ - /* the value of `face->size' to the input size handle. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Activate_Size + * + * @description: + * Even though it is possible to create several size objects for a given + * face (see @FT_New_Size for details), functions like @FT_Load_Glyph or + * @FT_Load_Char only use the one that has been activated last to + * determine the 'current character pixel size'. + * + * This function can be used to 'activate' a previously created size + * object. + * + * @input: + * size :: + * A handle to a target size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `face` is the size's parent face object, this function changes the + * value of `face->size` to the input size handle. + */ FT_EXPORT( FT_Error ) FT_Activate_Size( FT_Size size ); diff --git a/non-source/foreign/freetype2/freetype/ftsnames.h b/non-source/foreign/freetype2/freetype/ftsnames.h index a7b51c2cb..d5d5cd931 100644 --- a/non-source/foreign/freetype2/freetype/ftsnames.h +++ b/non-source/foreign/freetype2/freetype/ftsnames.h @@ -1,30 +1,30 @@ -/***************************************************************************/ -/* */ -/* ftsnames.h */ -/* */ -/* Simple interface to access SFNT name tables (which are used */ -/* to hold font names, copyright info, notices, etc.) (specification). */ -/* */ -/* This is _not_ used to retrieve glyph names! */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftsnames.h + * + * Simple interface to access SFNT 'name' tables (which are used + * to hold font names, copyright info, notices, etc.) (specification). + * + * This is _not_ used to retrieve glyph names! + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTSNAMES_H_ #define FTSNAMES_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> +#include <freetype/ftparams.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -36,65 +36,74 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* sfnt_names */ - /* */ - /* <Title> */ - /* SFNT Names */ - /* */ - /* <Abstract> */ - /* Access the names embedded in TrueType and OpenType files. */ - /* */ - /* <Description> */ - /* The TrueType and OpenType specifications allow the inclusion of */ - /* a special `names table' in font files. This table contains */ - /* textual (and internationalized) information regarding the font, */ - /* like family name, copyright, version, etc. */ - /* */ - /* The definitions below are used to access them if available. */ - /* */ - /* Note that this has nothing to do with glyph names! */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_SfntName */ - /* */ - /* <Description> */ - /* A structure used to model an SFNT `name' table entry. */ - /* */ - /* <Fields> */ - /* platform_id :: The platform ID for `string'. */ - /* */ - /* encoding_id :: The encoding ID for `string'. */ - /* */ - /* language_id :: The language ID for `string'. */ - /* */ - /* name_id :: An identifier for `string'. */ - /* */ - /* string :: The `name' string. Note that its format differs */ - /* depending on the (platform,encoding) pair. It can */ - /* be a Pascal String, a UTF-16 one, etc. */ - /* */ - /* Generally speaking, the string is not */ - /* zero-terminated. Please refer to the TrueType */ - /* specification for details. */ - /* */ - /* string_len :: The length of `string' in bytes. */ - /* */ - /* <Note> */ - /* Possible values for `platform_id', `encoding_id', `language_id', */ - /* and `name_id' are given in the file `ttnameid.h'. For details */ - /* please refer to the TrueType or OpenType specification. */ - /* */ - /* See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */ - /* @TT_ISO_ID_XXX, and @TT_MS_ID_XXX. */ - /* */ + /************************************************************************** + * + * @section: + * sfnt_names + * + * @title: + * SFNT Names + * + * @abstract: + * Access the names embedded in TrueType and OpenType files. + * + * @description: + * The TrueType and OpenType specifications allow the inclusion of a + * special names table ('name') in font files. This table contains + * textual (and internationalized) information regarding the font, like + * family name, copyright, version, etc. + * + * The definitions below are used to access them if available. + * + * Note that this has nothing to do with glyph names! + * + */ + + + /************************************************************************** + * + * @struct: + * FT_SfntName + * + * @description: + * A structure used to model an SFNT 'name' table entry. + * + * @fields: + * platform_id :: + * The platform ID for `string`. See @TT_PLATFORM_XXX for possible + * values. + * + * encoding_id :: + * The encoding ID for `string`. See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, + * @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX for possible + * values. + * + * language_id :: + * The language ID for `string`. See @TT_MAC_LANGID_XXX and + * @TT_MS_LANGID_XXX for possible values. + * + * Registered OpenType values for `language_id` are always smaller than + * 0x8000; values equal or larger than 0x8000 usually indicate a + * language tag string (introduced in OpenType version 1.6). Use + * function @FT_Get_Sfnt_LangTag with `language_id` as its argument to + * retrieve the associated language tag. + * + * name_id :: + * An identifier for `string`. See @TT_NAME_ID_XXX for possible + * values. + * + * string :: + * The 'name' string. Note that its format differs depending on the + * (platform,encoding) pair, being either a string of bytes (without a + * terminating `NULL` byte) or containing UTF-16BE entities. + * + * string_len :: + * The length of `string` in bytes. + * + * @note: + * Please refer to the TrueType or OpenType specification for more + * details. + */ typedef struct FT_SfntName_ { FT_UShort platform_id; @@ -103,91 +112,154 @@ FT_BEGIN_HEADER FT_UShort name_id; FT_Byte* string; /* this string is *not* null-terminated! */ - FT_UInt string_len; /* in bytes */ + FT_UInt string_len; /* in bytes */ } FT_SfntName; - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Name_Count */ - /* */ - /* <Description> */ - /* Retrieve the number of name strings in the SFNT `name' table. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* <Return> */ - /* The number of strings in the `name' table. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Name_Count + * + * @description: + * Retrieve the number of name strings in the SFNT 'name' table. + * + * @input: + * face :: + * A handle to the source face. + * + * @return: + * The number of strings in the 'name' table. + * + * @note: + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ FT_EXPORT( FT_UInt ) FT_Get_Sfnt_Name_Count( FT_Face face ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Name */ - /* */ - /* <Description> */ - /* Retrieve a string of the SFNT `name' table for a given index. */ - /* */ - /* <Input> */ - /* face :: A handle to the source face. */ - /* */ - /* idx :: The index of the `name' string. */ - /* */ - /* <Output> */ - /* aname :: The indexed @FT_SfntName structure. */ - /* */ - /* <Return> */ - /* FreeType error code. 0~means success. */ - /* */ - /* <Note> */ - /* The `string' array returned in the `aname' structure is not */ - /* null-terminated. The application should deallocate it if it is no */ - /* longer in use. */ - /* */ - /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */ - /* `name' table entries, then do a loop until you get the right */ - /* platform, encoding, and name ID. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Name + * + * @description: + * Retrieve a string of the SFNT 'name' table for a given index. + * + * @input: + * face :: + * A handle to the source face. + * + * idx :: + * The index of the 'name' string. + * + * @output: + * aname :: + * The indexed @FT_SfntName structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `string` array returned in the `aname` structure is not + * null-terminated. Note that you don't have to deallocate `string` by + * yourself; FreeType takes care of it if you call @FT_Done_Face. + * + * Use @FT_Get_Sfnt_Name_Count to get the total number of available + * 'name' table entries, then do a loop until you get the right platform, + * encoding, and name ID. + * + * 'name' table format~1 entries can use language tags also, see + * @FT_Get_Sfnt_LangTag. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ FT_EXPORT( FT_Error ) FT_Get_Sfnt_Name( FT_Face face, FT_UInt idx, FT_SfntName *aname ); - /*************************************************************************** + /************************************************************************** * - * @constant: - * FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY + * @struct: + * FT_SfntLangTag * * @description: - * A constant used as the tag of @FT_Parameter structures to make - * FT_Open_Face() ignore preferred family subfamily names in `name' - * table since OpenType version 1.4. For backwards compatibility with - * legacy systems that have a 4-face-per-family restriction. + * A structure to model a language tag entry from an SFNT 'name' table. * + * @fields: + * string :: + * The language tag string, encoded in UTF-16BE (without trailing + * `NULL` bytes). + * + * string_len :: + * The length of `string` in **bytes**. + * + * @note: + * Please refer to the TrueType or OpenType specification for more + * details. + * + * @since: + * 2.8 */ -#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY FT_MAKE_TAG( 'i', 'g', 'p', 'f' ) + typedef struct FT_SfntLangTag_ + { + FT_Byte* string; /* this string is *not* null-terminated! */ + FT_UInt string_len; /* in bytes */ + } FT_SfntLangTag; - /*************************************************************************** + + /************************************************************************** * - * @constant: - * FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY + * @function: + * FT_Get_Sfnt_LangTag * * @description: - * A constant used as the tag of @FT_Parameter structures to make - * FT_Open_Face() ignore preferred subfamily names in `name' table since - * OpenType version 1.4. For backwards compatibility with legacy - * systems that have a 4-face-per-family restriction. + * Retrieve the language tag associated with a language ID of an SFNT + * 'name' table entry. + * + * @input: + * face :: + * A handle to the source face. + * + * langID :: + * The language ID, as returned by @FT_Get_Sfnt_Name. This is always a + * value larger than 0x8000. * + * @output: + * alangTag :: + * The language tag associated with the 'name' table entry's language + * ID. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `string` array returned in the `alangTag` structure is not + * null-terminated. Note that you don't have to deallocate `string` by + * yourself; FreeType takes care of it if you call @FT_Done_Face. + * + * Only 'name' table format~1 supports language tags. For format~0 + * tables, this function always returns FT_Err_Invalid_Table. For + * invalid format~1 language ID values, FT_Err_Invalid_Argument is + * returned. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + * + * @since: + * 2.8 */ -#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY FT_MAKE_TAG( 'i', 'g', 'p', 's' ) + FT_EXPORT( FT_Error ) + FT_Get_Sfnt_LangTag( FT_Face face, + FT_UInt langID, + FT_SfntLangTag *alangTag ); + /* */ diff --git a/non-source/foreign/freetype2/freetype/ftstroke.h b/non-source/foreign/freetype2/freetype/ftstroke.h index b3b9922da..41626dc9d 100644 --- a/non-source/foreign/freetype2/freetype/ftstroke.h +++ b/non-source/foreign/freetype2/freetype/ftstroke.h @@ -1,142 +1,135 @@ -/***************************************************************************/ -/* */ -/* ftstroke.h */ -/* */ -/* FreeType path stroker (specification). */ -/* */ -/* Copyright 2002-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftstroke.h + * + * FreeType path stroker (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTSTROKE_H_ #define FTSTROKE_H_ -#include <ft2build.h> -#include FT_OUTLINE_H -#include FT_GLYPH_H +#include <freetype/ftoutln.h> +#include <freetype/ftglyph.h> FT_BEGIN_HEADER - /************************************************************************ - * - * @section: - * glyph_stroker - * - * @title: - * Glyph Stroker - * - * @abstract: - * Generating bordered and stroked glyphs. - * - * @description: - * This component generates stroked outlines of a given vectorial - * glyph. It also allows you to retrieve the `outside' and/or the - * `inside' borders of the stroke. - * - * This can be useful to generate `bordered' glyph, i.e., glyphs - * displayed with a coloured (and anti-aliased) border around their - * shape. - * - * @order: - * FT_Stroker - * - * FT_Stroker_LineJoin - * FT_Stroker_LineCap - * FT_StrokerBorder - * - * FT_Outline_GetInsideBorder - * FT_Outline_GetOutsideBorder - * - * FT_Glyph_Stroke - * FT_Glyph_StrokeBorder - * - * FT_Stroker_New - * FT_Stroker_Set - * FT_Stroker_Rewind - * FT_Stroker_ParseOutline - * FT_Stroker_Done - * - * FT_Stroker_BeginSubPath - * FT_Stroker_EndSubPath - * - * FT_Stroker_LineTo - * FT_Stroker_ConicTo - * FT_Stroker_CubicTo - * - * FT_Stroker_GetBorderCounts - * FT_Stroker_ExportBorder - * FT_Stroker_GetCounts - * FT_Stroker_Export - * - */ - - - /************************************************************** - * - * @type: - * FT_Stroker - * - * @description: - * Opaque handle to a path stroker object. - */ + /************************************************************************** + * + * @section: + * glyph_stroker + * + * @title: + * Glyph Stroker + * + * @abstract: + * Generating bordered and stroked glyphs. + * + * @description: + * This component generates stroked outlines of a given vectorial glyph. + * It also allows you to retrieve the 'outside' and/or the 'inside' + * borders of the stroke. + * + * This can be useful to generate 'bordered' glyph, i.e., glyphs + * displayed with a colored (and anti-aliased) border around their + * shape. + * + * @order: + * FT_Stroker + * + * FT_Stroker_LineJoin + * FT_Stroker_LineCap + * FT_StrokerBorder + * + * FT_Outline_GetInsideBorder + * FT_Outline_GetOutsideBorder + * + * FT_Glyph_Stroke + * FT_Glyph_StrokeBorder + * + * FT_Stroker_New + * FT_Stroker_Set + * FT_Stroker_Rewind + * FT_Stroker_ParseOutline + * FT_Stroker_Done + * + * FT_Stroker_BeginSubPath + * FT_Stroker_EndSubPath + * + * FT_Stroker_LineTo + * FT_Stroker_ConicTo + * FT_Stroker_CubicTo + * + * FT_Stroker_GetBorderCounts + * FT_Stroker_ExportBorder + * FT_Stroker_GetCounts + * FT_Stroker_Export + * + */ + + + /************************************************************************** + * + * @type: + * FT_Stroker + * + * @description: + * Opaque handle to a path stroker object. + */ typedef struct FT_StrokerRec_* FT_Stroker; - /************************************************************** + /************************************************************************** * * @enum: * FT_Stroker_LineJoin * * @description: - * These values determine how two joining lines are rendered - * in a stroker. + * These values determine how two joining lines are rendered in a + * stroker. * * @values: * FT_STROKER_LINEJOIN_ROUND :: - * Used to render rounded line joins. Circular arcs are used - * to join two lines smoothly. + * Used to render rounded line joins. Circular arcs are used to join + * two lines smoothly. * * FT_STROKER_LINEJOIN_BEVEL :: - * Used to render beveled line joins. The outer corner of - * the joined lines is filled by enclosing the triangular - * region of the corner with a straight line between the - * outer corners of each stroke. + * Used to render beveled line joins. The outer corner of the joined + * lines is filled by enclosing the triangular region of the corner + * with a straight line between the outer corners of each stroke. * * FT_STROKER_LINEJOIN_MITER_FIXED :: - * Used to render mitered line joins, with fixed bevels if the - * miter limit is exceeded. The outer edges of the strokes - * for the two segments are extended until they meet at an - * angle. If the segments meet at too sharp an angle (such - * that the miter would extend from the intersection of the - * segments a distance greater than the product of the miter - * limit value and the border radius), then a bevel join (see - * above) is used instead. This prevents long spikes being - * created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter - * line join as used in PostScript and PDF. + * Used to render mitered line joins, with fixed bevels if the miter + * limit is exceeded. The outer edges of the strokes for the two + * segments are extended until they meet at an angle. 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. - * 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 - * backwards compatibility. + * Used to render mitered line joins, with variable bevels if the miter + * 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 + * compatibility. */ typedef enum FT_Stroker_LineJoin_ { @@ -149,27 +142,25 @@ FT_BEGIN_HEADER } FT_Stroker_LineJoin; - /************************************************************** + /************************************************************************** * * @enum: * FT_Stroker_LineCap * * @description: - * These values determine how the end of opened sub-paths are - * rendered in a stroke. + * These values determine how the end of opened sub-paths are rendered in + * a stroke. * * @values: * FT_STROKER_LINECAP_BUTT :: - * The end of lines is rendered as a full stop on the last - * point itself. + * The end of lines is rendered as a full stop on the last point + * itself. * * FT_STROKER_LINECAP_ROUND :: - * The end of lines is rendered as a half-circle around the - * last point. + * The end of lines is rendered as a half-circle around the last point. * * FT_STROKER_LINECAP_SQUARE :: - * The end of lines is rendered as a square around the - * last point. + * The end of lines is rendered as a square around the last point. */ typedef enum FT_Stroker_LineCap_ { @@ -180,14 +171,14 @@ FT_BEGIN_HEADER } FT_Stroker_LineCap; - /************************************************************** + /************************************************************************** * * @enum: * FT_StrokerBorder * * @description: - * These values are used to select a given stroke border - * in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. + * These values are used to select a given stroke border in + * @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. * * @values: * FT_STROKER_BORDER_LEFT :: @@ -197,9 +188,9 @@ FT_BEGIN_HEADER * Select the right border, relative to the drawing direction. * * @note: - * Applications are generally interested in the `inside' and `outside' + * Applications are generally interested in the 'inside' and 'outside' * borders. However, there is no direct mapping between these and the - * `left' and `right' ones, since this really depends on the glyph's + * 'left' and 'right' ones, since this really depends on the glyph's * drawing orientation, which varies between font formats. * * You can however use @FT_Outline_GetInsideBorder and @@ -213,14 +204,14 @@ FT_BEGIN_HEADER } FT_StrokerBorder; - /************************************************************** + /************************************************************************** * * @function: * FT_Outline_GetInsideBorder * * @description: - * Retrieve the @FT_StrokerBorder value corresponding to the - * `inside' borders of a given outline. + * Retrieve the @FT_StrokerBorder value corresponding to the 'inside' + * borders of a given outline. * * @input: * outline :: @@ -234,14 +225,14 @@ FT_BEGIN_HEADER FT_Outline_GetInsideBorder( FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Outline_GetOutsideBorder * * @description: - * Retrieve the @FT_StrokerBorder value corresponding to the - * `outside' borders of a given outline. + * Retrieve the @FT_StrokerBorder value corresponding to the 'outside' + * borders of a given outline. * * @input: * outline :: @@ -255,7 +246,7 @@ FT_BEGIN_HEADER FT_Outline_GetOutsideBorder( FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_New @@ -269,7 +260,7 @@ FT_BEGIN_HEADER * * @output: * astroker :: - * A new stroker object handle. NULL in case of error. + * A new stroker object handle. `NULL` in case of error. * * @return: * FreeType error code. 0~means success. @@ -279,7 +270,7 @@ FT_BEGIN_HEADER FT_Stroker *astroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Set @@ -301,14 +292,18 @@ 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, + * 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 + * 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. */ FT_EXPORT( void ) @@ -319,16 +314,15 @@ FT_BEGIN_HEADER FT_Fixed miter_limit ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Rewind * * @description: - * Reset a stroker object without changing its attributes. - * You should call this function before beginning a new - * series of calls to @FT_Stroker_BeginSubPath or - * @FT_Stroker_EndSubPath. + * Reset a stroker object without changing its attributes. You should + * call this function before beginning a new series of calls to + * @FT_Stroker_BeginSubPath or @FT_Stroker_EndSubPath. * * @input: * stroker :: @@ -338,15 +332,15 @@ FT_BEGIN_HEADER FT_Stroker_Rewind( FT_Stroker stroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_ParseOutline * * @description: - * A convenience function used to parse a whole outline with - * the stroker. The resulting outline(s) can be retrieved - * later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export. + * A convenience function used to parse a whole outline with the stroker. + * The resulting outline(s) can be retrieved later by functions like + * @FT_Stroker_GetCounts and @FT_Stroker_Export. * * @input: * stroker :: @@ -356,18 +350,18 @@ FT_BEGIN_HEADER * The source outline. * * opened :: - * A boolean. If~1, the outline is treated as an open path instead - * of a closed one. + * A boolean. If~1, the outline is treated as an open path instead of + * a closed one. * * @return: * FreeType error code. 0~means success. * * @note: - * If `opened' is~0 (the default), the outline is treated as a closed - * path, and the stroker generates two distinct `border' outlines. + * If `opened` is~0 (the default), the outline is treated as a closed + * path, and the stroker generates two distinct 'border' outlines. * - * If `opened' is~1, the outline is processed as an open path, and the - * stroker generates a single `stroke' outline. + * If `opened` is~1, the outline is processed as an open path, and the + * stroker generates a single 'stroke' outline. * * This function calls @FT_Stroker_Rewind automatically. */ @@ -377,7 +371,7 @@ FT_BEGIN_HEADER FT_Bool opened ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_BeginSubPath @@ -399,8 +393,8 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * This function is useful when you need to stroke a path that is - * not stored as an @FT_Outline object. + * This function is useful when you need to stroke a path that is not + * stored as an @FT_Outline object. */ FT_EXPORT( FT_Error ) FT_Stroker_BeginSubPath( FT_Stroker stroker, @@ -408,7 +402,7 @@ FT_BEGIN_HEADER FT_Bool open ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_EndSubPath @@ -424,22 +418,22 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * You should call this function after @FT_Stroker_BeginSubPath. - * If the subpath was not `opened', this function `draws' a - * single line segment to the start position when needed. + * You should call this function after @FT_Stroker_BeginSubPath. If the + * subpath was not 'opened', this function 'draws' a single line segment + * to the start position when needed. */ FT_EXPORT( FT_Error ) FT_Stroker_EndSubPath( FT_Stroker stroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_LineTo * * @description: - * `Draw' a single line segment in the stroker's current sub-path, - * from the last position. + * 'Draw' a single line segment in the stroker's current sub-path, from + * the last position. * * @input: * stroker :: @@ -460,13 +454,13 @@ FT_BEGIN_HEADER FT_Vector* to ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_ConicTo * * @description: - * `Draw' a single quadratic Bézier in the stroker's current sub-path, + * 'Draw' a single quadratic Bezier in the stroker's current sub-path, * from the last position. * * @input: @@ -474,7 +468,7 @@ FT_BEGIN_HEADER * The target stroker handle. * * control :: - * A pointer to a Bézier control point. + * A pointer to a Bezier control point. * * to :: * A pointer to the destination point. @@ -492,24 +486,24 @@ FT_BEGIN_HEADER FT_Vector* to ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_CubicTo * * @description: - * `Draw' a single cubic Bézier in the stroker's current sub-path, - * from the last position. + * 'Draw' a single cubic Bezier in the stroker's current sub-path, from + * the last position. * * @input: * stroker :: * The target stroker handle. * * control1 :: - * A pointer to the first Bézier control point. + * A pointer to the first Bezier control point. * * control2 :: - * A pointer to second Bézier control point. + * A pointer to second Bezier control point. * * to :: * A pointer to the destination point. @@ -528,16 +522,16 @@ FT_BEGIN_HEADER FT_Vector* to ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_GetBorderCounts * * @description: - * Call this function once you have finished parsing your paths - * with the stroker. It returns the number of points and - * contours necessary to export one of the `border' or `stroke' - * outlines generated by the stroker. + * Call this function once you have finished parsing your paths with the + * stroker. It returns the number of points and contours necessary to + * export one of the 'border' or 'stroke' outlines generated by the + * stroker. * * @input: * stroker :: @@ -557,15 +551,15 @@ FT_BEGIN_HEADER * FreeType error code. 0~means success. * * @note: - * When an outline, or a sub-path, is `closed', the stroker generates - * two independent `border' outlines, named `left' and `right'. + * When an outline, or a sub-path, is 'closed', the stroker generates two + * independent 'border' outlines, named 'left' and 'right'. * - * When the outline, or a sub-path, is `opened', the stroker merges - * the `border' outlines with caps. The `left' border receives all - * points, while the `right' border becomes empty. + * When the outline, or a sub-path, is 'opened', the stroker merges the + * 'border' outlines with caps. The 'left' border receives all points, + * while the 'right' border becomes empty. * - * Use the function @FT_Stroker_GetCounts instead if you want to - * retrieve the counts associated to both borders. + * Use the function @FT_Stroker_GetCounts instead if you want to retrieve + * the counts associated to both borders. */ FT_EXPORT( FT_Error ) FT_Stroker_GetBorderCounts( FT_Stroker stroker, @@ -574,19 +568,17 @@ FT_BEGIN_HEADER FT_UInt *anum_contours ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_ExportBorder * * @description: - * Call this function after @FT_Stroker_GetBorderCounts to - * export the corresponding border to your own @FT_Outline - * structure. + * Call this function after @FT_Stroker_GetBorderCounts to export the + * corresponding border to your own @FT_Outline structure. * - * Note that this function appends the border points and - * contours to your outline, but does not try to resize its - * arrays. + * Note that this function appends the border points and contours to your + * outline, but does not try to resize its arrays. * * @input: * stroker :: @@ -599,19 +591,19 @@ FT_BEGIN_HEADER * The target outline handle. * * @note: - * Always call this function after @FT_Stroker_GetBorderCounts to - * get sure that there is enough room in your @FT_Outline object to - * receive all new data. + * Always call this function after @FT_Stroker_GetBorderCounts to get + * sure that there is enough room in your @FT_Outline object to receive + * all new data. * - * When an outline, or a sub-path, is `closed', the stroker generates - * two independent `border' outlines, named `left' and `right'. + * When an outline, or a sub-path, is 'closed', the stroker generates two + * independent 'border' outlines, named 'left' and 'right'. * - * When the outline, or a sub-path, is `opened', the stroker merges - * the `border' outlines with caps. The `left' border receives all - * points, while the `right' border becomes empty. + * When the outline, or a sub-path, is 'opened', the stroker merges the + * 'border' outlines with caps. The 'left' border receives all points, + * while the 'right' border becomes empty. * - * Use the function @FT_Stroker_Export instead if you want to - * retrieve all borders at once. + * Use the function @FT_Stroker_Export instead if you want to retrieve + * all borders at once. */ FT_EXPORT( void ) FT_Stroker_ExportBorder( FT_Stroker stroker, @@ -619,16 +611,15 @@ FT_BEGIN_HEADER FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_GetCounts * * @description: - * Call this function once you have finished parsing your paths - * with the stroker. It returns the number of points and - * contours necessary to export all points/borders from the stroked - * outline/path. + * Call this function once you have finished parsing your paths with the + * stroker. It returns the number of points and contours necessary to + * export all points/borders from the stroked outline/path. * * @input: * stroker :: @@ -650,18 +641,17 @@ FT_BEGIN_HEADER FT_UInt *anum_contours ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Export * * @description: - * Call this function after @FT_Stroker_GetBorderCounts to - * export all borders to your own @FT_Outline structure. + * Call this function after @FT_Stroker_GetBorderCounts to export all + * borders to your own @FT_Outline structure. * - * Note that this function appends the border points and - * contours to your outline, but does not try to resize its - * arrays. + * Note that this function appends the border points and contours to your + * outline, but does not try to resize its arrays. * * @input: * stroker :: @@ -675,7 +665,7 @@ FT_BEGIN_HEADER FT_Outline* outline ); - /************************************************************** + /************************************************************************** * * @function: * FT_Stroker_Done @@ -685,13 +675,13 @@ FT_BEGIN_HEADER * * @input: * stroker :: - * A stroker handle. Can be NULL. + * A stroker handle. Can be `NULL`. */ FT_EXPORT( void ) FT_Stroker_Done( FT_Stroker stroker ); - /************************************************************** + /************************************************************************** * * @function: * FT_Glyph_Stroke @@ -708,8 +698,7 @@ FT_BEGIN_HEADER * A stroker handle. * * destroy :: - * A Boolean. If~1, the source glyph object is destroyed - * on success. + * A Boolean. If~1, the source glyph object is destroyed on success. * * @return: * FreeType error code. 0~means success. @@ -719,8 +708,8 @@ FT_BEGIN_HEADER * * Adding stroke may yield a significantly wider and taller glyph * depending on how large of a radius was used to stroke the glyph. You - * may need to manually adjust horizontal and vertical advance amounts - * to account for this added size. + * may need to manually adjust horizontal and vertical advance amounts to + * account for this added size. */ FT_EXPORT( FT_Error ) FT_Glyph_Stroke( FT_Glyph *pglyph, @@ -728,14 +717,14 @@ FT_BEGIN_HEADER FT_Bool destroy ); - /************************************************************** + /************************************************************************** * * @function: * FT_Glyph_StrokeBorder * * @description: - * Stroke a given outline glyph object with a given stroker, but - * only return either its inside or outside border. + * Stroke a given outline glyph object with a given stroker, but only + * return either its inside or outside border. * * @inout: * pglyph :: @@ -746,12 +735,11 @@ FT_BEGIN_HEADER * A stroker handle. * * inside :: - * A Boolean. If~1, return the inside border, otherwise - * the outside border. + * A Boolean. If~1, return the inside border, otherwise the outside + * border. * * destroy :: - * A Boolean. If~1, the source glyph object is destroyed - * on success. + * A Boolean. If~1, the source glyph object is destroyed on success. * * @return: * FreeType error code. 0~means success. @@ -761,8 +749,8 @@ FT_BEGIN_HEADER * * Adding stroke may yield a significantly wider and taller glyph * depending on how large of a radius was used to stroke the glyph. You - * may need to manually adjust horizontal and vertical advance amounts - * to account for this added size. + * may need to manually adjust horizontal and vertical advance amounts to + * account for this added size. */ FT_EXPORT( FT_Error ) FT_Glyph_StrokeBorder( FT_Glyph *pglyph, diff --git a/non-source/foreign/freetype2/freetype/ftsynth.h b/non-source/foreign/freetype2/freetype/ftsynth.h index fdfcb6912..43081b6c3 100644 --- a/non-source/foreign/freetype2/freetype/ftsynth.h +++ b/non-source/foreign/freetype2/freetype/ftsynth.h @@ -1,20 +1,20 @@ -/***************************************************************************/ -/* */ -/* ftsynth.h */ -/* */ -/* FreeType synthesizing code for emboldening and slanting */ -/* (specification). */ -/* */ -/* Copyright 2000-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftsynth.h + * + * FreeType synthesizing code for emboldening and slanting + * (specification). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ /*************************************************************************/ @@ -35,7 +35,7 @@ /* Main reason for not lifting the functions in this module to a */ - /* `standard' API is that the used parameters for emboldening and */ + /* 'standard' API is that the used parameters for emboldening and */ /* slanting are not configurable. Consider the functions as a */ /* code resource that should be copied into the application and */ /* adapted to the particular needs. */ @@ -45,8 +45,7 @@ #define FTSYNTH_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -57,7 +56,7 @@ FT_BEGIN_HEADER - /* Embolden a glyph by a `reasonable' value (which is highly a matter of */ + /* Embolden a glyph by a 'reasonable' value (which is highly a matter of */ /* taste). This function is actually a convenience function, providing */ /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */ /* */ @@ -69,10 +68,31 @@ FT_BEGIN_HEADER FT_EXPORT( void ) FT_GlyphSlot_Embolden( FT_GlyphSlot slot ); - /* Slant an outline glyph to the right by about 12 degrees. */ + /* Precisely adjust the glyph weight either horizontally or vertically. */ + /* The `xdelta` and `ydelta` values are fractions of the face Em size */ + /* (in fixed-point format). Considering that a regular face would have */ + /* stem widths on the order of 0.1 Em, a delta of 0.05 (0x0CCC) should */ + /* be very noticeable. To increase or decrease the weight, use positive */ + /* or negative values, respectively. */ + FT_EXPORT( void ) + FT_GlyphSlot_AdjustWeight( FT_GlyphSlot slot, + FT_Fixed xdelta, + FT_Fixed ydelta ); + + + /* Slant an outline glyph to the right by about 12 degrees. */ FT_EXPORT( void ) FT_GlyphSlot_Oblique( FT_GlyphSlot slot ); + /* Slant an outline glyph by a given sine of an angle. You can apply */ + /* slant along either x- or y-axis by choosing a corresponding non-zero */ + /* argument. If both slants are non-zero, some affine transformation */ + /* will result. */ + FT_EXPORT( void ) + FT_GlyphSlot_Slant( FT_GlyphSlot slot, + FT_Fixed xslant, + FT_Fixed yslant ); + /* */ diff --git a/non-source/foreign/freetype2/freetype/ftsystem.h b/non-source/foreign/freetype2/freetype/ftsystem.h index 908ae07f0..1eacb3af3 100644 --- a/non-source/foreign/freetype2/freetype/ftsystem.h +++ b/non-source/foreign/freetype2/freetype/ftsystem.h @@ -1,59 +1,57 @@ -/***************************************************************************/ -/* */ -/* ftsystem.h */ -/* */ -/* FreeType low-level system interface definition (specification). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftsystem.h + * + * FreeType low-level system interface definition (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTSYSTEM_H_ #define FTSYSTEM_H_ -#include <ft2build.h> FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* system_interface */ - /* */ - /* <Title> */ - /* System Interface */ - /* */ - /* <Abstract> */ - /* How FreeType manages memory and i/o. */ - /* */ - /* <Description> */ - /* This section contains various definitions related to memory */ - /* management and i/o access. You need to understand this */ - /* information if you want to use a custom memory manager or you own */ - /* i/o streams. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * system_interface + * + * @title: + * System Interface + * + * @abstract: + * How FreeType manages memory and i/o. + * + * @description: + * This section contains various definitions related to memory management + * and i/o access. You need to understand this information if you want to + * use a custom memory manager or you own i/o streams. + * + */ - /*************************************************************************/ - /* */ - /* M E M O R Y M A N A G E M E N T */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * M E M O R Y M A N A G E M E N T + * + */ - /************************************************************************* + /************************************************************************** * * @type: * FT_Memory @@ -66,13 +64,13 @@ FT_BEGIN_HEADER typedef struct FT_MemoryRec_* FT_Memory; - /************************************************************************* + /************************************************************************** * * @functype: * FT_Alloc_Func * * @description: - * A function used to allocate `size' bytes from `memory'. + * A function used to allocate `size` bytes from `memory`. * * @input: * memory :: @@ -90,7 +88,7 @@ FT_BEGIN_HEADER long size ); - /************************************************************************* + /************************************************************************** * * @functype: * FT_Free_Func @@ -111,7 +109,7 @@ FT_BEGIN_HEADER void* block ); - /************************************************************************* + /************************************************************************** * * @functype: * FT_Realloc_Func @@ -146,7 +144,7 @@ FT_BEGIN_HEADER void* block ); - /************************************************************************* + /************************************************************************** * * @struct: * FT_MemoryRec @@ -177,14 +175,14 @@ FT_BEGIN_HEADER }; - /*************************************************************************/ - /* */ - /* I / O M A N A G E M E N T */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * I / O M A N A G E M E N T + * + */ - /************************************************************************* + /************************************************************************** * * @type: * FT_Stream @@ -193,21 +191,21 @@ FT_BEGIN_HEADER * A handle to an input stream. * * @also: - * See @FT_StreamRec for the publicly accessible fields of a given - * stream object. + * See @FT_StreamRec for the publicly accessible fields of a given stream + * object. * */ typedef struct FT_StreamRec_* FT_Stream; - /************************************************************************* + /************************************************************************** * * @struct: * FT_StreamDesc * * @description: * A union type used to store either a long or a pointer. This is used - * to store a file descriptor or a `FILE*' in an input stream. + * to store a file descriptor or a `FILE*` in an input stream. * */ typedef union FT_StreamDesc_ @@ -218,7 +216,7 @@ FT_BEGIN_HEADER } FT_StreamDesc; - /************************************************************************* + /************************************************************************** * * @functype: * FT_Stream_IoFunc @@ -231,7 +229,7 @@ FT_BEGIN_HEADER * A handle to the source stream. * * offset :: - * The offset of read in stream (always from start). + * The offset from the start of the stream to seek to. * * buffer :: * The address of the read buffer. @@ -240,12 +238,9 @@ FT_BEGIN_HEADER * The number of bytes to read from the stream. * * @return: - * The number of bytes effectively read by the stream. - * - * @note: - * This function might be called to perform a seek or skip operation - * with a `count' of~0. A non-zero return value then indicates an - * error. + * If count >~0, return the number of bytes effectively read by the + * stream (after seeking to `offset`). If count ==~0, return the status + * of the seek operation (non-zero indicates an error). * */ typedef unsigned long @@ -255,7 +250,7 @@ FT_BEGIN_HEADER unsigned long count ); - /************************************************************************* + /************************************************************************** * * @functype: * FT_Stream_CloseFunc @@ -265,14 +260,14 @@ FT_BEGIN_HEADER * * @input: * stream :: - * A handle to the target stream. + * A handle to the target stream. * */ typedef void (*FT_Stream_CloseFunc)( FT_Stream stream ); - /************************************************************************* + /************************************************************************** * * @struct: * FT_StreamRec @@ -283,14 +278,14 @@ FT_BEGIN_HEADER * @input: * base :: * For memory-based streams, this is the address of the first stream - * byte in memory. This field should always be set to NULL for + * byte in memory. This field should always be set to `NULL` for * disk-based streams. * * size :: * The stream size in bytes. * * In case of compressed streams where the size is unknown before - * actually doing the decompression, the value is set to 0x7FFFFFFF. + * actually doing the decompression, the value is set to 0x7FFFFFFF. * (Note that this size value can occur for normal streams also; it is * thus just a hint.) * @@ -299,7 +294,7 @@ FT_BEGIN_HEADER * * descriptor :: * This field is a union that can hold an integer or a pointer. It is - * used by stream implementations to store file descriptors or `FILE*' + * used by stream implementations to store file descriptors or `FILE*` * pointers. * * pathname :: @@ -314,13 +309,13 @@ FT_BEGIN_HEADER * The stream's close function. * * memory :: - * The memory manager to use to preload frames. This is set - * internally by FreeType and shouldn't be touched by stream - * implementations. + * The memory manager to use to preload frames. This is set internally + * by FreeType and shouldn't be touched by stream implementations. * * cursor :: * This field is set and used internally by FreeType when parsing - * frames. + * frames. In particular, the `FT_GET_XXX` macros use this instead of + * the `pos` field. * * limit :: * This field is set and used internally by FreeType when parsing diff --git a/non-source/foreign/freetype2/freetype/fttrigon.h b/non-source/foreign/freetype2/freetype/fttrigon.h index f789b524c..a5299e938 100644 --- a/non-source/foreign/freetype2/freetype/fttrigon.h +++ b/non-source/foreign/freetype2/freetype/fttrigon.h @@ -1,25 +1,25 @@ -/***************************************************************************/ -/* */ -/* fttrigon.h */ -/* */ -/* FreeType trigonometric functions (specification). */ -/* */ -/* Copyright 2001-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * fttrigon.h + * + * FreeType trigonometric functions (specification). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTTRIGON_H_ #define FTTRIGON_H_ -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -31,15 +31,15 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* computations */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * computations + * + */ - /************************************************************************* + /************************************************************************** * * @type: * FT_Angle @@ -52,7 +52,7 @@ FT_BEGIN_HEADER typedef FT_Fixed FT_Angle; - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_PI @@ -64,7 +64,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_PI ( 180L << 16 ) - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_2PI @@ -76,7 +76,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_PI2 @@ -88,7 +88,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) - /************************************************************************* + /************************************************************************** * * @macro: * FT_ANGLE_PI4 @@ -100,7 +100,7 @@ FT_BEGIN_HEADER #define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) - /************************************************************************* + /************************************************************************** * * @function: * FT_Sin @@ -124,7 +124,7 @@ FT_BEGIN_HEADER FT_Sin( FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Cos @@ -148,7 +148,7 @@ FT_BEGIN_HEADER FT_Cos( FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Tan @@ -168,14 +168,14 @@ FT_BEGIN_HEADER FT_Tan( FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Atan2 * * @description: - * Return the arc-tangent corresponding to a given vector (x,y) in - * the 2d plane. + * Return the arc-tangent corresponding to a given vector (x,y) in the 2d + * plane. * * @input: * x :: @@ -193,7 +193,7 @@ FT_BEGIN_HEADER FT_Fixed y ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Angle_Diff @@ -210,7 +210,7 @@ FT_BEGIN_HEADER * Second angle. * * @return: - * Constrained value of `value2-value1'. + * Constrained value of `angle2-angle1`. * */ FT_EXPORT( FT_Angle ) @@ -218,15 +218,15 @@ FT_BEGIN_HEADER FT_Angle angle2 ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Unit * * @description: * Return the unit vector corresponding to a given angle. After the - * call, the value of `vec.x' will be `cos(angle)', and the value of - * `vec.y' will be `sin(angle)'. + * call, the value of `vec.x` will be `cos(angle)`, and the value of + * `vec.y` will be `sin(angle)`. * * This function is useful to retrieve both the sinus and cosinus of a * given angle quickly. @@ -245,7 +245,7 @@ FT_BEGIN_HEADER FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Rotate @@ -267,7 +267,7 @@ FT_BEGIN_HEADER FT_Angle angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Length @@ -288,7 +288,7 @@ FT_BEGIN_HEADER FT_Vector_Length( FT_Vector* vec ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_Polarize @@ -314,7 +314,7 @@ FT_BEGIN_HEADER FT_Angle *angle ); - /************************************************************************* + /************************************************************************** * * @function: * FT_Vector_From_Polar diff --git a/non-source/foreign/freetype2/freetype/ftttdrv.h b/non-source/foreign/freetype2/freetype/ftttdrv.h deleted file mode 100644 index 6c02e6576..000000000 --- a/non-source/foreign/freetype2/freetype/ftttdrv.h +++ /dev/null @@ -1,310 +0,0 @@ -/***************************************************************************/ -/* */ -/* ftttdrv.h */ -/* */ -/* FreeType API for controlling the TrueType driver */ -/* (specification only). */ -/* */ -/* Copyright 2013-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef FTTTDRV_H_ -#define FTTTDRV_H_ - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /************************************************************************** - * - * @section: - * tt_driver - * - * @title: - * The TrueType driver - * - * @abstract: - * Controlling the TrueType driver module. - * - * @description: - * While FreeType's TrueType driver doesn't expose API functions by - * itself, it is possible to control its behaviour with @FT_Property_Set - * and @FT_Property_Get. The following lists the available properties - * together with the necessary macros and structures. - * - * The TrueType driver's module name is `truetype'. - * - * We start with a list of definitions, kindly provided by Greg - * Hitchcock. - * - * _Bi-Level_ _Rendering_ - * - * Monochromatic rendering, exclusively used in the early days of - * TrueType by both Apple and Microsoft. Microsoft's GDI interface - * supported hinting of the right-side bearing point, such that the - * advance width could be non-linear. Most often this was done to - * achieve some level of glyph symmetry. To enable reasonable - * performance (e.g., not having to run hinting on all glyphs just to - * get the widths) there was a bit in the head table indicating if the - * side bearing was hinted, and additional tables, `hdmx' and `LTSH', to - * cache hinting widths across multiple sizes and device aspect ratios. - * - * _Font_ _Smoothing_ - * - * Microsoft's GDI implementation of anti-aliasing. Not traditional - * anti-aliasing as the outlines were hinted before the sampling. The - * widths matched the bi-level rendering. - * - * _ClearType_ _Rendering_ - * - * Technique that uses physical subpixels to improve rendering on LCD - * (and other) displays. Because of the higher resolution, many methods - * of improving symmetry in glyphs through hinting the right-side - * bearing were no longer necessary. This lead to what GDI calls - * `natural widths' ClearType, see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec21. Since hinting - * has extra resolution, most non-linearity went away, but it is still - * possible for hints to change the advance widths in this mode. - * - * _ClearType_ _Compatible_ _Widths_ - * - * One of the earliest challenges with ClearType was allowing the - * implementation in GDI to be selected without requiring all UI and - * documents to reflow. To address this, a compatible method of - * rendering ClearType was added where the font hints are executed once - * to determine the width in bi-level rendering, and then re-run in - * ClearType, with the difference in widths being absorbed in the font - * hints for ClearType (mostly in the white space of hints); see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec20. Somewhat by - * definition, compatible width ClearType allows for non-linear widths, - * but only when the bi-level version has non-linear widths. - * - * _ClearType_ _Subpixel_ _Positioning_ - * - * One of the nice benefits of ClearType is the ability to more crisply - * display fractional widths; unfortunately, the GDI model of integer - * bitmaps did not support this. However, the WPF and Direct Write - * frameworks do support fractional widths. DWrite calls this `natural - * mode', not to be confused with GDI's `natural widths'. Subpixel - * positioning, in the current implementation of Direct Write, - * unfortunately does not support hinted advance widths, see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec22. Note that the - * TrueType interpreter fully allows the advance width to be adjusted in - * this mode, just the DWrite client will ignore those changes. - * - * _ClearType_ _Backwards_ _Compatibility_ - * - * This is a set of exceptions made in the TrueType interpreter to - * minimize hinting techniques that were problematic with the extra - * resolution of ClearType; see - * http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and - * http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx. - * This technique is not to be confused with ClearType compatible - * widths. ClearType backwards compatibility has no direct impact on - * changing advance widths, but there might be an indirect impact on - * disabling some deltas. This could be worked around in backwards - * compatibility mode. - * - * _Native_ _ClearType_ _Mode_ - * - * (Not to be confused with `natural widths'.) This mode removes all - * the exceptions in the TrueType interpreter when running with - * ClearType. Any issues on widths would still apply, though. - * - */ - - - /************************************************************************** - * - * @property: - * interpreter-version - * - * @description: - * Currently, two versions are available, representing the bytecode - * interpreter with and without subpixel hinting support, - * respectively. The default is subpixel support if - * TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel - * support otherwise (since it isn't available then). - * - * If subpixel hinting is on, many TrueType bytecode instructions behave - * differently compared to B/W or grayscale rendering (except if `native - * ClearType' is selected by the font). The main idea is to render at a - * much increased horizontal resolution, then sampling down the created - * output to subpixel precision. However, many older fonts are not - * suited to this and must be specially taken care of by applying - * (hardcoded) font-specific tweaks. - * - * Details on subpixel hinting and some of the necessary tweaks can be - * found in Greg Hitchcock's whitepaper at - * `http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'. - * - * The following example code demonstrates how to activate subpixel - * hinting (omitting the error handling). - * - * { - * FT_Library library; - * FT_Face face; - * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_38; - * - * - * FT_Init_FreeType( &library ); - * - * FT_Property_Set( library, "truetype", - * "interpreter-version", - * &interpreter_version ); - * } - * - * @note: - * This property can be used with @FT_Property_Get also. - * - */ - - - /************************************************************************** - * - * @enum: - * TT_INTERPRETER_VERSION_XXX - * - * @description: - * A list of constants used for the @interpreter-version property to - * select the hinting engine for Truetype fonts. - * - * The numeric value in the constant names represents the version - * number as returned by the `GETINFO' bytecode instruction. - * - * @values: - * TT_INTERPRETER_VERSION_35 :: - * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in - * Windows~98; only grayscale and B/W rasterizing is supported. - * - * TT_INTERPRETER_VERSION_38 :: - * Version~38 corresponds to MS rasterizer v.1.9; it is roughly - * equivalent to the hinting provided by DirectWrite ClearType (as - * can be found, for example, in the Internet Explorer~9 running on - * Windows~7). - * - * @note: - * This property controls the behaviour of the bytecode interpreter - * and thus how outlines get hinted. It does *not* control how glyph - * get rasterized! In particular, it does not control subpixel color - * filtering. - * - * If FreeType has not been compiled with configuration option - * FT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 causes an - * `FT_Err_Unimplemented_Feature' error. - * - * Depending on the graphics framework, Microsoft uses different - * bytecode and rendering engines. As a consequence, the version - * numbers returned by a call to the `GETINFO' bytecode instruction are - * more convoluted than desired. - * - * Here are two tables that try to shed some light on the possible - * values for the MS rasterizer engine, together with the additional - * features introduced by it. - * - * { - * GETINFO framework version feature - * ------------------------------------------------------------------- - * 3 GDI (Win 3.1), v1.0 16-bit, first version - * TrueImage - * 33 GDI (Win NT 3.1), v1.5 32-bit - * HP Laserjet - * 34 GDI (Win 95) v1.6 font smoothing, - * new SCANTYPE opcode - * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET - * bits in composite glyphs - * 36 MGDI (Win CE 2) v1.6+ classic ClearType - * 37 GDI (XP and later), v1.8 ClearType - * GDI+ old (before Vista) - * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType, - * WPF Y-direction ClearType, - * additional error checking - * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags - * in GETINFO opcode, - * bug fixes - * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag - * DWrite (Win 8) in GETINFO opcode, - * Gray ClearType - * } - * - * The `version' field gives a rough orientation only, since some - * applications provided certain features much earlier (as an example, - * Microsoft Reader used subpixel and Y-direction ClearType already in - * Windows 2000). Similarly, updates to a given framework might include - * improved hinting support. - * - * { - * version sampling rendering comment - * x y x y - * -------------------------------------------------------------- - * v1.0 normal normal B/W B/W bi-level - * v1.6 high high gray gray grayscale - * v1.8 high normal color-filter B/W (GDI) ClearType - * v1.9 high high color-filter gray Color ClearType - * v2.1 high normal gray B/W Gray ClearType - * v2.1 high high gray gray Gray ClearType - * } - * - * Color and Gray ClearType are the two available variants of - * `Y-direction ClearType', meaning grayscale rasterization along the - * Y-direction; the name used in the TrueType specification for this - * feature is `symmetric smoothing'. `Classic ClearType' is the - * original algorithm used before introducing a modified version in - * Win~XP. Another name for v1.6's grayscale rendering is `font - * smoothing', and `Color ClearType' is sometimes also called `DWrite - * ClearType'. To differentiate between today's Color ClearType and the - * earlier ClearType variant with B/W rendering along the vertical axis, - * the latter is sometimes called `GDI ClearType'. - * - * `Normal' and `high' sampling describe the (virtual) resolution to - * access the rasterized outline after the hinting process. `Normal' - * means 1 sample per grid line (i.e., B/W). In the current Microsoft - * implementation, `high' means an extra virtual resolution of 16x16 (or - * 16x1) grid lines per pixel for bytecode instructions like `MIRP'. - * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid - * lines for color filtering if Color ClearType is activated. - * - * Note that `Gray ClearType' is essentially the same as v1.6's - * grayscale rendering. However, the GETINFO instruction handles it - * differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1 - * returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing), - * and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for - * the version~1 gasp table exclusively (like Color ClearType), while - * v1.6 only respects the values of version~0 (bits 0 and~1). - * - * FreeType doesn't provide all capabilities of the most recent - * ClearType incarnation, thus we identify our subpixel support as - * version~38. - * - */ -#define TT_INTERPRETER_VERSION_35 35 -#define TT_INTERPRETER_VERSION_38 38 - - /* */ - - -FT_END_HEADER - - -#endif /* FTTTDRV_H_ */ - - -/* END */ diff --git a/non-source/foreign/freetype2/freetype/fttypes.h b/non-source/foreign/freetype2/freetype/fttypes.h index 2673e79c3..27815143a 100644 --- a/non-source/foreign/freetype2/freetype/fttypes.h +++ b/non-source/foreign/freetype2/freetype/fttypes.h @@ -1,19 +1,19 @@ -/***************************************************************************/ -/* */ -/* fttypes.h */ -/* */ -/* FreeType simple types definitions (specification only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * fttypes.h + * + * FreeType simple types definitions (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTTYPES_H_ @@ -22,8 +22,8 @@ #include <ft2build.h> #include FT_CONFIG_CONFIG_H -#include FT_SYSTEM_H -#include FT_IMAGE_H +#include <freetype/ftsystem.h> +#include <freetype/ftimage.h> #include <stddef.h> @@ -31,326 +31,330 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* basic_types */ - /* */ - /* <Title> */ - /* Basic Data Types */ - /* */ - /* <Abstract> */ - /* The basic data types defined by the library. */ - /* */ - /* <Description> */ - /* This section contains the basic data types defined by FreeType~2, */ - /* ranging from simple scalar types to bitmap descriptors. More */ - /* font-specific structures are defined in a different section. */ - /* */ - /* <Order> */ - /* FT_Byte */ - /* FT_Bytes */ - /* FT_Char */ - /* FT_Int */ - /* FT_UInt */ - /* FT_Int16 */ - /* FT_UInt16 */ - /* FT_Int32 */ - /* FT_UInt32 */ - /* FT_Int64 */ - /* FT_UInt64 */ - /* FT_Short */ - /* FT_UShort */ - /* FT_Long */ - /* FT_ULong */ - /* FT_Bool */ - /* FT_Offset */ - /* FT_PtrDist */ - /* FT_String */ - /* FT_Tag */ - /* FT_Error */ - /* FT_Fixed */ - /* FT_Pointer */ - /* FT_Pos */ - /* FT_Vector */ - /* FT_BBox */ - /* FT_Matrix */ - /* FT_FWord */ - /* FT_UFWord */ - /* FT_F2Dot14 */ - /* FT_UnitVector */ - /* FT_F26Dot6 */ - /* FT_Data */ - /* */ - /* FT_MAKE_TAG */ - /* */ - /* FT_Generic */ - /* FT_Generic_Finalizer */ - /* */ - /* FT_Bitmap */ - /* FT_Pixel_Mode */ - /* FT_Palette_Mode */ - /* FT_Glyph_Format */ - /* FT_IMAGE_TAG */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Bool */ - /* */ - /* <Description> */ - /* A typedef of unsigned char, used for simple booleans. As usual, */ - /* values 1 and~0 represent true and false, respectively. */ - /* */ + /************************************************************************** + * + * @section: + * basic_types + * + * @title: + * Basic Data Types + * + * @abstract: + * The basic data types defined by the library. + * + * @description: + * This section contains the basic data types defined by FreeType~2, + * ranging from simple scalar types to bitmap descriptors. More + * font-specific structures are defined in a different section. Note + * that FreeType does not use floating-point data types. Fractional + * values are represented by fixed-point integers, with lower bits + * storing the fractional part. + * + * @order: + * FT_Byte + * FT_Bytes + * FT_Char + * FT_Int + * FT_UInt + * FT_Int16 + * FT_UInt16 + * FT_Int32 + * FT_UInt32 + * FT_Int64 + * FT_UInt64 + * FT_Short + * FT_UShort + * FT_Long + * FT_ULong + * FT_Bool + * FT_Offset + * FT_PtrDist + * FT_String + * FT_Tag + * FT_Error + * FT_Fixed + * FT_Pointer + * FT_Pos + * FT_Vector + * FT_BBox + * FT_Matrix + * FT_FWord + * FT_UFWord + * FT_F2Dot14 + * FT_UnitVector + * FT_F26Dot6 + * FT_Data + * + * FT_MAKE_TAG + * + * FT_Generic + * FT_Generic_Finalizer + * + * FT_Bitmap + * FT_Pixel_Mode + * FT_Palette_Mode + * FT_Glyph_Format + * FT_IMAGE_TAG + * + */ + + + /************************************************************************** + * + * @type: + * FT_Bool + * + * @description: + * A typedef of unsigned char, used for simple booleans. As usual, + * values 1 and~0 represent true and false, respectively. + */ typedef unsigned char FT_Bool; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_FWord */ - /* */ - /* <Description> */ - /* A signed 16-bit integer used to store a distance in original font */ - /* units. */ - /* */ + /************************************************************************** + * + * @type: + * FT_FWord + * + * @description: + * A signed 16-bit integer used to store a distance in original font + * units. + */ typedef signed short FT_FWord; /* distance in FUnits */ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UFWord */ - /* */ - /* <Description> */ - /* An unsigned 16-bit integer used to store a distance in original */ - /* font units. */ - /* */ + /************************************************************************** + * + * @type: + * FT_UFWord + * + * @description: + * An unsigned 16-bit integer used to store a distance in original font + * units. + */ typedef unsigned short FT_UFWord; /* unsigned distance */ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Char */ - /* */ - /* <Description> */ - /* A simple typedef for the _signed_ char type. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Char + * + * @description: + * A simple typedef for the _signed_ char type. + */ typedef signed char FT_Char; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Byte */ - /* */ - /* <Description> */ - /* A simple typedef for the _unsigned_ char type. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Byte + * + * @description: + * A simple typedef for the _unsigned_ char type. + */ typedef unsigned char FT_Byte; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Bytes */ - /* */ - /* <Description> */ - /* A typedef for constant memory areas. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Bytes + * + * @description: + * A typedef for constant memory areas. + */ typedef const FT_Byte* FT_Bytes; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Tag */ - /* */ - /* <Description> */ - /* A typedef for 32-bit tags (as used in the SFNT format). */ - /* */ + /************************************************************************** + * + * @type: + * FT_Tag + * + * @description: + * A typedef for 32-bit tags (as used in the SFNT format). + */ typedef FT_UInt32 FT_Tag; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_String */ - /* */ - /* <Description> */ - /* A simple typedef for the char type, usually used for strings. */ - /* */ + /************************************************************************** + * + * @type: + * FT_String + * + * @description: + * A simple typedef for the char type, usually used for strings. + */ typedef char FT_String; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Short */ - /* */ - /* <Description> */ - /* A typedef for signed short. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Short + * + * @description: + * A typedef for signed short. + */ typedef signed short FT_Short; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UShort */ - /* */ - /* <Description> */ - /* A typedef for unsigned short. */ - /* */ + /************************************************************************** + * + * @type: + * FT_UShort + * + * @description: + * A typedef for unsigned short. + */ typedef unsigned short FT_UShort; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Int */ - /* */ - /* <Description> */ - /* A typedef for the int type. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Int + * + * @description: + * A typedef for the int type. + */ typedef signed int FT_Int; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_UInt */ - /* */ - /* <Description> */ - /* A typedef for the unsigned int type. */ - /* */ + /************************************************************************** + * + * @type: + * FT_UInt + * + * @description: + * A typedef for the unsigned int type. + */ typedef unsigned int FT_UInt; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Long */ - /* */ - /* <Description> */ - /* A typedef for signed long. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Long + * + * @description: + * A typedef for signed long. + */ typedef signed long FT_Long; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_ULong */ - /* */ - /* <Description> */ - /* A typedef for unsigned long. */ - /* */ + /************************************************************************** + * + * @type: + * FT_ULong + * + * @description: + * A typedef for unsigned long. + */ typedef unsigned long FT_ULong; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_F2Dot14 */ - /* */ - /* <Description> */ - /* A signed 2.14 fixed-point type used for unit vectors. */ - /* */ + /************************************************************************** + * + * @type: + * FT_F2Dot14 + * + * @description: + * A signed 2.14 fixed-point type used for unit vectors. + */ typedef signed short FT_F2Dot14; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_F26Dot6 */ - /* */ - /* <Description> */ - /* A signed 26.6 fixed-point type used for vectorial pixel */ - /* coordinates. */ - /* */ + /************************************************************************** + * + * @type: + * FT_F26Dot6 + * + * @description: + * A signed 26.6 fixed-point type used for vectorial pixel coordinates. + */ typedef signed long FT_F26Dot6; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Fixed */ - /* */ - /* <Description> */ - /* This type is used to store 16.16 fixed-point values, like scaling */ - /* values or matrix coefficients. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Fixed + * + * @description: + * This type is used to store 16.16 fixed-point values, like scaling + * values or matrix coefficients. + */ typedef signed long FT_Fixed; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Error */ - /* */ - /* <Description> */ - /* The FreeType error code type. A value of~0 is always interpreted */ - /* as a successful operation. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Error + * + * @description: + * The FreeType error code type. A value of~0 is always interpreted as a + * successful operation. + */ typedef int FT_Error; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Pointer */ - /* */ - /* <Description> */ - /* A simple typedef for a typeless pointer. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Pointer + * + * @description: + * A simple typedef for a typeless pointer. + */ typedef void* FT_Pointer; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_Offset */ - /* */ - /* <Description> */ - /* This is equivalent to the ANSI~C `size_t' type, i.e., the largest */ - /* _unsigned_ integer type used to express a file size or position, */ - /* or a memory block size. */ - /* */ + /************************************************************************** + * + * @type: + * FT_Offset + * + * @description: + * This is equivalent to the ANSI~C `size_t` type, i.e., the largest + * _unsigned_ integer type used to express a file size or position, or a + * memory block size. + */ typedef size_t FT_Offset; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_PtrDist */ - /* */ - /* <Description> */ - /* This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the */ - /* largest _signed_ integer type used to express the distance */ - /* between two pointers. */ - /* */ + /************************************************************************** + * + * @type: + * FT_PtrDist + * + * @description: + * This is equivalent to the ANSI~C `ptrdiff_t` type, i.e., the largest + * _signed_ integer type used to express the distance between two + * pointers. + */ typedef ft_ptrdiff_t FT_PtrDist; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_UnitVector */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2D vector unit vector. Uses */ - /* FT_F2Dot14 types. */ - /* */ - /* <Fields> */ - /* x :: Horizontal coordinate. */ - /* */ - /* y :: Vertical coordinate. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_UnitVector + * + * @description: + * A simple structure used to store a 2D vector unit vector. Uses + * FT_F2Dot14 types. + * + * @fields: + * x :: + * Horizontal coordinate. + * + * y :: + * Vertical coordinate. + */ typedef struct FT_UnitVector_ { FT_F2Dot14 x; @@ -359,29 +363,33 @@ FT_BEGIN_HEADER } FT_UnitVector; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Matrix */ - /* */ - /* <Description> */ - /* A simple structure used to store a 2x2 matrix. Coefficients are */ - /* in 16.16 fixed-point format. The computation performed is: */ - /* */ - /* { */ - /* x' = x*xx + y*xy */ - /* y' = x*yx + y*yy */ - /* } */ - /* */ - /* <Fields> */ - /* xx :: Matrix coefficient. */ - /* */ - /* xy :: Matrix coefficient. */ - /* */ - /* yx :: Matrix coefficient. */ - /* */ - /* yy :: Matrix coefficient. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Matrix + * + * @description: + * A simple structure used to store a 2x2 matrix. Coefficients are in + * 16.16 fixed-point format. The computation performed is: + * + * ``` + * x' = x*xx + y*xy + * y' = x*yx + y*yy + * ``` + * + * @fields: + * xx :: + * Matrix coefficient. + * + * xy :: + * Matrix coefficient. + * + * yx :: + * Matrix coefficient. + * + * yy :: + * Matrix coefficient. + */ typedef struct FT_Matrix_ { FT_Fixed xx, xy; @@ -390,72 +398,75 @@ FT_BEGIN_HEADER } FT_Matrix; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Data */ - /* */ - /* <Description> */ - /* Read-only binary data represented as a pointer and a length. */ - /* */ - /* <Fields> */ - /* pointer :: The data. */ - /* */ - /* length :: The length of the data in bytes. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_Data + * + * @description: + * Read-only binary data represented as a pointer and a length. + * + * @fields: + * pointer :: + * The data. + * + * length :: + * The length of the data in bytes. + */ typedef struct FT_Data_ { const FT_Byte* pointer; - FT_Int length; + FT_UInt length; } FT_Data; - /*************************************************************************/ - /* */ - /* <FuncType> */ - /* FT_Generic_Finalizer */ - /* */ - /* <Description> */ - /* Describe a function used to destroy the `client' data of any */ - /* FreeType object. See the description of the @FT_Generic type for */ - /* details of usage. */ - /* */ - /* <Input> */ - /* The address of the FreeType object that is under finalization. */ - /* Its client data is accessed through its `generic' field. */ - /* */ - typedef void (*FT_Generic_Finalizer)(void* object); - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_Generic */ - /* */ - /* <Description> */ - /* Client applications often need to associate their own data to a */ - /* variety of FreeType core objects. For example, a text layout API */ - /* might want to associate a glyph cache to a given size object. */ - /* */ - /* Some FreeType object contains a `generic' field, of type */ - /* FT_Generic, which usage is left to client applications and font */ - /* servers. */ - /* */ - /* It can be used to store a pointer to client-specific data, as well */ - /* as the address of a `finalizer' function, which will be called by */ - /* FreeType when the object is destroyed (for example, the previous */ - /* client example would put the address of the glyph cache destructor */ - /* in the `finalizer' field). */ - /* */ - /* <Fields> */ - /* data :: A typeless pointer to any client-specified data. This */ - /* field is completely ignored by the FreeType library. */ - /* */ - /* finalizer :: A pointer to a `generic finalizer' function, which */ - /* will be called when the object is destroyed. If this */ - /* field is set to NULL, no code will be called. */ - /* */ + /************************************************************************** + * + * @functype: + * FT_Generic_Finalizer + * + * @description: + * Describe a function used to destroy the 'client' data of any FreeType + * object. See the description of the @FT_Generic type for details of + * usage. + * + * @input: + * The address of the FreeType object that is under finalization. Its + * client data is accessed through its `generic` field. + */ + typedef void (*FT_Generic_Finalizer)( void* object ); + + + /************************************************************************** + * + * @struct: + * FT_Generic + * + * @description: + * Client applications often need to associate their own data to a + * variety of FreeType core objects. For example, a text layout API + * might want to associate a glyph cache to a given size object. + * + * Some FreeType object contains a `generic` field, of type `FT_Generic`, + * which usage is left to client applications and font servers. + * + * It can be used to store a pointer to client-specific data, as well as + * the address of a 'finalizer' function, which will be called by + * FreeType when the object is destroyed (for example, the previous + * client example would put the address of the glyph cache destructor in + * the `finalizer` field). + * + * @fields: + * data :: + * A typeless pointer to any client-specified data. This field is + * completely ignored by the FreeType library. + * + * finalizer :: + * A pointer to a 'generic finalizer' function, which will be called + * when the object is destroyed. If this field is set to `NULL`, no + * code will be called. + */ typedef struct FT_Generic_ { void* data; @@ -464,25 +475,24 @@ FT_BEGIN_HEADER } FT_Generic; - /*************************************************************************/ - /* */ - /* <Macro> */ - /* FT_MAKE_TAG */ - /* */ - /* <Description> */ - /* This macro converts four-letter tags that are used to label */ - /* TrueType tables into an unsigned long, to be used within FreeType. */ - /* */ - /* <Note> */ - /* The produced values *must* be 32-bit integers. Don't redefine */ - /* this macro. */ - /* */ -#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ - (FT_Tag) \ - ( ( (FT_ULong)_x1 << 24 ) | \ - ( (FT_ULong)_x2 << 16 ) | \ - ( (FT_ULong)_x3 << 8 ) | \ - (FT_ULong)_x4 ) + /************************************************************************** + * + * @macro: + * FT_MAKE_TAG + * + * @description: + * This macro converts four-letter tags that are used to label TrueType + * tables into an `FT_Tag` type, to be used within FreeType. + * + * @note: + * The produced values **must** be 32-bit integers. Don't redefine this + * macro. + */ +#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ + ( ( FT_STATIC_BYTE_CAST( FT_Tag, _x1 ) << 24 ) | \ + ( FT_STATIC_BYTE_CAST( FT_Tag, _x2 ) << 16 ) | \ + ( FT_STATIC_BYTE_CAST( FT_Tag, _x3 ) << 8 ) | \ + FT_STATIC_BYTE_CAST( FT_Tag, _x4 ) ) /*************************************************************************/ @@ -494,53 +504,56 @@ FT_BEGIN_HEADER /*************************************************************************/ - /*************************************************************************/ - /* */ - /* <Section> */ - /* list_processing */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * list_processing + * + */ - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_ListNode */ - /* */ - /* <Description> */ - /* Many elements and objects in FreeType are listed through an */ - /* @FT_List record (see @FT_ListRec). As its name suggests, an */ - /* FT_ListNode is a handle to a single list element. */ - /* */ + /************************************************************************** + * + * @type: + * FT_ListNode + * + * @description: + * Many elements and objects in FreeType are listed through an @FT_List + * record (see @FT_ListRec). As its name suggests, an FT_ListNode is a + * handle to a single list element. + */ typedef struct FT_ListNodeRec_* FT_ListNode; - /*************************************************************************/ - /* */ - /* <Type> */ - /* FT_List */ - /* */ - /* <Description> */ - /* A handle to a list record (see @FT_ListRec). */ - /* */ + /************************************************************************** + * + * @type: + * FT_List + * + * @description: + * A handle to a list record (see @FT_ListRec). + */ typedef struct FT_ListRec_* FT_List; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_ListNodeRec */ - /* */ - /* <Description> */ - /* A structure used to hold a single list element. */ - /* */ - /* <Fields> */ - /* prev :: The previous element in the list. NULL if first. */ - /* */ - /* next :: The next element in the list. NULL if last. */ - /* */ - /* data :: A typeless pointer to the listed object. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_ListNodeRec + * + * @description: + * A structure used to hold a single list element. + * + * @fields: + * prev :: + * The previous element in the list. `NULL` if first. + * + * next :: + * The next element in the list. `NULL` if last. + * + * data :: + * A typeless pointer to the listed object. + */ typedef struct FT_ListNodeRec_ { FT_ListNode prev; @@ -550,20 +563,22 @@ FT_BEGIN_HEADER } FT_ListNodeRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_ListRec */ - /* */ - /* <Description> */ - /* A structure used to hold a simple doubly-linked list. These are */ - /* used in many parts of FreeType. */ - /* */ - /* <Fields> */ - /* head :: The head (first element) of doubly-linked list. */ - /* */ - /* tail :: The tail (last element) of doubly-linked list. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_ListRec + * + * @description: + * A structure used to hold a simple doubly-linked list. These are used + * in many parts of FreeType. + * + * @fields: + * head :: + * The head (first element) of doubly-linked list. + * + * tail :: + * The tail (last element) of doubly-linked list. + */ typedef struct FT_ListRec_ { FT_ListNode head; @@ -575,13 +590,13 @@ FT_BEGIN_HEADER #define FT_IS_EMPTY( list ) ( (list).head == 0 ) -#define FT_BOOL( x ) ( (FT_Bool)( x ) ) +#define FT_BOOL( x ) FT_STATIC_CAST( FT_Bool, (x) != 0 ) /* concatenate C tokens */ #define FT_ERR_XCAT( x, y ) x ## y #define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) - /* see `ftmoderr.h' for descriptions of the following macros */ + /* see `ftmoderr.h` for descriptions of the following macros */ #define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e ) diff --git a/non-source/foreign/freetype2/freetype/ftwinfnt.h b/non-source/foreign/freetype2/freetype/ftwinfnt.h index a1a715baa..2591e5886 100644 --- a/non-source/foreign/freetype2/freetype/ftwinfnt.h +++ b/non-source/foreign/freetype2/freetype/ftwinfnt.h @@ -1,26 +1,25 @@ -/***************************************************************************/ -/* */ -/* ftwinfnt.h */ -/* */ -/* FreeType API for accessing Windows fnt-specific data. */ -/* */ -/* Copyright 2003-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ftwinfnt.h + * + * FreeType API for accessing Windows fnt-specific data. + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef FTWINFNT_H_ #define FTWINFNT_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -32,44 +31,43 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* winfnt_fonts */ - /* */ - /* <Title> */ - /* Window FNT Files */ - /* */ - /* <Abstract> */ - /* Windows FNT specific API. */ - /* */ - /* <Description> */ - /* This section contains the declaration of Windows FNT specific */ - /* functions. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * winfnt_fonts + * + * @title: + * Window FNT Files + * + * @abstract: + * Windows FNT-specific API. + * + * @description: + * This section contains the declaration of Windows FNT-specific + * functions. + * + */ - /************************************************************************* + /************************************************************************** * * @enum: * FT_WinFNT_ID_XXX * * @description: - * A list of valid values for the `charset' byte in - * @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX - * encodings (except for cp1361) can be found at - * ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS - * subdirectory. cp1361 is roughly a superset of - * MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT. + * A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec. + * Exact mapping tables for the various 'cpXXXX' encodings (except for + * 'cp1361') can be found at 'ftp://ftp.unicode.org/Public/' in the + * `MAPPINGS/VENDORS/MICSFT/WINDOWS` subdirectory. 'cp1361' is roughly a + * superset of `MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT`. * * @values: * FT_WinFNT_ID_DEFAULT :: - * This is used for font enumeration and font creation as a - * `don't care' value. Valid font files don't contain this value. - * When querying for information about the character set of the font - * that is currently selected into a specified device context, this - * return value (of the related Windows API) simply denotes failure. + * This is used for font enumeration and font creation as a 'don't + * care' value. Valid font files don't contain this value. When + * querying for information about the character set of the font that is + * currently selected into a specified device context, this return + * value (of the related Windows API) simply denotes failure. * * FT_WinFNT_ID_SYMBOL :: * There is no known mapping table available. @@ -78,28 +76,29 @@ FT_BEGIN_HEADER * Mac Roman encoding. * * FT_WinFNT_ID_OEM :: - * From Michael Pöttgen <michael@poettgen.de>: + * From Michael Poettgen <michael@poettgen.de>: * - * The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM - * is used for the charset of vector fonts, like `modern.fon', - * `roman.fon', and `script.fon' on Windows. + * The 'Windows Font Mapping' article says that `FT_WinFNT_ID_OEM` is + * used for the charset of vector fonts, like `modern.fon`, + * `roman.fon`, and `script.fon` on Windows. * - * The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value - * specifies a character set that is operating-system dependent. + * The 'CreateFont' documentation says: The `FT_WinFNT_ID_OEM` value + * specifies a character set that is operating-system dependent. * - * The `IFIMETRICS' documentation from the `Windows Driver - * Development Kit' says: This font supports an OEM-specific - * character set. The OEM character set is system dependent. + * The 'IFIMETRICS' documentation from the 'Windows Driver Development + * Kit' says: This font supports an OEM-specific character set. The + * OEM character set is system dependent. * - * In general OEM, as opposed to ANSI (i.e., cp1252), denotes the - * second default codepage that most international versions of - * Windows have. It is one of the OEM codepages from + * In general OEM, as opposed to ANSI (i.e., 'cp1252'), denotes the + * second default codepage that most international versions of Windows + * have. It is one of the OEM codepages from * - * https://msdn.microsoft.com/en-us/goglobal/bb964655, + * https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers + * , * - * and is used for the `DOS boxes', to support legacy applications. - * A German Windows version for example usually uses ANSI codepage - * 1252 and OEM codepage 850. + * and is used for the 'DOS boxes', to support legacy applications. A + * German Windows version for example usually uses ANSI codepage 1252 + * and OEM codepage 850. * * FT_WinFNT_ID_CP874 :: * A superset of Thai TIS 620 and ISO 8859-11. @@ -112,8 +111,8 @@ FT_BEGIN_HEADER * ordering and minor deviations). * * FT_WinFNT_ID_CP949 :: - * A superset of Korean Hangul KS~C 5601-1987 (with different - * ordering and minor deviations). + * A superset of Korean Hangul KS~C 5601-1987 (with different ordering + * and minor deviations). * * FT_WinFNT_ID_CP950 :: * A superset of traditional Chinese Big~5 ETen (with different @@ -173,14 +172,14 @@ FT_BEGIN_HEADER #define FT_WinFNT_ID_OEM 255 - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_WinFNT_HeaderRec */ - /* */ - /* <Description> */ - /* Windows FNT Header info. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_WinFNT_HeaderRec + * + * @description: + * Windows FNT Header info. + */ typedef struct FT_WinFNT_HeaderRec_ { FT_UShort version; @@ -223,18 +222,18 @@ FT_BEGIN_HEADER } FT_WinFNT_HeaderRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* FT_WinFNT_Header */ - /* */ - /* <Description> */ - /* A handle to an @FT_WinFNT_HeaderRec structure. */ - /* */ + /************************************************************************** + * + * @struct: + * FT_WinFNT_Header + * + * @description: + * A handle to an @FT_WinFNT_HeaderRec structure. + */ typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header; - /********************************************************************** + /************************************************************************** * * @function: * FT_Get_WinFNT_Header @@ -243,10 +242,12 @@ FT_BEGIN_HEADER * Retrieve a Windows FNT font info header. * * @input: - * face :: A handle to the input face. + * face :: + * A handle to the input face. * * @output: - * aheader :: The WinFNT header. + * aheader :: + * The WinFNT header. * * @return: * FreeType error code. 0~means success. diff --git a/non-source/foreign/freetype2/freetype/internal/autohint.h b/non-source/foreign/freetype2/freetype/internal/autohint.h new file mode 100644 index 000000000..8865d53b3 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/autohint.h @@ -0,0 +1,234 @@ +/**************************************************************************** + * + * autohint.h + * + * High-level 'autohint' module-specific interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * The auto-hinter is used to load and automatically hint glyphs if a + * format-specific hinter isn't available. + * + */ + + +#ifndef AUTOHINT_H_ +#define AUTOHINT_H_ + + + /************************************************************************** + * + * A small technical note regarding automatic hinting in order to clarify + * this module interface. + * + * An automatic hinter might compute two kinds of data for a given face: + * + * - global hints: Usually some metrics that describe global properties + * of the face. It is computed by scanning more or less + * aggressively the glyphs in the face, and thus can be + * very slow to compute (even if the size of global hints + * is really small). + * + * - glyph hints: These describe some important features of the glyph + * outline, as well as how to align them. They are + * generally much faster to compute than global hints. + * + * The current FreeType auto-hinter does a pretty good job while performing + * fast computations for both global and glyph hints. However, we might be + * interested in introducing more complex and powerful algorithms in the + * future, like the one described in the John D. Hobby paper, which + * unfortunately requires a lot more horsepower. + * + * Because a sufficiently sophisticated font management system would + * typically implement an LRU cache of opened face objects to reduce memory + * usage, it is a good idea to be able to avoid recomputing global hints + * every time the same face is re-opened. + * + * We thus provide the ability to cache global hints outside of the face + * object, in order to speed up font re-opening time. Of course, this + * feature is purely optional, so most client programs won't even notice + * it. + * + * I initially thought that it would be a good idea to cache the glyph + * hints too. However, my general idea now is that if you really need to + * cache these too, you are simply in need of a new font format, where all + * this information could be stored within the font file and decoded on the + * fly. + * + */ + + +#include <freetype/freetype.h> + + +FT_BEGIN_HEADER + + + typedef struct FT_AutoHinterRec_ *FT_AutoHinter; + + + /************************************************************************** + * + * @functype: + * FT_AutoHinter_GlobalGetFunc + * + * @description: + * Retrieve the global hints computed for a given face object. The + * resulting data is dissociated from the face and will survive a call to + * FT_Done_Face(). It must be discarded through the API + * FT_AutoHinter_GlobalDoneFunc(). + * + * @input: + * hinter :: + * A handle to the source auto-hinter. + * + * face :: + * A handle to the source face object. + * + * @output: + * global_hints :: + * A typeless pointer to the global hints. + * + * global_len :: + * The size in bytes of the global hints. + */ + typedef void + (*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter hinter, + FT_Face face, + void** global_hints, + long* global_len ); + + + /************************************************************************** + * + * @functype: + * FT_AutoHinter_GlobalDoneFunc + * + * @description: + * Discard the global hints retrieved through + * FT_AutoHinter_GlobalGetFunc(). This is the only way these hints are + * freed from memory. + * + * @input: + * hinter :: + * A handle to the auto-hinter module. + * + * global :: + * A pointer to retrieved global hints to discard. + */ + typedef void + (*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter hinter, + void* global ); + + + /************************************************************************** + * + * @functype: + * FT_AutoHinter_GlobalResetFunc + * + * @description: + * This function is used to recompute the global metrics in a given font. + * This is useful when global font data changes (e.g. Multiple Masters + * fonts where blend coordinates change). + * + * @input: + * hinter :: + * A handle to the source auto-hinter. + * + * face :: + * A handle to the face. + */ + typedef void + (*FT_AutoHinter_GlobalResetFunc)( FT_AutoHinter hinter, + FT_Face face ); + + + /************************************************************************** + * + * @functype: + * FT_AutoHinter_GlyphLoadFunc + * + * @description: + * This function is used to load, scale, and automatically hint a glyph + * from a given face. + * + * @input: + * face :: + * A handle to the face. + * + * glyph_index :: + * The glyph index. + * + * load_flags :: + * The load flags. + * + * @note: + * This function is capable of loading composite glyphs by hinting each + * sub-glyph independently (which improves quality). + * + * It will call the font driver with @FT_Load_Glyph, with + * @FT_LOAD_NO_SCALE set. + */ + typedef FT_Error + (*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter hinter, + FT_GlyphSlot slot, + FT_Size size, + FT_UInt glyph_index, + FT_Int32 load_flags ); + + + /************************************************************************** + * + * @struct: + * FT_AutoHinter_InterfaceRec + * + * @description: + * The auto-hinter module's interface. + */ + typedef struct FT_AutoHinter_InterfaceRec_ + { + FT_AutoHinter_GlobalResetFunc reset_face; + FT_AutoHinter_GlobalGetFunc get_global_hints; + FT_AutoHinter_GlobalDoneFunc done_global_hints; + FT_AutoHinter_GlyphLoadFunc load_glyph; + + } FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface; + + +#define FT_DECLARE_AUTOHINTER_INTERFACE( class_ ) \ + FT_CALLBACK_TABLE const FT_AutoHinter_InterfaceRec class_; + +#define FT_DEFINE_AUTOHINTER_INTERFACE( \ + class_, \ + reset_face_, \ + get_global_hints_, \ + done_global_hints_, \ + load_glyph_ ) \ + FT_CALLBACK_TABLE_DEF \ + const FT_AutoHinter_InterfaceRec class_ = \ + { \ + reset_face_, \ + get_global_hints_, \ + done_global_hints_, \ + load_glyph_ \ + }; + + +FT_END_HEADER + +#endif /* AUTOHINT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/cffotypes.h b/non-source/foreign/freetype2/freetype/internal/cffotypes.h new file mode 100644 index 000000000..36b0390a5 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/cffotypes.h @@ -0,0 +1,107 @@ +/**************************************************************************** + * + * cffotypes.h + * + * Basic OpenType/CFF object type definitions (specification). + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFOTYPES_H_ +#define CFFOTYPES_H_ + +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/cfftypes.h> +#include <freetype/internal/tttypes.h> +#include <freetype/internal/services/svpscmap.h> +#include <freetype/internal/pshints.h> + + +FT_BEGIN_HEADER + + + typedef TT_Face CFF_Face; + + + /************************************************************************** + * + * @type: + * CFF_Size + * + * @description: + * A handle to an OpenType size object. + */ + typedef struct CFF_SizeRec_ + { + FT_SizeRec root; + FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */ + + } CFF_SizeRec, *CFF_Size; + + + /************************************************************************** + * + * @type: + * CFF_GlyphSlot + * + * @description: + * A handle to an OpenType glyph slot object. + */ + typedef struct CFF_GlyphSlotRec_ + { + FT_GlyphSlotRec root; + + FT_Bool hint; + FT_Bool scaled; + + FT_Fixed x_scale; + FT_Fixed y_scale; + + } CFF_GlyphSlotRec, *CFF_GlyphSlot; + + + /************************************************************************** + * + * @type: + * CFF_Internal + * + * @description: + * The interface to the 'internal' field of `FT_Size`. + */ + typedef struct CFF_InternalRec_ + { + PSH_Globals topfont; + PSH_Globals subfonts[CFF_MAX_CID_FONTS]; + + } CFF_InternalRec, *CFF_Internal; + + + /************************************************************************** + * + * Subglyph transformation record. + */ + typedef struct CFF_Transform_ + { + FT_Fixed xx, xy; /* transformation matrix coefficients */ + FT_Fixed yx, yy; + FT_F26Dot6 ox, oy; /* offsets */ + + } CFF_Transform; + + +FT_END_HEADER + + +#endif /* CFFOTYPES_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/cfftypes.h b/non-source/foreign/freetype2/freetype/internal/cfftypes.h new file mode 100644 index 000000000..ef2e8e756 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/cfftypes.h @@ -0,0 +1,416 @@ +/**************************************************************************** + * + * cfftypes.h + * + * Basic OpenType/CFF type definitions and interface (specification + * only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFTYPES_H_ +#define CFFTYPES_H_ + + +#include <freetype/freetype.h> +#include <freetype/t1tables.h> +#include <freetype/internal/ftserv.h> +#include <freetype/internal/services/svpscmap.h> +#include <freetype/internal/pshints.h> +#include <freetype/internal/t1types.h> + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @struct: + * CFF_IndexRec + * + * @description: + * A structure used to model a CFF Index table. + * + * @fields: + * stream :: + * The source input stream. + * + * start :: + * The position of the first index byte in the input stream. + * + * count :: + * The number of elements in the index. + * + * off_size :: + * The size in bytes of object offsets in index. + * + * data_offset :: + * The position of first data byte in the index's bytes. + * + * data_size :: + * The size of the data table in this index. + * + * offsets :: + * A table of element offsets in the index. Must be loaded explicitly. + * + * bytes :: + * If the index is loaded in memory, its bytes. + */ + typedef struct CFF_IndexRec_ + { + FT_Stream stream; + FT_ULong start; + FT_UInt hdr_size; + FT_UInt count; + FT_Byte off_size; + FT_ULong data_offset; + FT_ULong data_size; + + FT_ULong* offsets; + FT_Byte* bytes; + + } CFF_IndexRec, *CFF_Index; + + + typedef struct CFF_EncodingRec_ + { + FT_UInt format; + FT_ULong offset; + + FT_UInt count; + FT_UShort sids [256]; /* avoid dynamic allocations */ + FT_UShort codes[256]; + + } CFF_EncodingRec, *CFF_Encoding; + + + typedef struct CFF_CharsetRec_ + { + + FT_UInt format; + FT_ULong offset; + + FT_UShort* sids; + FT_UShort* cids; /* the inverse mapping of `sids'; only needed */ + /* for CID-keyed fonts */ + FT_UInt max_cid; + FT_UInt num_glyphs; + + } CFF_CharsetRec, *CFF_Charset; + + + /* cf. similar fields in file `ttgxvar.h' from the `truetype' module */ + + typedef struct CFF_VarData_ + { +#if 0 + FT_UInt itemCount; /* not used; always zero */ + FT_UInt shortDeltaCount; /* not used; always zero */ +#endif + + FT_UInt regionIdxCount; /* number of region indexes */ + FT_UInt* regionIndices; /* array of `regionIdxCount' indices; */ + /* these index `varRegionList' */ + } CFF_VarData; + + + /* contribution of one axis to a region */ + typedef struct CFF_AxisCoords_ + { + FT_Fixed startCoord; + FT_Fixed peakCoord; /* zero peak means no effect (factor = 1) */ + FT_Fixed endCoord; + + } CFF_AxisCoords; + + + typedef struct CFF_VarRegion_ + { + CFF_AxisCoords* axisList; /* array of axisCount records */ + + } CFF_VarRegion; + + + typedef struct CFF_VStoreRec_ + { + FT_UInt dataCount; + CFF_VarData* varData; /* array of dataCount records */ + /* vsindex indexes this array */ + FT_UShort axisCount; + FT_UInt regionCount; /* total number of regions defined */ + CFF_VarRegion* varRegionList; + + } CFF_VStoreRec, *CFF_VStore; + + + /* forward reference */ + typedef struct CFF_FontRec_* CFF_Font; + + + /* This object manages one cached blend vector. */ + /* */ + /* There is a BlendRec for Private DICT parsing in each subfont */ + /* and a BlendRec for charstrings in CF2_Font instance data. */ + /* A cached BV may be used across DICTs or Charstrings if inputs */ + /* have not changed. */ + /* */ + /* `usedBV' is reset at the start of each parse or charstring. */ + /* vsindex cannot be changed after a BV is used. */ + /* */ + /* Note: NDV is long (32/64 bit), while BV is 16.16 (FT_Int32). */ + typedef struct CFF_BlendRec_ + { + FT_Bool builtBV; /* blendV has been built */ + FT_Bool usedBV; /* blendV has been used */ + CFF_Font font; /* top level font struct */ + FT_UInt lastVsindex; /* last vsindex used */ + FT_UInt lenNDV; /* normDV length (aka numAxes) */ + FT_Fixed* lastNDV; /* last NDV used */ + FT_UInt lenBV; /* BlendV length (aka numMasters) */ + FT_Int32* BV; /* current blendV (per DICT/glyph) */ + + } CFF_BlendRec, *CFF_Blend; + + + typedef struct CFF_FontRecDictRec_ + { + FT_UInt version; + FT_UInt notice; + FT_UInt copyright; + FT_UInt full_name; + FT_UInt family_name; + FT_UInt weight; + FT_Bool is_fixed_pitch; + FT_Fixed italic_angle; + FT_Fixed underline_position; + FT_Fixed underline_thickness; + FT_Int paint_type; + FT_Int charstring_type; + FT_Matrix font_matrix; + FT_Bool has_font_matrix; + FT_ULong units_per_em; /* temporarily used as scaling value also */ + FT_Vector font_offset; + FT_ULong unique_id; + FT_BBox font_bbox; + FT_Pos stroke_width; + FT_ULong charset_offset; + FT_ULong encoding_offset; + FT_ULong charstrings_offset; + FT_ULong private_offset; + FT_ULong private_size; + FT_Long synthetic_base; + FT_UInt embedded_postscript; + + /* these should only be used for the top-level font dictionary */ + FT_UInt cid_registry; + FT_UInt cid_ordering; + FT_Long cid_supplement; + + FT_Long cid_font_version; + FT_Long cid_font_revision; + FT_Long cid_font_type; + FT_ULong cid_count; + FT_ULong cid_uid_base; + FT_ULong cid_fd_array_offset; + FT_ULong cid_fd_select_offset; + FT_UInt cid_font_name; + + /* the next fields come from the data of the deprecated */ + /* `MultipleMaster' operator; they are needed to parse the (also */ + /* deprecated) `blend' operator in Type 2 charstrings */ + FT_UShort num_designs; + FT_UShort num_axes; + + /* fields for CFF2 */ + FT_ULong vstore_offset; + FT_UInt maxstack; + + } CFF_FontRecDictRec, *CFF_FontRecDict; + + + /* forward reference */ + typedef struct CFF_SubFontRec_* CFF_SubFont; + + + typedef struct CFF_PrivateRec_ + { + FT_Byte num_blue_values; + FT_Byte num_other_blues; + FT_Byte num_family_blues; + FT_Byte num_family_other_blues; + + FT_Fixed blue_values[14]; + FT_Fixed other_blues[10]; + FT_Fixed family_blues[14]; + FT_Fixed family_other_blues[10]; + + FT_Fixed blue_scale; + FT_Pos blue_shift; + FT_Pos blue_fuzz; + FT_Pos standard_width; + FT_Pos standard_height; + + FT_Byte num_snap_widths; + FT_Byte num_snap_heights; + FT_Pos snap_widths[13]; + FT_Pos snap_heights[13]; + FT_Bool force_bold; + FT_Fixed force_bold_threshold; + FT_Int lenIV; + FT_Int language_group; + FT_Fixed expansion_factor; + FT_Long initial_random_seed; + FT_ULong local_subrs_offset; + FT_Pos default_width; + FT_Pos nominal_width; + + /* fields for CFF2 */ + FT_UInt vsindex; + CFF_SubFont subfont; + + } CFF_PrivateRec, *CFF_Private; + + + typedef struct CFF_FDSelectRec_ + { + FT_Byte format; + FT_UInt range_count; + + /* that's the table, taken from the file `as is' */ + FT_Byte* data; + FT_UInt data_size; + + /* small cache for format 3 only */ + FT_UInt cache_first; + FT_UInt cache_count; + FT_Byte cache_fd; + + } CFF_FDSelectRec, *CFF_FDSelect; + + + /* A SubFont packs a font dict and a private dict together. They are */ + /* needed to support CID-keyed CFF fonts. */ + typedef struct CFF_SubFontRec_ + { + CFF_FontRecDictRec font_dict; + CFF_PrivateRec private_dict; + + /* fields for CFF2 */ + CFF_BlendRec blend; /* current blend vector */ + FT_UInt lenNDV; /* current length NDV or zero */ + FT_Fixed* NDV; /* ptr to current NDV or NULL */ + + /* `blend_stack' is a writable buffer to hold blend results. */ + /* This buffer is to the side of the normal cff parser stack; */ + /* `cff_parse_blend' and `cff_blend_doBlend' push blend results here. */ + /* The normal stack then points to these values instead of the DICT */ + /* because all other operators in Private DICT clear the stack. */ + /* `blend_stack' could be cleared at each operator other than blend. */ + /* Blended values are stored as 5-byte fixed-point values. */ + + FT_Byte* blend_stack; /* base of stack allocation */ + FT_Byte* blend_top; /* first empty slot */ + FT_UInt blend_used; /* number of bytes in use */ + FT_UInt blend_alloc; /* number of bytes allocated */ + + CFF_IndexRec local_subrs_index; + FT_Byte** local_subrs; /* array of pointers */ + /* into Local Subrs INDEX data */ + + FT_UInt32 random; + + } CFF_SubFontRec; + + +#define CFF_MAX_CID_FONTS 256 + + + typedef struct CFF_FontRec_ + { + FT_Library library; + FT_Stream stream; + FT_Memory memory; /* TODO: take this from stream->memory? */ + FT_ULong base_offset; /* offset to start of CFF */ + FT_UInt num_faces; + FT_UInt num_glyphs; + + FT_Byte version_major; + FT_Byte version_minor; + FT_Byte header_size; + + FT_UInt top_dict_length; /* cff2 only */ + + FT_Bool cff2; + + CFF_IndexRec name_index; + CFF_IndexRec top_dict_index; + CFF_IndexRec global_subrs_index; + + CFF_EncodingRec encoding; + CFF_CharsetRec charset; + + CFF_IndexRec charstrings_index; + CFF_IndexRec font_dict_index; + CFF_IndexRec private_index; + CFF_IndexRec local_subrs_index; + + FT_String* font_name; + + /* array of pointers into Global Subrs INDEX data */ + FT_Byte** global_subrs; + + /* array of pointers into String INDEX data stored at string_pool */ + FT_UInt num_strings; + FT_Byte** strings; + FT_Byte* string_pool; + FT_ULong string_pool_size; + + CFF_SubFontRec top_font; + FT_UInt num_subfonts; + CFF_SubFont subfonts[CFF_MAX_CID_FONTS]; + + CFF_FDSelectRec fd_select; + + /* interface to PostScript hinter */ + PSHinter_Service pshinter; + + /* interface to Postscript Names service */ + FT_Service_PsCMaps psnames; + + /* interface to CFFLoad service */ + const void* cffload; + + /* since version 2.3.0 */ + PS_FontInfoRec* font_info; /* font info dictionary */ + + /* since version 2.3.6 */ + FT_String* registry; + FT_String* ordering; + + /* since version 2.4.12 */ + FT_Generic cf2_instance; + + /* since version 2.7.1 */ + CFF_VStoreRec vstore; /* parsed vstore structure */ + + /* since version 2.9 */ + PS_FontExtraRec* font_extra; + + } CFF_FontRec; + + +FT_END_HEADER + +#endif /* CFFTYPES_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/compiler-macros.h b/non-source/foreign/freetype2/freetype/internal/compiler-macros.h new file mode 100644 index 000000000..876f66e25 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/compiler-macros.h @@ -0,0 +1,343 @@ +/**************************************************************************** + * + * internal/compiler-macros.h + * + * Compiler-specific macro definitions used internally by FreeType. + * + * Copyright (C) 2020-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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 <freetype/config/public-macros.h> + +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 + + /* Newer compilers warn for fall-through case statements. */ +#ifndef FALL_THROUGH +# if ( defined( __STDC_VERSION__ ) && __STDC_VERSION__ > 201710L ) || \ + ( defined( __cplusplus ) && __cplusplus > 201402L ) +# define FALL_THROUGH [[__fallthrough__]] +# elif ( defined( __GNUC__ ) && __GNUC__ >= 7 ) || \ + ( defined( __clang__ ) && \ + ( defined( __apple_build_version__ ) \ + ? __apple_build_version__ >= 12000000 \ + : __clang_major__ >= 10 ) ) +# define FALL_THROUGH __attribute__(( __fallthrough__ )) +# else +# define FALL_THROUGH ( (void)0 ) +# 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 __UINTPTR_TYPE__ + /* + * GCC and Clang both provide a `__UINTPTR_TYPE__` that can be used to + * avoid a dependency on `stdint.h`. + */ +# define FT_UINT_TO_POINTER( x ) (void *)(__UINTPTR_TYPE__)(x) +#elif defined( _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/public-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_COMPARE_DEF, in addition, ensures the `cdecl` calling + * convention on x86, required by the C library function `qsort`. + * + * 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 + +#if defined( __GNUC__ ) && defined( __i386__ ) +#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( x ) __attribute__(( cdecl )) +#elif defined( _MSC_VER ) && defined( _M_IX86 ) +#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( x ) __cdecl +#elif defined( __WATCOMC__ ) && __WATCOMC__ >= 1240 +#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( x ) __watcall +#else +#define FT_COMPARE_DEF( x ) FT_CALLBACK_DEF( 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/non-source/foreign/freetype2/freetype/internal/ftcalc.h b/non-source/foreign/freetype2/freetype/internal/ftcalc.h new file mode 100644 index 000000000..71128a2df --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftcalc.h @@ -0,0 +1,584 @@ +/**************************************************************************** + * + * ftcalc.h + * + * Arithmetic computations (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTCALC_H_ +#define FTCALC_H_ + + +#include <freetype/freetype.h> + +#include "compiler-macros.h" + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * FT_MulDiv() and FT_MulFix() are declared in freetype.h. + * + */ + +#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER + /* Provide assembler fragments for performance-critical functions. */ + /* These must be defined `static __inline__' with GCC. */ + +#if defined( __CC_ARM ) || defined( __ARMCC__ ) /* RVCT */ + +#define FT_MULFIX_ASSEMBLER FT_MulFix_arm + + /* documentation is in freetype.h */ + + static __inline FT_Int32 + FT_MulFix_arm( FT_Int32 a, + FT_Int32 b ) + { + FT_Int32 t, t2; + + + __asm + { + smull t2, t, b, a /* (lo=t2,hi=t) = a*b */ + mov a, t, asr #31 /* a = (hi >> 31) */ + add a, a, #0x8000 /* a += 0x8000 */ + adds t2, t2, a /* t2 += a */ + adc t, t, #0 /* t += carry */ + mov a, t2, lsr #16 /* a = t2 >> 16 */ + orr a, a, t, lsl #16 /* a |= t << 16 */ + } + return a; + } + +#endif /* __CC_ARM || __ARMCC__ */ + + +#ifdef __GNUC__ + +#if defined( __arm__ ) && \ + ( !defined( __thumb__ ) || defined( __thumb2__ ) ) && \ + !( defined( __CC_ARM ) || defined( __ARMCC__ ) ) + +#define FT_MULFIX_ASSEMBLER FT_MulFix_arm + + /* documentation is in freetype.h */ + + static __inline__ FT_Int32 + FT_MulFix_arm( FT_Int32 a, + FT_Int32 b ) + { + FT_Int32 t, t2; + + + __asm__ __volatile__ ( + "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */ + "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */ +#if defined( __clang__ ) && defined( __thumb2__ ) + "add.w %0, %0, #0x8000\n\t" /* %0 += 0x8000 */ +#else + "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */ +#endif + "adds %1, %1, %0\n\t" /* %1 += %0 */ + "adc %2, %2, #0\n\t" /* %2 += carry */ + "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */ + "orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */ + : "=r"(a), "=&r"(t2), "=&r"(t) + : "r"(a), "r"(b) + : "cc" ); + return a; + } + +#endif /* __arm__ && */ + /* ( __thumb2__ || !__thumb__ ) && */ + /* !( __CC_ARM || __ARMCC__ ) */ + + +#if defined( __i386__ ) + +#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 + + /* documentation is in freetype.h */ + + static __inline__ FT_Int32 + FT_MulFix_i386( FT_Int32 a, + FT_Int32 b ) + { + FT_Int32 result; + + + __asm__ __volatile__ ( + "imul %%edx\n" + "movl %%edx, %%ecx\n" + "sarl $31, %%ecx\n" + "addl $0x8000, %%ecx\n" + "addl %%ecx, %%eax\n" + "adcl $0, %%edx\n" + "shrl $16, %%eax\n" + "shll $16, %%edx\n" + "addl %%edx, %%eax\n" + : "=a"(result), "=d"(b) + : "a"(a), "d"(b) + : "%ecx", "cc" ); + return result; + } + +#endif /* i386 */ + +#endif /* __GNUC__ */ + + +#ifdef _MSC_VER /* Visual C++ */ + +#ifdef _M_IX86 + +#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 + + /* documentation is in freetype.h */ + + static __inline FT_Int32 + FT_MulFix_i386( FT_Int32 a, + FT_Int32 b ) + { + FT_Int32 result; + + __asm + { + mov eax, a + mov edx, b + imul edx + mov ecx, edx + sar ecx, 31 + add ecx, 8000h + add eax, ecx + adc edx, 0 + shr eax, 16 + shl edx, 16 + add eax, edx + mov result, eax + } + return result; + } + +#endif /* _M_IX86 */ + +#endif /* _MSC_VER */ + + +#if defined( __GNUC__ ) && defined( __x86_64__ ) + +#define FT_MULFIX_ASSEMBLER FT_MulFix_x86_64 + + static __inline__ FT_Int32 + FT_MulFix_x86_64( FT_Int32 a, + FT_Int32 b ) + { + /* Temporarily disable the warning that C90 doesn't support */ + /* `long long'. */ +#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 6 ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" +#endif + +#if 1 + /* Technically not an assembly fragment, but GCC does a really good */ + /* job at inlining it and generating good machine code for it. */ + long long ret, tmp; + + + ret = (long long)a * b; + tmp = ret >> 63; + ret += 0x8000 + tmp; + + return (FT_Int32)( ret >> 16 ); +#else + + /* For some reason, GCC 4.6 on Ubuntu 12.04 generates invalid machine */ + /* code from the lines below. The main issue is that `wide_a' is not */ + /* properly initialized by sign-extending `a'. Instead, the generated */ + /* machine code assumes that the register that contains `a' on input */ + /* can be used directly as a 64-bit value, which is wrong most of the */ + /* time. */ + long long wide_a = (long long)a; + long long wide_b = (long long)b; + long long result; + + + __asm__ __volatile__ ( + "imul %2, %1\n" + "mov %1, %0\n" + "sar $63, %0\n" + "lea 0x8000(%1, %0), %0\n" + "sar $16, %0\n" + : "=&r"(result), "=&r"(wide_a) + : "r"(wide_b) + : "cc" ); + + return (FT_Int32)result; +#endif + +#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 6 ) +#pragma GCC diagnostic pop +#endif + } + +#endif /* __GNUC__ && __x86_64__ */ + +#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ + + +#ifdef FT_CONFIG_OPTION_INLINE_MULFIX +#ifdef FT_MULFIX_ASSEMBLER +#define FT_MulFix( a, b ) FT_MULFIX_ASSEMBLER( (FT_Int32)(a), (FT_Int32)(b) ) +#endif +#endif + + + /************************************************************************** + * + * @function: + * FT_MulDiv_No_Round + * + * @description: + * A very simple function used to perform the computation '(a*b)/c' + * (without rounding) with maximum accuracy (it uses a 64-bit + * intermediate integer whenever necessary). + * + * This function isn't necessarily as fast as some processor-specific + * operations, but is at least completely portable. + * + * @input: + * a :: + * The first multiplier. + * b :: + * The second multiplier. + * c :: + * The divisor. + * + * @return: + * The result of '(a*b)/c'. This function never traps when trying to + * divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on + * the signs of 'a' and 'b'. + */ + FT_BASE( FT_Long ) + FT_MulDiv_No_Round( FT_Long a, + FT_Long b, + FT_Long c ); + + + /************************************************************************** + * + * @function: + * FT_MulAddFix + * + * @description: + * Compute `(s[0] * f[0] + s[1] * f[1] + ...) / 0x10000`, where `s[n]` is + * usually a 16.16 scalar. + * + * @input: + * s :: + * The array of scalars. + * f :: + * The array of factors. + * count :: + * The number of entries in the array. + * + * @return: + * The result of `(s[0] * f[0] + s[1] * f[1] + ...) / 0x10000`. + * + * @note: + * This function is currently used for the scaled delta computation of + * variation stores. It internally uses 64-bit data types when + * available, otherwise it emulates 64-bit math by using 32-bit + * operations, which produce a correct result but most likely at a slower + * performance in comparison to the implementation base on `int64_t`. + * + */ + FT_BASE( FT_Int32 ) + FT_MulAddFix( FT_Fixed* s, + FT_Int32* f, + FT_UInt count ); + + + /* + * A variant of FT_Matrix_Multiply which scales its result afterwards. The + * idea is that both `a' and `b' are scaled by factors of 10 so that the + * values are as precise as possible to get a correct result during the + * 64bit multiplication. Let `sa' and `sb' be the scaling factors of `a' + * and `b', respectively, then the scaling factor of the result is `sa*sb'. + */ + FT_BASE( void ) + FT_Matrix_Multiply_Scaled( const FT_Matrix* a, + FT_Matrix *b, + FT_Long scaling ); + + + /* + * Check a matrix. If the transformation would lead to extreme shear or + * extreme scaling, for example, return 0. If everything is OK, return 1. + * + * Based on geometric considerations we use the following inequality to + * identify a degenerate matrix. + * + * 32 * abs(xx*yy - xy*yx) < xx^2 + xy^2 + yx^2 + yy^2 + * + * Value 32 is heuristic. + */ + FT_BASE( FT_Bool ) + FT_Matrix_Check( const FT_Matrix* matrix ); + + + /* + * A variant of FT_Vector_Transform. See comments for + * FT_Matrix_Multiply_Scaled. + */ + FT_BASE( void ) + FT_Vector_Transform_Scaled( FT_Vector* vector, + const FT_Matrix* matrix, + FT_Long scaling ); + + + /* + * This function normalizes a vector and returns its original length. The + * normalized vector is a 16.16 fixed-point unit vector with length close + * to 0x10000. The accuracy of the returned length is limited to 16 bits + * also. The function utilizes quick inverse square root approximation + * without divisions and square roots relying on Newton's iterations + * instead. + */ + FT_BASE( FT_UInt32 ) + FT_Vector_NormLen( FT_Vector* vector ); + + + /* + * Return -1, 0, or +1, depending on the orientation of a given corner. We + * use the Cartesian coordinate system, with positive vertical values going + * upwards. The function returns +1 if the corner turns to the left, -1 to + * the right, and 0 for undecidable cases. + */ + FT_BASE( FT_Int ) + ft_corner_orientation( FT_Pos in_x, + FT_Pos in_y, + FT_Pos out_x, + FT_Pos out_y ); + + + /* + * Return TRUE if a corner is flat or nearly flat. This is equivalent to + * saying that the corner point is close to its neighbors, or inside an + * ellipse defined by the neighbor focal points to be more precise. + */ + FT_BASE( FT_Int ) + ft_corner_is_flat( FT_Pos in_x, + FT_Pos in_y, + FT_Pos out_x, + FT_Pos out_y ); + + + /* + * Return the most significant bit index. + */ + +#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER + +#if defined( __clang__ ) || ( defined( __GNUC__ ) && \ + ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) ) ) + +#if FT_SIZEOF_INT == 4 + +#define FT_MSB( x ) ( 31 - __builtin_clz( x ) ) + +#elif FT_SIZEOF_LONG == 4 + +#define FT_MSB( x ) ( 31 - __builtin_clzl( x ) ) + +#endif + +#elif defined( _MSC_VER ) && _MSC_VER >= 1400 + +#if defined( _WIN32_WCE ) + +#include <cmnintrin.h> +#pragma intrinsic( _CountLeadingZeros ) + +#define FT_MSB( x ) ( 31 - _CountLeadingZeros( x ) ) + +#elif defined( _M_ARM64 ) || defined( _M_ARM ) || defined( _M_ARM64EC ) + +#include <intrin.h> +#pragma intrinsic( _CountLeadingZeros ) + +#define FT_MSB( x ) ( 31 - _CountLeadingZeros( x ) ) + +#elif defined( _M_IX86 ) || defined( _M_AMD64 ) || defined( _M_IA64 ) + +#include <intrin.h> +#pragma intrinsic( _BitScanReverse ) + + static __inline FT_Int32 + FT_MSB_i386( FT_UInt32 x ) + { + unsigned long where; + + + _BitScanReverse( &where, x ); + + return (FT_Int32)where; + } + +#define FT_MSB( x ) FT_MSB_i386( x ) + +#endif + +#elif defined( __WATCOMC__ ) && defined( __386__ ) + + extern __inline FT_Int32 + FT_MSB_i386( FT_UInt32 x ); + +#pragma aux FT_MSB_i386 = \ + "bsr eax, eax" \ + __parm [__eax] __nomemory \ + __value [__eax] \ + __modify __exact [__eax] __nomemory; + +#define FT_MSB( x ) FT_MSB_i386( x ) + +#elif defined( __SunOS_5_11 ) + +#include <string.h> + +#define FT_MSB( x ) ( fls( x ) - 1 ) + +#elif defined( __DECC ) || defined( __DECCXX ) + +#include <builtins.h> + +#define FT_MSB( x ) (FT_Int)( 63 - _leadz( x ) ) + +#elif defined( _CRAYC ) + +#include <intrinsics.h> + +#define FT_MSB( x ) (FT_Int)( 31 - _leadz32( x ) ) + +#endif /* FT_MSB macro definitions */ + +#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ + + +#ifndef FT_MSB + + FT_BASE( FT_Int ) + FT_MSB( FT_UInt32 z ); + +#endif + + + /* + * Return sqrt(x*x+y*y), which is the same as `FT_Vector_Length' but uses + * two fixed-point arguments instead. + */ + FT_BASE( FT_Fixed ) + FT_Hypot( FT_Fixed x, + FT_Fixed y ); + + + /************************************************************************** + * + * @function: + * FT_SqrtFixed + * + * @description: + * Computes the square root of a 16.16 fixed-point value. + * + * @input: + * x :: + * The value to compute the root for. + * + * @return: + * The result of 'sqrt(x)'. + * + * @note: + * This function is slow and should be avoided. Consider @FT_Hypot or + * @FT_Vector_NormLen instead. + */ + FT_BASE( FT_UInt32 ) + FT_SqrtFixed( FT_UInt32 x ); + + +#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) * 64 ) /* << 6 */ +#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) * 16384 ) /* << 14 */ +#define INT_TO_FIXED( x ) ( (FT_Long)(x) * 65536 ) /* << 16 */ +#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) * 4 ) /* << 2 */ +#define FIXED_TO_INT( x ) ( FT_RoundFix( x ) >> 16 ) + +#define ROUND_F26DOT6( x ) ( ( (x) + 32 - ( x < 0 ) ) & -64 ) + + /* + * The following macros have two purposes. + * + * - Tag places where overflow is expected and harmless. + * + * - Avoid run-time sanitizer errors. + * + * Use with care! + */ +#define ADD_INT( a, b ) \ + (FT_Int)( (FT_UInt)(a) + (FT_UInt)(b) ) +#define SUB_INT( a, b ) \ + (FT_Int)( (FT_UInt)(a) - (FT_UInt)(b) ) +#define MUL_INT( a, b ) \ + (FT_Int)( (FT_UInt)(a) * (FT_UInt)(b) ) +#define NEG_INT( a ) \ + (FT_Int)( (FT_UInt)0 - (FT_UInt)(a) ) + +#define ADD_LONG( a, b ) \ + (FT_Long)( (FT_ULong)(a) + (FT_ULong)(b) ) +#define SUB_LONG( a, b ) \ + (FT_Long)( (FT_ULong)(a) - (FT_ULong)(b) ) +#define MUL_LONG( a, b ) \ + (FT_Long)( (FT_ULong)(a) * (FT_ULong)(b) ) +#define NEG_LONG( a ) \ + (FT_Long)( (FT_ULong)0 - (FT_ULong)(a) ) + +#define ADD_INT32( a, b ) \ + (FT_Int32)( (FT_UInt32)(a) + (FT_UInt32)(b) ) +#define SUB_INT32( a, b ) \ + (FT_Int32)( (FT_UInt32)(a) - (FT_UInt32)(b) ) +#define MUL_INT32( a, b ) \ + (FT_Int32)( (FT_UInt32)(a) * (FT_UInt32)(b) ) +#define NEG_INT32( a ) \ + (FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) ) + +#ifdef FT_INT64 + +#define ADD_INT64( a, b ) \ + (FT_Int64)( (FT_UInt64)(a) + (FT_UInt64)(b) ) +#define SUB_INT64( a, b ) \ + (FT_Int64)( (FT_UInt64)(a) - (FT_UInt64)(b) ) +#define MUL_INT64( a, b ) \ + (FT_Int64)( (FT_UInt64)(a) * (FT_UInt64)(b) ) +#define NEG_INT64( a ) \ + (FT_Int64)( (FT_UInt64)0 - (FT_UInt64)(a) ) + +#endif /* FT_INT64 */ + + +FT_END_HEADER + +#endif /* FTCALC_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftdebug.h b/non-source/foreign/freetype2/freetype/internal/ftdebug.h new file mode 100644 index 000000000..d7fa8dc93 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftdebug.h @@ -0,0 +1,442 @@ +/**************************************************************************** + * + * ftdebug.h + * + * Debugging and logging component (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + * + * IMPORTANT: A description of FreeType's debugging support can be + * found in 'docs/DEBUG.TXT'. Read it if you need to use or + * understand this code. + * + */ + + +#ifndef FTDEBUG_H_ +#define FTDEBUG_H_ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/freetype.h> + +#include "compiler-macros.h" + +#ifdef FT_DEBUG_LOGGING +#define DLG_STATIC +#include <dlg/output.h> +#include <dlg/dlg.h> + +#include <freetype/ftlogging.h> +#endif /* FT_DEBUG_LOGGING */ + + +FT_BEGIN_HEADER + + /* force the definition of FT_DEBUG_LEVEL_TRACE if FT_DEBUG_LOGGING is */ + /* already defined. */ + /* */ +#ifdef FT_DEBUG_LOGGING +#undef FT_DEBUG_LEVEL_TRACE +#define FT_DEBUG_LEVEL_TRACE +#endif + + /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */ + /* is already defined; this simplifies the following #ifdefs */ + /* */ +#ifdef FT_DEBUG_LEVEL_TRACE +#undef FT_DEBUG_LEVEL_ERROR +#define FT_DEBUG_LEVEL_ERROR +#endif + + + /************************************************************************** + * + * Define the trace enums as well as the trace levels array when they are + * needed. + * + */ + +#ifdef FT_DEBUG_LEVEL_TRACE + +#define FT_TRACE_DEF( x ) trace_ ## x , + + /* defining the enumeration */ + typedef enum FT_Trace_ + { +#include <freetype/internal/fttrace.h> + trace_count + + } FT_Trace; + + + /* a pointer to the array of trace levels, */ + /* provided by `src/base/ftdebug.c' */ + extern int* ft_trace_levels; + +#undef FT_TRACE_DEF + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + + /************************************************************************** + * + * Define the FT_TRACE macro + * + * IMPORTANT! + * + * Each component must define the macro FT_COMPONENT to a valid FT_Trace + * value before using any TRACE macro. + * + * To get consistent logging output, there should be no newline character + * (i.e., '\n') or a single trailing one in the message string of + * `FT_TRACEx` and `FT_ERROR`. + */ + + + /************************************************************************* + * + * If FT_DEBUG_LOGGING is enabled, tracing messages are sent to dlg's API. + * If FT_DEBUG_LOGGING is disabled, tracing messages are sent to + * `FT_Message` (defined in ftdebug.c). + */ +#ifdef FT_DEBUG_LOGGING + + /* we need two macros to convert the names of `FT_COMPONENT` to a string */ +#define FT_LOGGING_TAG( x ) FT_LOGGING_TAG_( x ) +#define FT_LOGGING_TAG_( x ) #x + + /* we need two macros to convert the component and the trace level */ + /* to a string that combines them */ +#define FT_LOGGING_TAGX( x, y ) FT_LOGGING_TAGX_( x, y ) +#define FT_LOGGING_TAGX_( x, y ) #x ":" #y + + +#define FT_LOG( level, varformat ) \ + do \ + { \ + const char* dlg_tag = FT_LOGGING_TAGX( FT_COMPONENT, level ); \ + \ + \ + ft_add_tag( dlg_tag ); \ + if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \ + { \ + if ( custom_output_handler != NULL ) \ + FT_Logging_Callback varformat; \ + else \ + dlg_trace varformat; \ + } \ + ft_remove_tag( dlg_tag ); \ + } while( 0 ) + +#else /* !FT_DEBUG_LOGGING */ + +#define FT_LOG( level, varformat ) \ + do \ + { \ + if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \ + FT_Message varformat; \ + } while ( 0 ) + +#endif /* !FT_DEBUG_LOGGING */ + + +#ifdef FT_DEBUG_LEVEL_TRACE + + /* we need two macros here to make cpp expand `FT_COMPONENT' */ +#define FT_TRACE_COMP( x ) FT_TRACE_COMP_( x ) +#define FT_TRACE_COMP_( x ) trace_ ## x + +#define FT_TRACE( level, varformat ) FT_LOG( level, varformat ) + +#else /* !FT_DEBUG_LEVEL_TRACE */ + +#define FT_TRACE( level, varformat ) do { } while ( 0 ) /* nothing */ + +#endif /* !FT_DEBUG_LEVEL_TRACE */ + + + /************************************************************************** + * + * @function: + * FT_Trace_Get_Count + * + * @description: + * Return the number of available trace components. + * + * @return: + * The number of trace components. 0 if FreeType 2 is not built with + * FT_DEBUG_LEVEL_TRACE definition. + * + * @note: + * This function may be useful if you want to access elements of the + * internal trace levels array by an index. + */ + FT_BASE( FT_Int ) + FT_Trace_Get_Count( void ); + + + /************************************************************************** + * + * @function: + * FT_Trace_Get_Name + * + * @description: + * Return the name of a trace component. + * + * @input: + * The index of the trace component. + * + * @return: + * The name of the trace component. This is a statically allocated + * C~string, so do not free it after use. `NULL` if FreeType is not + * built with FT_DEBUG_LEVEL_TRACE definition. + * + * @note: + * Use @FT_Trace_Get_Count to get the number of available trace + * components. + */ + FT_BASE( const char* ) + FT_Trace_Get_Name( FT_Int idx ); + + + /************************************************************************** + * + * @function: + * FT_Trace_Disable + * + * @description: + * Switch off tracing temporarily. It can be activated again with + * @FT_Trace_Enable. + */ + FT_BASE( void ) + FT_Trace_Disable( void ); + + + /************************************************************************** + * + * @function: + * FT_Trace_Enable + * + * @description: + * Activate tracing. Use it after tracing has been switched off with + * @FT_Trace_Disable. + */ + FT_BASE( void ) + FT_Trace_Enable( void ); + + + /************************************************************************** + * + * You need two opening and closing parentheses! + * + * Example: FT_TRACE0(( "Value is %i", foo )) + * + * Output of the FT_TRACEX macros is sent to stderr. + * + */ + +#define FT_TRACE0( varformat ) FT_TRACE( 0, varformat ) +#define FT_TRACE1( varformat ) FT_TRACE( 1, varformat ) +#define FT_TRACE2( varformat ) FT_TRACE( 2, varformat ) +#define FT_TRACE3( varformat ) FT_TRACE( 3, varformat ) +#define FT_TRACE4( varformat ) FT_TRACE( 4, varformat ) +#define FT_TRACE5( varformat ) FT_TRACE( 5, varformat ) +#define FT_TRACE6( varformat ) FT_TRACE( 6, varformat ) +#define FT_TRACE7( varformat ) FT_TRACE( 7, varformat ) + + + /************************************************************************** + * + * Define the FT_ERROR macro. + * + * Output of this macro is sent to stderr. + * + */ + +#ifdef FT_DEBUG_LEVEL_ERROR + + /************************************************************************** + * + * If FT_DEBUG_LOGGING is enabled, error messages are sent to dlg's API. + * If FT_DEBUG_LOGGING is disabled, error messages are sent to `FT_Message` + * (defined in ftdebug.c). + * + */ +#ifdef FT_DEBUG_LOGGING + +#define FT_ERROR( varformat ) \ + do \ + { \ + const char* dlg_tag = FT_LOGGING_TAG( FT_COMPONENT ); \ + \ + \ + ft_add_tag( dlg_tag ); \ + dlg_trace varformat; \ + ft_remove_tag( dlg_tag ); \ + } while ( 0 ) + +#else /* !FT_DEBUG_LOGGING */ + +#define FT_ERROR( varformat ) FT_Message varformat + +#endif /* !FT_DEBUG_LOGGING */ + + +#else /* !FT_DEBUG_LEVEL_ERROR */ + +#define FT_ERROR( varformat ) do { } while ( 0 ) /* nothing */ + +#endif /* !FT_DEBUG_LEVEL_ERROR */ + + + /************************************************************************** + * + * Define the FT_ASSERT and FT_THROW macros. The call to `FT_Throw` makes + * it possible to easily set a breakpoint at this function. + * + */ + +#ifdef FT_DEBUG_LEVEL_ERROR + +#define FT_ASSERT( condition ) \ + do \ + { \ + if ( !( condition ) ) \ + FT_Panic( "assertion failed on line %d of file %s\n", \ + __LINE__, __FILE__ ); \ + } while ( 0 ) + +#define FT_THROW( e ) \ + ( FT_Throw( FT_ERR_CAT( FT_ERR_PREFIX, e ), \ + __LINE__, \ + __FILE__ ) | \ + FT_ERR_CAT( FT_ERR_PREFIX, e ) ) + +#else /* !FT_DEBUG_LEVEL_ERROR */ + +#define FT_ASSERT( condition ) do { } while ( 0 ) + +#define FT_THROW( e ) FT_ERR_CAT( FT_ERR_PREFIX, e ) + +#endif /* !FT_DEBUG_LEVEL_ERROR */ + + + /************************************************************************** + * + * Define `FT_Message` and `FT_Panic` when needed. + * + */ + +#ifdef FT_DEBUG_LEVEL_ERROR + +#include "stdio.h" /* for vfprintf() */ + + /* print a message */ + FT_BASE( void ) + FT_Message( const char* fmt, + ... ); + + /* print a message and exit */ + FT_BASE( void ) + FT_Panic( const char* fmt, + ... ); + + /* report file name and line number of an error */ + FT_BASE( int ) + FT_Throw( FT_Error error, + int line, + const char* file ); + +#endif /* FT_DEBUG_LEVEL_ERROR */ + + + FT_BASE( void ) + ft_debug_init( void ); + + +#ifdef FT_DEBUG_LOGGING + + /************************************************************************** + * + * 'dlg' uses output handlers to control how and where log messages are + * printed. Therefore we need to define a default output handler for + * FreeType. + */ + FT_BASE( void ) + ft_log_handler( const struct dlg_origin* origin, + const char* string, + void* data ); + + + /************************************************************************** + * + * 1. `ft_default_log_handler` stores the function pointer that is used + * internally by FreeType to print logs to a file. + * + * 2. `custom_output_handler` stores the function pointer to the callback + * function provided by the user. + * + * It is defined in `ftdebug.c`. + */ + extern dlg_handler ft_default_log_handler; + extern FT_Custom_Log_Handler custom_output_handler; + + + /************************************************************************** + * + * If FT_DEBUG_LOGGING macro is enabled, FreeType needs to initialize and + * un-initialize `FILE*`. + * + * These functions are defined in `ftdebug.c`. + */ + FT_BASE( void ) + ft_logging_init( void ); + + FT_BASE( void ) + ft_logging_deinit( void ); + + + /************************************************************************** + * + * For printing the name of `FT_COMPONENT` along with the actual log we + * need to add a tag with the name of `FT_COMPONENT`. + * + * These functions are defined in `ftdebug.c`. + */ + FT_BASE( void ) + ft_add_tag( const char* tag ); + + FT_BASE( void ) + ft_remove_tag( const char* tag ); + + + /************************************************************************** + * + * A function to print log data using a custom callback logging function + * (which is set using `FT_Set_Log_Handler`). + * + * This function is defined in `ftdebug.c`. + */ + FT_BASE( void ) + FT_Logging_Callback( const char* fmt, + ... ); + +#endif /* FT_DEBUG_LOGGING */ + + +FT_END_HEADER + +#endif /* FTDEBUG_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftdrv.h b/non-source/foreign/freetype2/freetype/internal/ftdrv.h new file mode 100644 index 000000000..5609b3ef1 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftdrv.h @@ -0,0 +1,289 @@ +/**************************************************************************** + * + * ftdrv.h + * + * FreeType internal font driver interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTDRV_H_ +#define FTDRV_H_ + + +#include <freetype/ftmodapi.h> + +#include "compiler-macros.h" + +FT_BEGIN_HEADER + + + typedef FT_Error + (*FT_Face_InitFunc)( FT_Stream stream, + FT_Face face, + FT_Int typeface_index, + FT_Int num_params, + FT_Parameter* parameters ); + + typedef void + (*FT_Face_DoneFunc)( FT_Face face ); + + + typedef FT_Error + (*FT_Size_InitFunc)( FT_Size size ); + + typedef void + (*FT_Size_DoneFunc)( FT_Size size ); + + + typedef FT_Error + (*FT_Slot_InitFunc)( FT_GlyphSlot slot ); + + typedef void + (*FT_Slot_DoneFunc)( FT_GlyphSlot slot ); + + + typedef FT_Error + (*FT_Size_RequestFunc)( FT_Size size, + FT_Size_Request req ); + + typedef FT_Error + (*FT_Size_SelectFunc)( FT_Size size, + FT_ULong size_index ); + + typedef FT_Error + (*FT_Slot_LoadFunc)( FT_GlyphSlot slot, + FT_Size size, + FT_UInt glyph_index, + FT_Int32 load_flags ); + + + typedef FT_Error + (*FT_Face_GetKerningFunc)( FT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph, + FT_Vector* kerning ); + + + typedef FT_Error + (*FT_Face_AttachFunc)( FT_Face face, + FT_Stream stream ); + + + typedef FT_Error + (*FT_Face_GetAdvancesFunc)( FT_Face face, + FT_UInt first, + FT_UInt count, + FT_Int32 flags, + FT_Fixed* advances ); + + + /************************************************************************** + * + * @struct: + * FT_Driver_ClassRec + * + * @description: + * The font driver class. This structure mostly contains pointers to + * driver methods. + * + * @fields: + * root :: + * The parent module. + * + * face_object_size :: + * The size of a face object in bytes. + * + * size_object_size :: + * The size of a size object in bytes. + * + * slot_object_size :: + * The size of a glyph object in bytes. + * + * init_face :: + * The format-specific face constructor. + * + * done_face :: + * The format-specific face destructor. + * + * init_size :: + * The format-specific size constructor. + * + * done_size :: + * The format-specific size destructor. + * + * init_slot :: + * The format-specific slot constructor. + * + * done_slot :: + * The format-specific slot destructor. + * + * + * load_glyph :: + * A function handle to load a glyph to a slot. This field is + * mandatory! + * + * get_kerning :: + * A function handle to return the unscaled kerning for a given pair of + * glyphs. Can be set to 0 if the format doesn't support kerning. + * + * attach_file :: + * This function handle is used to read additional data for a face from + * another file/stream. For example, this can be used to add data from + * AFM or PFM files on a Type 1 face, or a CIDMap on a CID-keyed face. + * + * get_advances :: + * A function handle used to return advance widths of 'count' glyphs + * (in font units), starting at 'first'. The 'vertical' flag must be + * set to get vertical advance heights. The 'advances' buffer is + * caller-allocated. The idea of this function is to be able to + * perform device-independent text layout without loading a single + * glyph image. + * + * request_size :: + * A handle to a function used to request the new character size. Can + * be set to 0 if the scaling done in the base layer suffices. + * + * select_size :: + * A handle to a function used to select a new fixed size. It is used + * only if @FT_FACE_FLAG_FIXED_SIZES is set. Can be set to 0 if the + * scaling done in the base layer suffices. + * + * @note: + * Most function pointers, with the exception of `load_glyph`, can be set + * to 0 to indicate a default behaviour. + */ + typedef struct FT_Driver_ClassRec_ + { + FT_Module_Class root; + + FT_Long face_object_size; + FT_Long size_object_size; + FT_Long slot_object_size; + + FT_Face_InitFunc init_face; + FT_Face_DoneFunc done_face; + + FT_Size_InitFunc init_size; + FT_Size_DoneFunc done_size; + + FT_Slot_InitFunc init_slot; + FT_Slot_DoneFunc done_slot; + + FT_Slot_LoadFunc load_glyph; + + FT_Face_GetKerningFunc get_kerning; + FT_Face_AttachFunc attach_file; + FT_Face_GetAdvancesFunc get_advances; + + /* since version 2.2 */ + FT_Size_RequestFunc request_size; + FT_Size_SelectFunc select_size; + + } FT_Driver_ClassRec, *FT_Driver_Class; + + + /************************************************************************** + * + * @macro: + * FT_DECLARE_DRIVER + * + * @description: + * Used to create a forward declaration of an FT_Driver_ClassRec struct + * instance. + * + * @macro: + * FT_DEFINE_DRIVER + * + * @description: + * Used to initialize an instance of FT_Driver_ClassRec struct. + * + * `ftinit.c` (ft_create_default_module_classes) already contains a + * mechanism to call these functions for the default modules described in + * `ftmodule.h`. + * + * The struct will be allocated in the global scope (or the scope where + * the macro is used). + */ +#define FT_DECLARE_DRIVER( class_ ) \ + FT_CALLBACK_TABLE \ + const FT_Driver_ClassRec class_; + +#define FT_DEFINE_DRIVER( \ + class_, \ + flags_, \ + size_, \ + name_, \ + version_, \ + requires_, \ + interface_, \ + init_, \ + done_, \ + get_interface_, \ + face_object_size_, \ + size_object_size_, \ + slot_object_size_, \ + init_face_, \ + done_face_, \ + init_size_, \ + done_size_, \ + init_slot_, \ + done_slot_, \ + load_glyph_, \ + get_kerning_, \ + attach_file_, \ + get_advances_, \ + request_size_, \ + select_size_ ) \ + FT_CALLBACK_TABLE_DEF \ + const FT_Driver_ClassRec class_ = \ + { \ + FT_DEFINE_ROOT_MODULE( flags_, \ + size_, \ + name_, \ + version_, \ + requires_, \ + interface_, \ + init_, \ + done_, \ + get_interface_ ) \ + \ + face_object_size_, \ + size_object_size_, \ + slot_object_size_, \ + \ + init_face_, \ + done_face_, \ + \ + init_size_, \ + done_size_, \ + \ + init_slot_, \ + done_slot_, \ + \ + load_glyph_, \ + \ + get_kerning_, \ + attach_file_, \ + get_advances_, \ + \ + request_size_, \ + select_size_ \ + }; + + +FT_END_HEADER + +#endif /* FTDRV_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftgloadr.h b/non-source/foreign/freetype2/freetype/internal/ftgloadr.h new file mode 100644 index 000000000..f1c155b16 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftgloadr.h @@ -0,0 +1,147 @@ +/**************************************************************************** + * + * ftgloadr.h + * + * The FreeType glyph loader (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTGLOADR_H_ +#define FTGLOADR_H_ + + +#include <freetype/freetype.h> + +#include "compiler-macros.h" + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @struct: + * FT_GlyphLoader + * + * @description: + * The glyph loader is an internal object used to load several glyphs + * together (for example, in the case of composites). + */ + typedef struct FT_SubGlyphRec_ + { + FT_Int index; + FT_UShort flags; + FT_Int arg1; + FT_Int arg2; + FT_Matrix transform; + + } FT_SubGlyphRec; + + + typedef struct FT_GlyphLoadRec_ + { + FT_Outline outline; /* outline */ + FT_Vector* extra_points; /* extra points table */ + FT_Vector* extra_points2; /* second extra points table */ + FT_UInt num_subglyphs; /* number of subglyphs */ + FT_SubGlyph subglyphs; /* subglyphs */ + + } FT_GlyphLoadRec, *FT_GlyphLoad; + + + typedef struct FT_GlyphLoaderRec_ + { + FT_Memory memory; + FT_UInt max_points; + FT_UInt max_contours; + FT_UInt max_subglyphs; + FT_Bool use_extra; + + FT_GlyphLoadRec base; + FT_GlyphLoadRec current; + + void* other; /* for possible future extension? */ + + } FT_GlyphLoaderRec, *FT_GlyphLoader; + + + /* create new empty glyph loader */ + FT_BASE( FT_Error ) + FT_GlyphLoader_New( FT_Memory memory, + FT_GlyphLoader *aloader ); + + /* add an extra points table to a glyph loader */ + FT_BASE( FT_Error ) + FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader ); + + /* destroy a glyph loader */ + FT_BASE( void ) + FT_GlyphLoader_Done( FT_GlyphLoader loader ); + + /* reset a glyph loader (frees everything int it) */ + FT_BASE( void ) + FT_GlyphLoader_Reset( FT_GlyphLoader loader ); + + /* rewind a glyph loader */ + FT_BASE( void ) + FT_GlyphLoader_Rewind( FT_GlyphLoader loader ); + + /* check that there is enough space to add `n_points' and `n_contours' */ + /* to the glyph loader */ + FT_BASE( FT_Error ) + FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader, + FT_UInt n_points, + FT_UInt n_contours ); + + +#define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \ + ( (_count) == 0 || \ + ( (FT_UInt)(_loader)->base.outline.n_points + \ + (FT_UInt)(_loader)->current.outline.n_points + \ + (FT_UInt)(_count) ) <= (_loader)->max_points ) + +#define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \ + ( (_count) == 0 || \ + ( (FT_UInt)(_loader)->base.outline.n_contours + \ + (FT_UInt)(_loader)->current.outline.n_contours + \ + (FT_UInt)(_count) ) <= (_loader)->max_contours ) + +#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points, _contours ) \ + ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \ + FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \ + ? 0 \ + : FT_GlyphLoader_CheckPoints( (_loader), \ + (FT_UInt)(_points), \ + (FT_UInt)(_contours) ) ) + + + /* check that there is enough space to add `n_subs' sub-glyphs to */ + /* a glyph loader */ + FT_BASE( FT_Error ) + FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader, + FT_UInt n_subs ); + + /* prepare a glyph loader, i.e. empty the current glyph */ + FT_BASE( void ) + FT_GlyphLoader_Prepare( FT_GlyphLoader loader ); + + /* add the current glyph to the base glyph */ + FT_BASE( void ) + FT_GlyphLoader_Add( FT_GlyphLoader loader ); + + +FT_END_HEADER + +#endif /* FTGLOADR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/fthash.h b/non-source/foreign/freetype2/freetype/internal/fthash.h new file mode 100644 index 000000000..622ec76bb --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/fthash.h @@ -0,0 +1,135 @@ +/**************************************************************************** + * + * fthash.h + * + * Hashing functions (specification). + * + */ + +/* + * Copyright 2000 Computing Research Labs, New Mexico State University + * Copyright 2001-2015 + * Francesco Zappa Nardelli + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT + * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + /************************************************************************** + * + * This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 + * + * taken from Mark Leisher's xmbdfed package + * + */ + + +#ifndef FTHASH_H_ +#define FTHASH_H_ + + +#include <freetype/freetype.h> + + +FT_BEGIN_HEADER + + + typedef union FT_Hashkey_ + { + FT_Int num; + const char* str; + + } FT_Hashkey; + + + typedef struct FT_HashnodeRec_ + { + FT_Hashkey key; + size_t data; + + } FT_HashnodeRec; + + typedef struct FT_HashnodeRec_ *FT_Hashnode; + + + typedef FT_ULong + (*FT_Hash_LookupFunc)( FT_Hashkey* key ); + + typedef FT_Bool + (*FT_Hash_CompareFunc)( FT_Hashkey* a, + FT_Hashkey* b ); + + + typedef struct FT_HashRec_ + { + FT_UInt limit; + FT_UInt size; + FT_UInt used; + + FT_Hash_LookupFunc lookup; + FT_Hash_CompareFunc compare; + + FT_Hashnode* table; + + } FT_HashRec; + + typedef struct FT_HashRec_ *FT_Hash; + + + FT_Error + ft_hash_str_init( FT_Hash hash, + FT_Memory memory ); + + FT_Error + ft_hash_num_init( FT_Hash hash, + FT_Memory memory ); + + void + ft_hash_str_free( FT_Hash hash, + FT_Memory memory ); + +#define ft_hash_num_free ft_hash_str_free + + FT_Error + ft_hash_str_insert( const char* key, + size_t data, + FT_Hash hash, + FT_Memory memory ); + + FT_Error + ft_hash_num_insert( FT_Int num, + size_t data, + FT_Hash hash, + FT_Memory memory ); + + size_t* + ft_hash_str_lookup( const char* key, + FT_Hash hash ); + + size_t* + ft_hash_num_lookup( FT_Int num, + FT_Hash hash ); + + +FT_END_HEADER + + +#endif /* FTHASH_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftmemory.h b/non-source/foreign/freetype2/freetype/internal/ftmemory.h new file mode 100644 index 000000000..4e05a29f1 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftmemory.h @@ -0,0 +1,401 @@ +/**************************************************************************** + * + * ftmemory.h + * + * The FreeType memory management macros (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTMEMORY_H_ +#define FTMEMORY_H_ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/fttypes.h> + +#include "compiler-macros.h" + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @macro: + * FT_SET_ERROR + * + * @description: + * This macro is used to set an implicit 'error' variable to a given + * expression's value (usually a function call), and convert it to a + * boolean which is set whenever the value is != 0. + */ +#undef FT_SET_ERROR +#define FT_SET_ERROR( expression ) \ + ( ( error = (expression) ) != 0 ) + + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** M E M O R Y ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /* 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++, + * we have to use a template to emulate it. + */ + +#ifdef __cplusplus + +extern "C++" +{ + template <typename T> inline T* + cplusplus_typeof( T*, + void *v ) + { + return static_cast <T*> ( v ); + } +} + +#define FT_ASSIGNP( p, val ) (p) = cplusplus_typeof( (p), (val) ) + +#else + +#define FT_ASSIGNP( p, val ) (p) = (val) + +#endif + + + +#ifdef FT_DEBUG_MEMORY + + FT_BASE( const char* ) ft_debug_file_; + FT_BASE( long ) ft_debug_lineno_; + +#define FT_DEBUG_INNER( exp ) ( ft_debug_file_ = __FILE__, \ + ft_debug_lineno_ = __LINE__, \ + (exp) ) + +#define FT_ASSIGNP_INNER( p, exp ) ( ft_debug_file_ = __FILE__, \ + ft_debug_lineno_ = __LINE__, \ + FT_ASSIGNP( p, exp ) ) + +#else /* !FT_DEBUG_MEMORY */ + +#define FT_DEBUG_INNER( exp ) (exp) +#define FT_ASSIGNP_INNER( p, exp ) FT_ASSIGNP( p, exp ) + +#endif /* !FT_DEBUG_MEMORY */ + + + /* + * The allocation functions return a pointer, and the error code is written + * to through the `p_error' parameter. + */ + + /* The `q' variants of the functions below (`q' for `quick') don't fill */ + /* the allocated or reallocated memory with zero bytes. */ + + FT_BASE( FT_Pointer ) + ft_mem_alloc( FT_Memory memory, + FT_Long size, + FT_Error *p_error ); + + FT_BASE( FT_Pointer ) + ft_mem_qalloc( FT_Memory memory, + FT_Long size, + FT_Error *p_error ); + + FT_BASE( FT_Pointer ) + ft_mem_realloc( FT_Memory memory, + FT_Long item_size, + FT_Long cur_count, + FT_Long new_count, + void* block, + FT_Error *p_error ); + + FT_BASE( FT_Pointer ) + ft_mem_qrealloc( FT_Memory memory, + FT_Long item_size, + FT_Long cur_count, + FT_Long new_count, + void* block, + FT_Error *p_error ); + + FT_BASE( void ) + ft_mem_free( FT_Memory memory, + const void* P ); + + + /* The `Q' variants of the macros below (`Q' for `quick') don't fill */ + /* the allocated or reallocated memory with zero bytes. */ + +#define FT_MEM_ALLOC( ptr, size ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, \ + (FT_Long)(size), \ + &error ) ) + +#define FT_MEM_FREE( ptr ) \ + FT_BEGIN_STMNT \ + FT_DEBUG_INNER( ft_mem_free( memory, (ptr) ) ); \ + (ptr) = NULL; \ + FT_END_STMNT + +#define FT_MEM_NEW( ptr ) \ + FT_MEM_ALLOC( ptr, sizeof ( *(ptr) ) ) + +#define FT_MEM_REALLOC( ptr, cursz, newsz ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \ + 1, \ + (FT_Long)(cursz), \ + (FT_Long)(newsz), \ + (ptr), \ + &error ) ) + +#define FT_MEM_QALLOC( ptr, size ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_qalloc( memory, \ + (FT_Long)(size), \ + &error ) ) + +#define FT_MEM_QNEW( ptr ) \ + FT_MEM_QALLOC( ptr, sizeof ( *(ptr) ) ) + +#define FT_MEM_QREALLOC( ptr, cursz, newsz ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \ + 1, \ + (FT_Long)(cursz), \ + (FT_Long)(newsz), \ + (ptr), \ + &error ) ) + +#define FT_MEM_ALLOC_MULT( ptr, count, item_size ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \ + (FT_Long)(item_size), \ + 0, \ + (FT_Long)(count), \ + NULL, \ + &error ) ) + +#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \ + (FT_Long)(itmsz), \ + (FT_Long)(oldcnt), \ + (FT_Long)(newcnt), \ + (ptr), \ + &error ) ) + +#define FT_MEM_QALLOC_MULT( ptr, count, item_size ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \ + (FT_Long)(item_size), \ + 0, \ + (FT_Long)(count), \ + NULL, \ + &error ) ) + +#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \ + (FT_Long)(itmsz), \ + (FT_Long)(oldcnt), \ + (FT_Long)(newcnt), \ + (ptr), \ + &error ) ) + + +#define FT_MEM_SET_ERROR( cond ) ( (cond), error != 0 ) + + +#define FT_MEM_SET( dest, byte, count ) \ + ft_memset( dest, byte, (FT_Offset)(count) ) + +#define FT_MEM_COPY( dest, source, count ) \ + ft_memcpy( dest, source, (FT_Offset)(count) ) + +#define FT_MEM_MOVE( dest, source, count ) \ + ft_memmove( dest, source, (FT_Offset)(count) ) + + +#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count ) + +#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) ) + + +#define FT_ARRAY_ZERO( dest, count ) \ + FT_MEM_ZERO( dest, \ + (FT_Offset)(count) * sizeof ( *(dest) ) ) + +#define FT_ARRAY_COPY( dest, source, count ) \ + FT_MEM_COPY( dest, \ + source, \ + (FT_Offset)(count) * sizeof ( *(dest) ) ) + +#define FT_ARRAY_MOVE( dest, source, count ) \ + FT_MEM_MOVE( dest, \ + source, \ + (FT_Offset)(count) * sizeof ( *(dest) ) ) + + + /* + * Return the maximum number of addressable elements in an array. We limit + * ourselves to INT_MAX, rather than UINT_MAX, to avoid any problems. + */ +#define FT_ARRAY_MAX( ptr ) ( FT_INT_MAX / sizeof ( *(ptr) ) ) + +#define FT_ARRAY_CHECK( ptr, count ) ( (count) <= FT_ARRAY_MAX( ptr ) ) + + + /************************************************************************** + * + * The following functions macros expect that their pointer argument is + * _typed_ in order to automatically compute array element sizes. + */ + +#define FT_MEM_NEW_ARRAY( ptr, count ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \ + sizeof ( *(ptr) ), \ + 0, \ + (FT_Long)(count), \ + NULL, \ + &error ) ) + +#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \ + sizeof ( *(ptr) ), \ + (FT_Long)(cursz), \ + (FT_Long)(newsz), \ + (ptr), \ + &error ) ) + +#define FT_MEM_QNEW_ARRAY( ptr, count ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \ + sizeof ( *(ptr) ), \ + 0, \ + (FT_Long)(count), \ + NULL, \ + &error ) ) + +#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \ + FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \ + sizeof ( *(ptr) ), \ + (FT_Long)(cursz), \ + (FT_Long)(newsz), \ + (ptr), \ + &error ) ) + +#define FT_ALLOC( ptr, size ) \ + FT_MEM_SET_ERROR( FT_MEM_ALLOC( ptr, size ) ) + +#define FT_REALLOC( ptr, cursz, newsz ) \ + FT_MEM_SET_ERROR( FT_MEM_REALLOC( ptr, cursz, newsz ) ) + +#define FT_ALLOC_MULT( ptr, count, item_size ) \ + FT_MEM_SET_ERROR( FT_MEM_ALLOC_MULT( ptr, count, item_size ) ) + +#define FT_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \ + FT_MEM_SET_ERROR( FT_MEM_REALLOC_MULT( ptr, oldcnt, \ + newcnt, itmsz ) ) + +#define FT_QALLOC( ptr, size ) \ + FT_MEM_SET_ERROR( FT_MEM_QALLOC( ptr, size ) ) + +#define FT_QREALLOC( ptr, cursz, newsz ) \ + FT_MEM_SET_ERROR( FT_MEM_QREALLOC( ptr, cursz, newsz ) ) + +#define FT_QALLOC_MULT( ptr, count, item_size ) \ + FT_MEM_SET_ERROR( FT_MEM_QALLOC_MULT( ptr, count, item_size ) ) + +#define FT_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \ + FT_MEM_SET_ERROR( FT_MEM_QREALLOC_MULT( ptr, oldcnt, \ + newcnt, itmsz ) ) + +#define FT_FREE( ptr ) FT_MEM_FREE( ptr ) + +#define FT_NEW( ptr ) FT_MEM_SET_ERROR( FT_MEM_NEW( ptr ) ) + +#define FT_NEW_ARRAY( ptr, count ) \ + FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) ) + +#define FT_RENEW_ARRAY( ptr, curcnt, newcnt ) \ + FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) ) + +#define FT_QNEW( ptr ) FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) ) + +#define FT_QNEW_ARRAY( ptr, count ) \ + FT_MEM_SET_ERROR( FT_MEM_QNEW_ARRAY( ptr, count ) ) + +#define FT_QRENEW_ARRAY( ptr, curcnt, newcnt ) \ + FT_MEM_SET_ERROR( FT_MEM_QRENEW_ARRAY( ptr, curcnt, newcnt ) ) + + + FT_BASE( FT_Pointer ) + ft_mem_strdup( FT_Memory memory, + const char* str, + FT_Error *p_error ); + + FT_BASE( FT_Pointer ) + ft_mem_dup( FT_Memory memory, + const void* address, + FT_ULong size, + FT_Error *p_error ); + + +#define FT_MEM_STRDUP( dst, str ) \ + (dst) = (char*)ft_mem_strdup( memory, (const char*)(str), &error ) + +#define FT_STRDUP( dst, str ) \ + FT_MEM_SET_ERROR( FT_MEM_STRDUP( dst, str ) ) + +#define FT_MEM_DUP( dst, address, size ) \ + FT_ASSIGNP_INNER( dst, ft_mem_dup( memory, \ + (address), \ + (FT_ULong)(size), \ + &error ) ) + +#define FT_DUP( dst, address, size ) \ + FT_MEM_SET_ERROR( FT_MEM_DUP( dst, address, size ) ) + + + /* Return >= 1 if a truncation occurs. */ + /* Return 0 if the source string fits the buffer. */ + /* This is *not* the same as strlcpy(). */ + FT_BASE( FT_Int ) + ft_mem_strcpyn( char* dst, + const char* src, + FT_ULong size ); + +#define FT_STRCPYN( dst, src, size ) \ + ft_mem_strcpyn( (char*)dst, (const char*)(src), (FT_ULong)(size) ) + + +FT_END_HEADER + +#endif /* FTMEMORY_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftmmtypes.h b/non-source/foreign/freetype2/freetype/internal/ftmmtypes.h new file mode 100644 index 000000000..8449e7a01 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftmmtypes.h @@ -0,0 +1,91 @@ +/**************************************************************************** + * + * ftmmtypes.h + * + * OpenType Variations type definitions for internal use + * with the multi-masters service (specification). + * + * Copyright (C) 2022-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, George Williams, and + * Dominik Röttsches. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTMMTYPES_H_ +#define FTMMTYPES_H_ + +FT_BEGIN_HEADER + + + typedef FT_Int32 FT_ItemVarDelta; + + typedef struct GX_ItemVarDataRec_ + { + FT_UInt itemCount; /* Number of delta sets per item. */ + FT_UInt regionIdxCount; /* Number of region indices. */ + FT_UInt* regionIndices; /* Array of `regionCount` indices; */ + /* these index `varRegionList`. */ + FT_Byte* deltaSet; /* Array of `itemCount` deltas; */ + /* use `innerIndex` for this array. */ + FT_UShort wordDeltaCount; /* Number of the first 32-bit ints */ + /* or 16-bit ints of `deltaSet` */ + /* depending on `longWords`. */ + FT_Bool longWords; /* If true, `deltaSet` is a 32-bit */ + /* array followed by a 16-bit */ + /* array, otherwise a 16-bit array */ + /* followed by an 8-bit array. */ + } GX_ItemVarDataRec, *GX_ItemVarData; + + + /* contribution of one axis to a region */ + typedef struct GX_AxisCoordsRec_ + { + FT_Fixed startCoord; + FT_Fixed peakCoord; /* zero means no effect (factor = 1) */ + FT_Fixed endCoord; + + } GX_AxisCoordsRec, *GX_AxisCoords; + + + typedef struct GX_VarRegionRec_ + { + GX_AxisCoords axisList; /* array of axisCount records */ + + } GX_VarRegionRec, *GX_VarRegion; + + + /* item variation store */ + typedef struct GX_ItemVarStoreRec_ + { + FT_UInt dataCount; + GX_ItemVarData varData; /* array of dataCount records; */ + /* use `outerIndex' for this array */ + FT_UShort axisCount; + FT_UInt regionCount; /* total number of regions defined */ + GX_VarRegion varRegionList; + + } GX_ItemVarStoreRec, *GX_ItemVarStore; + + + typedef struct GX_DeltaSetIdxMapRec_ + { + FT_ULong mapCount; + FT_UInt* outerIndex; /* indices to item var data */ + FT_UInt* innerIndex; /* indices to delta set */ + + } GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap; + + +FT_END_HEADER + +#endif /* FTMMTYPES_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftobjs.h b/non-source/foreign/freetype2/freetype/internal/ftobjs.h new file mode 100644 index 000000000..a1e93298f --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftobjs.h @@ -0,0 +1,1232 @@ +/**************************************************************************** + * + * ftobjs.h + * + * The FreeType private base classes (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file contains the definition of all internal FreeType classes. + * + */ + + +#ifndef FTOBJS_H_ +#define FTOBJS_H_ + +#include <freetype/ftrender.h> +#include <freetype/ftsizes.h> +#include <freetype/ftlcdfil.h> +#include <freetype/internal/ftmemory.h> +#include <freetype/internal/ftgloadr.h> +#include <freetype/internal/ftdrv.h> +#include <freetype/internal/autohint.h> +#include <freetype/internal/ftserv.h> +#include <freetype/internal/ftcalc.h> + +#ifdef FT_CONFIG_OPTION_INCREMENTAL +#include <freetype/ftincrem.h> +#endif + +#include "compiler-macros.h" + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * Some generic definitions. + */ +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef NULL +#define NULL (void*)0 +#endif + + + /************************************************************************** + * + * The min and max functions missing in C. As usual, be careful not to + * write things like FT_MIN( a++, b++ ) to avoid side effects. + */ +#define FT_MIN( a, b ) ( (a) < (b) ? (a) : (b) ) +#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) ) + +#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) ) + + /* + * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min' algorithm. + * We use alpha = 1, beta = 3/8, giving us results with a largest error + * less than 7% compared to the exact value. + */ +#define FT_HYPOT( x, y ) \ + ( x = FT_ABS( x ), \ + y = FT_ABS( y ), \ + x > y ? x + ( 3 * y >> 3 ) \ + : y + ( 3 * x >> 3 ) ) + + /* we use FT_TYPEOF to suppress signedness compilation warnings */ +#define FT_PAD_FLOOR( x, n ) ( (x) & ~FT_TYPEOF( x )( (n) - 1 ) ) +#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + (n) / 2, n ) +#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + (n) - 1, n ) + +#define FT_PIX_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 ) +#define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 ) +#define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 ) + + /* specialized versions (for signed values) */ + /* that don't produce run-time errors due to integer overflow */ +#define FT_PAD_ROUND_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) / 2 ), \ + n ) +#define FT_PAD_CEIL_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) - 1 ), \ + n ) +#define FT_PIX_ROUND_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 32 ) ) +#define FT_PIX_CEIL_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 63 ) ) + +#define FT_PAD_ROUND_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) / 2 ), \ + n ) +#define FT_PAD_CEIL_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) - 1 ), \ + n ) +#define FT_PIX_ROUND_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 32 ) ) +#define FT_PIX_CEIL_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 63 ) ) + + + /* + * character classification functions -- since these are used to parse font + * files, we must not use those in <ctypes.h> which are locale-dependent + */ +#define ft_isdigit( x ) ( ( (unsigned)(x) - '0' ) < 10U ) + +#define ft_isxdigit( x ) ( ( (unsigned)(x) - '0' ) < 10U || \ + ( (unsigned)(x) - 'a' ) < 6U || \ + ( (unsigned)(x) - 'A' ) < 6U ) + + /* the next two macros assume ASCII representation */ +#define ft_isupper( x ) ( ( (unsigned)(x) - 'A' ) < 26U ) +#define ft_islower( x ) ( ( (unsigned)(x) - 'a' ) < 26U ) + +#define ft_isalpha( x ) ( ft_isupper( x ) || ft_islower( x ) ) +#define ft_isalnum( x ) ( ft_isdigit( x ) || ft_isalpha( x ) ) + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** C H A R M A P S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + /* handle to internal charmap object */ + typedef struct FT_CMapRec_* FT_CMap; + + /* handle to charmap class structure */ + typedef const struct FT_CMap_ClassRec_* FT_CMap_Class; + + /* internal charmap object structure */ + typedef struct FT_CMapRec_ + { + FT_CharMapRec charmap; + FT_CMap_Class clazz; + + } FT_CMapRec; + + /* typecast any pointer to a charmap handle */ +#define FT_CMAP( x ) ( (FT_CMap)( x ) ) + + /* obvious macros */ +#define FT_CMAP_PLATFORM_ID( x ) FT_CMAP( x )->charmap.platform_id +#define FT_CMAP_ENCODING_ID( x ) FT_CMAP( x )->charmap.encoding_id +#define FT_CMAP_ENCODING( x ) FT_CMAP( x )->charmap.encoding +#define FT_CMAP_FACE( x ) FT_CMAP( x )->charmap.face + + + /* class method definitions */ + typedef FT_Error + (*FT_CMap_InitFunc)( FT_CMap cmap, + FT_Pointer init_data ); + + typedef void + (*FT_CMap_DoneFunc)( FT_CMap cmap ); + + typedef FT_UInt + (*FT_CMap_CharIndexFunc)( FT_CMap cmap, + FT_UInt32 char_code ); + + typedef FT_UInt + (*FT_CMap_CharNextFunc)( FT_CMap cmap, + FT_UInt32 *achar_code ); + + typedef FT_UInt + (*FT_CMap_CharVarIndexFunc)( FT_CMap cmap, + FT_CMap unicode_cmap, + FT_UInt32 char_code, + FT_UInt32 variant_selector ); + + typedef FT_Int + (*FT_CMap_CharVarIsDefaultFunc)( FT_CMap cmap, + FT_UInt32 char_code, + FT_UInt32 variant_selector ); + + typedef FT_UInt32 * + (*FT_CMap_VariantListFunc)( FT_CMap cmap, + FT_Memory mem ); + + typedef FT_UInt32 * + (*FT_CMap_CharVariantListFunc)( FT_CMap cmap, + FT_Memory mem, + FT_UInt32 char_code ); + + typedef FT_UInt32 * + (*FT_CMap_VariantCharListFunc)( FT_CMap cmap, + FT_Memory mem, + FT_UInt32 variant_selector ); + + + typedef struct FT_CMap_ClassRec_ + { + FT_ULong size; + + FT_CMap_InitFunc init; + FT_CMap_DoneFunc done; + FT_CMap_CharIndexFunc char_index; + FT_CMap_CharNextFunc char_next; + + /* Subsequent entries are special ones for format 14 -- the variant */ + /* selector subtable which behaves like no other */ + + FT_CMap_CharVarIndexFunc char_var_index; + FT_CMap_CharVarIsDefaultFunc char_var_default; + FT_CMap_VariantListFunc variant_list; + FT_CMap_CharVariantListFunc charvariant_list; + FT_CMap_VariantCharListFunc variantchar_list; + + } FT_CMap_ClassRec; + + +#define FT_DECLARE_CMAP_CLASS( class_ ) \ + FT_CALLBACK_TABLE const FT_CMap_ClassRec class_; + +#define FT_DEFINE_CMAP_CLASS( \ + class_, \ + size_, \ + init_, \ + done_, \ + char_index_, \ + char_next_, \ + char_var_index_, \ + char_var_default_, \ + variant_list_, \ + charvariant_list_, \ + variantchar_list_ ) \ + FT_CALLBACK_TABLE_DEF \ + const FT_CMap_ClassRec class_ = \ + { \ + size_, \ + init_, \ + done_, \ + char_index_, \ + char_next_, \ + char_var_index_, \ + char_var_default_, \ + variant_list_, \ + charvariant_list_, \ + variantchar_list_ \ + }; + + + /* create a new charmap and add it to charmap->face */ + FT_BASE( FT_Error ) + FT_CMap_New( FT_CMap_Class clazz, + FT_Pointer init_data, + FT_CharMap charmap, + FT_CMap *acmap ); + + /* destroy a charmap and remove it from face's list */ + FT_BASE( void ) + FT_CMap_Done( FT_CMap cmap ); + + + /* add LCD padding to CBox */ + FT_BASE( void ) + ft_lcd_padding( FT_BBox* cbox, + FT_GlyphSlot slot, + FT_Render_Mode mode ); + +#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + + typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap, + FT_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_LcdFiveTapFilter weights ); + +#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + /************************************************************************** + * + * @struct: + * FT_Face_InternalRec + * + * @description: + * This structure contains the internal fields of each FT_Face object. + * These fields may change between different releases of FreeType. + * + * @fields: + * max_points :: + * The maximum number of points used to store the vectorial outline of + * any glyph in this face. If this value cannot be known in advance, + * or if the face isn't scalable, this should be set to 0. Only + * relevant for scalable formats. + * + * max_contours :: + * The maximum number of contours used to store the vectorial outline + * of any glyph in this face. If this value cannot be known in + * advance, or if the face isn't scalable, this should be set to 0. + * Only relevant for scalable formats. + * + * transform_matrix :: + * A 2x2 matrix of 16.16 coefficients used to transform glyph outlines + * after they are loaded from the font. Only used by the convenience + * functions. + * + * transform_delta :: + * A translation vector used to transform glyph outlines after they are + * loaded from the font. Only used by the convenience functions. + * + * transform_flags :: + * Some flags used to classify the transform. Only used by the + * convenience functions. + * + * services :: + * A cache for frequently used services. It should be only accessed + * with the macro `FT_FACE_LOOKUP_SERVICE`. + * + * incremental_interface :: + * If non-null, the interface through which glyph data and metrics are + * loaded incrementally for faces that do not provide all of this data + * when first opened. This field exists only if + * @FT_CONFIG_OPTION_INCREMENTAL is defined. + * + * no_stem_darkening :: + * Overrides the module-level default, see @stem-darkening[cff], for + * example. FALSE and TRUE toggle stem darkening on and off, + * respectively, value~-1 means to use the module/driver default. + * + * random_seed :: + * If positive, override the seed value for the CFF 'random' operator. + * Value~0 means to use the font's value. Value~-1 means to use the + * CFF driver's default. + * + * lcd_weights :: + * lcd_filter_func :: + * These fields specify the LCD filtering weights and callback function + * for ClearType-style subpixel rendering. + * + * refcount :: + * A counter initialized to~1 at the time an @FT_Face structure is + * created. @FT_Reference_Face increments this counter, and + * @FT_Done_Face only destroys a face if the counter is~1, otherwise it + * simply decrements it. + */ + typedef struct FT_Face_InternalRec_ + { + FT_Matrix transform_matrix; + FT_Vector transform_delta; + FT_Int transform_flags; + + FT_ServiceCacheRec services; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + FT_Incremental_InterfaceRec* incremental_interface; +#endif + + FT_Char no_stem_darkening; + FT_Int32 random_seed; + +#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + FT_LcdFiveTapFilter lcd_weights; /* filter weights, if any */ + FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */ +#endif + + FT_Int refcount; + + } FT_Face_InternalRec; + + + /************************************************************************** + * + * @struct: + * FT_Slot_InternalRec + * + * @description: + * This structure contains the internal fields of each FT_GlyphSlot + * object. These fields may change between different releases of + * FreeType. + * + * @fields: + * loader :: + * The glyph loader object used to load outlines into the glyph slot. + * + * flags :: + * Possible values are zero or FT_GLYPH_OWN_BITMAP. The latter + * indicates that the FT_GlyphSlot structure owns the bitmap buffer. + * + * glyph_transformed :: + * Boolean. Set to TRUE when the loaded glyph must be transformed + * through a specific font transformation. This is _not_ the same as + * the face transform set through FT_Set_Transform(). + * + * glyph_matrix :: + * The 2x2 matrix corresponding to the glyph transformation, if + * necessary. + * + * glyph_delta :: + * The 2d translation vector corresponding to the glyph transformation, + * if necessary. + * + * glyph_hints :: + * Format-specific glyph hints management. + * + * load_flags :: + * The load flags passed as an argument to @FT_Load_Glyph while + * initializing the glyph slot. + */ + +#define FT_GLYPH_OWN_BITMAP 0x1U +#define FT_GLYPH_OWN_GZIP_SVG 0x2U + + typedef struct FT_Slot_InternalRec_ + { + FT_GlyphLoader loader; + FT_UInt flags; + FT_Bool glyph_transformed; + FT_Matrix glyph_matrix; + FT_Vector glyph_delta; + void* glyph_hints; + + FT_Int32 load_flags; + + } FT_GlyphSlot_InternalRec; + + + /************************************************************************** + * + * @struct: + * FT_Size_InternalRec + * + * @description: + * This structure contains the internal fields of each FT_Size object. + * + * @fields: + * module_data :: + * Data specific to a driver module. + * + * autohint_mode :: + * The used auto-hinting mode. + * + * autohint_metrics :: + * Metrics used by the auto-hinter. + * + */ + + typedef struct FT_Size_InternalRec_ + { + void* module_data; + + FT_Render_Mode autohint_mode; + FT_Size_Metrics autohint_metrics; + + } FT_Size_InternalRec; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** M O D U L E S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * FT_ModuleRec + * + * @description: + * A module object instance. + * + * @fields: + * clazz :: + * A pointer to the module's class. + * + * library :: + * A handle to the parent library object. + * + * memory :: + * A handle to the memory manager. + */ + typedef struct FT_ModuleRec_ + { + FT_Module_Class* clazz; + FT_Library library; + FT_Memory memory; + + } FT_ModuleRec; + + + /* typecast an object to an FT_Module */ +#define FT_MODULE( x ) ( (FT_Module)(x) ) + +#define FT_MODULE_CLASS( x ) FT_MODULE( x )->clazz +#define FT_MODULE_LIBRARY( x ) FT_MODULE( x )->library +#define FT_MODULE_MEMORY( x ) FT_MODULE( x )->memory + + +#define FT_MODULE_IS_DRIVER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_FONT_DRIVER ) + +#define FT_MODULE_IS_RENDERER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_RENDERER ) + +#define FT_MODULE_IS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_HINTER ) + +#define FT_MODULE_IS_STYLER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_STYLER ) + +#define FT_DRIVER_IS_SCALABLE( x ) ( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_DRIVER_SCALABLE ) + +#define FT_DRIVER_USES_OUTLINES( x ) !( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_DRIVER_NO_OUTLINES ) + +#define FT_DRIVER_HAS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_DRIVER_HAS_HINTER ) + +#define FT_DRIVER_HINTS_LIGHTLY( x ) ( FT_MODULE_CLASS( x )->module_flags & \ + FT_MODULE_DRIVER_HINTS_LIGHTLY ) + + + /************************************************************************** + * + * @function: + * FT_Get_Module_Interface + * + * @description: + * Finds a module and returns its specific interface as a typeless + * pointer. + * + * @input: + * library :: + * A handle to the library object. + * + * module_name :: + * The module's name (as an ASCII string). + * + * @return: + * A module-specific interface if available, 0 otherwise. + * + * @note: + * You should better be familiar with FreeType internals to know which + * module to look for, and what its interface is :-) + */ + FT_BASE( const void* ) + FT_Get_Module_Interface( FT_Library library, + const char* mod_name ); + + FT_BASE( FT_Pointer ) + ft_module_get_service( FT_Module module, + const char* service_id, + FT_Bool global ); + +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + FT_BASE( FT_Error ) + ft_property_string_set( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + FT_String* value ); +#endif + + /* */ + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** F A C E, S I Z E & G L Y P H S L O T O B J E C T S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + /* a few macros used to perform easy typecasts with minimal brain damage */ + +#define FT_FACE( x ) ( (FT_Face)(x) ) +#define FT_SIZE( x ) ( (FT_Size)(x) ) +#define FT_SLOT( x ) ( (FT_GlyphSlot)(x) ) + +#define FT_FACE_DRIVER( x ) FT_FACE( x )->driver +#define FT_FACE_LIBRARY( x ) FT_FACE_DRIVER( x )->root.library +#define FT_FACE_MEMORY( x ) FT_FACE( x )->memory +#define FT_FACE_STREAM( x ) FT_FACE( x )->stream + + + /************************************************************************** + * + * @function: + * FT_New_GlyphSlot + * + * @description: + * It is sometimes useful to have more than one glyph slot for a given + * face object. This function is used to create additional slots. All + * of them are automatically discarded when the face is destroyed. + * + * @input: + * face :: + * A handle to a parent face object. + * + * @output: + * aslot :: + * A handle to a new glyph slot object. + * + * @return: + * FreeType error code. 0 means success. + */ + FT_BASE( FT_Error ) + FT_New_GlyphSlot( FT_Face face, + FT_GlyphSlot *aslot ); + + + /************************************************************************** + * + * @function: + * FT_Done_GlyphSlot + * + * @description: + * Destroys a given glyph slot. Remember however that all slots are + * automatically destroyed with its parent. Using this function is not + * always mandatory. + * + * @input: + * slot :: + * A handle to a target glyph slot. + */ + FT_BASE( void ) + FT_Done_GlyphSlot( FT_GlyphSlot slot ); + + /* */ + +#define FT_REQUEST_WIDTH( req ) \ + ( (req)->horiResolution \ + ? ( (req)->width * (FT_Pos)(req)->horiResolution + 36 ) / 72 \ + : (req)->width ) + +#define FT_REQUEST_HEIGHT( req ) \ + ( (req)->vertResolution \ + ? ( (req)->height * (FT_Pos)(req)->vertResolution + 36 ) / 72 \ + : (req)->height ) + + + /* Set the metrics according to a bitmap strike. */ + FT_BASE( void ) + FT_Select_Metrics( FT_Face face, + FT_ULong strike_index ); + + + /* Set the metrics according to a size request. */ + FT_BASE( FT_Error ) + FT_Request_Metrics( FT_Face face, + FT_Size_Request req ); + + + /* Match a size request against `available_sizes'. */ + FT_BASE( FT_Error ) + FT_Match_Size( FT_Face face, + FT_Size_Request req, + FT_Bool ignore_width, + FT_ULong* size_index ); + + + /* Use the horizontal metrics to synthesize the vertical metrics. */ + /* If `advance' is zero, it is also synthesized. */ + FT_BASE( void ) + ft_synthesize_vertical_metrics( FT_Glyph_Metrics* metrics, + FT_Pos advance ); + + + /* Free the bitmap of a given glyphslot when needed (i.e., only when it */ + /* was allocated with ft_glyphslot_alloc_bitmap). */ + FT_BASE( void ) + ft_glyphslot_free_bitmap( FT_GlyphSlot slot ); + + + /* Preset bitmap metrics of an outline glyphslot prior to rendering */ + /* and check whether the truncated bbox is too large for rendering. */ + FT_BASE( FT_Bool ) + ft_glyphslot_preset_bitmap( FT_GlyphSlot slot, + FT_Render_Mode mode, + const FT_Vector* origin ); + + /* Allocate a new bitmap buffer in a glyph slot. */ + FT_BASE( FT_Error ) + ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot, + FT_ULong size ); + + + /* Set the bitmap buffer in a glyph slot to a given pointer. The buffer */ + /* will not be freed by a later call to ft_glyphslot_free_bitmap. */ + FT_BASE( void ) + ft_glyphslot_set_bitmap( FT_GlyphSlot slot, + FT_Byte* buffer ); + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** R E N D E R E R S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + +#define FT_RENDERER( x ) ( (FT_Renderer)(x) ) +#define FT_GLYPH( x ) ( (FT_Glyph)(x) ) +#define FT_BITMAP_GLYPH( x ) ( (FT_BitmapGlyph)(x) ) +#define FT_OUTLINE_GLYPH( x ) ( (FT_OutlineGlyph)(x) ) + + + typedef struct FT_RendererRec_ + { + FT_ModuleRec root; + FT_Renderer_Class* clazz; + FT_Glyph_Format glyph_format; + FT_Glyph_Class glyph_class; + + FT_Raster raster; + FT_Raster_Render_Func raster_render; + FT_Renderer_RenderFunc render; + + } FT_RendererRec; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** F O N T D R I V E R S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /* typecast a module into a driver easily */ +#define FT_DRIVER( x ) ( (FT_Driver)(x) ) + + /* typecast a module as a driver, and get its driver class */ +#define FT_DRIVER_CLASS( x ) FT_DRIVER( x )->clazz + + + /************************************************************************** + * + * @struct: + * FT_DriverRec + * + * @description: + * The root font driver class. A font driver is responsible for managing + * and loading font files of a given format. + * + * @fields: + * root :: + * Contains the fields of the root module class. + * + * clazz :: + * A pointer to the font driver's class. Note that this is NOT + * root.clazz. 'class' wasn't used as it is a reserved word in C++. + * + * faces_list :: + * The list of faces currently opened by this driver. + * + * glyph_loader :: + * Unused. Used to be glyph loader for all faces managed by this + * driver. + */ + typedef struct FT_DriverRec_ + { + FT_ModuleRec root; + FT_Driver_Class clazz; + FT_ListRec faces_list; + FT_GlyphLoader glyph_loader; + + } FT_DriverRec; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** L I B R A R I E S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * FT_LibraryRec + * + * @description: + * The FreeType library class. This is the root of all FreeType data. + * Use FT_New_Library() to create a library object, and FT_Done_Library() + * to discard it and all child objects. + * + * @fields: + * memory :: + * The library's memory object. Manages memory allocation. + * + * version_major :: + * The major version number of the library. + * + * version_minor :: + * The minor version number of the library. + * + * version_patch :: + * The current patch level of the library. + * + * num_modules :: + * The number of modules currently registered within this library. + * This is set to 0 for new libraries. New modules are added through + * the FT_Add_Module() API function. + * + * modules :: + * A table used to store handles to the currently registered + * modules. Note that each font driver contains a list of its opened + * faces. + * + * renderers :: + * The list of renderers currently registered within the library. + * + * cur_renderer :: + * The current outline renderer. This is a shortcut used to avoid + * parsing the list on each call to FT_Outline_Render(). It is a + * handle to the current renderer for the FT_GLYPH_FORMAT_OUTLINE + * format. + * + * auto_hinter :: + * The auto-hinter module interface. + * + * debug_hooks :: + * An array of four function pointers that allow debuggers to hook into + * a font format's interpreter. Currently, only the TrueType bytecode + * debugger uses this. + * + * lcd_weights :: + * The LCD filter weights for ClearType-style subpixel rendering. + * + * lcd_filter_func :: + * The LCD filtering callback function for for ClearType-style subpixel + * rendering. + * + * lcd_geometry :: + * This array specifies LCD subpixel geometry and controls Harmony LCD + * rendering technique, alternative to ClearType. + * + * pic_container :: + * Contains global structs and tables, instead of defining them + * globally. + * + * refcount :: + * A counter initialized to~1 at the time an @FT_Library structure is + * created. @FT_Reference_Library increments this counter, and + * @FT_Done_Library only destroys a library if the counter is~1, + * otherwise it simply decrements it. + */ + typedef struct FT_LibraryRec_ + { + FT_Memory memory; /* library's memory manager */ + + FT_Int version_major; + FT_Int version_minor; + FT_Int version_patch; + + FT_UInt num_modules; + FT_Module modules[FT_MAX_MODULES]; /* module objects */ + + FT_ListRec renderers; /* list of renderers */ + FT_Renderer cur_renderer; /* current outline renderer */ + FT_Module auto_hinter; + + FT_DebugHook_Func debug_hooks[4]; + +#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + FT_LcdFiveTapFilter lcd_weights; /* filter weights, if any */ + FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */ +#else + FT_Vector lcd_geometry[3]; /* RGB subpixel positions */ +#endif + + FT_Int refcount; + + } FT_LibraryRec; + + + FT_BASE( FT_Renderer ) + FT_Lookup_Renderer( FT_Library library, + FT_Glyph_Format format, + FT_ListNode* node ); + + FT_BASE( FT_Error ) + FT_Render_Glyph_Internal( FT_Library library, + FT_GlyphSlot slot, + FT_Render_Mode render_mode ); + + typedef const char* + (*FT_Face_GetPostscriptNameFunc)( FT_Face face ); + + typedef FT_Error + (*FT_Face_GetGlyphNameFunc)( FT_Face face, + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ); + + typedef FT_UInt + (*FT_Face_GetGlyphNameIndexFunc)( FT_Face face, + const FT_String* glyph_name ); + + +#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM + + /************************************************************************** + * + * @function: + * FT_New_Memory + * + * @description: + * Creates a new memory object. + * + * @return: + * A pointer to the new memory object. 0 in case of error. + */ + FT_BASE( FT_Memory ) + FT_New_Memory( void ); + + + /************************************************************************** + * + * @function: + * FT_Done_Memory + * + * @description: + * Discards memory manager. + * + * @input: + * memory :: + * A handle to the memory manager. + */ + FT_BASE( void ) + FT_Done_Memory( FT_Memory memory ); + +#endif /* !FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */ + + + /* Define default raster's interface. The default raster is located in */ + /* `src/base/ftraster.c'. */ + /* */ + /* Client applications can register new rasters through the */ + /* FT_Set_Raster() API. */ + +#ifndef FT_NO_DEFAULT_RASTER + FT_EXPORT_VAR( FT_Raster_Funcs ) ft_default_raster; +#endif + + + /************************************************************************** + * + * @macro: + * FT_DEFINE_OUTLINE_FUNCS + * + * @description: + * Used to initialize an instance of FT_Outline_Funcs struct. The struct + * will be allocated in the global scope (or the scope where the macro is + * used). + */ +#define FT_DEFINE_OUTLINE_FUNCS( \ + class_, \ + move_to_, \ + line_to_, \ + conic_to_, \ + cubic_to_, \ + shift_, \ + delta_ ) \ + static const FT_Outline_Funcs class_ = \ + { \ + move_to_, \ + line_to_, \ + conic_to_, \ + cubic_to_, \ + shift_, \ + delta_ \ + }; + + + /************************************************************************** + * + * @macro: + * FT_DEFINE_RASTER_FUNCS + * + * @description: + * Used to initialize an instance of FT_Raster_Funcs struct. The struct + * will be allocated in the global scope (or the scope where the macro is + * used). + */ +#define FT_DEFINE_RASTER_FUNCS( \ + class_, \ + glyph_format_, \ + raster_new_, \ + raster_reset_, \ + raster_set_mode_, \ + raster_render_, \ + raster_done_ ) \ + const FT_Raster_Funcs class_ = \ + { \ + glyph_format_, \ + raster_new_, \ + raster_reset_, \ + raster_set_mode_, \ + raster_render_, \ + raster_done_ \ + }; + + + + /************************************************************************** + * + * @macro: + * FT_DEFINE_GLYPH + * + * @description: + * 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_, \ + format_, \ + init_, \ + done_, \ + copy_, \ + transform_, \ + bbox_, \ + prepare_ ) \ + FT_CALLBACK_TABLE_DEF \ + const FT_Glyph_Class class_ = \ + { \ + size_, \ + format_, \ + init_, \ + done_, \ + copy_, \ + transform_, \ + bbox_, \ + prepare_ \ + }; + + + /************************************************************************** + * + * @macro: + * FT_DECLARE_RENDERER + * + * @description: + * Used to create a forward declaration of a FT_Renderer_Class struct + * instance. + * + * @macro: + * FT_DEFINE_RENDERER + * + * @description: + * Used to initialize an instance of FT_Renderer_Class struct. + * + * The struct will be allocated in the global scope (or the scope where + * the macro is used). + */ +#define FT_DECLARE_RENDERER( class_ ) \ + FT_EXPORT_VAR( const FT_Renderer_Class ) class_; + +#define FT_DEFINE_RENDERER( \ + class_, \ + flags_, \ + size_, \ + name_, \ + version_, \ + requires_, \ + interface_, \ + init_, \ + done_, \ + get_interface_, \ + glyph_format_, \ + render_glyph_, \ + transform_glyph_, \ + get_glyph_cbox_, \ + set_mode_, \ + raster_class_ ) \ + FT_CALLBACK_TABLE_DEF \ + const FT_Renderer_Class class_ = \ + { \ + FT_DEFINE_ROOT_MODULE( flags_, \ + size_, \ + name_, \ + version_, \ + requires_, \ + interface_, \ + init_, \ + done_, \ + get_interface_ ) \ + glyph_format_, \ + \ + render_glyph_, \ + transform_glyph_, \ + get_glyph_cbox_, \ + set_mode_, \ + \ + raster_class_ \ + }; + + + /************************************************************************** + * + * @macro: + * FT_DECLARE_MODULE + * + * @description: + * Used to create a forward declaration of a FT_Module_Class struct + * instance. + * + * @macro: + * FT_DEFINE_MODULE + * + * @description: + * Used to initialize an instance of an FT_Module_Class struct. + * + * The struct will be allocated in the global scope (or the scope where + * the macro is used). + * + * @macro: + * FT_DEFINE_ROOT_MODULE + * + * @description: + * Used to initialize an instance of an FT_Module_Class struct inside + * another struct that contains it or in a function that initializes that + * containing struct. + */ +#define FT_DECLARE_MODULE( class_ ) \ + FT_CALLBACK_TABLE \ + const FT_Module_Class class_; + +#define FT_DEFINE_ROOT_MODULE( \ + flags_, \ + size_, \ + name_, \ + version_, \ + requires_, \ + interface_, \ + init_, \ + done_, \ + get_interface_ ) \ + { \ + flags_, \ + size_, \ + \ + name_, \ + version_, \ + requires_, \ + \ + interface_, \ + \ + init_, \ + done_, \ + get_interface_, \ + }, + +#define FT_DEFINE_MODULE( \ + class_, \ + flags_, \ + size_, \ + name_, \ + version_, \ + requires_, \ + interface_, \ + init_, \ + done_, \ + get_interface_ ) \ + FT_CALLBACK_TABLE_DEF \ + const FT_Module_Class class_ = \ + { \ + flags_, \ + size_, \ + \ + name_, \ + version_, \ + requires_, \ + \ + interface_, \ + \ + init_, \ + done_, \ + get_interface_, \ + }; + + +FT_END_HEADER + +#endif /* FTOBJS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftpsprop.h b/non-source/foreign/freetype2/freetype/internal/ftpsprop.h new file mode 100644 index 000000000..4f11aa16b --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftpsprop.h @@ -0,0 +1,47 @@ +/**************************************************************************** + * + * ftpsprop.h + * + * Get and set properties of PostScript drivers (specification). + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTPSPROP_H_ +#define FTPSPROP_H_ + + +#include <freetype/freetype.h> + + +FT_BEGIN_HEADER + + + FT_BASE_CALLBACK( FT_Error ) + ps_property_set( FT_Module module, /* PS_Driver */ + const char* property_name, + const void* value, + FT_Bool value_is_string ); + + FT_BASE_CALLBACK( FT_Error ) + ps_property_get( FT_Module module, /* PS_Driver */ + const char* property_name, + void* value ); + + +FT_END_HEADER + + +#endif /* FTPSPROP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftrfork.h b/non-source/foreign/freetype2/freetype/internal/ftrfork.h new file mode 100644 index 000000000..05c1d6c48 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftrfork.h @@ -0,0 +1,245 @@ +/**************************************************************************** + * + * ftrfork.h + * + * Embedded resource forks accessor (specification). + * + * Copyright (C) 2004-2024 by + * Masatake YAMATO and Redhat K.K. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +/**************************************************************************** + * Development of the code in this file is support of + * Information-technology Promotion Agency, Japan. + */ + + +#ifndef FTRFORK_H_ +#define FTRFORK_H_ + + +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + + + /* Number of guessing rules supported in `FT_Raccess_Guess'. */ + /* Don't forget to increment the number if you add a new guessing rule. */ +#define FT_RACCESS_N_RULES 9 + + + /* A structure to describe a reference in a resource by its resource ID */ + /* and internal offset. The `POST' resource expects to be concatenated */ + /* by the order of resource IDs instead of its appearance in the file. */ + + typedef struct FT_RFork_Ref_ + { + FT_Short res_id; + FT_Long offset; + + } FT_RFork_Ref; + + +#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK + typedef FT_Error + (*ft_raccess_guess_func)( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + typedef enum FT_RFork_Rule_ { + FT_RFork_Rule_invalid = -2, + FT_RFork_Rule_uknown, /* -1 */ + FT_RFork_Rule_apple_double, + FT_RFork_Rule_apple_single, + FT_RFork_Rule_darwin_ufs_export, + FT_RFork_Rule_darwin_newvfs, + FT_RFork_Rule_darwin_hfsplus, + FT_RFork_Rule_vfat, + FT_RFork_Rule_linux_cap, + FT_RFork_Rule_linux_double, + FT_RFork_Rule_linux_netatalk + } FT_RFork_Rule; + + /* For fast translation between rule index and rule type, + * the macros FT_RFORK_xxx should be kept consistent with the + * raccess_guess_funcs table + */ + typedef struct ft_raccess_guess_rec_ { + ft_raccess_guess_func func; + FT_RFork_Rule type; + } ft_raccess_guess_rec; + + +#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \ + static const type name[] = { +#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \ + { raccess_guess_ ## func_suffix, \ + FT_RFork_Rule_ ## type_suffix }, + /* this array is a storage, thus a final `;' is needed */ +#define CONST_FT_RFORK_RULE_ARRAY_END }; + +#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */ + + + /************************************************************************** + * + * @function: + * FT_Raccess_Guess + * + * @description: + * Guess a file name and offset where the actual resource fork is stored. + * The macro FT_RACCESS_N_RULES holds the number of guessing rules; the + * guessed result for the Nth rule is represented as a triplet: a new + * file name (new_names[N]), a file offset (offsets[N]), and an error + * code (errors[N]). + * + * @input: + * library :: + * A FreeType library instance. + * + * stream :: + * A file stream containing the resource fork. + * + * base_name :: + * The (base) file name of the resource fork used for some guessing + * rules. + * + * @output: + * new_names :: + * An array of guessed file names in which the resource forks may + * exist. If 'new_names[N]' is `NULL`, the guessed file name is equal + * to `base_name`. + * + * offsets :: + * An array of guessed file offsets. 'offsets[N]' holds the file + * offset of the possible start of the resource fork in file + * 'new_names[N]'. + * + * errors :: + * An array of FreeType error codes. 'errors[N]' is the error code of + * Nth guessing rule function. If 'errors[N]' is not FT_Err_Ok, + * 'new_names[N]' and 'offsets[N]' are meaningless. + */ + FT_BASE( void ) + FT_Raccess_Guess( FT_Library library, + FT_Stream stream, + char* base_name, + char** new_names, + FT_Long* offsets, + FT_Error* errors ); + + + /************************************************************************** + * + * @function: + * FT_Raccess_Get_HeaderInfo + * + * @description: + * Get the information from the header of resource fork. The information + * includes the file offset where the resource map starts, and the file + * offset where the resource data starts. `FT_Raccess_Get_DataOffsets` + * requires these two data. + * + * @input: + * library :: + * A FreeType library instance. + * + * stream :: + * A file stream containing the resource fork. + * + * rfork_offset :: + * The file offset where the resource fork starts. + * + * @output: + * map_offset :: + * The file offset where the resource map starts. + * + * rdata_pos :: + * The file offset where the resource data starts. + * + * @return: + * FreeType error code. FT_Err_Ok means success. + */ + FT_BASE( FT_Error ) + FT_Raccess_Get_HeaderInfo( FT_Library library, + FT_Stream stream, + FT_Long rfork_offset, + FT_Long *map_offset, + FT_Long *rdata_pos ); + + + /************************************************************************** + * + * @function: + * FT_Raccess_Get_DataOffsets + * + * @description: + * Get the data offsets for a tag in a resource fork. Offsets are stored + * in an array because, in some cases, resources in a resource fork have + * the same tag. + * + * @input: + * library :: + * A FreeType library instance. + * + * stream :: + * A file stream containing the resource fork. + * + * map_offset :: + * The file offset where the resource map starts. + * + * rdata_pos :: + * The file offset where the resource data starts. + * + * tag :: + * The resource tag. + * + * sort_by_res_id :: + * A Boolean to sort the fragmented resource by their ids. The + * fragmented resources for 'POST' resource should be sorted to restore + * Type1 font properly. For 'sfnt' resources, sorting may induce a + * different order of the faces in comparison to that by QuickDraw API. + * + * @output: + * offsets :: + * The stream offsets for the resource data specified by 'tag'. This + * array is allocated by the function, so you have to call @ft_mem_free + * after use. + * + * count :: + * The length of offsets array. + * + * @return: + * FreeType error code. FT_Err_Ok means success. + * + * @note: + * Normally you should use `FT_Raccess_Get_HeaderInfo` to get the value + * for `map_offset` and `rdata_pos`. + */ + FT_BASE( FT_Error ) + FT_Raccess_Get_DataOffsets( FT_Library library, + FT_Stream stream, + FT_Long map_offset, + FT_Long rdata_pos, + FT_Long tag, + FT_Bool sort_by_res_id, + FT_Long **offsets, + FT_Long *count ); + + +FT_END_HEADER + +#endif /* FTRFORK_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftserv.h b/non-source/foreign/freetype2/freetype/internal/ftserv.h new file mode 100644 index 000000000..8c35dbd71 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftserv.h @@ -0,0 +1,495 @@ +/**************************************************************************** + * + * ftserv.h + * + * The FreeType services (specification only). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * Each module can export one or more 'services'. Each service is + * identified by a constant string and modeled by a pointer; the latter + * generally corresponds to a structure containing function pointers. + * + * Note that a service's data cannot be a mere function pointer because in + * C it is possible that function pointers might be implemented differently + * than data pointers (e.g. 48 bits instead of 32). + * + */ + + +#ifndef FTSERV_H_ +#define FTSERV_H_ + +#include "compiler-macros.h" + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @macro: + * FT_FACE_FIND_SERVICE + * + * @description: + * This macro is used to look up a service from a face's driver module. + * + * @input: + * face :: + * The source face handle. + * + * id :: + * A string describing the service as defined in the service's header + * files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to + * 'multi-masters'). It is automatically prefixed with + * `FT_SERVICE_ID_`. + * + * @output: + * ptr :: + * A variable that receives the service pointer. Will be `NULL` if not + * found. + */ +#ifdef __cplusplus + +#define FT_FACE_FIND_SERVICE( face, ptr, id ) \ + FT_BEGIN_STMNT \ + FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ + FT_Pointer _tmp_ = NULL; \ + FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \ + \ + \ + if ( module->clazz->get_interface ) \ + _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \ + *_pptr_ = _tmp_; \ + FT_END_STMNT + +#else /* !C++ */ + +#define FT_FACE_FIND_SERVICE( face, ptr, id ) \ + FT_BEGIN_STMNT \ + FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ + FT_Pointer _tmp_ = NULL; \ + \ + if ( module->clazz->get_interface ) \ + _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \ + ptr = _tmp_; \ + FT_END_STMNT + +#endif /* !C++ */ + + + /************************************************************************** + * + * @macro: + * FT_FACE_FIND_GLOBAL_SERVICE + * + * @description: + * This macro is used to look up a service from all modules. + * + * @input: + * face :: + * The source face handle. + * + * id :: + * A string describing the service as defined in the service's header + * files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to + * 'multi-masters'). It is automatically prefixed with + * `FT_SERVICE_ID_`. + * + * @output: + * ptr :: + * A variable that receives the service pointer. Will be `NULL` if not + * found. + */ +#ifdef __cplusplus + +#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \ + FT_BEGIN_STMNT \ + FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ + FT_Pointer _tmp_; \ + FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \ + \ + \ + _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \ + *_pptr_ = _tmp_; \ + FT_END_STMNT + +#else /* !C++ */ + +#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \ + FT_BEGIN_STMNT \ + FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \ + FT_Pointer _tmp_; \ + \ + \ + _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \ + ptr = _tmp_; \ + FT_END_STMNT + +#endif /* !C++ */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** S E R V I C E D E S C R I P T O R S *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* + * The following structure is used to _describe_ a given service to the + * library. This is useful to build simple static service lists. + */ + typedef struct FT_ServiceDescRec_ + { + const char* serv_id; /* service name */ + const void* serv_data; /* service pointer/data */ + + } FT_ServiceDescRec; + + typedef const FT_ServiceDescRec* FT_ServiceDesc; + + + /************************************************************************** + * + * @macro: + * FT_DEFINE_SERVICEDESCREC1 + * FT_DEFINE_SERVICEDESCREC2 + * FT_DEFINE_SERVICEDESCREC3 + * FT_DEFINE_SERVICEDESCREC4 + * FT_DEFINE_SERVICEDESCREC5 + * FT_DEFINE_SERVICEDESCREC6 + * FT_DEFINE_SERVICEDESCREC7 + * FT_DEFINE_SERVICEDESCREC8 + * FT_DEFINE_SERVICEDESCREC9 + * FT_DEFINE_SERVICEDESCREC10 + * + * @description: + * Used to initialize an array of FT_ServiceDescRec structures. + * + * The array will be allocated in the global scope (or the scope where + * the macro is used). + */ +#define FT_DEFINE_SERVICEDESCREC1( class_, \ + serv_id_1, serv_data_1 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC2( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC3( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC4( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3, \ + serv_id_4, serv_data_4 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { serv_id_4, serv_data_4 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC5( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3, \ + serv_id_4, serv_data_4, \ + serv_id_5, serv_data_5 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { serv_id_4, serv_data_4 }, \ + { serv_id_5, serv_data_5 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC6( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3, \ + serv_id_4, serv_data_4, \ + serv_id_5, serv_data_5, \ + serv_id_6, serv_data_6 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { serv_id_4, serv_data_4 }, \ + { serv_id_5, serv_data_5 }, \ + { serv_id_6, serv_data_6 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC7( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3, \ + serv_id_4, serv_data_4, \ + serv_id_5, serv_data_5, \ + serv_id_6, serv_data_6, \ + serv_id_7, serv_data_7 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { serv_id_4, serv_data_4 }, \ + { serv_id_5, serv_data_5 }, \ + { serv_id_6, serv_data_6 }, \ + { serv_id_7, serv_data_7 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC8( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3, \ + serv_id_4, serv_data_4, \ + serv_id_5, serv_data_5, \ + serv_id_6, serv_data_6, \ + serv_id_7, serv_data_7, \ + serv_id_8, serv_data_8 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { serv_id_4, serv_data_4 }, \ + { serv_id_5, serv_data_5 }, \ + { serv_id_6, serv_data_6 }, \ + { serv_id_7, serv_data_7 }, \ + { serv_id_8, serv_data_8 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC9( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3, \ + serv_id_4, serv_data_4, \ + serv_id_5, serv_data_5, \ + serv_id_6, serv_data_6, \ + serv_id_7, serv_data_7, \ + serv_id_8, serv_data_8, \ + serv_id_9, serv_data_9 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { serv_id_4, serv_data_4 }, \ + { serv_id_5, serv_data_5 }, \ + { serv_id_6, serv_data_6 }, \ + { serv_id_7, serv_data_7 }, \ + { serv_id_8, serv_data_8 }, \ + { serv_id_9, serv_data_9 }, \ + { NULL, NULL } \ + }; + +#define FT_DEFINE_SERVICEDESCREC10( class_, \ + serv_id_1, serv_data_1, \ + serv_id_2, serv_data_2, \ + serv_id_3, serv_data_3, \ + serv_id_4, serv_data_4, \ + serv_id_5, serv_data_5, \ + serv_id_6, serv_data_6, \ + serv_id_7, serv_data_7, \ + serv_id_8, serv_data_8, \ + serv_id_9, serv_data_9, \ + serv_id_10, serv_data_10 ) \ + static const FT_ServiceDescRec class_[] = \ + { \ + { serv_id_1, serv_data_1 }, \ + { serv_id_2, serv_data_2 }, \ + { serv_id_3, serv_data_3 }, \ + { serv_id_4, serv_data_4 }, \ + { serv_id_5, serv_data_5 }, \ + { serv_id_6, serv_data_6 }, \ + { serv_id_7, serv_data_7 }, \ + { serv_id_8, serv_data_8 }, \ + { serv_id_9, serv_data_9 }, \ + { serv_id_10, serv_data_10 }, \ + { NULL, NULL } \ + }; + + + /* + * Parse a list of FT_ServiceDescRec descriptors and look for a specific + * service by ID. Note that the last element in the array must be { NULL, + * NULL }, and that the function should return NULL if the service isn't + * available. + * + * This function can be used by modules to implement their `get_service' + * method. + */ + FT_BASE( FT_Pointer ) + ft_service_list_lookup( FT_ServiceDesc service_descriptors, + const char* service_id ); + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** S E R V I C E S C A C H E *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* + * This structure is used to store a cache for several frequently used + * services. It is the type of `face->internal->services'. You should + * only use FT_FACE_LOOKUP_SERVICE to access it. + * + * All fields should have the type FT_Pointer to relax compilation + * dependencies. We assume the developer isn't completely stupid. + * + * Each field must be named `service_XXXX' where `XXX' corresponds to the + * correct FT_SERVICE_ID_XXXX macro. See the definition of + * FT_FACE_LOOKUP_SERVICE below how this is implemented. + * + */ + typedef struct FT_ServiceCacheRec_ + { + FT_Pointer service_POSTSCRIPT_FONT_NAME; + FT_Pointer service_MULTI_MASTERS; + FT_Pointer service_METRICS_VARIATIONS; + FT_Pointer service_GLYPH_DICT; + FT_Pointer service_PFR_METRICS; + FT_Pointer service_WINFNT; + + } FT_ServiceCacheRec, *FT_ServiceCache; + + + /* + * A magic number used within the services cache. + */ + + /* ensure that value `1' has the same width as a pointer */ +#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)~(FT_PtrDist)1) + + + /************************************************************************** + * + * @macro: + * FT_FACE_LOOKUP_SERVICE + * + * @description: + * This macro is used to look up a service from a face's driver module + * using its cache. + * + * @input: + * face :: + * The source face handle containing the cache. + * + * field :: + * The field name in the cache. + * + * id :: + * The service ID. + * + * @output: + * ptr :: + * A variable receiving the service data. `NULL` if not available. + */ +#ifdef __cplusplus + +#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \ + FT_BEGIN_STMNT \ + FT_Pointer svc; \ + FT_Pointer* Pptr = (FT_Pointer*)&(ptr); \ + \ + \ + svc = FT_FACE( face )->internal->services. service_ ## id; \ + if ( svc == FT_SERVICE_UNAVAILABLE ) \ + svc = NULL; \ + else if ( svc == NULL ) \ + { \ + FT_FACE_FIND_SERVICE( face, svc, id ); \ + \ + FT_FACE( face )->internal->services. service_ ## id = \ + (FT_Pointer)( svc != NULL ? svc \ + : FT_SERVICE_UNAVAILABLE ); \ + } \ + *Pptr = svc; \ + FT_END_STMNT + +#else /* !C++ */ + +#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \ + FT_BEGIN_STMNT \ + FT_Pointer svc; \ + \ + \ + svc = FT_FACE( face )->internal->services. service_ ## id; \ + if ( svc == FT_SERVICE_UNAVAILABLE ) \ + svc = NULL; \ + else if ( svc == NULL ) \ + { \ + FT_FACE_FIND_SERVICE( face, svc, id ); \ + \ + FT_FACE( face )->internal->services. service_ ## id = \ + (FT_Pointer)( svc != NULL ? svc \ + : FT_SERVICE_UNAVAILABLE ); \ + } \ + ptr = svc; \ + FT_END_STMNT + +#endif /* !C++ */ + + /* + * A macro used to define new service structure types. + */ + +#define FT_DEFINE_SERVICE( name ) \ + typedef struct FT_Service_ ## name ## Rec_ \ + FT_Service_ ## name ## Rec ; \ + typedef struct FT_Service_ ## name ## Rec_ \ + const * FT_Service_ ## name ; \ + struct FT_Service_ ## name ## Rec_ + + /* */ + +FT_END_HEADER + +#endif /* FTSERV_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftstream.h b/non-source/foreign/freetype2/freetype/internal/ftstream.h new file mode 100644 index 000000000..fd52f767e --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftstream.h @@ -0,0 +1,570 @@ +/**************************************************************************** + * + * ftstream.h + * + * Stream handling (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTSTREAM_H_ +#define FTSTREAM_H_ + + +#include <ft2build.h> +#include <freetype/ftsystem.h> +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + + + /* format of an 8-bit frame_op value: */ + /* */ + /* bit 76543210 */ + /* xxxxxxes */ + /* */ + /* s is set to 1 if the value is signed. */ + /* e is set to 1 if the value is little-endian. */ + /* xxx is a command. */ + +#define FT_FRAME_OP_SHIFT 2 +#define FT_FRAME_OP_SIGNED 1 +#define FT_FRAME_OP_LITTLE 2 +#define FT_FRAME_OP_COMMAND( x ) ( x >> FT_FRAME_OP_SHIFT ) + +#define FT_MAKE_FRAME_OP( command, little, sign ) \ + ( ( command << FT_FRAME_OP_SHIFT ) | ( little << 1 ) | sign ) + +#define FT_FRAME_OP_END 0 +#define FT_FRAME_OP_START 1 /* start a new frame */ +#define FT_FRAME_OP_BYTE 2 /* read 1-byte value */ +#define FT_FRAME_OP_SHORT 3 /* read 2-byte value */ +#define FT_FRAME_OP_LONG 4 /* read 4-byte value */ +#define FT_FRAME_OP_OFF3 5 /* read 3-byte value */ +#define FT_FRAME_OP_BYTES 6 /* read a bytes sequence */ + + + typedef enum FT_Frame_Op_ + { + ft_frame_end = 0, + ft_frame_start = FT_MAKE_FRAME_OP( FT_FRAME_OP_START, 0, 0 ), + + ft_frame_byte = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 0 ), + ft_frame_schar = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE, 0, 1 ), + + ft_frame_ushort_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 0 ), + ft_frame_short_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 1 ), + ft_frame_ushort_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 0 ), + ft_frame_short_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 1 ), + + ft_frame_ulong_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 0 ), + ft_frame_long_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 1 ), + ft_frame_ulong_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 0 ), + ft_frame_long_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 1 ), + + ft_frame_uoff3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 0 ), + ft_frame_off3_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 1 ), + ft_frame_uoff3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 0 ), + ft_frame_off3_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 1 ), + + ft_frame_bytes = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 0 ), + ft_frame_skip = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 1 ) + + } FT_Frame_Op; + + + typedef struct FT_Frame_Field_ + { + FT_Byte value; + FT_Byte size; + FT_UShort offset; + + } FT_Frame_Field; + + + /* Construct an FT_Frame_Field out of a structure type and a field name. */ + /* The structure type must be set in the FT_STRUCTURE macro before */ + /* calling the FT_FRAME_START() macro. */ + /* */ +#define FT_FIELD_SIZE( f ) \ + (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f ) + +#define FT_FIELD_SIZE_DELTA( f ) \ + (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f[0] ) + +#define FT_FIELD_OFFSET( f ) \ + (FT_UShort)( offsetof( FT_STRUCTURE, f ) ) + +#define FT_FRAME_FIELD( frame_op, field ) \ + { \ + frame_op, \ + FT_FIELD_SIZE( field ), \ + FT_FIELD_OFFSET( field ) \ + } + +#define FT_MAKE_EMPTY_FIELD( frame_op ) { frame_op, 0, 0 } + +#define FT_FRAME_START( size ) { ft_frame_start, 0, size } +#define FT_FRAME_END { ft_frame_end, 0, 0 } + +#define FT_FRAME_LONG( f ) FT_FRAME_FIELD( ft_frame_long_be, f ) +#define FT_FRAME_ULONG( f ) FT_FRAME_FIELD( ft_frame_ulong_be, f ) +#define FT_FRAME_SHORT( f ) FT_FRAME_FIELD( ft_frame_short_be, f ) +#define FT_FRAME_USHORT( f ) FT_FRAME_FIELD( ft_frame_ushort_be, f ) +#define FT_FRAME_OFF3( f ) FT_FRAME_FIELD( ft_frame_off3_be, f ) +#define FT_FRAME_UOFF3( f ) FT_FRAME_FIELD( ft_frame_uoff3_be, f ) +#define FT_FRAME_BYTE( f ) FT_FRAME_FIELD( ft_frame_byte, f ) +#define FT_FRAME_CHAR( f ) FT_FRAME_FIELD( ft_frame_schar, f ) + +#define FT_FRAME_LONG_LE( f ) FT_FRAME_FIELD( ft_frame_long_le, f ) +#define FT_FRAME_ULONG_LE( f ) FT_FRAME_FIELD( ft_frame_ulong_le, f ) +#define FT_FRAME_SHORT_LE( f ) FT_FRAME_FIELD( ft_frame_short_le, f ) +#define FT_FRAME_USHORT_LE( f ) FT_FRAME_FIELD( ft_frame_ushort_le, f ) +#define FT_FRAME_OFF3_LE( f ) FT_FRAME_FIELD( ft_frame_off3_le, f ) +#define FT_FRAME_UOFF3_LE( f ) FT_FRAME_FIELD( ft_frame_uoff3_le, f ) + +#define FT_FRAME_SKIP_LONG { ft_frame_long_be, 0, 0 } +#define FT_FRAME_SKIP_SHORT { ft_frame_short_be, 0, 0 } +#define FT_FRAME_SKIP_BYTE { ft_frame_byte, 0, 0 } + +#define FT_FRAME_BYTES( field, count ) \ + { \ + ft_frame_bytes, \ + count, \ + FT_FIELD_OFFSET( field ) \ + } + +#define FT_FRAME_SKIP_BYTES( count ) { ft_frame_skip, count, 0 } + + + /************************************************************************** + * + * Integer extraction macros -- the 'buffer' parameter must ALWAYS be of + * type 'char*' or equivalent (1-byte elements). + */ + +#define FT_BYTE_( p, i ) ( ((const FT_Byte*)(p))[(i)] ) + +#define FT_INT16( x ) ( (FT_Int16)(x) ) +#define FT_UINT16( x ) ( (FT_UInt16)(x) ) +#define FT_INT32( x ) ( (FT_Int32)(x) ) +#define FT_UINT32( x ) ( (FT_UInt32)(x) ) + + +#define FT_BYTE_U16( p, i, s ) ( FT_UINT16( FT_BYTE_( p, i ) ) << (s) ) +#define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) ) + + + /* + * function acts on increases does range for emits + * pointer checking frames error + * ------------------------------------------------------------------- + * FT_PEEK_XXX buffer pointer no no no no + * FT_NEXT_XXX buffer pointer yes no no no + * FT_GET_XXX stream->cursor yes yes yes no + * FT_READ_XXX stream->pos yes yes no yes + */ + + + /* + * `FT_PEEK_XXX' are generic macros to get data from a buffer position. No + * safety checks are performed. + */ +#define FT_PEEK_SHORT( p ) FT_INT16( FT_BYTE_U16( p, 0, 8 ) | \ + FT_BYTE_U16( p, 1, 0 ) ) + +#define FT_PEEK_USHORT( p ) FT_UINT16( FT_BYTE_U16( p, 0, 8 ) | \ + FT_BYTE_U16( p, 1, 0 ) ) + +#define FT_PEEK_LONG( p ) FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \ + FT_BYTE_U32( p, 1, 16 ) | \ + FT_BYTE_U32( p, 2, 8 ) | \ + FT_BYTE_U32( p, 3, 0 ) ) + +#define FT_PEEK_ULONG( p ) FT_UINT32( FT_BYTE_U32( p, 0, 24 ) | \ + FT_BYTE_U32( p, 1, 16 ) | \ + FT_BYTE_U32( p, 2, 8 ) | \ + FT_BYTE_U32( p, 3, 0 ) ) + +#define FT_PEEK_OFF3( p ) ( FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \ + FT_BYTE_U32( p, 1, 16 ) | \ + FT_BYTE_U32( p, 2, 8 ) ) >> 8 ) + +#define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \ + FT_BYTE_U32( p, 1, 8 ) | \ + FT_BYTE_U32( p, 2, 0 ) ) + +#define FT_PEEK_SHORT_LE( p ) FT_INT16( FT_BYTE_U16( p, 1, 8 ) | \ + FT_BYTE_U16( p, 0, 0 ) ) + +#define FT_PEEK_USHORT_LE( p ) FT_UINT16( FT_BYTE_U16( p, 1, 8 ) | \ + FT_BYTE_U16( p, 0, 0 ) ) + +#define FT_PEEK_LONG_LE( p ) FT_INT32( FT_BYTE_U32( p, 3, 24 ) | \ + FT_BYTE_U32( p, 2, 16 ) | \ + FT_BYTE_U32( p, 1, 8 ) | \ + FT_BYTE_U32( p, 0, 0 ) ) + +#define FT_PEEK_ULONG_LE( p ) FT_UINT32( FT_BYTE_U32( p, 3, 24 ) | \ + FT_BYTE_U32( p, 2, 16 ) | \ + FT_BYTE_U32( p, 1, 8 ) | \ + FT_BYTE_U32( p, 0, 0 ) ) + +#define FT_PEEK_OFF3_LE( p ) ( FT_INT32( FT_BYTE_U32( p, 2, 24 ) | \ + FT_BYTE_U32( p, 1, 16 ) | \ + FT_BYTE_U32( p, 0, 8 ) ) >> 8 ) + +#define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \ + FT_BYTE_U32( p, 1, 8 ) | \ + FT_BYTE_U32( p, 0, 0 ) ) + + /* + * `FT_NEXT_XXX' are generic macros to get data from a buffer position + * which is then increased appropriately. No safety checks are performed. + */ +#define FT_NEXT_CHAR( buffer ) \ + ( (signed char)*buffer++ ) + +#define FT_NEXT_BYTE( buffer ) \ + ( (unsigned char)*buffer++ ) + +#define FT_NEXT_SHORT( buffer ) \ + ( buffer += 2, FT_PEEK_SHORT( buffer - 2 ) ) + +#define FT_NEXT_USHORT( buffer ) \ + ( buffer += 2, FT_PEEK_USHORT( buffer - 2 ) ) + +#define FT_NEXT_OFF3( buffer ) \ + ( buffer += 3, FT_PEEK_OFF3( buffer - 3 ) ) + +#define FT_NEXT_UOFF3( buffer ) \ + ( buffer += 3, FT_PEEK_UOFF3( buffer - 3 ) ) + +#define FT_NEXT_LONG( buffer ) \ + ( buffer += 4, FT_PEEK_LONG( buffer - 4 ) ) + +#define FT_NEXT_ULONG( buffer ) \ + ( buffer += 4, FT_PEEK_ULONG( buffer - 4 ) ) + + +#define FT_NEXT_SHORT_LE( buffer ) \ + ( buffer += 2, FT_PEEK_SHORT_LE( buffer - 2 ) ) + +#define FT_NEXT_USHORT_LE( buffer ) \ + ( buffer += 2, FT_PEEK_USHORT_LE( buffer - 2 ) ) + +#define FT_NEXT_OFF3_LE( buffer ) \ + ( buffer += 3, FT_PEEK_OFF3_LE( buffer - 3 ) ) + +#define FT_NEXT_UOFF3_LE( buffer ) \ + ( buffer += 3, FT_PEEK_UOFF3_LE( buffer - 3 ) ) + +#define FT_NEXT_LONG_LE( buffer ) \ + ( buffer += 4, FT_PEEK_LONG_LE( buffer - 4 ) ) + +#define FT_NEXT_ULONG_LE( buffer ) \ + ( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) ) + + + /************************************************************************** + * + * The `FT_GET_XXX` macros use an implicit 'stream' variable. + * + * Note that a call to `FT_STREAM_SEEK` or `FT_STREAM_POS` has **no** + * effect on `FT_GET_XXX`! They operate on `stream->pos`, while + * `FT_GET_XXX` use `stream->cursor`. + */ +#if 0 +#define FT_GET_MACRO( type ) FT_NEXT_ ## type ( stream->cursor ) + +#define FT_GET_CHAR() FT_GET_MACRO( CHAR ) +#define FT_GET_BYTE() FT_GET_MACRO( BYTE ) +#define FT_GET_SHORT() FT_GET_MACRO( SHORT ) +#define FT_GET_USHORT() FT_GET_MACRO( USHORT ) +#define FT_GET_OFF3() FT_GET_MACRO( OFF3 ) +#define FT_GET_UOFF3() FT_GET_MACRO( UOFF3 ) +#define FT_GET_LONG() FT_GET_MACRO( LONG ) +#define FT_GET_ULONG() FT_GET_MACRO( ULONG ) +#define FT_GET_TAG4() FT_GET_MACRO( ULONG ) + +#define FT_GET_SHORT_LE() FT_GET_MACRO( SHORT_LE ) +#define FT_GET_USHORT_LE() FT_GET_MACRO( USHORT_LE ) +#define FT_GET_LONG_LE() FT_GET_MACRO( LONG_LE ) +#define FT_GET_ULONG_LE() FT_GET_MACRO( ULONG_LE ) + +#else +#define FT_GET_MACRO( func, type ) ( (type)func( stream ) ) + +#define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetByte, FT_Char ) +#define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetByte, FT_Byte ) +#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Int16 ) +#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UInt16 ) +#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_UInt32 ) +#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetULong, FT_Int32 ) +#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetULong, FT_UInt32 ) +#define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetULong, FT_UInt32 ) + +#define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_Int16 ) +#define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_UInt16 ) +#define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_Int32 ) +#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_UInt32 ) +#endif + + +#define FT_READ_MACRO( func, type, var ) \ + ( var = (type)func( stream, &error ), \ + error != FT_Err_Ok ) + + /* + * The `FT_READ_XXX' macros use implicit `stream' and `error' variables. + * + * `FT_READ_XXX' can be controlled with `FT_STREAM_SEEK' and + * `FT_STREAM_POS'. They use the full machinery to check whether a read is + * valid. + */ +#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Byte, var ) +#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Char, var ) +#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Int16, var ) +#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UInt16, var ) +#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_UInt32, var ) +#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_Int32, var ) +#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_UInt32, var ) + +#define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_Int16, var ) +#define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_UInt16, var ) +#define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_Int32, var ) +#define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_UInt32, var ) + + +#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM + + /* initialize a stream for reading a regular system stream */ + FT_BASE( FT_Error ) + FT_Stream_Open( FT_Stream stream, + const char* filepathname ); + +#endif /* FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */ + + + /* create a new (input) stream from an FT_Open_Args structure */ + FT_BASE( FT_Error ) + FT_Stream_New( FT_Library library, + const FT_Open_Args* args, + FT_Stream *astream ); + + /* free a stream */ + FT_BASE( void ) + FT_Stream_Free( FT_Stream stream, + FT_Int external ); + + /* initialize a stream for reading in-memory data */ + FT_BASE( void ) + FT_Stream_OpenMemory( FT_Stream stream, + const FT_Byte* base, + FT_ULong size ); + + /* close a stream (does not destroy the stream structure) */ + FT_BASE( void ) + FT_Stream_Close( FT_Stream stream ); + + + /* seek within a stream. position is relative to start of stream */ + FT_BASE( FT_Error ) + FT_Stream_Seek( FT_Stream stream, + FT_ULong pos ); + + /* skip bytes in a stream */ + FT_BASE( FT_Error ) + FT_Stream_Skip( FT_Stream stream, + FT_Long distance ); + + /* return current stream position */ + FT_BASE( FT_ULong ) + FT_Stream_Pos( FT_Stream stream ); + + /* read bytes from a stream into a user-allocated buffer, returns an */ + /* error if not all bytes could be read. */ + FT_BASE( FT_Error ) + FT_Stream_Read( FT_Stream stream, + FT_Byte* buffer, + FT_ULong count ); + + /* read bytes from a stream at a given position */ + FT_BASE( FT_Error ) + FT_Stream_ReadAt( FT_Stream stream, + FT_ULong pos, + FT_Byte* buffer, + FT_ULong count ); + + /* try to read bytes at the end of a stream; return number of bytes */ + /* really available */ + FT_BASE( FT_ULong ) + FT_Stream_TryRead( FT_Stream stream, + FT_Byte* buffer, + FT_ULong count ); + + /* Enter a frame of `count' consecutive bytes in a stream. Returns an */ + /* error if the frame could not be read/accessed. The caller can use */ + /* the `FT_Stream_GetXXX' functions to retrieve frame data without */ + /* error checks. */ + /* */ + /* You must _always_ call `FT_Stream_ExitFrame' once you have entered */ + /* a stream frame! */ + /* */ + /* Nested frames are not permitted. */ + /* */ + FT_BASE( FT_Error ) + FT_Stream_EnterFrame( FT_Stream stream, + FT_ULong count ); + + /* exit a stream frame */ + FT_BASE( void ) + FT_Stream_ExitFrame( FT_Stream stream ); + + + /* Extract a stream frame. If the stream is disk-based, a heap block */ + /* is allocated and the frame bytes are read into it. If the stream */ + /* is memory-based, this function simply sets a pointer to the data. */ + /* */ + /* Useful to optimize access to memory-based streams transparently. */ + /* */ + /* `FT_Stream_GetXXX' functions can't be used. */ + /* */ + /* An extracted frame must be `freed' with a call to the function */ + /* `FT_Stream_ReleaseFrame'. */ + /* */ + FT_BASE( FT_Error ) + FT_Stream_ExtractFrame( FT_Stream stream, + FT_ULong count, + FT_Byte** pbytes ); + + /* release an extract frame (see `FT_Stream_ExtractFrame') */ + FT_BASE( void ) + FT_Stream_ReleaseFrame( FT_Stream stream, + FT_Byte** pbytes ); + + + /* read a byte from an entered frame */ + FT_BASE( FT_Byte ) + FT_Stream_GetByte( FT_Stream stream ); + + /* read a 16-bit big-endian unsigned integer from an entered frame */ + FT_BASE( FT_UInt16 ) + FT_Stream_GetUShort( FT_Stream stream ); + + /* read a 24-bit big-endian unsigned integer from an entered frame */ + FT_BASE( FT_UInt32 ) + FT_Stream_GetUOffset( FT_Stream stream ); + + /* read a 32-bit big-endian unsigned integer from an entered frame */ + FT_BASE( FT_UInt32 ) + FT_Stream_GetULong( FT_Stream stream ); + + /* read a 16-bit little-endian unsigned integer from an entered frame */ + FT_BASE( FT_UInt16 ) + FT_Stream_GetUShortLE( FT_Stream stream ); + + /* read a 32-bit little-endian unsigned integer from an entered frame */ + FT_BASE( FT_UInt32 ) + FT_Stream_GetULongLE( FT_Stream stream ); + + + /* read a byte from a stream */ + FT_BASE( FT_Byte ) + FT_Stream_ReadByte( FT_Stream stream, + FT_Error* error ); + + /* read a 16-bit big-endian unsigned integer from a stream */ + FT_BASE( FT_UInt16 ) + FT_Stream_ReadUShort( FT_Stream stream, + FT_Error* error ); + + /* read a 24-bit big-endian unsigned integer from a stream */ + FT_BASE( FT_ULong ) + FT_Stream_ReadUOffset( FT_Stream stream, + FT_Error* error ); + + /* read a 32-bit big-endian integer from a stream */ + FT_BASE( FT_UInt32 ) + FT_Stream_ReadULong( FT_Stream stream, + FT_Error* error ); + + /* read a 16-bit little-endian unsigned integer from a stream */ + FT_BASE( FT_UInt16 ) + FT_Stream_ReadUShortLE( FT_Stream stream, + FT_Error* error ); + + /* read a 32-bit little-endian unsigned integer from a stream */ + FT_BASE( FT_UInt32 ) + FT_Stream_ReadULongLE( FT_Stream stream, + FT_Error* error ); + + /* Read a structure from a stream. The structure must be described */ + /* by an array of FT_Frame_Field records. */ + FT_BASE( FT_Error ) + FT_Stream_ReadFields( FT_Stream stream, + const FT_Frame_Field* fields, + void* structure ); + + +#define FT_STREAM_POS() \ + FT_Stream_Pos( stream ) + +#define FT_STREAM_SEEK( position ) \ + FT_SET_ERROR( FT_Stream_Seek( stream, \ + (FT_ULong)(position) ) ) + +#define FT_STREAM_SKIP( distance ) \ + FT_SET_ERROR( FT_Stream_Skip( stream, \ + (FT_Long)(distance) ) ) + +#define FT_STREAM_READ( buffer, count ) \ + FT_SET_ERROR( FT_Stream_Read( stream, \ + (FT_Byte*)(buffer), \ + (FT_ULong)(count) ) ) + +#define FT_STREAM_READ_AT( position, buffer, count ) \ + FT_SET_ERROR( FT_Stream_ReadAt( stream, \ + (FT_ULong)(position), \ + (FT_Byte*)(buffer), \ + (FT_ULong)(count) ) ) + +#define FT_STREAM_READ_FIELDS( fields, object ) \ + FT_SET_ERROR( FT_Stream_ReadFields( stream, fields, object ) ) + + +#define FT_FRAME_ENTER( size ) \ + FT_SET_ERROR( \ + FT_DEBUG_INNER( FT_Stream_EnterFrame( stream, \ + (FT_ULong)(size) ) ) ) + +#define FT_FRAME_EXIT() \ + FT_DEBUG_INNER( FT_Stream_ExitFrame( stream ) ) + +#define FT_FRAME_EXTRACT( size, bytes ) \ + FT_SET_ERROR( \ + FT_DEBUG_INNER( FT_Stream_ExtractFrame( stream, \ + (FT_ULong)(size), \ + (FT_Byte**)&(bytes) ) ) ) + +#define FT_FRAME_RELEASE( bytes ) \ + FT_DEBUG_INNER( FT_Stream_ReleaseFrame( stream, \ + (FT_Byte**)&(bytes) ) ) + + +FT_END_HEADER + +#endif /* FTSTREAM_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/fttrace.h b/non-source/foreign/freetype2/freetype/internal/fttrace.h new file mode 100644 index 000000000..42595a29f --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/fttrace.h @@ -0,0 +1,173 @@ +/**************************************************************************** + * + * fttrace.h + * + * Tracing handling (specification only). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /* definitions of trace levels for FreeType 2 */ + + /* the maximum string length (if the argument to `FT_TRACE_DEF` */ + /* gets used as a string) plus one charachter for ':' plus */ + /* another one for the trace level */ +#define FT_MAX_TRACE_LEVEL_LENGTH (9 + 1 + 1) + + /* the first level must always be `trace_any' */ +FT_TRACE_DEF( any ) + + /* base components */ +FT_TRACE_DEF( calc ) /* calculations (ftcalc.c) */ +FT_TRACE_DEF( gloader ) /* glyph loader (ftgloadr.c) */ +FT_TRACE_DEF( glyph ) /* glyph management (ftglyph.c) */ +FT_TRACE_DEF( memory ) /* memory manager (ftobjs.c) */ +FT_TRACE_DEF( init ) /* initialization (ftinit.c) */ +FT_TRACE_DEF( io ) /* i/o interface (ftsystem.c) */ +FT_TRACE_DEF( list ) /* list management (ftlist.c) */ +FT_TRACE_DEF( objs ) /* base objects (ftobjs.c) */ +FT_TRACE_DEF( outline ) /* outline management (ftoutln.c) */ +FT_TRACE_DEF( stream ) /* stream manager (ftstream.c) */ + +FT_TRACE_DEF( bitmap ) /* bitmap manipulation (ftbitmap.c) */ +FT_TRACE_DEF( checksum ) /* bitmap checksum (ftobjs.c) */ +FT_TRACE_DEF( mm ) /* MM interface (ftmm.c) */ +FT_TRACE_DEF( psprops ) /* PS driver properties (ftpsprop.c) */ +FT_TRACE_DEF( raccess ) /* resource fork accessor (ftrfork.c) */ +FT_TRACE_DEF( synth ) /* bold/slant synthesizer (ftsynth.c) */ + + /* rasterizers */ +FT_TRACE_DEF( raster ) /* monochrome rasterizer (ftraster.c) */ +FT_TRACE_DEF( smooth ) /* anti-aliasing raster (ftgrays.c) */ + + /* ot-svg module */ +FT_TRACE_DEF( otsvg ) /* OT-SVG renderer (ftsvg.c) */ + + /* cache sub-system */ +FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */ + + /* SFNT driver components */ +FT_TRACE_DEF( sfdriver ) /* SFNT font driver (sfdriver.c) */ +FT_TRACE_DEF( sfobjs ) /* SFNT object handler (sfobjs.c) */ +FT_TRACE_DEF( 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) */ +FT_TRACE_DEF( ttcpal ) /* color palette table (ttcpal.c) */ +FT_TRACE_DEF( ttgpos ) /* GPOS handler (ttgpos.c) */ +FT_TRACE_DEF( ttsvg ) /* OpenType SVG table (ttsvg.c) */ +FT_TRACE_DEF( ttkern ) /* kerning handler (ttkern.c) */ +FT_TRACE_DEF( ttload ) /* basic TrueType tables (ttload.c) */ +FT_TRACE_DEF( ttmtx ) /* metrics-related tables (ttmtx.c) */ +FT_TRACE_DEF( ttpost ) /* PS table processing (ttpost.c) */ +FT_TRACE_DEF( ttsbit ) /* TrueType sbit handling (ttsbit.c) */ + + /* TrueType driver components */ +FT_TRACE_DEF( ttdriver ) /* TT font driver (ttdriver.c) */ +FT_TRACE_DEF( ttgload ) /* TT glyph loader (ttgload.c) */ +FT_TRACE_DEF( ttgxvar ) /* TrueType GX var handler (ttgxvar.c) */ +FT_TRACE_DEF( ttinterp ) /* bytecode interpreter (ttinterp.c) */ +FT_TRACE_DEF( ttobjs ) /* TT objects manager (ttobjs.c) */ +FT_TRACE_DEF( ttpload ) /* TT data/program loader (ttpload.c) */ + + /* Type 1 driver components */ +FT_TRACE_DEF( t1afm ) +FT_TRACE_DEF( t1driver ) +FT_TRACE_DEF( t1gload ) +FT_TRACE_DEF( t1load ) +FT_TRACE_DEF( t1objs ) +FT_TRACE_DEF( t1parse ) + + /* PostScript helper module `psaux' */ +FT_TRACE_DEF( afmparse ) +FT_TRACE_DEF( cffdecode ) +FT_TRACE_DEF( psconv ) +FT_TRACE_DEF( psobjs ) +FT_TRACE_DEF( t1decode ) + + /* PostScript hinting module `pshinter' */ +FT_TRACE_DEF( pshalgo ) +FT_TRACE_DEF( pshrec ) + + /* Type 2 driver components */ +FT_TRACE_DEF( cffdriver ) +FT_TRACE_DEF( cffgload ) +FT_TRACE_DEF( cffload ) +FT_TRACE_DEF( cffobjs ) +FT_TRACE_DEF( cffparse ) + +FT_TRACE_DEF( cf2blues ) +FT_TRACE_DEF( cf2hints ) +FT_TRACE_DEF( cf2interp ) + + /* Type 42 driver component */ +FT_TRACE_DEF( t42 ) + + /* CID driver components */ +FT_TRACE_DEF( ciddriver ) +FT_TRACE_DEF( cidgload ) +FT_TRACE_DEF( cidload ) +FT_TRACE_DEF( cidobjs ) +FT_TRACE_DEF( cidparse ) + + /* Windows font component */ +FT_TRACE_DEF( winfnt ) + + /* PCF font components */ +FT_TRACE_DEF( pcfdriver ) +FT_TRACE_DEF( pcfread ) + + /* BDF font components */ +FT_TRACE_DEF( bdfdriver ) +FT_TRACE_DEF( bdflib ) + + /* PFR font component */ +FT_TRACE_DEF( pfr ) + + /* OpenType validation components */ +FT_TRACE_DEF( otvcommon ) +FT_TRACE_DEF( otvbase ) +FT_TRACE_DEF( otvgdef ) +FT_TRACE_DEF( otvgpos ) +FT_TRACE_DEF( otvgsub ) +FT_TRACE_DEF( otvjstf ) +FT_TRACE_DEF( otvmath ) +FT_TRACE_DEF( otvmodule ) + + /* TrueTypeGX/AAT validation components */ +FT_TRACE_DEF( gxvbsln ) +FT_TRACE_DEF( gxvcommon ) +FT_TRACE_DEF( gxvfeat ) +FT_TRACE_DEF( gxvjust ) +FT_TRACE_DEF( gxvkern ) +FT_TRACE_DEF( gxvmodule ) +FT_TRACE_DEF( gxvmort ) +FT_TRACE_DEF( gxvmorx ) +FT_TRACE_DEF( gxvlcar ) +FT_TRACE_DEF( gxvopbd ) +FT_TRACE_DEF( gxvprop ) +FT_TRACE_DEF( gxvtrak ) + + /* autofit components */ +FT_TRACE_DEF( afcjk ) +FT_TRACE_DEF( afglobal ) +FT_TRACE_DEF( afhints ) +FT_TRACE_DEF( afmodule ) +FT_TRACE_DEF( aflatin ) +FT_TRACE_DEF( afshaper ) + + /* SDF components */ +FT_TRACE_DEF( sdf ) /* signed distance raster for outlines (ftsdf.c) */ +FT_TRACE_DEF( bsdf ) /* signed distance raster for bitmaps (ftbsdf.c) */ + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/ftvalid.h b/non-source/foreign/freetype2/freetype/internal/ftvalid.h new file mode 100644 index 000000000..a1312f2ab --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/ftvalid.h @@ -0,0 +1,160 @@ +/**************************************************************************** + * + * ftvalid.h + * + * FreeType validation support (specification). + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTVALID_H_ +#define FTVALID_H_ + +#include <ft2build.h> +#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_jmpbuf */ + +#include "compiler-macros.h" + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** V A L I D A T I O N ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + /* handle to a validation object */ + typedef struct FT_ValidatorRec_ volatile* FT_Validator; + + + /************************************************************************** + * + * There are three distinct validation levels defined here: + * + * FT_VALIDATE_DEFAULT :: + * A table that passes this validation level can be used reliably by + * FreeType. It generally means that all offsets have been checked to + * prevent out-of-bound reads, that array counts are correct, etc. + * + * FT_VALIDATE_TIGHT :: + * A table that passes this validation level can be used reliably and + * doesn't contain invalid data. For example, a charmap table that + * returns invalid glyph indices will not pass, even though it can be + * used with FreeType in default mode (the library will simply return an + * error later when trying to load the glyph). + * + * It also checks that fields which must be a multiple of 2, 4, or 8, + * don't have incorrect values, etc. + * + * FT_VALIDATE_PARANOID :: + * Only for font debugging. Checks that a table follows the + * specification by 100%. Very few fonts will be able to pass this level + * anyway but it can be useful for certain tools like font + * editors/converters. + */ + typedef enum FT_ValidationLevel_ + { + FT_VALIDATE_DEFAULT = 0, + FT_VALIDATE_TIGHT, + FT_VALIDATE_PARANOID + + } FT_ValidationLevel; + + +#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */ + /* We disable the warning `structure was padded due to */ + /* __declspec(align())' in order to compile cleanly with */ + /* the maximum level of warnings. */ +#pragma warning( push ) +#pragma warning( disable : 4324 ) +#endif /* _MSC_VER */ + + /* validator structure */ + typedef struct FT_ValidatorRec_ + { + ft_jmp_buf jump_buffer; /* used for exception handling */ + + const FT_Byte* base; /* address of table in memory */ + const FT_Byte* limit; /* `base' + sizeof(table) in memory */ + FT_ValidationLevel level; /* validation level */ + FT_Error error; /* error returned. 0 means success */ + + } FT_ValidatorRec; + +#if defined( _MSC_VER ) +#pragma warning( pop ) +#endif + +#define FT_VALIDATOR( x ) ( (FT_Validator)( x ) ) + + + FT_BASE( void ) + ft_validator_init( FT_Validator valid, + const FT_Byte* base, + const FT_Byte* limit, + FT_ValidationLevel level ); + + /* Do not use this. It's broken and will cause your validator to crash */ + /* if you run it on an invalid font. */ + FT_BASE( FT_Int ) + ft_validator_run( FT_Validator valid ); + + /* Sets the error field in a validator, then calls `longjmp' to return */ + /* to high-level caller. Using `setjmp/longjmp' avoids many stupid */ + /* error checks within the validation routines. */ + /* */ + FT_BASE( void ) + ft_validator_error( FT_Validator valid, + FT_Error error ); + + + /* Calls ft_validate_error. Assumes that the `valid' local variable */ + /* holds a pointer to the current validator object. */ + /* */ +#define FT_INVALID( _error ) FT_INVALID_( _error ) +#define FT_INVALID_( _error ) \ + ft_validator_error( valid, FT_THROW( _error ) ) + + /* called when a broken table is detected */ +#define FT_INVALID_TOO_SHORT \ + FT_INVALID( Invalid_Table ) + + /* called when an invalid offset is detected */ +#define FT_INVALID_OFFSET \ + FT_INVALID( Invalid_Offset ) + + /* called when an invalid format/value is detected */ +#define FT_INVALID_FORMAT \ + FT_INVALID( Invalid_Table ) + + /* called when an invalid glyph index is detected */ +#define FT_INVALID_GLYPH_ID \ + FT_INVALID( Invalid_Glyph_Index ) + + /* called when an invalid field value is detected */ +#define FT_INVALID_DATA \ + FT_INVALID( Invalid_Table ) + + +FT_END_HEADER + +#endif /* FTVALID_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/psaux.h b/non-source/foreign/freetype2/freetype/internal/psaux.h new file mode 100644 index 000000000..745d2cb56 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/psaux.h @@ -0,0 +1,1447 @@ +/**************************************************************************** + * + * psaux.h + * + * Auxiliary functions and data structures related to PostScript fonts + * (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSAUX_H_ +#define PSAUX_H_ + + +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/t1types.h> +#include <freetype/internal/fthash.h> +#include <freetype/internal/tttypes.h> +#include <freetype/internal/services/svpscmap.h> +#include <freetype/internal/cfftypes.h> +#include <freetype/internal/cffotypes.h> + + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * PostScript modules driver class. + */ + typedef struct PS_DriverRec_ + { + FT_DriverRec root; + + FT_UInt hinting_engine; + FT_Bool no_stem_darkening; + FT_Int darken_params[8]; + FT_Int32 random_seed; + + } PS_DriverRec, *PS_Driver; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1_TABLE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + typedef struct PS_TableRec_* PS_Table; + typedef const struct PS_Table_FuncsRec_* PS_Table_Funcs; + + + /************************************************************************** + * + * @struct: + * PS_Table_FuncsRec + * + * @description: + * A set of function pointers to manage PS_Table objects. + * + * @fields: + * table_init :: + * Used to initialize a table. + * + * table_done :: + * Finalizes resp. destroy a given table. + * + * table_add :: + * Adds a new object to a table. + * + * table_release :: + * Releases table data, then finalizes it. + */ + typedef struct PS_Table_FuncsRec_ + { + FT_Error + (*init)( PS_Table table, + FT_Int count, + FT_Memory memory ); + + void + (*done)( PS_Table table ); + + FT_Error + (*add)( PS_Table table, + FT_Int idx, + const void* object, + FT_UInt length ); + + void + (*release)( PS_Table table ); + + } PS_Table_FuncsRec; + + + /************************************************************************** + * + * @struct: + * PS_TableRec + * + * @description: + * A PS_Table is a simple object used to store an array of objects in a + * single memory block. + * + * @fields: + * block :: + * The address in memory of the growheap's block. This can change + * between two object adds, due to reallocation. + * + * cursor :: + * The current top of the grow heap within its block. + * + * capacity :: + * The current size of the heap block. Increments by 1kByte chunks. + * + * init :: + * Set to 0xDEADBEEF if 'elements' and 'lengths' have been allocated. + * + * max_elems :: + * The maximum number of elements in table. + * + * elements :: + * A table of element addresses within the block. + * + * lengths :: + * A table of element sizes within the block. + * + * memory :: + * The object used for memory operations (alloc/realloc). + * + * funcs :: + * A table of method pointers for this object. + */ + typedef struct PS_TableRec_ + { + FT_Byte* block; /* current memory block */ + FT_Offset cursor; /* current cursor in memory block */ + FT_Offset capacity; /* current size of memory block */ + FT_ULong init; + + FT_Int max_elems; + FT_Byte** elements; /* addresses of table elements */ + FT_UInt* lengths; /* lengths of table elements */ + + FT_Memory memory; + PS_Table_FuncsRec funcs; + + } PS_TableRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 FIELDS & TOKENS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct PS_ParserRec_* PS_Parser; + + typedef struct T1_TokenRec_* T1_Token; + + typedef struct T1_FieldRec_* T1_Field; + + + /* simple enumeration type used to identify token types */ + typedef enum T1_TokenType_ + { + T1_TOKEN_TYPE_NONE = 0, + T1_TOKEN_TYPE_ANY, + T1_TOKEN_TYPE_STRING, + T1_TOKEN_TYPE_ARRAY, + T1_TOKEN_TYPE_KEY, /* aka `name' */ + + /* do not remove */ + T1_TOKEN_TYPE_MAX + + } T1_TokenType; + + + /* a simple structure used to identify tokens */ + typedef struct T1_TokenRec_ + { + FT_Byte* start; /* first character of token in input stream */ + FT_Byte* limit; /* first character after the token */ + T1_TokenType type; /* type of token */ + + } T1_TokenRec; + + + /* enumeration type used to identify object fields */ + typedef enum T1_FieldType_ + { + T1_FIELD_TYPE_NONE = 0, + T1_FIELD_TYPE_BOOL, + T1_FIELD_TYPE_INTEGER, + T1_FIELD_TYPE_FIXED, + T1_FIELD_TYPE_FIXED_1000, + T1_FIELD_TYPE_STRING, + T1_FIELD_TYPE_KEY, + T1_FIELD_TYPE_BBOX, + T1_FIELD_TYPE_MM_BBOX, + T1_FIELD_TYPE_INTEGER_ARRAY, + T1_FIELD_TYPE_FIXED_ARRAY, + T1_FIELD_TYPE_CALLBACK, + + /* do not remove */ + T1_FIELD_TYPE_MAX + + } T1_FieldType; + + + typedef enum T1_FieldLocation_ + { + T1_FIELD_LOCATION_NONE = 0, + T1_FIELD_LOCATION_CID_INFO, + T1_FIELD_LOCATION_FONT_DICT, + T1_FIELD_LOCATION_FONT_EXTRA, + T1_FIELD_LOCATION_FONT_INFO, + T1_FIELD_LOCATION_PRIVATE, + T1_FIELD_LOCATION_BBOX, + T1_FIELD_LOCATION_LOADER, + T1_FIELD_LOCATION_FACE, + T1_FIELD_LOCATION_BLEND, + + /* do not remove */ + T1_FIELD_LOCATION_MAX + + } T1_FieldLocation; + + + typedef void + (*T1_Field_ParseFunc)( FT_Face face, + FT_Pointer parser ); + + + /* structure type used to model object fields */ + typedef struct T1_FieldRec_ + { + FT_UInt len; /* field identifier length */ + const char* ident; /* field identifier */ + T1_FieldLocation location; + T1_FieldType type; /* type of field */ + T1_Field_ParseFunc reader; + FT_UInt offset; /* offset of field in object */ + FT_Byte size; /* size of field in bytes */ + FT_UInt array_max; /* maximum number of elements for */ + /* array */ + FT_UInt count_offset; /* offset of element count for */ + /* arrays; must not be zero if in */ + /* use -- in other words, a */ + /* `num_FOO' element must not */ + /* start the used structure if we */ + /* parse a `FOO' array */ + FT_UInt dict; /* where we expect it */ + } T1_FieldRec; + +#define T1_FIELD_DICT_FONTDICT ( 1 << 0 ) /* also FontInfo and FDArray */ +#define T1_FIELD_DICT_PRIVATE ( 1 << 1 ) + + + +#define T1_NEW_SIMPLE_FIELD( _ident, _type, _fname, _dict ) \ + { \ + sizeof ( _ident ) - 1, \ + _ident, T1CODE, _type, \ + NULL, \ + FT_FIELD_OFFSET( _fname ), \ + FT_FIELD_SIZE( _fname ), \ + 0, 0, \ + _dict \ + }, + +#define T1_NEW_CALLBACK_FIELD( _ident, _reader, _dict ) \ + { \ + sizeof ( _ident ) - 1, \ + _ident, T1CODE, T1_FIELD_TYPE_CALLBACK, \ + (T1_Field_ParseFunc)_reader, \ + 0, 0, \ + 0, 0, \ + _dict \ + }, + +#define T1_NEW_TABLE_FIELD( _ident, _type, _fname, _max, _dict ) \ + { \ + sizeof ( _ident ) - 1, \ + _ident, T1CODE, _type, \ + NULL, \ + FT_FIELD_OFFSET( _fname ), \ + FT_FIELD_SIZE_DELTA( _fname ), \ + _max, \ + FT_FIELD_OFFSET( num_ ## _fname ), \ + _dict \ + }, + +#define T1_NEW_TABLE_FIELD2( _ident, _type, _fname, _max, _dict ) \ + { \ + sizeof ( _ident ) - 1, \ + _ident, T1CODE, _type, \ + NULL, \ + FT_FIELD_OFFSET( _fname ), \ + FT_FIELD_SIZE_DELTA( _fname ), \ + _max, 0, \ + _dict \ + }, + + +#define T1_FIELD_BOOL( _ident, _fname, _dict ) \ + T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BOOL, _fname, _dict ) + +#define T1_FIELD_NUM( _ident, _fname, _dict ) \ + T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER, _fname, _dict ) + +#define T1_FIELD_FIXED( _ident, _fname, _dict ) \ + T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED, _fname, _dict ) + +#define T1_FIELD_FIXED_1000( _ident, _fname, _dict ) \ + T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_1000, _fname, \ + _dict ) + +#define T1_FIELD_STRING( _ident, _fname, _dict ) \ + T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_STRING, _fname, _dict ) + +#define T1_FIELD_KEY( _ident, _fname, _dict ) \ + T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_KEY, _fname, _dict ) + +#define T1_FIELD_BBOX( _ident, _fname, _dict ) \ + T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BBOX, _fname, _dict ) + + +#define T1_FIELD_NUM_TABLE( _ident, _fname, _fmax, _dict ) \ + T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \ + _fname, _fmax, _dict ) + +#define T1_FIELD_FIXED_TABLE( _ident, _fname, _fmax, _dict ) \ + T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \ + _fname, _fmax, _dict ) + +#define T1_FIELD_NUM_TABLE2( _ident, _fname, _fmax, _dict ) \ + T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \ + _fname, _fmax, _dict ) + +#define T1_FIELD_FIXED_TABLE2( _ident, _fname, _fmax, _dict ) \ + T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \ + _fname, _fmax, _dict ) + +#define T1_FIELD_CALLBACK( _ident, _name, _dict ) \ + T1_NEW_CALLBACK_FIELD( _ident, _name, _dict ) + +#define T1_FIELD_ZERO \ + { \ + 0, \ + NULL, T1_FIELD_LOCATION_NONE, T1_FIELD_TYPE_NONE, \ + NULL, 0, 0, 0, 0, 0 \ + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 PARSER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef const struct PS_Parser_FuncsRec_* PS_Parser_Funcs; + + typedef struct PS_Parser_FuncsRec_ + { + void + (*init)( PS_Parser parser, + FT_Byte* base, + FT_Byte* limit, + FT_Memory memory ); + + void + (*done)( PS_Parser parser ); + + void + (*skip_spaces)( PS_Parser parser ); + void + (*skip_PS_token)( PS_Parser parser ); + + FT_Long + (*to_int)( PS_Parser parser ); + FT_Fixed + (*to_fixed)( PS_Parser parser, + FT_Int power_ten ); + + FT_Error + (*to_bytes)( PS_Parser parser, + FT_Byte* bytes, + FT_Offset max_bytes, + FT_ULong* pnum_bytes, + FT_Bool delimiters ); + + FT_Int + (*to_coord_array)( PS_Parser parser, + FT_Int max_coords, + FT_Short* coords ); + FT_Int + (*to_fixed_array)( PS_Parser parser, + FT_Int max_values, + FT_Fixed* values, + FT_Int power_ten ); + + void + (*to_token)( PS_Parser parser, + T1_Token token ); + void + (*to_token_array)( PS_Parser parser, + T1_Token tokens, + FT_UInt max_tokens, + FT_Int* pnum_tokens ); + + FT_Error + (*load_field)( PS_Parser parser, + const T1_Field field, + void** objects, + FT_UInt max_objects, + FT_ULong* pflags ); + + FT_Error + (*load_field_table)( PS_Parser parser, + const T1_Field field, + void** objects, + FT_UInt max_objects, + FT_ULong* pflags ); + + } PS_Parser_FuncsRec; + + + /************************************************************************** + * + * @struct: + * PS_ParserRec + * + * @description: + * A PS_Parser is an object used to parse a Type 1 font very quickly. + * + * @fields: + * cursor :: + * The current position in the text. + * + * base :: + * Start of the processed text. + * + * limit :: + * End of the processed text. + * + * error :: + * The last error returned. + * + * memory :: + * The object used for memory operations (alloc/realloc). + * + * funcs :: + * A table of functions for the parser. + */ + typedef struct PS_ParserRec_ + { + FT_Byte* cursor; + FT_Byte* base; + FT_Byte* limit; + FT_Error error; + FT_Memory memory; + + PS_Parser_FuncsRec funcs; + + } PS_ParserRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + typedef struct PS_Builder_ PS_Builder; + typedef const struct PS_Builder_FuncsRec_* PS_Builder_Funcs; + + typedef struct PS_Builder_FuncsRec_ + { + void + (*init)( PS_Builder* ps_builder, + void* builder, + FT_Bool is_t1 ); + + void + (*done)( PS_Builder* builder ); + + } PS_Builder_FuncsRec; + + + /************************************************************************** + * + * @struct: + * PS_Builder + * + * @description: + * A structure used during glyph loading to store its outline. + * + * @fields: + * memory :: + * The current memory object. + * + * face :: + * The current face object. + * + * glyph :: + * The current glyph slot. + * + * loader :: + * XXX + * + * base :: + * The base glyph outline. + * + * current :: + * The current glyph outline. + * + * pos_x :: + * The horizontal translation (if composite glyph). + * + * pos_y :: + * The vertical translation (if composite glyph). + * + * left_bearing :: + * The left side bearing point. + * + * advance :: + * The horizontal advance vector. + * + * bbox :: + * Unused. + * + * path_begun :: + * A flag which indicates that a new path has begun. + * + * load_points :: + * If this flag is not set, no points are loaded. + * + * no_recurse :: + * Set but not used. + * + * metrics_only :: + * A boolean indicating that we only want to compute the metrics of a + * given glyph, not load all of its points. + * + * is_t1 :: + * Set if current font type is Type 1. + * + * funcs :: + * An array of function pointers for the builder. + */ + struct PS_Builder_ + { + FT_Memory memory; + FT_Face face; + CFF_GlyphSlot glyph; + FT_GlyphLoader loader; + FT_Outline* base; + FT_Outline* current; + + FT_Pos* pos_x; + FT_Pos* pos_y; + + FT_Vector* left_bearing; + FT_Vector* advance; + + FT_BBox* bbox; /* bounding box */ + FT_Bool path_begun; + FT_Bool load_points; + FT_Bool no_recurse; + + FT_Bool metrics_only; + FT_Bool is_t1; + + PS_Builder_FuncsRec funcs; + + }; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS DECODER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + +#define PS_MAX_OPERANDS 48 +#define PS_MAX_SUBRS_CALLS 16 /* maximum subroutine nesting; */ + /* only 10 are allowed but there exist */ + /* fonts like `HiraKakuProN-W3.ttf' */ + /* (Hiragino Kaku Gothic ProN W3; */ + /* 8.2d6e1; 2014-12-19) that exceed */ + /* this limit */ + + /* execution context charstring zone */ + + typedef struct PS_Decoder_Zone_ + { + FT_Byte* base; + FT_Byte* limit; + FT_Byte* cursor; + + } PS_Decoder_Zone; + + + typedef FT_Error + (*CFF_Decoder_Get_Glyph_Callback)( TT_Face face, + FT_UInt glyph_index, + FT_Byte** pointer, + FT_ULong* length ); + + typedef void + (*CFF_Decoder_Free_Glyph_Callback)( TT_Face face, + FT_Byte** pointer, + FT_ULong length ); + + + typedef struct PS_Decoder_ + { + PS_Builder builder; + + FT_Fixed stack[PS_MAX_OPERANDS + 1]; + FT_Fixed* top; + + PS_Decoder_Zone zones[PS_MAX_SUBRS_CALLS + 1]; + PS_Decoder_Zone* zone; + + FT_Int flex_state; + FT_Int num_flex_vectors; + FT_Vector flex_vectors[7]; + + CFF_Font cff; + CFF_SubFont current_subfont; /* for current glyph_index */ + FT_Generic* cf2_instance; + + FT_Pos* glyph_width; + FT_Bool width_only; + FT_Int num_hints; + + FT_UInt num_locals; + FT_UInt num_globals; + + FT_Int locals_bias; + FT_Int globals_bias; + + FT_Byte** locals; + FT_Byte** globals; + + FT_Byte** glyph_names; /* for pure CFF fonts only */ + FT_UInt num_glyphs; /* number of glyphs in font */ + + FT_Render_Mode hint_mode; + + FT_Bool seac; + + CFF_Decoder_Get_Glyph_Callback get_glyph_callback; + CFF_Decoder_Free_Glyph_Callback free_glyph_callback; + + /* Type 1 stuff */ + FT_Service_PsCMaps psnames; /* for seac */ + + FT_Int lenIV; /* internal for sub routine calls */ + FT_UInt* locals_len; /* array of subrs length (optional) */ + FT_Hash locals_hash; /* used if `num_subrs' was massaged */ + + FT_Matrix font_matrix; + FT_Vector font_offset; + + PS_Blend blend; /* for multiple master support */ + + FT_Long* buildchar; + FT_UInt len_buildchar; + + } PS_Decoder; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + typedef struct T1_BuilderRec_* T1_Builder; + + + typedef FT_Error + (*T1_Builder_Check_Points_Func)( T1_Builder builder, + FT_Int count ); + + typedef void + (*T1_Builder_Add_Point_Func)( T1_Builder builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ); + + typedef FT_Error + (*T1_Builder_Add_Point1_Func)( T1_Builder builder, + FT_Pos x, + FT_Pos y ); + + typedef FT_Error + (*T1_Builder_Add_Contour_Func)( T1_Builder builder ); + + typedef FT_Error + (*T1_Builder_Start_Point_Func)( T1_Builder builder, + FT_Pos x, + FT_Pos y ); + + typedef void + (*T1_Builder_Close_Contour_Func)( T1_Builder builder ); + + + typedef const struct T1_Builder_FuncsRec_* T1_Builder_Funcs; + + typedef struct T1_Builder_FuncsRec_ + { + void + (*init)( T1_Builder builder, + FT_Face face, + FT_Size size, + FT_GlyphSlot slot, + FT_Bool hinting ); + + void + (*done)( T1_Builder builder ); + + T1_Builder_Check_Points_Func check_points; + T1_Builder_Add_Point_Func add_point; + T1_Builder_Add_Point1_Func add_point1; + T1_Builder_Add_Contour_Func add_contour; + T1_Builder_Start_Point_Func start_point; + T1_Builder_Close_Contour_Func close_contour; + + } T1_Builder_FuncsRec; + + + /* an enumeration type to handle charstring parsing states */ + typedef enum T1_ParseState_ + { + T1_Parse_Start, + T1_Parse_Have_Width, + T1_Parse_Have_Moveto, + T1_Parse_Have_Path + + } T1_ParseState; + + + /************************************************************************** + * + * @struct: + * T1_BuilderRec + * + * @description: + * A structure used during glyph loading to store its outline. + * + * @fields: + * memory :: + * The current memory object. + * + * face :: + * The current face object. + * + * glyph :: + * The current glyph slot. + * + * loader :: + * XXX + * + * base :: + * The base glyph outline. + * + * current :: + * The current glyph outline. + * + * max_points :: + * maximum points in builder outline + * + * max_contours :: + * Maximum number of contours in builder outline. + * + * pos_x :: + * The horizontal translation (if composite glyph). + * + * pos_y :: + * The vertical translation (if composite glyph). + * + * left_bearing :: + * The left side bearing point. + * + * advance :: + * The horizontal advance vector. + * + * bbox :: + * Unused. + * + * parse_state :: + * An enumeration which controls the charstring parsing state. + * + * load_points :: + * If this flag is not set, no points are loaded. + * + * no_recurse :: + * Set but not used. + * + * metrics_only :: + * A boolean indicating that we only want to compute the metrics of a + * given glyph, not load all of its points. + * + * funcs :: + * An array of function pointers for the builder. + */ + typedef struct T1_BuilderRec_ + { + FT_Memory memory; + FT_Face face; + FT_GlyphSlot glyph; + FT_GlyphLoader loader; + FT_Outline* base; + FT_Outline* current; + + FT_Pos pos_x; + FT_Pos pos_y; + + FT_Vector left_bearing; + FT_Vector advance; + + FT_BBox bbox; /* bounding box */ + T1_ParseState parse_state; + FT_Bool load_points; + FT_Bool no_recurse; + + FT_Bool metrics_only; + + void* hints_funcs; /* hinter-specific */ + void* hints_globals; /* hinter-specific */ + + T1_Builder_FuncsRec funcs; + + } T1_BuilderRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 DECODER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + +#if 0 + + /************************************************************************** + * + * T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine + * calls during glyph loading. + */ +#define T1_MAX_SUBRS_CALLS 8 + + + /************************************************************************** + * + * T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A + * minimum of 16 is required. + */ +#define T1_MAX_CHARSTRINGS_OPERANDS 32 + +#endif /* 0 */ + + + typedef struct T1_Decoder_ZoneRec_ + { + FT_Byte* cursor; + FT_Byte* base; + FT_Byte* limit; + + } T1_Decoder_ZoneRec, *T1_Decoder_Zone; + + + typedef struct T1_DecoderRec_* T1_Decoder; + typedef const struct T1_Decoder_FuncsRec_* T1_Decoder_Funcs; + + + typedef FT_Error + (*T1_Decoder_Callback)( T1_Decoder decoder, + FT_UInt glyph_index ); + + + typedef struct T1_Decoder_FuncsRec_ + { + FT_Error + (*init)( T1_Decoder decoder, + FT_Face face, + FT_Size size, + FT_GlyphSlot slot, + FT_Byte** glyph_names, + PS_Blend blend, + FT_Bool hinting, + FT_Render_Mode hint_mode, + T1_Decoder_Callback callback ); + + void + (*done)( T1_Decoder decoder ); + +#ifdef T1_CONFIG_OPTION_OLD_ENGINE + FT_Error + (*parse_charstrings_old)( T1_Decoder decoder, + FT_Byte* base, + FT_UInt len ); +#else + FT_Error + (*parse_metrics)( T1_Decoder decoder, + FT_Byte* base, + FT_UInt len ); +#endif + + FT_Error + (*parse_charstrings)( PS_Decoder* decoder, + FT_Byte* charstring_base, + FT_ULong charstring_len ); + + + } T1_Decoder_FuncsRec; + + + typedef struct T1_DecoderRec_ + { + T1_BuilderRec builder; + + FT_Long stack[T1_MAX_CHARSTRINGS_OPERANDS]; + FT_Long* top; + + T1_Decoder_ZoneRec zones[T1_MAX_SUBRS_CALLS + 1]; + T1_Decoder_Zone zone; + + FT_Service_PsCMaps psnames; /* for seac */ + FT_UInt num_glyphs; + FT_Byte** glyph_names; + + FT_Int lenIV; /* internal for sub routine calls */ + FT_Int num_subrs; + FT_Byte** subrs; + FT_UInt* subrs_len; /* array of subrs length (optional) */ + FT_Hash subrs_hash; /* used if `num_subrs' was massaged */ + + FT_Matrix font_matrix; + FT_Vector font_offset; + + FT_Int flex_state; + FT_Int num_flex_vectors; + FT_Vector flex_vectors[7]; + + PS_Blend blend; /* for multiple master support */ + + FT_Render_Mode hint_mode; + + T1_Decoder_Callback parse_callback; + T1_Decoder_FuncsRec funcs; + + FT_Long* buildchar; + FT_UInt len_buildchar; + + FT_Bool seac; + + FT_Generic cf2_instance; + + } T1_DecoderRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CFF BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + typedef struct CFF_Builder_ CFF_Builder; + + + typedef FT_Error + (*CFF_Builder_Check_Points_Func)( CFF_Builder* builder, + FT_Int count ); + + typedef void + (*CFF_Builder_Add_Point_Func)( CFF_Builder* builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ); + typedef FT_Error + (*CFF_Builder_Add_Point1_Func)( CFF_Builder* builder, + FT_Pos x, + FT_Pos y ); + typedef FT_Error + (*CFF_Builder_Start_Point_Func)( CFF_Builder* builder, + FT_Pos x, + FT_Pos y ); + typedef void + (*CFF_Builder_Close_Contour_Func)( CFF_Builder* builder ); + + typedef FT_Error + (*CFF_Builder_Add_Contour_Func)( CFF_Builder* builder ); + + typedef const struct CFF_Builder_FuncsRec_* CFF_Builder_Funcs; + + typedef struct CFF_Builder_FuncsRec_ + { + void + (*init)( CFF_Builder* builder, + TT_Face face, + CFF_Size size, + CFF_GlyphSlot glyph, + FT_Bool hinting ); + + void + (*done)( CFF_Builder* builder ); + + CFF_Builder_Check_Points_Func check_points; + CFF_Builder_Add_Point_Func add_point; + CFF_Builder_Add_Point1_Func add_point1; + CFF_Builder_Add_Contour_Func add_contour; + CFF_Builder_Start_Point_Func start_point; + CFF_Builder_Close_Contour_Func close_contour; + + } CFF_Builder_FuncsRec; + + + /************************************************************************** + * + * @struct: + * CFF_Builder + * + * @description: + * A structure used during glyph loading to store its outline. + * + * @fields: + * memory :: + * The current memory object. + * + * face :: + * The current face object. + * + * glyph :: + * The current glyph slot. + * + * loader :: + * The current glyph loader. + * + * base :: + * The base glyph outline. + * + * current :: + * The current glyph outline. + * + * pos_x :: + * The horizontal translation (if composite glyph). + * + * pos_y :: + * The vertical translation (if composite glyph). + * + * left_bearing :: + * The left side bearing point. + * + * advance :: + * The horizontal advance vector. + * + * bbox :: + * Unused. + * + * path_begun :: + * A flag which indicates that a new path has begun. + * + * load_points :: + * If this flag is not set, no points are loaded. + * + * no_recurse :: + * Set but not used. + * + * metrics_only :: + * A boolean indicating that we only want to compute the metrics of a + * given glyph, not load all of its points. + * + * hints_funcs :: + * Auxiliary pointer for hinting. + * + * hints_globals :: + * Auxiliary pointer for hinting. + * + * funcs :: + * A table of method pointers for this object. + */ + struct CFF_Builder_ + { + FT_Memory memory; + TT_Face face; + CFF_GlyphSlot glyph; + FT_GlyphLoader loader; + FT_Outline* base; + FT_Outline* current; + + FT_Pos pos_x; + FT_Pos pos_y; + + FT_Vector left_bearing; + FT_Vector advance; + + FT_BBox bbox; /* bounding box */ + + FT_Bool path_begun; + FT_Bool load_points; + FT_Bool no_recurse; + + FT_Bool metrics_only; + + void* hints_funcs; /* hinter-specific */ + void* hints_globals; /* hinter-specific */ + + CFF_Builder_FuncsRec funcs; + }; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CFF DECODER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + +#define CFF_MAX_OPERANDS 48 +#define CFF_MAX_SUBRS_CALLS 16 /* maximum subroutine nesting; */ + /* only 10 are allowed but there exist */ + /* fonts like `HiraKakuProN-W3.ttf' */ + /* (Hiragino Kaku Gothic ProN W3; */ + /* 8.2d6e1; 2014-12-19) that exceed */ + /* this limit */ +#define CFF_MAX_TRANS_ELEMENTS 32 + + /* execution context charstring zone */ + + typedef struct CFF_Decoder_Zone_ + { + FT_Byte* base; + FT_Byte* limit; + FT_Byte* cursor; + + } CFF_Decoder_Zone; + + + typedef struct CFF_Decoder_ + { + CFF_Builder builder; + CFF_Font cff; + + FT_Fixed stack[CFF_MAX_OPERANDS + 1]; + FT_Fixed* top; + + CFF_Decoder_Zone zones[CFF_MAX_SUBRS_CALLS + 1]; + CFF_Decoder_Zone* zone; + + FT_Int flex_state; + FT_Int num_flex_vectors; + FT_Vector flex_vectors[7]; + + FT_Pos glyph_width; + FT_Pos nominal_width; + + FT_Bool read_width; + FT_Bool width_only; + FT_Int num_hints; + FT_Fixed buildchar[CFF_MAX_TRANS_ELEMENTS]; + + FT_UInt num_locals; + FT_UInt num_globals; + + FT_Int locals_bias; + FT_Int globals_bias; + + FT_Byte** locals; + FT_Byte** globals; + + FT_Byte** glyph_names; /* for pure CFF fonts only */ + FT_UInt num_glyphs; /* number of glyphs in font */ + + FT_Render_Mode hint_mode; + + FT_Bool seac; + + CFF_SubFont current_subfont; /* for current glyph_index */ + + CFF_Decoder_Get_Glyph_Callback get_glyph_callback; + CFF_Decoder_Free_Glyph_Callback free_glyph_callback; + + } CFF_Decoder; + + + typedef const struct CFF_Decoder_FuncsRec_* CFF_Decoder_Funcs; + + typedef struct CFF_Decoder_FuncsRec_ + { + void + (*init)( CFF_Decoder* decoder, + TT_Face face, + CFF_Size size, + CFF_GlyphSlot slot, + FT_Bool hinting, + FT_Render_Mode hint_mode, + CFF_Decoder_Get_Glyph_Callback get_callback, + CFF_Decoder_Free_Glyph_Callback free_callback ); + + FT_Error + (*prepare)( CFF_Decoder* decoder, + CFF_Size size, + FT_UInt glyph_index ); + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + FT_Error + (*parse_charstrings_old)( CFF_Decoder* decoder, + FT_Byte* charstring_base, + FT_ULong charstring_len, + FT_Bool in_dict ); +#endif + + FT_Error + (*parse_charstrings)( PS_Decoder* decoder, + FT_Byte* charstring_base, + FT_ULong charstring_len ); + + } CFF_Decoder_FuncsRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** AFM PARSER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct AFM_ParserRec_* AFM_Parser; + + typedef struct AFM_Parser_FuncsRec_ + { + FT_Error + (*init)( AFM_Parser parser, + FT_Memory memory, + FT_Byte* base, + FT_Byte* limit ); + + void + (*done)( AFM_Parser parser ); + + FT_Error + (*parse)( AFM_Parser parser ); + + } AFM_Parser_FuncsRec; + + + typedef struct AFM_StreamRec_* AFM_Stream; + + + /************************************************************************** + * + * @struct: + * AFM_ParserRec + * + * @description: + * An AFM_Parser is a parser for the AFM files. + * + * @fields: + * memory :: + * The object used for memory operations (alloc and realloc). + * + * stream :: + * This is an opaque object. + * + * FontInfo :: + * The result will be stored here. + * + * get_index :: + * A user provided function to get a glyph index by its name. + */ + typedef struct AFM_ParserRec_ + { + FT_Memory memory; + AFM_Stream stream; + + AFM_FontInfo FontInfo; + + FT_Int + (*get_index)( const char* name, + FT_Offset len, + void* user_data ); + + void* user_data; + + } AFM_ParserRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 CHARMAPS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef const struct T1_CMap_ClassesRec_* T1_CMap_Classes; + + typedef struct T1_CMap_ClassesRec_ + { + FT_CMap_Class standard; + FT_CMap_Class expert; + FT_CMap_Class custom; + FT_CMap_Class unicode; + + } T1_CMap_ClassesRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PSAux Module Interface *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct PSAux_ServiceRec_ + { + /* don't use `PS_Table_Funcs' and friends to avoid compiler warnings */ + const PS_Table_FuncsRec* ps_table_funcs; + const PS_Parser_FuncsRec* ps_parser_funcs; + const T1_Builder_FuncsRec* t1_builder_funcs; + const T1_Decoder_FuncsRec* t1_decoder_funcs; + + void + (*t1_decrypt)( FT_Byte* buffer, + FT_Offset length, + FT_UShort seed ); + + FT_UInt32 + (*cff_random)( FT_UInt32 r ); + + void + (*ps_decoder_init)( PS_Decoder* ps_decoder, + void* decoder, + FT_Bool is_t1 ); + + void + (*t1_make_subfont)( FT_Face face, + PS_Private priv, + CFF_SubFont subfont ); + + T1_CMap_Classes t1_cmap_classes; + + /* fields after this comment line were added after version 2.1.10 */ + const AFM_Parser_FuncsRec* afm_parser_funcs; + + const CFF_Decoder_FuncsRec* cff_decoder_funcs; + + } PSAux_ServiceRec, *PSAux_Service; + + /* backward compatible type definition */ + typedef PSAux_ServiceRec PSAux_Interface; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** Some convenience functions *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + +#define IS_PS_NEWLINE( ch ) \ + ( (ch) == '\r' || \ + (ch) == '\n' ) + +#define IS_PS_SPACE( ch ) \ + ( (ch) == ' ' || \ + IS_PS_NEWLINE( ch ) || \ + (ch) == '\t' || \ + (ch) == '\f' || \ + (ch) == '\0' ) + +#define IS_PS_SPECIAL( ch ) \ + ( (ch) == '/' || \ + (ch) == '(' || (ch) == ')' || \ + (ch) == '<' || (ch) == '>' || \ + (ch) == '[' || (ch) == ']' || \ + (ch) == '{' || (ch) == '}' || \ + (ch) == '%' ) + +#define IS_PS_DELIM( ch ) \ + ( IS_PS_SPACE( ch ) || \ + IS_PS_SPECIAL( ch ) ) + +#define IS_PS_DIGIT( ch ) \ + ( (ch) >= '0' && (ch) <= '9' ) + +#define IS_PS_XDIGIT( ch ) \ + ( IS_PS_DIGIT( ch ) || \ + ( (ch) >= 'A' && (ch) <= 'F' ) || \ + ( (ch) >= 'a' && (ch) <= 'f' ) ) + +#define IS_PS_BASE85( ch ) \ + ( (ch) >= '!' && (ch) <= 'u' ) + +#define IS_PS_TOKEN( cur, limit, token ) \ + ( (char)(cur)[0] == (token)[0] && \ + ( (cur) + sizeof ( (token) ) == (limit) || \ + ( (cur) + sizeof( (token) ) < (limit) && \ + IS_PS_DELIM( (cur)[sizeof ( (token) ) - 1] ) ) ) && \ + ft_strncmp( (char*)(cur), (token), sizeof ( (token) ) - 1 ) == 0 ) + + +FT_END_HEADER + +#endif /* PSAUX_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/pshints.h b/non-source/foreign/freetype2/freetype/internal/pshints.h new file mode 100644 index 000000000..dba6c7303 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/pshints.h @@ -0,0 +1,699 @@ +/**************************************************************************** + * + * pshints.h + * + * Interface to Postscript-specific (Type 1 and Type 2) hints + * recorders (specification only). These are used to support native + * T1/T2 hints in the 'type1', 'cid', and 'cff' font drivers. + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSHINTS_H_ +#define PSHINTS_H_ + + +#include <freetype/freetype.h> +#include <freetype/t1tables.h> + + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** INTERNAL REPRESENTATION OF GLOBALS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct PSH_GlobalsRec_* PSH_Globals; + + typedef FT_Error + (*PSH_Globals_NewFunc)( FT_Memory memory, + T1_Private* private_dict, + PSH_Globals* aglobals ); + + typedef void + (*PSH_Globals_SetScaleFunc)( PSH_Globals globals, + FT_Fixed x_scale, + FT_Fixed y_scale, + FT_Fixed x_delta, + FT_Fixed y_delta ); + + typedef void + (*PSH_Globals_DestroyFunc)( PSH_Globals globals ); + + + typedef struct PSH_Globals_FuncsRec_ + { + PSH_Globals_NewFunc create; + PSH_Globals_SetScaleFunc set_scale; + PSH_Globals_DestroyFunc destroy; + + } PSH_Globals_FuncsRec, *PSH_Globals_Funcs; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PUBLIC TYPE 1 HINTS RECORDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @type: + * T1_Hints + * + * @description: + * This is a handle to an opaque structure used to record glyph hints + * from a Type 1 character glyph character string. + * + * The methods used to operate on this object are defined by the + * @T1_Hints_FuncsRec structure. Recording glyph hints is normally + * achieved through the following scheme: + * + * - Open a new hint recording session by calling the 'open' method. + * This rewinds the recorder and prepare it for new input. + * + * - For each hint found in the glyph charstring, call the corresponding + * method ('stem', 'stem3', or 'reset'). Note that these functions do + * not return an error code. + * + * - Close the recording session by calling the 'close' method. It + * returns an error code if the hints were invalid or something strange + * happened (e.g., memory shortage). + * + * The hints accumulated in the object can later be used by the + * PostScript hinter. + * + */ + typedef struct T1_HintsRec_* T1_Hints; + + + /************************************************************************** + * + * @type: + * T1_Hints_Funcs + * + * @description: + * A pointer to the @T1_Hints_FuncsRec structure that defines the API of + * a given @T1_Hints object. + * + */ + typedef const struct T1_Hints_FuncsRec_* T1_Hints_Funcs; + + + /************************************************************************** + * + * @functype: + * T1_Hints_OpenFunc + * + * @description: + * A method of the @T1_Hints class used to prepare it for a new Type 1 + * hints recording session. + * + * @input: + * hints :: + * A handle to the Type 1 hints recorder. + * + * @note: + * You should always call the @T1_Hints_CloseFunc method in order to + * close an opened recording session. + * + */ + typedef void + (*T1_Hints_OpenFunc)( T1_Hints hints ); + + + /************************************************************************** + * + * @functype: + * T1_Hints_SetStemFunc + * + * @description: + * A method of the @T1_Hints class used to record a new horizontal or + * vertical stem. This corresponds to the Type 1 'hstem' and 'vstem' + * operators. + * + * @input: + * hints :: + * A handle to the Type 1 hints recorder. + * + * dimension :: + * 0 for horizontal stems (hstem), 1 for vertical ones (vstem). + * + * coords :: + * Array of 2 coordinates in 16.16 format, used as (position,length) + * stem descriptor. + * + * @note: + * Use vertical coordinates (y) for horizontal stems (dim=0). Use + * horizontal coordinates (x) for vertical stems (dim=1). + * + * 'coords[0]' is the absolute stem position (lowest coordinate); + * 'coords[1]' is the length. + * + * The length can be negative, in which case it must be either -20 or + * -21. It is interpreted as a 'ghost' stem, according to the Type 1 + * specification. + * + * If the length is -21 (corresponding to a bottom ghost stem), then the + * real stem position is 'coords[0]+coords[1]'. + * + */ + typedef void + (*T1_Hints_SetStemFunc)( T1_Hints hints, + FT_UInt dimension, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @functype: + * T1_Hints_SetStem3Func + * + * @description: + * A method of the @T1_Hints class used to record three + * counter-controlled horizontal or vertical stems at once. + * + * @input: + * hints :: + * A handle to the Type 1 hints recorder. + * + * dimension :: + * 0 for horizontal stems, 1 for vertical ones. + * + * coords :: + * An array of 6 values in 16.16 format, holding 3 (position,length) + * pairs for the counter-controlled stems. + * + * @note: + * Use vertical coordinates (y) for horizontal stems (dim=0). Use + * horizontal coordinates (x) for vertical stems (dim=1). + * + * The lengths cannot be negative (ghost stems are never + * counter-controlled). + * + */ + typedef void + (*T1_Hints_SetStem3Func)( T1_Hints hints, + FT_UInt dimension, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @functype: + * T1_Hints_ResetFunc + * + * @description: + * A method of the @T1_Hints class used to reset the stems hints in a + * recording session. + * + * @input: + * hints :: + * A handle to the Type 1 hints recorder. + * + * end_point :: + * The index of the last point in the input glyph in which the + * previously defined hints apply. + * + */ + typedef void + (*T1_Hints_ResetFunc)( T1_Hints hints, + FT_UInt end_point ); + + + /************************************************************************** + * + * @functype: + * T1_Hints_CloseFunc + * + * @description: + * A method of the @T1_Hints class used to close a hint recording + * session. + * + * @input: + * hints :: + * A handle to the Type 1 hints recorder. + * + * end_point :: + * The index of the last point in the input glyph. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * The error code is set to indicate that an error occurred during the + * recording session. + * + */ + typedef FT_Error + (*T1_Hints_CloseFunc)( T1_Hints hints, + FT_UInt end_point ); + + + /************************************************************************** + * + * @functype: + * T1_Hints_ApplyFunc + * + * @description: + * A method of the @T1_Hints class used to apply hints to the + * corresponding glyph outline. Must be called once all hints have been + * recorded. + * + * @input: + * hints :: + * A handle to the Type 1 hints recorder. + * + * outline :: + * A pointer to the target outline descriptor. + * + * globals :: + * The hinter globals for this font. + * + * hint_mode :: + * Hinting information. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * On input, all points within the outline are in font coordinates. On + * output, they are in 1/64 of pixels. + * + * The scaling transformation is taken from the 'globals' object which + * must correspond to the same font as the glyph. + * + */ + typedef FT_Error + (*T1_Hints_ApplyFunc)( T1_Hints hints, + FT_Outline* outline, + PSH_Globals globals, + FT_Render_Mode hint_mode ); + + + /************************************************************************** + * + * @struct: + * T1_Hints_FuncsRec + * + * @description: + * The structure used to provide the API to @T1_Hints objects. + * + * @fields: + * hints :: + * A handle to the T1 Hints recorder. + * + * open :: + * The function to open a recording session. + * + * close :: + * The function to close a recording session. + * + * stem :: + * The function to set a simple stem. + * + * stem3 :: + * The function to set counter-controlled stems. + * + * reset :: + * The function to reset stem hints. + * + * apply :: + * The function to apply the hints to the corresponding glyph outline. + * + */ + typedef struct T1_Hints_FuncsRec_ + { + T1_Hints hints; + T1_Hints_OpenFunc open; + T1_Hints_CloseFunc close; + T1_Hints_SetStemFunc stem; + T1_Hints_SetStem3Func stem3; + T1_Hints_ResetFunc reset; + T1_Hints_ApplyFunc apply; + + } T1_Hints_FuncsRec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PUBLIC TYPE 2 HINTS RECORDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @type: + * T2_Hints + * + * @description: + * This is a handle to an opaque structure used to record glyph hints + * from a Type 2 character glyph character string. + * + * The methods used to operate on this object are defined by the + * @T2_Hints_FuncsRec structure. Recording glyph hints is normally + * achieved through the following scheme: + * + * - Open a new hint recording session by calling the 'open' method. + * This rewinds the recorder and prepare it for new input. + * + * - For each hint found in the glyph charstring, call the corresponding + * method ('stems', 'hintmask', 'counters'). Note that these functions + * do not return an error code. + * + * - Close the recording session by calling the 'close' method. It + * returns an error code if the hints were invalid or something strange + * happened (e.g., memory shortage). + * + * The hints accumulated in the object can later be used by the + * Postscript hinter. + * + */ + typedef struct T2_HintsRec_* T2_Hints; + + + /************************************************************************** + * + * @type: + * T2_Hints_Funcs + * + * @description: + * A pointer to the @T2_Hints_FuncsRec structure that defines the API of + * a given @T2_Hints object. + * + */ + typedef const struct T2_Hints_FuncsRec_* T2_Hints_Funcs; + + + /************************************************************************** + * + * @functype: + * T2_Hints_OpenFunc + * + * @description: + * A method of the @T2_Hints class used to prepare it for a new Type 2 + * hints recording session. + * + * @input: + * hints :: + * A handle to the Type 2 hints recorder. + * + * @note: + * You should always call the @T2_Hints_CloseFunc method in order to + * close an opened recording session. + * + */ + typedef void + (*T2_Hints_OpenFunc)( T2_Hints hints ); + + + /************************************************************************** + * + * @functype: + * T2_Hints_StemsFunc + * + * @description: + * A method of the @T2_Hints class used to set the table of stems in + * either the vertical or horizontal dimension. Equivalent to the + * 'hstem', 'vstem', 'hstemhm', and 'vstemhm' Type 2 operators. + * + * @input: + * hints :: + * A handle to the Type 2 hints recorder. + * + * dimension :: + * 0 for horizontal stems (hstem), 1 for vertical ones (vstem). + * + * count :: + * The number of stems. + * + * coords :: + * An array of 'count' (position,length) pairs in 16.16 format. + * + * @note: + * Use vertical coordinates (y) for horizontal stems (dim=0). Use + * horizontal coordinates (x) for vertical stems (dim=1). + * + * There are '2*count' elements in the 'coords' array. Each even element + * is an absolute position in font units, each odd element is a length in + * font units. + * + * A length can be negative, in which case it must be either -20 or -21. + * It is interpreted as a 'ghost' stem, according to the Type 1 + * specification. + * + */ + typedef void + (*T2_Hints_StemsFunc)( T2_Hints hints, + FT_UInt dimension, + FT_Int count, + FT_Fixed* coordinates ); + + + /************************************************************************** + * + * @functype: + * T2_Hints_MaskFunc + * + * @description: + * A method of the @T2_Hints class used to set a given hintmask (this + * corresponds to the 'hintmask' Type 2 operator). + * + * @input: + * hints :: + * A handle to the Type 2 hints recorder. + * + * end_point :: + * The glyph index of the last point to which the previously defined or + * activated hints apply. + * + * bit_count :: + * The number of bits in the hint mask. + * + * bytes :: + * An array of bytes modelling the hint mask. + * + * @note: + * If the hintmask starts the charstring (before any glyph point + * definition), the value of `end_point` should be 0. + * + * `bit_count` is the number of meaningful bits in the 'bytes' array; it + * must be equal to the total number of hints defined so far (i.e., + * horizontal+verticals). + * + * The 'bytes' array can come directly from the Type 2 charstring and + * respects the same format. + * + */ + typedef void + (*T2_Hints_MaskFunc)( T2_Hints hints, + FT_UInt end_point, + FT_UInt bit_count, + const FT_Byte* bytes ); + + + /************************************************************************** + * + * @functype: + * T2_Hints_CounterFunc + * + * @description: + * A method of the @T2_Hints class used to set a given counter mask (this + * corresponds to the 'hintmask' Type 2 operator). + * + * @input: + * hints :: + * A handle to the Type 2 hints recorder. + * + * end_point :: + * A glyph index of the last point to which the previously defined or + * active hints apply. + * + * bit_count :: + * The number of bits in the hint mask. + * + * bytes :: + * An array of bytes modelling the hint mask. + * + * @note: + * If the hintmask starts the charstring (before any glyph point + * definition), the value of `end_point` should be 0. + * + * `bit_count` is the number of meaningful bits in the 'bytes' array; it + * must be equal to the total number of hints defined so far (i.e., + * horizontal+verticals). + * + * The 'bytes' array can come directly from the Type 2 charstring and + * respects the same format. + * + */ + typedef void + (*T2_Hints_CounterFunc)( T2_Hints hints, + FT_UInt bit_count, + const FT_Byte* bytes ); + + + /************************************************************************** + * + * @functype: + * T2_Hints_CloseFunc + * + * @description: + * A method of the @T2_Hints class used to close a hint recording + * session. + * + * @input: + * hints :: + * A handle to the Type 2 hints recorder. + * + * end_point :: + * The index of the last point in the input glyph. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * The error code is set to indicate that an error occurred during the + * recording session. + * + */ + typedef FT_Error + (*T2_Hints_CloseFunc)( T2_Hints hints, + FT_UInt end_point ); + + + /************************************************************************** + * + * @functype: + * T2_Hints_ApplyFunc + * + * @description: + * A method of the @T2_Hints class used to apply hints to the + * corresponding glyph outline. Must be called after the 'close' method. + * + * @input: + * hints :: + * A handle to the Type 2 hints recorder. + * + * outline :: + * A pointer to the target outline descriptor. + * + * globals :: + * The hinter globals for this font. + * + * hint_mode :: + * Hinting information. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * On input, all points within the outline are in font coordinates. On + * output, they are in 1/64 of pixels. + * + * The scaling transformation is taken from the 'globals' object which + * must correspond to the same font than the glyph. + * + */ + typedef FT_Error + (*T2_Hints_ApplyFunc)( T2_Hints hints, + FT_Outline* outline, + PSH_Globals globals, + FT_Render_Mode hint_mode ); + + + /************************************************************************** + * + * @struct: + * T2_Hints_FuncsRec + * + * @description: + * The structure used to provide the API to @T2_Hints objects. + * + * @fields: + * hints :: + * A handle to the T2 hints recorder object. + * + * open :: + * The function to open a recording session. + * + * close :: + * The function to close a recording session. + * + * stems :: + * The function to set the dimension's stems table. + * + * hintmask :: + * The function to set hint masks. + * + * counter :: + * The function to set counter masks. + * + * apply :: + * The function to apply the hints on the corresponding glyph outline. + * + */ + typedef struct T2_Hints_FuncsRec_ + { + T2_Hints hints; + T2_Hints_OpenFunc open; + T2_Hints_CloseFunc close; + T2_Hints_StemsFunc stems; + T2_Hints_MaskFunc hintmask; + T2_Hints_CounterFunc counter; + T2_Hints_ApplyFunc apply; + + } T2_Hints_FuncsRec; + + + /* */ + + + typedef struct PSHinter_Interface_ + { + PSH_Globals_Funcs (*get_globals_funcs)( FT_Module module ); + T1_Hints_Funcs (*get_t1_funcs) ( FT_Module module ); + T2_Hints_Funcs (*get_t2_funcs) ( FT_Module module ); + + } PSHinter_Interface; + + typedef PSHinter_Interface* PSHinter_Service; + + +#define FT_DEFINE_PSHINTER_INTERFACE( \ + class_, \ + get_globals_funcs_, \ + get_t1_funcs_, \ + get_t2_funcs_ ) \ + static const PSHinter_Interface class_ = \ + { \ + get_globals_funcs_, \ + get_t1_funcs_, \ + get_t2_funcs_ \ + }; + + +FT_END_HEADER + +#endif /* PSHINTS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svbdf.h b/non-source/foreign/freetype2/freetype/internal/services/svbdf.h new file mode 100644 index 000000000..89e9c2e5d --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svbdf.h @@ -0,0 +1,66 @@ +/**************************************************************************** + * + * svbdf.h + * + * The FreeType BDF services (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVBDF_H_ +#define SVBDF_H_ + +#include <freetype/ftbdf.h> +#include <freetype/internal/ftserv.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_BDF "bdf" + + typedef FT_Error + (*FT_BDF_GetCharsetIdFunc)( FT_Face face, + const char* *acharset_encoding, + const char* *acharset_registry ); + + typedef FT_Error + (*FT_BDF_GetPropertyFunc)( FT_Face face, + const char* prop_name, + BDF_PropertyRec *aproperty ); + + + FT_DEFINE_SERVICE( BDF ) + { + FT_BDF_GetCharsetIdFunc get_charset_id; + FT_BDF_GetPropertyFunc get_property; + }; + + +#define FT_DEFINE_SERVICE_BDFRec( class_, \ + get_charset_id_, \ + get_property_ ) \ + static const FT_Service_BDFRec class_ = \ + { \ + get_charset_id_, get_property_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVBDF_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svcfftl.h b/non-source/foreign/freetype2/freetype/internal/services/svcfftl.h new file mode 100644 index 000000000..3cb483c34 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svcfftl.h @@ -0,0 +1,90 @@ +/**************************************************************************** + * + * svcfftl.h + * + * The FreeType CFF tables loader service (specification). + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVCFFTL_H_ +#define SVCFFTL_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/internal/cfftypes.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_CFF_LOAD "cff-load" + + + typedef FT_UShort + (*FT_Get_Standard_Encoding_Func)( FT_UInt charcode ); + + typedef FT_Error + (*FT_Load_Private_Dict_Func)( CFF_Font font, + CFF_SubFont subfont, + FT_UInt lenNDV, + FT_Fixed* NDV ); + + typedef FT_Byte + (*FT_FD_Select_Get_Func)( CFF_FDSelect fdselect, + FT_UInt glyph_index ); + + typedef FT_Bool + (*FT_Blend_Check_Vector_Func)( CFF_Blend blend, + FT_UInt vsindex, + FT_UInt lenNDV, + FT_Fixed* NDV ); + + typedef FT_Error + (*FT_Blend_Build_Vector_Func)( CFF_Blend blend, + FT_UInt vsindex, + FT_UInt lenNDV, + FT_Fixed* NDV ); + + + FT_DEFINE_SERVICE( CFFLoad ) + { + FT_Get_Standard_Encoding_Func get_standard_encoding; + FT_Load_Private_Dict_Func load_private_dict; + FT_FD_Select_Get_Func fd_select_get; + FT_Blend_Check_Vector_Func blend_check_vector; + FT_Blend_Build_Vector_Func blend_build_vector; + }; + + +#define FT_DEFINE_SERVICE_CFFLOADREC( class_, \ + get_standard_encoding_, \ + load_private_dict_, \ + fd_select_get_, \ + blend_check_vector_, \ + blend_build_vector_ ) \ + static const FT_Service_CFFLoadRec class_ = \ + { \ + get_standard_encoding_, \ + load_private_dict_, \ + fd_select_get_, \ + blend_check_vector_, \ + blend_build_vector_ \ + }; + + +FT_END_HEADER + + +#endif + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svcid.h b/non-source/foreign/freetype2/freetype/internal/services/svcid.h new file mode 100644 index 000000000..8362cb872 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svcid.h @@ -0,0 +1,69 @@ +/**************************************************************************** + * + * svcid.h + * + * The FreeType CID font services (specification). + * + * Copyright (C) 2007-2024 by + * Derek Clegg and Michael Toftdal. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVCID_H_ +#define SVCID_H_ + +#include <freetype/internal/ftserv.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_CID "CID" + + typedef FT_Error + (*FT_CID_GetRegistryOrderingSupplementFunc)( FT_Face face, + const char* *registry, + const char* *ordering, + FT_Int *supplement ); + typedef FT_Error + (*FT_CID_GetIsInternallyCIDKeyedFunc)( FT_Face face, + FT_Bool *is_cid ); + typedef FT_Error + (*FT_CID_GetCIDFromGlyphIndexFunc)( FT_Face face, + FT_UInt glyph_index, + FT_UInt *cid ); + + FT_DEFINE_SERVICE( CID ) + { + FT_CID_GetRegistryOrderingSupplementFunc get_ros; + FT_CID_GetIsInternallyCIDKeyedFunc get_is_cid; + FT_CID_GetCIDFromGlyphIndexFunc get_cid_from_glyph_index; + }; + + +#define FT_DEFINE_SERVICE_CIDREC( class_, \ + get_ros_, \ + get_is_cid_, \ + get_cid_from_glyph_index_ ) \ + static const FT_Service_CIDRec class_ = \ + { \ + get_ros_, get_is_cid_, get_cid_from_glyph_index_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVCID_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svfntfmt.h b/non-source/foreign/freetype2/freetype/internal/services/svfntfmt.h new file mode 100644 index 000000000..6b837e79f --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svfntfmt.h @@ -0,0 +1,55 @@ +/**************************************************************************** + * + * svfntfmt.h + * + * The FreeType font format service (specification only). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVFNTFMT_H_ +#define SVFNTFMT_H_ + +#include <freetype/internal/ftserv.h> + + +FT_BEGIN_HEADER + + + /* + * A trivial service used to return the name of a face's font driver, + * according to the XFree86 nomenclature. Note that the service data is a + * simple constant string pointer. + */ + +#define FT_SERVICE_ID_FONT_FORMAT "font-format" + +#define FT_FONT_FORMAT_TRUETYPE "TrueType" +#define FT_FONT_FORMAT_TYPE_1 "Type 1" +#define FT_FONT_FORMAT_BDF "BDF" +#define FT_FONT_FORMAT_PCF "PCF" +#define FT_FONT_FORMAT_TYPE_42 "Type 42" +#define FT_FONT_FORMAT_CID "CID Type 1" +#define FT_FONT_FORMAT_CFF "CFF" +#define FT_FONT_FORMAT_PFR "PFR" +#define FT_FONT_FORMAT_WINFNT "Windows FNT" + + /* */ + + +FT_END_HEADER + + +#endif /* SVFNTFMT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svgldict.h b/non-source/foreign/freetype2/freetype/internal/services/svgldict.h new file mode 100644 index 000000000..6126ec9ad --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svgldict.h @@ -0,0 +1,72 @@ +/**************************************************************************** + * + * svgldict.h + * + * The FreeType glyph dictionary services (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVGLDICT_H_ +#define SVGLDICT_H_ + +#include <freetype/internal/ftserv.h> + + +FT_BEGIN_HEADER + + + /* + * A service used to retrieve glyph names, as well as to find the index of + * a given glyph name in a font. + * + */ + +#define FT_SERVICE_ID_GLYPH_DICT "glyph-dict" + + + typedef FT_Error + (*FT_GlyphDict_GetNameFunc)( FT_Face face, + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ); + + typedef FT_UInt + (*FT_GlyphDict_NameIndexFunc)( FT_Face face, + const FT_String* glyph_name ); + + + FT_DEFINE_SERVICE( GlyphDict ) + { + FT_GlyphDict_GetNameFunc get_name; + FT_GlyphDict_NameIndexFunc name_index; /* optional */ + }; + + +#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \ + get_name_, \ + name_index_ ) \ + static const FT_Service_GlyphDictRec class_ = \ + { \ + get_name_, name_index_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVGLDICT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svgxval.h b/non-source/foreign/freetype2/freetype/internal/services/svgxval.h new file mode 100644 index 000000000..29cf55281 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svgxval.h @@ -0,0 +1,72 @@ +/**************************************************************************** + * + * svgxval.h + * + * FreeType API for validating TrueTypeGX/AAT tables (specification). + * + * Copyright (C) 2004-2024 by + * Masatake YAMATO, Red Hat K.K., + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +/**************************************************************************** + * + * gxvalid is derived from both gxlayout module and otvalid module. + * Development of gxlayout is supported by the Information-technology + * Promotion Agency(IPA), Japan. + * + */ + + +#ifndef SVGXVAL_H_ +#define SVGXVAL_H_ + +#include <freetype/ftgxval.h> +#include <freetype/internal/ftvalid.h> + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_GX_VALIDATE "truetypegx-validate" +#define FT_SERVICE_ID_CLASSICKERN_VALIDATE "classickern-validate" + + typedef FT_Error + (*gxv_validate_func)( FT_Face face, + FT_UInt gx_flags, + FT_Bytes tables[FT_VALIDATE_GX_LENGTH], + FT_UInt table_length ); + + + typedef FT_Error + (*ckern_validate_func)( FT_Face face, + FT_UInt ckern_flags, + FT_Bytes *ckern_table ); + + + FT_DEFINE_SERVICE( GXvalidate ) + { + gxv_validate_func validate; + }; + + FT_DEFINE_SERVICE( CKERNvalidate ) + { + ckern_validate_func validate; + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVGXVAL_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svkern.h b/non-source/foreign/freetype2/freetype/internal/services/svkern.h new file mode 100644 index 000000000..ac1bc30c4 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svkern.h @@ -0,0 +1,51 @@ +/**************************************************************************** + * + * svkern.h + * + * The FreeType Kerning service (specification). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVKERN_H_ +#define SVKERN_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/tttables.h> + + +FT_BEGIN_HEADER + +#define FT_SERVICE_ID_KERNING "kerning" + + + typedef FT_Error + (*FT_Kerning_TrackGetFunc)( FT_Face face, + FT_Fixed point_size, + FT_Int degree, + FT_Fixed* akerning ); + + FT_DEFINE_SERVICE( Kerning ) + { + FT_Kerning_TrackGetFunc get_track; + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVKERN_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svmetric.h b/non-source/foreign/freetype2/freetype/internal/services/svmetric.h new file mode 100644 index 000000000..8b3563b25 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svmetric.h @@ -0,0 +1,131 @@ +/**************************************************************************** + * + * svmetric.h + * + * The FreeType services for metrics variations (specification). + * + * Copyright (C) 2016-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVMETRIC_H_ +#define SVMETRIC_H_ + +#include <freetype/internal/ftserv.h> + + +FT_BEGIN_HEADER + + + /* + * A service to manage the `HVAR, `MVAR', and `VVAR' OpenType tables. + * + */ + +#define FT_SERVICE_ID_METRICS_VARIATIONS "metrics-variations" + + + /* HVAR */ + + typedef FT_Error + (*FT_HAdvance_Adjust_Func)( FT_Face face, + FT_UInt gindex, + FT_Int *avalue ); + + typedef FT_Error + (*FT_LSB_Adjust_Func)( FT_Face face, + FT_UInt gindex, + FT_Int *avalue ); + + typedef FT_Error + (*FT_RSB_Adjust_Func)( FT_Face face, + FT_UInt gindex, + FT_Int *avalue ); + + /* VVAR */ + + typedef FT_Error + (*FT_VAdvance_Adjust_Func)( FT_Face face, + FT_UInt gindex, + FT_Int *avalue ); + + typedef FT_Error + (*FT_TSB_Adjust_Func)( FT_Face face, + FT_UInt gindex, + FT_Int *avalue ); + + typedef FT_Error + (*FT_BSB_Adjust_Func)( FT_Face face, + FT_UInt gindex, + FT_Int *avalue ); + + typedef FT_Error + (*FT_VOrg_Adjust_Func)( FT_Face face, + FT_UInt gindex, + FT_Int *avalue ); + + /* MVAR */ + + typedef void + (*FT_Metrics_Adjust_Func)( FT_Face face ); + + typedef FT_Error + (*FT_Size_Reset_Func)( FT_Size size ); + + + FT_DEFINE_SERVICE( MetricsVariations ) + { + FT_HAdvance_Adjust_Func hadvance_adjust; + FT_LSB_Adjust_Func lsb_adjust; + FT_RSB_Adjust_Func rsb_adjust; + + FT_VAdvance_Adjust_Func vadvance_adjust; + FT_TSB_Adjust_Func tsb_adjust; + FT_BSB_Adjust_Func bsb_adjust; + FT_VOrg_Adjust_Func vorg_adjust; + + FT_Metrics_Adjust_Func metrics_adjust; + FT_Size_Reset_Func size_reset; + }; + + +#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \ + hadvance_adjust_, \ + lsb_adjust_, \ + rsb_adjust_, \ + vadvance_adjust_, \ + tsb_adjust_, \ + bsb_adjust_, \ + vorg_adjust_, \ + metrics_adjust_, \ + size_reset_ ) \ + static const FT_Service_MetricsVariationsRec class_ = \ + { \ + hadvance_adjust_, \ + lsb_adjust_, \ + rsb_adjust_, \ + vadvance_adjust_, \ + tsb_adjust_, \ + bsb_adjust_, \ + vorg_adjust_, \ + metrics_adjust_, \ + size_reset_ \ + }; + + /* */ + + +FT_END_HEADER + +#endif /* SVMETRIC_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svmm.h b/non-source/foreign/freetype2/freetype/internal/services/svmm.h new file mode 100644 index 000000000..5288fadf3 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svmm.h @@ -0,0 +1,214 @@ +/**************************************************************************** + * + * svmm.h + * + * The FreeType Multiple Masters and GX var services (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and Dominik Röttsches. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVMM_H_ +#define SVMM_H_ + +#include <freetype/ftmm.h> +#include <freetype/internal/ftserv.h> +#include <freetype/internal/ftmmtypes.h> + + +FT_BEGIN_HEADER + + + /* + * A service used to manage multiple-masters data in a given face. + * + * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H). + * + */ + +#define FT_SERVICE_ID_MULTI_MASTERS "multi-masters" + + + typedef FT_Error + (*FT_Get_MM_Func)( FT_Face face, + FT_Multi_Master* master ); + + typedef FT_Error + (*FT_Get_MM_Var_Func)( FT_Face face, + FT_MM_Var* *master ); + + typedef FT_Error + (*FT_Set_MM_Design_Func)( FT_Face face, + FT_UInt num_coords, + FT_Long* coords ); + + /* use return value -1 to indicate that the new coordinates */ + /* are equal to the current ones; no changes are thus needed */ + typedef FT_Error + (*FT_Set_Var_Design_Func)( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + /* use return value -1 to indicate that the new coordinates */ + /* are equal to the current ones; no changes are thus needed */ + typedef FT_Error + (*FT_Set_MM_Blend_Func)( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + typedef FT_Error + (*FT_Get_Var_Design_Func)( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + typedef FT_Error + (*FT_Set_Named_Instance_Func)( FT_Face face, + FT_UInt instance_index ); + + typedef FT_Error + (*FT_Get_Default_Named_Instance_Func)( FT_Face face, + FT_UInt *instance_index ); + + typedef FT_Error + (*FT_Get_MM_Blend_Func)( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + typedef FT_Error + (*FT_Get_Var_Blend_Func)( FT_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_Fixed* *normalizedcoords, + FT_MM_Var* *mm_var ); + + typedef void + (*FT_Done_Blend_Func)( FT_Face face ); + + typedef FT_Error + (*FT_Set_MM_WeightVector_Func)( FT_Face face, + FT_UInt len, + FT_Fixed* weight_vector ); + + typedef FT_Error + (*FT_Get_MM_WeightVector_Func)( FT_Face face, + FT_UInt* len, + FT_Fixed* weight_vector ); + + typedef void + (*FT_Construct_PS_Name_Func)( FT_Face face ); + + typedef FT_Error + (*FT_Var_Load_Delta_Set_Idx_Map_Func)( FT_Face face, + FT_ULong offset, + GX_DeltaSetIdxMap map, + GX_ItemVarStore itemStore, + FT_ULong table_len ); + + typedef FT_Error + (*FT_Var_Load_Item_Var_Store_Func)( FT_Face face, + FT_ULong offset, + GX_ItemVarStore itemStore ); + + typedef FT_ItemVarDelta + (*FT_Var_Get_Item_Delta_Func)( FT_Face face, + GX_ItemVarStore itemStore, + FT_UInt outerIndex, + FT_UInt innerIndex ); + + typedef void + (*FT_Var_Done_Item_Var_Store_Func)( FT_Face face, + GX_ItemVarStore itemStore ); + + typedef void + (*FT_Var_Done_Delta_Set_Idx_Map_Func)( FT_Face face, + GX_DeltaSetIdxMap deltaSetIdxMap ); + + + FT_DEFINE_SERVICE( MultiMasters ) + { + FT_Get_MM_Func get_mm; + FT_Set_MM_Design_Func set_mm_design; + FT_Set_MM_Blend_Func set_mm_blend; + FT_Get_MM_Blend_Func get_mm_blend; + FT_Get_MM_Var_Func get_mm_var; + FT_Set_Var_Design_Func set_var_design; + FT_Get_Var_Design_Func get_var_design; + FT_Set_Named_Instance_Func set_named_instance; + FT_Get_Default_Named_Instance_Func get_default_named_instance; + FT_Set_MM_WeightVector_Func set_mm_weightvector; + FT_Get_MM_WeightVector_Func get_mm_weightvector; + + /* for internal use; only needed for code sharing between modules */ + FT_Construct_PS_Name_Func construct_ps_name; + FT_Var_Load_Delta_Set_Idx_Map_Func load_delta_set_idx_map; + FT_Var_Load_Item_Var_Store_Func load_item_var_store; + FT_Var_Get_Item_Delta_Func get_item_delta; + FT_Var_Done_Item_Var_Store_Func done_item_var_store; + FT_Var_Done_Delta_Set_Idx_Map_Func done_delta_set_idx_map; + FT_Get_Var_Blend_Func get_var_blend; + FT_Done_Blend_Func done_blend; + }; + + +#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \ + get_mm_, \ + set_mm_design_, \ + set_mm_blend_, \ + get_mm_blend_, \ + get_mm_var_, \ + set_var_design_, \ + get_var_design_, \ + set_named_instance_, \ + get_default_named_instance_, \ + set_mm_weightvector_, \ + get_mm_weightvector_, \ + \ + construct_ps_name_, \ + load_delta_set_idx_map_, \ + load_item_var_store_, \ + get_item_delta_, \ + done_item_var_store_, \ + done_delta_set_idx_map_, \ + get_var_blend_, \ + done_blend_ ) \ + static const FT_Service_MultiMastersRec class_ = \ + { \ + get_mm_, \ + set_mm_design_, \ + set_mm_blend_, \ + get_mm_blend_, \ + get_mm_var_, \ + set_var_design_, \ + get_var_design_, \ + set_named_instance_, \ + get_default_named_instance_, \ + set_mm_weightvector_, \ + get_mm_weightvector_, \ + \ + construct_ps_name_, \ + load_delta_set_idx_map_, \ + load_item_var_store_, \ + get_item_delta_, \ + done_item_var_store_, \ + done_delta_set_idx_map_, \ + get_var_blend_, \ + done_blend_ \ + }; + + /* */ + + +FT_END_HEADER + +#endif /* SVMM_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svotval.h b/non-source/foreign/freetype2/freetype/internal/services/svotval.h new file mode 100644 index 000000000..7aea7ec11 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svotval.h @@ -0,0 +1,55 @@ +/**************************************************************************** + * + * svotval.h + * + * The FreeType OpenType validation service (specification). + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVOTVAL_H_ +#define SVOTVAL_H_ + +#include <freetype/ftotval.h> +#include <freetype/internal/ftvalid.h> + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_OPENTYPE_VALIDATE "opentype-validate" + + + typedef FT_Error + (*otv_validate_func)( FT_Face volatile face, + FT_UInt ot_flags, + FT_Bytes *base, + FT_Bytes *gdef, + FT_Bytes *gpos, + FT_Bytes *gsub, + FT_Bytes *jstf ); + + + FT_DEFINE_SERVICE( OTvalidate ) + { + otv_validate_func validate; + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVOTVAL_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svpfr.h b/non-source/foreign/freetype2/freetype/internal/services/svpfr.h new file mode 100644 index 000000000..b2fac6d08 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svpfr.h @@ -0,0 +1,65 @@ +/**************************************************************************** + * + * svpfr.h + * + * Internal PFR service functions (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVPFR_H_ +#define SVPFR_H_ + +#include <freetype/ftpfr.h> +#include <freetype/internal/ftserv.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_PFR_METRICS "pfr-metrics" + + + typedef FT_Error + (*FT_PFR_GetMetricsFunc)( FT_Face face, + FT_UInt *aoutline, + FT_UInt *ametrics, + FT_Fixed *ax_scale, + FT_Fixed *ay_scale ); + + typedef FT_Error + (*FT_PFR_GetKerningFunc)( FT_Face face, + FT_UInt left, + FT_UInt right, + FT_Vector *avector ); + + typedef FT_Error + (*FT_PFR_GetAdvanceFunc)( FT_Face face, + FT_UInt gindex, + FT_Pos *aadvance ); + + + FT_DEFINE_SERVICE( PfrMetrics ) + { + FT_PFR_GetMetricsFunc get_metrics; + FT_PFR_GetKerningFunc get_kerning; + FT_PFR_GetAdvanceFunc get_advance; + + }; + + +FT_END_HEADER + +#endif /* SVPFR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svpostnm.h b/non-source/foreign/freetype2/freetype/internal/services/svpostnm.h new file mode 100644 index 000000000..d19f3adc6 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svpostnm.h @@ -0,0 +1,65 @@ +/**************************************************************************** + * + * svpostnm.h + * + * The FreeType PostScript name services (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVPOSTNM_H_ +#define SVPOSTNM_H_ + +#include <freetype/internal/ftserv.h> + + +FT_BEGIN_HEADER + + /* + * A trivial service used to retrieve the PostScript name of a given font + * when available. The `get_name' field should never be `NULL`. + * + * The corresponding function can return `NULL` to indicate that the + * PostScript name is not available. + * + * The name is owned by the face and will be destroyed with it. + */ + +#define FT_SERVICE_ID_POSTSCRIPT_FONT_NAME "postscript-font-name" + + + typedef const char* + (*FT_PsName_GetFunc)( FT_Face face ); + + + FT_DEFINE_SERVICE( PsFontName ) + { + FT_PsName_GetFunc get_ps_font_name; + }; + + +#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \ + static const FT_Service_PsFontNameRec class_ = \ + { \ + get_ps_font_name_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVPOSTNM_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svprop.h b/non-source/foreign/freetype2/freetype/internal/services/svprop.h new file mode 100644 index 000000000..ba39c0dd4 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svprop.h @@ -0,0 +1,66 @@ +/**************************************************************************** + * + * svprop.h + * + * The FreeType property service (specification). + * + * Copyright (C) 2012-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVPROP_H_ +#define SVPROP_H_ + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_PROPERTIES "properties" + + + typedef FT_Error + (*FT_Properties_SetFunc)( FT_Module module, + const char* property_name, + const void* value, + FT_Bool value_is_string ); + + typedef FT_Error + (*FT_Properties_GetFunc)( FT_Module module, + const char* property_name, + void* value ); + + + FT_DEFINE_SERVICE( Properties ) + { + FT_Properties_SetFunc set_property; + FT_Properties_GetFunc get_property; + }; + + +#define FT_DEFINE_SERVICE_PROPERTIESREC( class_, \ + set_property_, \ + get_property_ ) \ + static const FT_Service_PropertiesRec class_ = \ + { \ + set_property_, \ + get_property_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVPROP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svpscmap.h b/non-source/foreign/freetype2/freetype/internal/services/svpscmap.h new file mode 100644 index 000000000..d4908ee41 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svpscmap.h @@ -0,0 +1,145 @@ +/**************************************************************************** + * + * svpscmap.h + * + * The FreeType PostScript charmap service (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVPSCMAP_H_ +#define SVPSCMAP_H_ + +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_POSTSCRIPT_CMAPS "postscript-cmaps" + + + /* + * Adobe glyph name to unicode value. + */ + typedef FT_UInt32 + (*PS_Unicode_ValueFunc)( const char* glyph_name ); + + /* + * Macintosh name id to glyph name. `NULL` if invalid index. + */ + typedef const char* + (*PS_Macintosh_NameFunc)( FT_UInt name_index ); + + /* + * Adobe standard string ID to glyph name. `NULL` if invalid index. + */ + typedef const char* + (*PS_Adobe_Std_StringsFunc)( FT_UInt string_index ); + + + /* + * Simple unicode -> glyph index charmap built from font glyph names table. + */ + typedef struct PS_UniMap_ + { + FT_UInt32 unicode; /* bit 31 set: is glyph variant */ + FT_UInt glyph_index; + + } PS_UniMap; + + + typedef struct PS_UnicodesRec_* PS_Unicodes; + + typedef struct PS_UnicodesRec_ + { + FT_CMapRec cmap; + FT_UInt num_maps; + PS_UniMap* maps; + + } PS_UnicodesRec; + + + /* + * A function which returns a glyph name for a given index. Returns + * `NULL` if invalid index. + */ + typedef const char* + (*PS_GetGlyphNameFunc)( FT_Pointer data, + FT_UInt string_index ); + + /* + * A function used to release the glyph name returned by + * PS_GetGlyphNameFunc, when needed + */ + typedef void + (*PS_FreeGlyphNameFunc)( FT_Pointer data, + const char* name ); + + typedef FT_Error + (*PS_Unicodes_InitFunc)( FT_Memory memory, + PS_Unicodes unicodes, + FT_UInt num_glyphs, + PS_GetGlyphNameFunc get_glyph_name, + PS_FreeGlyphNameFunc free_glyph_name, + FT_Pointer glyph_data ); + + typedef FT_UInt + (*PS_Unicodes_CharIndexFunc)( PS_Unicodes unicodes, + FT_UInt32 unicode ); + + typedef FT_UInt + (*PS_Unicodes_CharNextFunc)( PS_Unicodes unicodes, + FT_UInt32 *unicode ); + + + FT_DEFINE_SERVICE( PsCMaps ) + { + PS_Unicode_ValueFunc unicode_value; + + PS_Unicodes_InitFunc unicodes_init; + PS_Unicodes_CharIndexFunc unicodes_char_index; + PS_Unicodes_CharNextFunc unicodes_char_next; + + PS_Macintosh_NameFunc macintosh_name; + PS_Adobe_Std_StringsFunc adobe_std_strings; + const unsigned short* adobe_std_encoding; + const unsigned short* adobe_expert_encoding; + }; + + +#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \ + unicode_value_, \ + unicodes_init_, \ + unicodes_char_index_, \ + unicodes_char_next_, \ + macintosh_name_, \ + adobe_std_strings_, \ + adobe_std_encoding_, \ + adobe_expert_encoding_ ) \ + static const FT_Service_PsCMapsRec class_ = \ + { \ + unicode_value_, unicodes_init_, \ + unicodes_char_index_, unicodes_char_next_, macintosh_name_, \ + adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVPSCMAP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svpsinfo.h b/non-source/foreign/freetype2/freetype/internal/services/svpsinfo.h new file mode 100644 index 000000000..2aadcdd02 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svpsinfo.h @@ -0,0 +1,86 @@ +/**************************************************************************** + * + * svpsinfo.h + * + * The FreeType PostScript info service (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVPSINFO_H_ +#define SVPSINFO_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/internal/t1types.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_POSTSCRIPT_INFO "postscript-info" + + + typedef FT_Error + (*PS_GetFontInfoFunc)( FT_Face face, + PS_FontInfoRec* afont_info ); + + typedef FT_Error + (*PS_GetFontExtraFunc)( FT_Face face, + PS_FontExtraRec* afont_extra ); + + typedef FT_Int + (*PS_HasGlyphNamesFunc)( FT_Face face ); + + typedef FT_Error + (*PS_GetFontPrivateFunc)( FT_Face face, + PS_PrivateRec* afont_private ); + + typedef FT_Long + (*PS_GetFontValueFunc)( FT_Face face, + PS_Dict_Keys key, + FT_UInt idx, + void *value, + FT_Long value_len ); + + + FT_DEFINE_SERVICE( PsInfo ) + { + PS_GetFontInfoFunc ps_get_font_info; + PS_GetFontExtraFunc ps_get_font_extra; + PS_HasGlyphNamesFunc ps_has_glyph_names; + PS_GetFontPrivateFunc ps_get_font_private; + PS_GetFontValueFunc ps_get_font_value; + }; + + +#define FT_DEFINE_SERVICE_PSINFOREC( class_, \ + get_font_info_, \ + ps_get_font_extra_, \ + has_glyph_names_, \ + get_font_private_, \ + get_font_value_ ) \ + static const FT_Service_PsInfoRec class_ = \ + { \ + get_font_info_, ps_get_font_extra_, has_glyph_names_, \ + get_font_private_, get_font_value_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVPSINFO_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svsfnt.h b/non-source/foreign/freetype2/freetype/internal/services/svsfnt.h new file mode 100644 index 000000000..9e0f4ff20 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svsfnt.h @@ -0,0 +1,88 @@ +/**************************************************************************** + * + * svsfnt.h + * + * The FreeType SFNT table loading service (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVSFNT_H_ +#define SVSFNT_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/tttables.h> + + +FT_BEGIN_HEADER + + + /* + * SFNT table loading service. + */ + +#define FT_SERVICE_ID_SFNT_TABLE "sfnt-table" + + + /* + * Used to implement FT_Load_Sfnt_Table(). + */ + typedef FT_Error + (*FT_SFNT_TableLoadFunc)( FT_Face face, + FT_ULong tag, + FT_Long offset, + FT_Byte* buffer, + FT_ULong* length ); + + /* + * Used to implement FT_Get_Sfnt_Table(). + */ + typedef void* + (*FT_SFNT_TableGetFunc)( FT_Face face, + FT_Sfnt_Tag tag ); + + + /* + * Used to implement FT_Sfnt_Table_Info(). + */ + typedef FT_Error + (*FT_SFNT_TableInfoFunc)( FT_Face face, + FT_UInt idx, + FT_ULong *tag, + FT_ULong *offset, + FT_ULong *length ); + + + FT_DEFINE_SERVICE( SFNT_Table ) + { + FT_SFNT_TableLoadFunc load_table; + FT_SFNT_TableGetFunc get_table; + FT_SFNT_TableInfoFunc table_info; + }; + + +#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \ + static const FT_Service_SFNT_TableRec class_ = \ + { \ + load_, get_, info_ \ + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVSFNT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svttcmap.h b/non-source/foreign/freetype2/freetype/internal/services/svttcmap.h new file mode 100644 index 000000000..250886bcc --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svttcmap.h @@ -0,0 +1,90 @@ +/**************************************************************************** + * + * svttcmap.h + * + * The FreeType TrueType/sfnt cmap extra information service. + * + * Copyright (C) 2003-2024 by + * Masatake YAMATO, Redhat K.K., + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +/* Development of this service is support of + Information-technology Promotion Agency, Japan. */ + +#ifndef SVTTCMAP_H_ +#define SVTTCMAP_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/tttables.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_TT_CMAP "tt-cmaps" + + + /************************************************************************** + * + * @struct: + * TT_CMapInfo + * + * @description: + * A structure used to store TrueType/sfnt specific cmap information + * which is not covered by the generic @FT_CharMap structure. This + * structure can be accessed with the @FT_Get_TT_CMap_Info function. + * + * @fields: + * language :: + * The language ID used in Mac fonts. Definitions of values are in + * `ttnameid.h`. + * + * format :: + * The cmap format. OpenType 1.6 defines the formats 0 (byte encoding + * table), 2~(high-byte mapping through table), 4~(segment mapping to + * delta values), 6~(trimmed table mapping), 8~(mixed 16-bit and 32-bit + * coverage), 10~(trimmed array), 12~(segmented coverage), 13~(last + * resort font), and 14 (Unicode Variation Sequences). + */ + typedef struct TT_CMapInfo_ + { + FT_ULong language; + FT_Long format; + + } TT_CMapInfo; + + + typedef FT_Error + (*TT_CMap_Info_GetFunc)( FT_CharMap charmap, + TT_CMapInfo *cmap_info ); + + + FT_DEFINE_SERVICE( TTCMaps ) + { + TT_CMap_Info_GetFunc get_cmap_info; + }; + + +#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \ + static const FT_Service_TTCMapsRec class_ = \ + { \ + get_cmap_info_ \ + }; + + /* */ + + +FT_END_HEADER + +#endif /* SVTTCMAP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svtteng.h b/non-source/foreign/freetype2/freetype/internal/services/svtteng.h new file mode 100644 index 000000000..14967529a --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svtteng.h @@ -0,0 +1,53 @@ +/**************************************************************************** + * + * svtteng.h + * + * The FreeType TrueType engine query service (specification). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVTTENG_H_ +#define SVTTENG_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/ftmodapi.h> + + +FT_BEGIN_HEADER + + + /* + * SFNT table loading service. + */ + +#define FT_SERVICE_ID_TRUETYPE_ENGINE "truetype-engine" + + /* + * Used to implement FT_Get_TrueType_Engine_Type + */ + + FT_DEFINE_SERVICE( TrueTypeEngine ) + { + FT_TrueTypeEngineType engine_type; + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVTTENG_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svttglyf.h b/non-source/foreign/freetype2/freetype/internal/services/svttglyf.h new file mode 100644 index 000000000..f190b3985 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svttglyf.h @@ -0,0 +1,56 @@ +/**************************************************************************** + * + * svttglyf.h + * + * The FreeType TrueType glyph service. + * + * Copyright (C) 2007-2024 by + * David Turner. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +#ifndef SVTTGLYF_H_ +#define SVTTGLYF_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/tttables.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_TT_GLYF "tt-glyf" + + + typedef FT_ULong + (*TT_Glyf_GetLocationFunc)( FT_Face face, + FT_UInt gindex, + FT_ULong *psize ); + + FT_DEFINE_SERVICE( TTGlyf ) + { + TT_Glyf_GetLocationFunc get_location; + }; + + +#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \ + static const FT_Service_TTGlyfRec class_ = \ + { \ + get_location_ \ + }; + + /* */ + + +FT_END_HEADER + +#endif /* SVTTGLYF_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/services/svwinfnt.h b/non-source/foreign/freetype2/freetype/internal/services/svwinfnt.h new file mode 100644 index 000000000..49f3fb7f7 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/services/svwinfnt.h @@ -0,0 +1,50 @@ +/**************************************************************************** + * + * svwinfnt.h + * + * The FreeType Windows FNT/FONT service (specification). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVWINFNT_H_ +#define SVWINFNT_H_ + +#include <freetype/internal/ftserv.h> +#include <freetype/ftwinfnt.h> + + +FT_BEGIN_HEADER + + +#define FT_SERVICE_ID_WINFNT "winfonts" + + typedef FT_Error + (*FT_WinFnt_GetHeaderFunc)( FT_Face face, + FT_WinFNT_HeaderRec *aheader ); + + + FT_DEFINE_SERVICE( WinFnt ) + { + FT_WinFnt_GetHeaderFunc get_header; + }; + + /* */ + + +FT_END_HEADER + + +#endif /* SVWINFNT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/sfnt.h b/non-source/foreign/freetype2/freetype/internal/sfnt.h new file mode 100644 index 000000000..35e4e73af --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/sfnt.h @@ -0,0 +1,1099 @@ +/**************************************************************************** + * + * sfnt.h + * + * High-level 'sfnt' driver interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SFNT_H_ +#define SFNT_H_ + + +#include <freetype/internal/ftdrv.h> +#include <freetype/internal/tttypes.h> +#include <freetype/internal/wofftypes.h> + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @functype: + * TT_Init_Face_Func + * + * @description: + * First part of the SFNT face object initialization. This finds the + * face in a SFNT file or collection, and load its format tag in + * face->format_tag. + * + * @input: + * stream :: + * The input stream. + * + * face :: + * A handle to the target face object. + * + * face_index :: + * The index of the TrueType font, if we are opening a collection, in + * bits 0-15. The numbered instance index~+~1 of a GX (sub)font, if + * applicable, in bits 16-30. + * + * num_params :: + * The number of additional parameters. + * + * params :: + * Optional additional parameters. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * The stream cursor must be at the font file's origin. + * + * This function recognizes fonts embedded in a 'TrueType collection'. + * + * Once the format tag has been validated by the font driver, it should + * then call the TT_Load_Face_Func() callback to read the rest of the + * SFNT tables in the object. + */ + typedef FT_Error + (*TT_Init_Face_Func)( FT_Stream stream, + TT_Face face, + FT_Int face_index, + FT_Int num_params, + FT_Parameter* params ); + + + /************************************************************************** + * + * @functype: + * TT_Load_Face_Func + * + * @description: + * Second part of the SFNT face object initialization. This loads the + * common SFNT tables (head, OS/2, maxp, metrics, etc.) in the face + * object. + * + * @input: + * stream :: + * The input stream. + * + * face :: + * A handle to the target face object. + * + * face_index :: + * The index of the TrueType font, if we are opening a collection, in + * bits 0-15. The numbered instance index~+~1 of a GX (sub)font, if + * applicable, in bits 16-30. + * + * num_params :: + * The number of additional parameters. + * + * params :: + * Optional additional parameters. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function must be called after TT_Init_Face_Func(). + */ + typedef FT_Error + (*TT_Load_Face_Func)( FT_Stream stream, + TT_Face face, + FT_Int face_index, + FT_Int num_params, + FT_Parameter* params ); + + + /************************************************************************** + * + * @functype: + * TT_Done_Face_Func + * + * @description: + * A callback used to delete the common SFNT data from a face. + * + * @input: + * face :: + * A handle to the target face object. + * + * @note: + * This function does NOT destroy the face object. + */ + typedef void + (*TT_Done_Face_Func)( TT_Face face ); + + + /************************************************************************** + * + * @functype: + * TT_Load_Any_Func + * + * @description: + * Load any font table into client memory. + * + * @input: + * face :: + * The face object to look for. + * + * tag :: + * The tag of table to load. Use the value 0 if you want to access the + * whole font file, else set this parameter to a valid TrueType table + * tag that you can forge with the MAKE_TT_TAG macro. + * + * offset :: + * The starting offset in the table (or the file if tag == 0). + * + * length :: + * The address of the decision variable: + * + * If `length == NULL`: Loads the whole table. Returns an error if + * 'offset' == 0! + * + * If `*length == 0`: Exits immediately; returning the length of the + * given table or of the font file, depending on the value of 'tag'. + * + * If `*length != 0`: Loads the next 'length' bytes of table or font, + * starting at offset 'offset' (in table or font too). + * + * @output: + * buffer :: + * The address of target buffer. + * + * @return: + * TrueType error code. 0 means success. + */ + typedef FT_Error + (*TT_Load_Any_Func)( TT_Face face, + FT_ULong tag, + FT_Long offset, + FT_Byte *buffer, + FT_ULong* length ); + + + /************************************************************************** + * + * @functype: + * TT_Find_SBit_Image_Func + * + * @description: + * Check whether an embedded bitmap (an 'sbit') exists for a given glyph, + * at a given strike. + * + * @input: + * face :: + * The target face object. + * + * glyph_index :: + * The glyph index. + * + * strike_index :: + * The current strike index. + * + * @output: + * arange :: + * The SBit range containing the glyph index. + * + * astrike :: + * The SBit strike containing the glyph index. + * + * aglyph_offset :: + * The offset of the glyph data in 'EBDT' table. + * + * @return: + * FreeType error code. 0 means success. Returns + * SFNT_Err_Invalid_Argument if no sbit exists for the requested glyph. + */ + typedef FT_Error + (*TT_Find_SBit_Image_Func)( TT_Face face, + FT_UInt glyph_index, + FT_ULong strike_index, + TT_SBit_Range *arange, + TT_SBit_Strike *astrike, + FT_ULong *aglyph_offset ); + + + /************************************************************************** + * + * @functype: + * TT_Load_SBit_Metrics_Func + * + * @description: + * Get the big metrics for a given embedded bitmap. + * + * @input: + * stream :: + * The input stream. + * + * range :: + * The SBit range containing the glyph. + * + * @output: + * big_metrics :: + * A big SBit metrics structure for the glyph. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * The stream cursor must be positioned at the glyph's offset within the + * 'EBDT' table before the call. + * + * If the image format uses variable metrics, the stream cursor is + * positioned just after the metrics header in the 'EBDT' table on + * function exit. + */ + typedef FT_Error + (*TT_Load_SBit_Metrics_Func)( FT_Stream stream, + TT_SBit_Range range, + TT_SBit_Metrics metrics ); + + + /************************************************************************** + * + * @functype: + * TT_Load_SBit_Image_Func + * + * @description: + * Load a given glyph sbit image from the font resource. This also + * returns its metrics. + * + * @input: + * face :: + * The target face object. + * + * strike_index :: + * The strike index. + * + * glyph_index :: + * The current glyph index. + * + * load_flags :: + * The current load flags. + * + * stream :: + * The input stream. + * + * @output: + * amap :: + * The target pixmap. + * + * ametrics :: + * A big sbit metrics structure for the glyph image. + * + * @return: + * FreeType error code. 0 means success. Returns an error if no glyph + * sbit exists for the index. + * + * @note: + * The `map.buffer` field is always freed before the glyph is loaded. + */ + typedef FT_Error + (*TT_Load_SBit_Image_Func)( TT_Face face, + FT_ULong strike_index, + FT_UInt glyph_index, + FT_UInt load_flags, + FT_Stream stream, + FT_Bitmap *amap, + TT_SBit_MetricsRec *ametrics ); + + + /************************************************************************** + * + * @functype: + * TT_Load_Svg_Doc_Func + * + * @description: + * Scan the SVG document list to find the document containing the glyph + * that has the ID 'glyph*XXX*', where *XXX* is the value of + * `glyph_index` as a decimal integer. + * + * @inout: + * glyph :: + * The glyph slot from which pointers to the SVG document list is to be + * grabbed. The results are stored back in the slot. + * + * @input: + * glyph_index :: + * The index of the glyph that is to be looked up. + * + * @return: + * FreeType error code. 0 means success. + */ + typedef FT_Error + (*TT_Load_Svg_Doc_Func)( FT_GlyphSlot glyph, + FT_UInt glyph_index ); + + + /************************************************************************** + * + * @functype: + * TT_Set_SBit_Strike_Func + * + * @description: + * Select an sbit strike for a given size request. + * + * @input: + * face :: + * The target face object. + * + * req :: + * The size request. + * + * @output: + * astrike_index :: + * The index of the sbit strike. + * + * @return: + * FreeType error code. 0 means success. Returns an error if no sbit + * strike exists for the selected ppem values. + */ + typedef FT_Error + (*TT_Set_SBit_Strike_Func)( TT_Face face, + FT_Size_Request req, + FT_ULong* astrike_index ); + + + /************************************************************************** + * + * @functype: + * TT_Load_Strike_Metrics_Func + * + * @description: + * Load the metrics of a given strike. + * + * @input: + * face :: + * The target face object. + * + * strike_index :: + * The strike index. + * + * @output: + * metrics :: + * the metrics of the strike. + * + * @return: + * FreeType error code. 0 means success. Returns an error if no such + * sbit strike exists. + */ + typedef FT_Error + (*TT_Load_Strike_Metrics_Func)( TT_Face face, + FT_ULong strike_index, + FT_Size_Metrics* metrics ); + + + /************************************************************************** + * + * @functype: + * TT_Get_PS_Name_Func + * + * @description: + * Get the PostScript glyph name of a glyph. + * + * @input: + * idx :: + * The glyph index. + * + * PSname :: + * The address of a string pointer. Will be `NULL` in case of error, + * otherwise it is a pointer to the glyph name. + * + * You must not modify the returned string! + * + * @output: + * FreeType error code. 0 means success. + */ + typedef FT_Error + (*TT_Get_PS_Name_Func)( TT_Face face, + FT_UInt idx, + FT_String** PSname ); + + + /************************************************************************** + * + * @functype: + * TT_Load_Metrics_Func + * + * @description: + * Load a metrics table, which is a table with a horizontal and a + * vertical version. + * + * @input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * vertical :: + * A boolean flag. If set, load the vertical one. + * + * @return: + * FreeType error code. 0 means success. + */ + typedef FT_Error + (*TT_Load_Metrics_Func)( TT_Face face, + FT_Stream stream, + FT_Bool vertical ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Metrics_Func + * + * @description: + * Load the horizontal or vertical header in a face object. + * + * @input: + * face :: + * A handle to the target face object. + * + * vertical :: + * A boolean flag. If set, load vertical metrics. + * + * gindex :: + * The glyph index. + * + * @output: + * abearing :: + * The horizontal (or vertical) bearing. Set to zero in case of error. + * + * aadvance :: + * The horizontal (or vertical) advance. Set to zero in case of error. + */ + typedef void + (*TT_Get_Metrics_Func)( TT_Face face, + FT_Bool vertical, + FT_UInt gindex, + FT_Short* abearing, + FT_UShort* aadvance ); + + + /************************************************************************** + * + * @functype: + * TT_Set_Palette_Func + * + * @description: + * Load the colors into `face->palette` for a given palette index. + * + * @input: + * face :: + * The target face object. + * + * idx :: + * The palette index. + * + * @return: + * FreeType error code. 0 means success. + */ + typedef FT_Error + (*TT_Set_Palette_Func)( TT_Face face, + FT_UInt idx ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Colr_Layer_Func + * + * @description: + * Iteratively get the color layer data of a given glyph index. + * + * @input: + * face :: + * The target face object. + * + * base_glyph :: + * The glyph index the colored glyph layers are associated with. + * + * @inout: + * iterator :: + * An @FT_LayerIterator object. For the first call you should set + * `iterator->p` to `NULL`. For all following calls, simply use the + * same object again. + * + * @output: + * aglyph_index :: + * The glyph index of the current layer. + * + * acolor_index :: + * The color index into the font face's color palette of the current + * layer. The value 0xFFFF is special; it doesn't reference a palette + * entry but indicates that the text foreground color should be used + * instead (to be set up by the application outside of FreeType). + * + * @return: + * Value~1 if everything is OK. If there are no more layers (or if there + * are no layers at all), value~0 gets returned. In case of an error, + * value~0 is returned also. + */ + typedef FT_Bool + (*TT_Get_Colr_Layer_Func)( TT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Color_Glyph_Paint_Func + * + * @description: + * Find the root @FT_OpaquePaint object for a given glyph ID. + * + * @input: + * face :: + * The target face object. + * + * base_glyph :: + * The glyph index the colored glyph layers are associated with. + * + * @output: + * paint :: + * The root @FT_OpaquePaint object. + * + * @return: + * Value~1 if everything is OK. If no color glyph is found, or the root + * paint could not be retrieved, value~0 gets returned. In case of an + * error, value~0 is returned also. + */ + typedef FT_Bool + ( *TT_Get_Color_Glyph_Paint_Func )( TT_Face face, + FT_UInt base_glyph, + FT_Color_Root_Transform root_transform, + FT_OpaquePaint *paint ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Color_Glyph_ClipBox_Func + * + * @description: + * Search for a 'COLR' v1 clip box for the specified `base_glyph` and + * fill the `clip_box` parameter with the 'COLR' v1 'ClipBox' information + * if one is found. + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index for which to retrieve the clip box. + * + * @output: + * clip_box :: + * The clip box for the requested `base_glyph` if one is found. The + * clip box is computed taking scale and transformations configured on + * the @FT_Face into account. @FT_ClipBox contains @FT_Vector values + * in 26.6 format. + * + * @note: + * To retrieve the clip box in font units, reset scale to units-per-em + * and remove transforms configured using @FT_Set_Transform. + * + * @return: + * Value~1 if a ClipBox is found. If no clip box is found or an + * error occured, value~0 is returned. + */ + typedef FT_Bool + ( *TT_Get_Color_Glyph_ClipBox_Func )( TT_Face face, + FT_UInt base_glyph, + FT_ClipBox* clip_box ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Paint_Layers_Func + * + * @description: + * Access the layers of a `PaintColrLayers` table. + * + * @input: + * face :: + * The target face object. + * + * @inout: + * iterator :: + * The @FT_LayerIterator from an @FT_PaintColrLayers object, for which + * the layers are to be retrieved. The internal state of the iterator + * is incremented after one call to this function for retrieving one + * layer. + * + * @output: + * paint :: + * The root @FT_OpaquePaint object referencing the actual paint table. + * + * @return: + * Value~1 if everything is OK. Value~0 gets returned when the paint + * object can not be retrieved or any other error occurs. + */ + typedef FT_Bool + ( *TT_Get_Paint_Layers_Func )( TT_Face face, + FT_LayerIterator* iterator, + FT_OpaquePaint *paint ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Colorline_Stops_Func + * + * @description: + * Get the gradient and solid fill information for a given glyph. + * + * @input: + * face :: + * The target face object. + * + * @inout: + * iterator :: + * An @FT_ColorStopIterator object. For the first call you should set + * `iterator->p` to `NULL`. For all following calls, simply use the + * same object again. + * + * @output: + * color_stop :: + * Color index and alpha value for the retrieved color stop. + * + * @return: + * Value~1 if everything is OK. If there are no more color stops, + * value~0 gets returned. In case of an error, value~0 is returned + * also. + */ + typedef FT_Bool + ( *TT_Get_Colorline_Stops_Func )( TT_Face face, + FT_ColorStop *color_stop, + FT_ColorStopIterator* iterator ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Paint_Func + * + * @description: + * Get the paint details for a given @FT_OpaquePaint object. + * + * @input: + * face :: + * The target face object. + * + * opaque_paint :: + * The @FT_OpaquePaint object. + * + * @output: + * paint :: + * An @FT_COLR_Paint object holding the details on `opaque_paint`. + * + * @return: + * Value~1 if everything is OK. Value~0 if no details can be found for + * this paint or any other error occured. + */ + typedef FT_Bool + ( *TT_Get_Paint_Func )( TT_Face face, + FT_OpaquePaint opaque_paint, + FT_COLR_Paint *paint ); + + + /************************************************************************** + * + * @functype: + * TT_Blend_Colr_Func + * + * @description: + * Blend the bitmap in `new_glyph` into `base_glyph` using the color + * specified by `color_index`. If `color_index` is 0xFFFF, use + * `face->foreground_color` if `face->have_foreground_color` is set. + * Otherwise check `face->palette_data.palette_flags`: If present and + * @FT_PALETTE_FOR_DARK_BACKGROUND is set, use BGRA value 0xFFFFFFFF + * (white opaque). Otherwise use BGRA value 0x000000FF (black opaque). + * + * @input: + * face :: + * The target face object. + * + * color_index :: + * Color index from the COLR table. + * + * base_glyph :: + * Slot for bitmap to be merged into. The underlying bitmap may get + * reallocated. + * + * new_glyph :: + * Slot to be incooperated into `base_glyph`. + * + * @return: + * FreeType error code. 0 means success. Returns an error if + * color_index is invalid or reallocation fails. + */ + typedef FT_Error + (*TT_Blend_Colr_Func)( TT_Face face, + FT_UInt color_index, + FT_GlyphSlot base_glyph, + FT_GlyphSlot new_glyph ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Name_Func + * + * @description: + * From the 'name' table, return a given ENGLISH name record in ASCII. + * + * @input: + * face :: + * A handle to the source face object. + * + * nameid :: + * The name id of the name record to return. + * + * @inout: + * name :: + * The address of an allocated string pointer. `NULL` if no name is + * present. + * + * @return: + * FreeType error code. 0 means success. + */ + typedef FT_Error + (*TT_Get_Name_Func)( TT_Face face, + FT_UShort nameid, + FT_String** name ); + + + /************************************************************************** + * + * @functype: + * TT_Get_Name_ID_Func + * + * @description: + * Search whether an ENGLISH version for a given name ID is in the 'name' + * table. + * + * @input: + * face :: + * A handle to the source face object. + * + * nameid :: + * The name id of the name record to return. + * + * @output: + * win :: + * If non-negative, an index into the 'name' table with the + * corresponding (3,1) or (3,0) Windows entry. + * + * apple :: + * If non-negative, an index into the 'name' table with the + * corresponding (1,0) Apple entry. + * + * @return: + * 1 if there is either a win or apple entry (or both), 0 otheriwse. + */ + typedef FT_Bool + (*TT_Get_Name_ID_Func)( TT_Face face, + FT_UShort nameid, + FT_Int *win, + FT_Int *apple ); + + + /************************************************************************** + * + * @functype: + * TT_Load_Table_Func + * + * @description: + * Load a given TrueType table. + * + * @input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * The function uses `face->goto_table` to seek the stream to the start + * of the table, except while loading the font directory. + */ + typedef FT_Error + (*TT_Load_Table_Func)( TT_Face face, + FT_Stream stream ); + + + /************************************************************************** + * + * @functype: + * TT_Free_Table_Func + * + * @description: + * Free a given TrueType table. + * + * @input: + * face :: + * A handle to the target face object. + */ + typedef void + (*TT_Free_Table_Func)( TT_Face face ); + + + /* + * @functype: + * TT_Face_GetKerningFunc + * + * @description: + * Return the horizontal kerning value between two glyphs. + * + * @input: + * face :: + * A handle to the source face object. + * + * left_glyph :: + * The left glyph index. + * + * right_glyph :: + * The right glyph index. + * + * @return: + * The kerning value in font units. + */ + typedef FT_Int + (*TT_Face_GetKerningFunc)( TT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph ); + + + /************************************************************************** + * + * @struct: + * SFNT_Interface + * + * @description: + * This structure holds pointers to the functions used to load and free + * the basic tables that are required in a 'sfnt' font file. + * + * @fields: + * Check the various xxx_Func() descriptions for details. + */ + typedef struct SFNT_Interface_ + { + TT_Loader_GotoTableFunc goto_table; + + TT_Init_Face_Func init_face; + TT_Load_Face_Func load_face; + TT_Done_Face_Func done_face; + FT_Module_Requester get_interface; + + TT_Load_Any_Func load_any; + + /* these functions are called by `load_face' but they can also */ + /* be called from external modules, if there is a need to do so */ + TT_Load_Table_Func load_head; + TT_Load_Metrics_Func load_hhea; + TT_Load_Table_Func load_cmap; + TT_Load_Table_Func load_maxp; + TT_Load_Table_Func load_os2; + TT_Load_Table_Func load_post; + + TT_Load_Table_Func load_name; + TT_Free_Table_Func free_name; + + /* this field was called `load_kerning' up to version 2.1.10 */ + TT_Load_Table_Func load_kern; + + TT_Load_Table_Func load_gpos; + TT_Load_Table_Func load_gasp; + TT_Load_Table_Func load_pclt; + + /* see `ttload.h'; this field was called `load_bitmap_header' up to */ + /* version 2.1.10 */ + TT_Load_Table_Func load_bhed; + + TT_Load_SBit_Image_Func load_sbit_image; + + /* see `ttpost.h' */ + TT_Get_PS_Name_Func get_psname; + TT_Free_Table_Func free_psnames; + + /* starting here, the structure differs from version 2.1.7 */ + + /* this field was introduced in version 2.1.8, named `get_psname' */ + TT_Face_GetKerningFunc get_kerning; + + /* new elements introduced after version 2.1.10 */ + + TT_Face_GetKerningFunc get_gpos_kerning; + + /* load the font directory, i.e., the offset table and */ + /* the table directory */ + TT_Load_Table_Func load_font_dir; + TT_Load_Metrics_Func load_hmtx; + + TT_Load_Table_Func load_eblc; + TT_Free_Table_Func free_eblc; + + TT_Set_SBit_Strike_Func set_sbit_strike; + TT_Load_Strike_Metrics_Func load_strike_metrics; + + TT_Load_Table_Func load_cpal; + TT_Load_Table_Func load_colr; + TT_Free_Table_Func free_cpal; + TT_Free_Table_Func free_colr; + TT_Set_Palette_Func set_palette; + TT_Get_Colr_Layer_Func get_colr_layer; + TT_Get_Color_Glyph_Paint_Func get_colr_glyph_paint; + TT_Get_Color_Glyph_ClipBox_Func get_color_glyph_clipbox; + TT_Get_Paint_Layers_Func get_paint_layers; + TT_Get_Colorline_Stops_Func get_colorline_stops; + TT_Get_Paint_Func get_paint; + TT_Blend_Colr_Func colr_blend; + + TT_Get_Metrics_Func get_metrics; + + TT_Get_Name_Func get_name; + TT_Get_Name_ID_Func get_name_id; + + /* OpenType SVG Support */ + TT_Load_Table_Func load_svg; + TT_Free_Table_Func free_svg; + TT_Load_Svg_Doc_Func load_svg_doc; + + } SFNT_Interface; + + + /* transitional */ + typedef SFNT_Interface* SFNT_Service; + + +#define FT_DEFINE_SFNT_INTERFACE( \ + class_, \ + goto_table_, \ + init_face_, \ + load_face_, \ + done_face_, \ + get_interface_, \ + load_any_, \ + load_head_, \ + load_hhea_, \ + load_cmap_, \ + load_maxp_, \ + load_os2_, \ + load_post_, \ + load_name_, \ + free_name_, \ + load_kern_, \ + load_gpos_, \ + load_gasp_, \ + load_pclt_, \ + load_bhed_, \ + load_sbit_image_, \ + get_psname_, \ + free_psnames_, \ + get_kerning_, \ + get_gpos_kerning_, \ + load_font_dir_, \ + load_hmtx_, \ + load_eblc_, \ + free_eblc_, \ + set_sbit_strike_, \ + load_strike_metrics_, \ + load_cpal_, \ + load_colr_, \ + free_cpal_, \ + free_colr_, \ + set_palette_, \ + get_colr_layer_, \ + get_colr_glyph_paint_, \ + get_color_glyph_clipbox, \ + get_paint_layers_, \ + get_colorline_stops_, \ + get_paint_, \ + colr_blend_, \ + get_metrics_, \ + get_name_, \ + get_name_id_, \ + load_svg_, \ + free_svg_, \ + load_svg_doc_ ) \ + static const SFNT_Interface class_ = \ + { \ + goto_table_, \ + init_face_, \ + load_face_, \ + done_face_, \ + get_interface_, \ + load_any_, \ + load_head_, \ + load_hhea_, \ + load_cmap_, \ + load_maxp_, \ + load_os2_, \ + load_post_, \ + load_name_, \ + free_name_, \ + load_kern_, \ + load_gpos_, \ + load_gasp_, \ + load_pclt_, \ + load_bhed_, \ + load_sbit_image_, \ + get_psname_, \ + free_psnames_, \ + get_kerning_, \ + get_gpos_kerning_, \ + load_font_dir_, \ + load_hmtx_, \ + load_eblc_, \ + free_eblc_, \ + set_sbit_strike_, \ + load_strike_metrics_, \ + load_cpal_, \ + load_colr_, \ + free_cpal_, \ + free_colr_, \ + set_palette_, \ + get_colr_layer_, \ + get_colr_glyph_paint_, \ + get_color_glyph_clipbox, \ + get_paint_layers_, \ + get_colorline_stops_, \ + get_paint_, \ + colr_blend_, \ + get_metrics_, \ + get_name_, \ + get_name_id_, \ + load_svg_, \ + free_svg_, \ + load_svg_doc_ \ + }; + + +FT_END_HEADER + +#endif /* SFNT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/svginterface.h b/non-source/foreign/freetype2/freetype/internal/svginterface.h new file mode 100644 index 000000000..68c99efb1 --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/svginterface.h @@ -0,0 +1,46 @@ +/**************************************************************************** + * + * svginterface.h + * + * Interface of ot-svg module (specification only). + * + * Copyright (C) 2022-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SVGINTERFACE_H_ +#define SVGINTERFACE_H_ + +#include <ft2build.h> +#include <freetype/otsvg.h> + + +FT_BEGIN_HEADER + + typedef FT_Error + (*Preset_Bitmap_Func)( FT_Module module, + FT_GlyphSlot slot, + FT_Bool cache ); + + typedef struct SVG_Interface_ + { + Preset_Bitmap_Func preset_slot; + + } SVG_Interface; + + typedef SVG_Interface* SVG_Service; + +FT_END_HEADER + +#endif /* SVGINTERFACE_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/t1types.h b/non-source/foreign/freetype2/freetype/internal/t1types.h new file mode 100644 index 000000000..1821ae5cc --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/t1types.h @@ -0,0 +1,307 @@ +/**************************************************************************** + * + * t1types.h + * + * Basic Type1/Type2 type definitions and interface (specification + * only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef T1TYPES_H_ +#define T1TYPES_H_ + + +#include <freetype/ftmm.h> +#include <freetype/internal/pshints.h> +#include <freetype/internal/ftserv.h> +#include <freetype/internal/fthash.h> +#include <freetype/internal/services/svpscmap.h> + + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** REQUIRED TYPE1/TYPE2 TABLES DEFINITIONS ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * T1_EncodingRec + * + * @description: + * A structure modeling a custom encoding. + * + * @fields: + * num_chars :: + * The number of character codes in the encoding. Usually 256. + * + * code_first :: + * The lowest valid character code in the encoding. + * + * code_last :: + * The highest valid character code in the encoding + 1. When equal to + * code_first there are no valid character codes. + * + * char_index :: + * An array of corresponding glyph indices. + * + * char_name :: + * An array of corresponding glyph names. + */ + typedef struct T1_EncodingRecRec_ + { + FT_Int num_chars; + FT_Int code_first; + FT_Int code_last; + + FT_UShort* char_index; + const FT_String** char_name; + + } T1_EncodingRec, *T1_Encoding; + + + /* used to hold extra data of PS_FontInfoRec that + * cannot be stored in the publicly defined structure. + * + * Note these can't be blended with multiple-masters. + */ + typedef struct PS_FontExtraRec_ + { + FT_UShort fs_type; + + } PS_FontExtraRec; + + + typedef struct T1_FontRec_ + { + PS_FontInfoRec font_info; /* font info dictionary */ + PS_FontExtraRec font_extra; /* font info extra fields */ + PS_PrivateRec private_dict; /* private dictionary */ + FT_String* font_name; /* top-level dictionary */ + + T1_EncodingType encoding_type; + T1_EncodingRec encoding; + + FT_Byte* subrs_block; + FT_Byte* charstrings_block; + FT_Byte* glyph_names_block; + + FT_Int num_subrs; + FT_Byte** subrs; + FT_UInt* subrs_len; + FT_Hash subrs_hash; + + FT_Int num_glyphs; + FT_String** glyph_names; /* array of glyph names */ + FT_Byte** charstrings; /* array of glyph charstrings */ + FT_UInt* charstrings_len; + + FT_Byte paint_type; + FT_Byte font_type; + FT_Matrix font_matrix; + FT_Vector font_offset; + FT_BBox font_bbox; + FT_Long font_id; + + FT_Fixed stroke_width; + + } T1_FontRec, *T1_Font; + + + typedef struct CID_SubrsRec_ + { + FT_Int num_subrs; + FT_Byte** code; + + } CID_SubrsRec, *CID_Subrs; + + + /* this structure is used to store the BlendDesignMap entry for an axis */ + typedef struct PS_DesignMap_ + { + FT_Byte num_points; + FT_Long* design_points; + FT_Fixed* blend_points; + + } PS_DesignMapRec, *PS_DesignMap; + + /* backward compatible definition */ + typedef PS_DesignMapRec T1_DesignMap; + + + typedef struct PS_BlendRec_ + { + FT_UInt num_designs; + FT_UInt num_axis; + + FT_String* axis_names[T1_MAX_MM_AXIS]; + FT_Fixed* design_pos[T1_MAX_MM_DESIGNS]; + PS_DesignMapRec design_map[T1_MAX_MM_AXIS]; + + FT_Fixed* weight_vector; + FT_Fixed* default_weight_vector; + + PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1]; + PS_Private privates [T1_MAX_MM_DESIGNS + 1]; + + FT_ULong blend_bitflags; + + FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1]; + + /* since 2.3.0 */ + + /* undocumented, optional: the default design instance; */ + /* corresponds to default_weight_vector -- */ + /* num_default_design_vector == 0 means it is not present */ + /* in the font and associated metrics files */ + FT_UInt default_design_vector[T1_MAX_MM_DESIGNS]; + FT_UInt num_default_design_vector; + + } PS_BlendRec, *PS_Blend; + + + /* backward compatible definition */ + typedef PS_BlendRec T1_Blend; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** AFM FONT INFORMATION STRUCTURES ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct AFM_TrackKernRec_ + { + FT_Int degree; + FT_Fixed min_ptsize; + FT_Fixed min_kern; + FT_Fixed max_ptsize; + FT_Fixed max_kern; + + } AFM_TrackKernRec, *AFM_TrackKern; + + typedef struct AFM_KernPairRec_ + { + FT_UInt index1; + FT_UInt index2; + FT_Int x; + FT_Int y; + + } AFM_KernPairRec, *AFM_KernPair; + + typedef struct AFM_FontInfoRec_ + { + FT_Bool IsCIDFont; + FT_BBox FontBBox; + FT_Fixed Ascender; /* optional, mind the zero */ + FT_Fixed Descender; /* optional, mind the zero */ + AFM_TrackKern TrackKerns; /* free if non-NULL */ + FT_UInt NumTrackKern; + AFM_KernPair KernPairs; /* free if non-NULL */ + FT_UInt NumKernPair; + + } AFM_FontInfoRec, *AFM_FontInfo; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** ORIGINAL T1_FACE CLASS DEFINITION ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + typedef struct T1_FaceRec_* T1_Face; + typedef struct CID_FaceRec_* CID_Face; + + + typedef struct T1_FaceRec_ + { + FT_FaceRec root; + T1_FontRec type1; + const void* psnames; + const void* psaux; + const void* afm_data; + FT_CharMapRec charmaprecs[2]; + FT_CharMap charmaps[2]; + + /* support for Multiple Masters fonts */ + PS_Blend blend; + + /* undocumented, optional: indices of subroutines that express */ + /* the NormalizeDesignVector and the ConvertDesignVector procedure, */ + /* respectively, as Type 2 charstrings; -1 if keywords not present */ + FT_Int ndv_idx; + FT_Int cdv_idx; + + /* undocumented, optional: has the same meaning as len_buildchar */ + /* for Type 2 fonts; manipulated by othersubrs 19, 24, and 25 */ + FT_UInt len_buildchar; + FT_Long* buildchar; + + /* since version 2.1 - interface to PostScript hinter */ + const void* pshinter; + + } T1_FaceRec; + + + typedef struct CID_FaceRec_ + { + FT_FaceRec root; + void* psnames; + void* psaux; + CID_FaceInfoRec cid; + PS_FontExtraRec font_extra; +#if 0 + void* afm_data; +#endif + CID_Subrs subrs; + + /* since version 2.1 - interface to PostScript hinter */ + void* pshinter; + + /* since version 2.1.8, but was originally positioned after `afm_data' */ + FT_Byte* binary_data; /* used if hex data has been converted */ + FT_Stream cid_stream; + + } CID_FaceRec; + + +FT_END_HEADER + +#endif /* T1TYPES_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/tttypes.h b/non-source/foreign/freetype2/freetype/internal/tttypes.h new file mode 100644 index 000000000..7053e656a --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/tttypes.h @@ -0,0 +1,1747 @@ +/**************************************************************************** + * + * tttypes.h + * + * Basic SFNT/TrueType type definitions and interface (specification + * only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTTYPES_H_ +#define TTTYPES_H_ + + +#include <freetype/tttables.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/ftcolor.h> +#include "freetype/fttypes.h" + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/ftmm.h> +#endif + + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** REQUIRED TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * TTC_HeaderRec + * + * @description: + * TrueType collection header. This table contains the offsets of the + * font headers of each distinct TrueType face in the file. + * + * @fields: + * tag :: + * Must be 'ttc~' to indicate a TrueType collection. + * + * version :: + * The version number. + * + * count :: + * The number of faces in the collection. The specification says this + * should be an unsigned long, but we use a signed long since we need + * the value -1 for specific purposes. + * + * offsets :: + * The offsets of the font headers, one per face. + */ + typedef struct TTC_HeaderRec_ + { + FT_ULong tag; + FT_Fixed version; + FT_Long count; + FT_ULong* offsets; + + } TTC_HeaderRec; + + + /************************************************************************** + * + * @struct: + * SFNT_HeaderRec + * + * @description: + * SFNT file format header. + * + * @fields: + * format_tag :: + * The font format tag. + * + * num_tables :: + * The number of tables in file. + * + * search_range :: + * Must be '16 * (max power of 2 <= num_tables)'. + * + * entry_selector :: + * Must be log2 of 'search_range / 16'. + * + * range_shift :: + * Must be 'num_tables * 16 - search_range'. + */ + typedef struct SFNT_HeaderRec_ + { + FT_ULong format_tag; + FT_UShort num_tables; + FT_UShort search_range; + FT_UShort entry_selector; + FT_UShort range_shift; + + FT_ULong offset; /* not in file */ + + } SFNT_HeaderRec, *SFNT_Header; + + + /************************************************************************** + * + * @struct: + * TT_TableRec + * + * @description: + * This structure describes a given table of a TrueType font. + * + * @fields: + * Tag :: + * A four-bytes tag describing the table. + * + * CheckSum :: + * The table checksum. This value can be ignored. + * + * Offset :: + * The offset of the table from the start of the TrueType font in its + * resource. + * + * Length :: + * The table length (in bytes). + */ + typedef struct TT_TableRec_ + { + FT_ULong Tag; /* table type */ + FT_ULong CheckSum; /* table checksum */ + FT_ULong Offset; /* table file offset */ + FT_ULong Length; /* table length */ + + } TT_TableRec, *TT_Table; + + + /************************************************************************** + * + * @struct: + * TT_LongMetricsRec + * + * @description: + * A structure modeling the long metrics of the 'hmtx' and 'vmtx' + * TrueType tables. The values are expressed in font units. + * + * @fields: + * advance :: + * The advance width or height for the glyph. + * + * bearing :: + * The left-side or top-side bearing for the glyph. + */ + typedef struct TT_LongMetricsRec_ + { + FT_UShort advance; + FT_Short bearing; + + } TT_LongMetricsRec, *TT_LongMetrics; + + + /************************************************************************** + * + * @type: + * TT_ShortMetrics + * + * @description: + * A simple type to model the short metrics of the 'hmtx' and 'vmtx' + * tables. + */ + typedef FT_Short TT_ShortMetrics; + + + /************************************************************************** + * + * @struct: + * TT_NameRec + * + * @description: + * A structure modeling TrueType name records. Name records are used to + * store important strings like family name, style name, copyright, + * etc. in _localized_ versions (i.e., language, encoding, etc). + * + * @fields: + * platformID :: + * The ID of the name's encoding platform. + * + * encodingID :: + * The platform-specific ID for the name's encoding. + * + * languageID :: + * The platform-specific ID for the name's language. + * + * nameID :: + * The ID specifying what kind of name this is. + * + * stringLength :: + * The length of the string in bytes. + * + * stringOffset :: + * The offset to the string in the 'name' table. + * + * string :: + * A pointer to the string's bytes. Note that these are usually UTF-16 + * encoded characters. + */ + typedef struct TT_NameRec_ + { + FT_UShort platformID; + FT_UShort encodingID; + FT_UShort languageID; + FT_UShort nameID; + FT_UShort stringLength; + FT_ULong stringOffset; + + /* this last field is not defined in the spec */ + /* but used by the FreeType engine */ + + FT_Byte* string; + + } TT_NameRec, *TT_Name; + + + /************************************************************************** + * + * @struct: + * TT_LangTagRec + * + * @description: + * A structure modeling language tag records in SFNT 'name' tables, + * introduced in OpenType version 1.6. + * + * @fields: + * stringLength :: + * The length of the string in bytes. + * + * stringOffset :: + * The offset to the string in the 'name' table. + * + * string :: + * A pointer to the string's bytes. Note that these are UTF-16BE + * encoded characters. + */ + typedef struct TT_LangTagRec_ + { + FT_UShort stringLength; + FT_ULong stringOffset; + + /* this last field is not defined in the spec */ + /* but used by the FreeType engine */ + + FT_Byte* string; + + } TT_LangTagRec, *TT_LangTag; + + + /************************************************************************** + * + * @struct: + * TT_NameTableRec + * + * @description: + * A structure modeling the TrueType name table. + * + * @fields: + * format :: + * The format of the name table. + * + * numNameRecords :: + * The number of names in table. + * + * storageOffset :: + * The offset of the name table in the 'name' TrueType table. + * + * names :: + * An array of name records. + * + * numLangTagRecords :: + * The number of language tags in table. + * + * langTags :: + * An array of language tag records. + * + * stream :: + * The file's input stream. + */ + typedef struct TT_NameTableRec_ + { + FT_UShort format; + FT_UInt numNameRecords; + FT_UInt storageOffset; + TT_NameRec* names; + FT_UInt numLangTagRecords; + TT_LangTagRec* langTags; + FT_Stream stream; + + } TT_NameTableRec, *TT_NameTable; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** OPTIONAL TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * TT_GaspRangeRec + * + * @description: + * A tiny structure used to model a gasp range according to the TrueType + * specification. + * + * @fields: + * maxPPEM :: + * The maximum ppem value to which `gaspFlag` applies. + * + * gaspFlag :: + * A flag describing the grid-fitting and anti-aliasing modes to be + * used. + */ + typedef struct TT_GaspRangeRec_ + { + FT_UShort maxPPEM; + FT_UShort gaspFlag; + + } TT_GaspRangeRec, *TT_GaspRange; + + +#define TT_GASP_GRIDFIT 0x01 +#define TT_GASP_DOGRAY 0x02 + + + /************************************************************************** + * + * @struct: + * TT_GaspRec + * + * @description: + * A structure modeling the TrueType 'gasp' table used to specify + * grid-fitting and anti-aliasing behaviour. + * + * @fields: + * version :: + * The version number. + * + * numRanges :: + * The number of gasp ranges in table. + * + * gaspRanges :: + * An array of gasp ranges. + */ + typedef struct TT_Gasp_ + { + FT_UShort version; + FT_UShort numRanges; + TT_GaspRange gaspRanges; + + } TT_GaspRec; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** EMBEDDED BITMAPS SUPPORT ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * TT_SBit_MetricsRec + * + * @description: + * A structure used to hold the big metrics of a given glyph bitmap in a + * TrueType or OpenType font. These are usually found in the 'EBDT' + * (Microsoft) or 'bloc' (Apple) table. + * + * @fields: + * height :: + * The glyph height in pixels. + * + * width :: + * The glyph width in pixels. + * + * horiBearingX :: + * The horizontal left bearing. + * + * horiBearingY :: + * The horizontal top bearing. + * + * horiAdvance :: + * The horizontal advance. + * + * vertBearingX :: + * The vertical left bearing. + * + * vertBearingY :: + * The vertical top bearing. + * + * vertAdvance :: + * The vertical advance. + */ + typedef struct TT_SBit_MetricsRec_ + { + FT_UShort height; + FT_UShort width; + + FT_Short horiBearingX; + FT_Short horiBearingY; + FT_UShort horiAdvance; + + FT_Short vertBearingX; + FT_Short vertBearingY; + FT_UShort vertAdvance; + + } TT_SBit_MetricsRec, *TT_SBit_Metrics; + + + /************************************************************************** + * + * @struct: + * TT_SBit_SmallMetricsRec + * + * @description: + * A structure used to hold the small metrics of a given glyph bitmap in + * a TrueType or OpenType font. These are usually found in the 'EBDT' + * (Microsoft) or the 'bdat' (Apple) table. + * + * @fields: + * height :: + * The glyph height in pixels. + * + * width :: + * The glyph width in pixels. + * + * bearingX :: + * The left-side bearing. + * + * bearingY :: + * The top-side bearing. + * + * advance :: + * The advance width or height. + */ + typedef struct TT_SBit_Small_Metrics_ + { + FT_Byte height; + FT_Byte width; + + FT_Char bearingX; + FT_Char bearingY; + FT_Byte advance; + + } TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics; + + + /************************************************************************** + * + * @struct: + * TT_SBit_LineMetricsRec + * + * @description: + * A structure used to describe the text line metrics of a given bitmap + * strike, for either a horizontal or vertical layout. + * + * @fields: + * ascender :: + * The ascender in pixels. + * + * descender :: + * The descender in pixels. + * + * max_width :: + * The maximum glyph width in pixels. + * + * caret_slope_enumerator :: + * Rise of the caret slope, typically set to 1 for non-italic fonts. + * + * caret_slope_denominator :: + * Rise of the caret slope, typically set to 0 for non-italic fonts. + * + * caret_offset :: + * Offset in pixels to move the caret for proper positioning. + * + * min_origin_SB :: + * Minimum of horiBearingX (resp. vertBearingY). + * min_advance_SB :: + * Minimum of + * + * horizontal advance - ( horiBearingX + width ) + * + * resp. + * + * vertical advance - ( vertBearingY + height ) + * + * max_before_BL :: + * Maximum of horiBearingY (resp. vertBearingY). + * + * min_after_BL :: + * Minimum of + * + * horiBearingY - height + * + * resp. + * + * vertBearingX - width + * + * pads :: + * Unused (to make the size of the record a multiple of 32 bits. + */ + typedef struct TT_SBit_LineMetricsRec_ + { + FT_Char ascender; + FT_Char descender; + FT_Byte max_width; + FT_Char caret_slope_numerator; + FT_Char caret_slope_denominator; + FT_Char caret_offset; + FT_Char min_origin_SB; + FT_Char min_advance_SB; + FT_Char max_before_BL; + FT_Char min_after_BL; + FT_Char pads[2]; + + } TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics; + + + /************************************************************************** + * + * @struct: + * TT_SBit_RangeRec + * + * @description: + * A TrueType/OpenType subIndexTable as defined in the 'EBLC' (Microsoft) + * or 'bloc' (Apple) tables. + * + * @fields: + * first_glyph :: + * The first glyph index in the range. + * + * last_glyph :: + * The last glyph index in the range. + * + * index_format :: + * The format of index table. Valid values are 1 to 5. + * + * image_format :: + * The format of 'EBDT' image data. + * + * image_offset :: + * The offset to image data in 'EBDT'. + * + * image_size :: + * For index formats 2 and 5. This is the size in bytes of each glyph + * bitmap. + * + * big_metrics :: + * For index formats 2 and 5. This is the big metrics for each glyph + * bitmap. + * + * num_glyphs :: + * For index formats 4 and 5. This is the number of glyphs in the code + * array. + * + * glyph_offsets :: + * For index formats 1 and 3. + * + * glyph_codes :: + * For index formats 4 and 5. + * + * table_offset :: + * The offset of the index table in the 'EBLC' table. Only used during + * strike loading. + */ + typedef struct TT_SBit_RangeRec_ + { + FT_UShort first_glyph; + FT_UShort last_glyph; + + FT_UShort index_format; + FT_UShort image_format; + FT_ULong image_offset; + + FT_ULong image_size; + TT_SBit_MetricsRec metrics; + FT_ULong num_glyphs; + + FT_ULong* glyph_offsets; + FT_UShort* glyph_codes; + + FT_ULong table_offset; + + } TT_SBit_RangeRec, *TT_SBit_Range; + + + /************************************************************************** + * + * @struct: + * TT_SBit_StrikeRec + * + * @description: + * A structure used describe a given bitmap strike in the 'EBLC' + * (Microsoft) or 'bloc' (Apple) tables. + * + * @fields: + * num_index_ranges :: + * The number of index ranges. + * + * index_ranges :: + * An array of glyph index ranges. + * + * color_ref :: + * Unused. `color_ref` is put in for future enhancements, but these + * fields are already in use by other platforms (e.g. Newton). For + * details, please see + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html + * + * hori :: + * The line metrics for horizontal layouts. + * + * vert :: + * The line metrics for vertical layouts. + * + * start_glyph :: + * The lowest glyph index for this strike. + * + * end_glyph :: + * The highest glyph index for this strike. + * + * x_ppem :: + * The number of horizontal pixels per EM. + * + * y_ppem :: + * The number of vertical pixels per EM. + * + * bit_depth :: + * The bit depth. Valid values are 1, 2, 4, and 8. + * + * flags :: + * Is this a vertical or horizontal strike? For details, please see + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html + */ + typedef struct TT_SBit_StrikeRec_ + { + FT_Int num_ranges; + TT_SBit_Range sbit_ranges; + FT_ULong ranges_offset; + + FT_ULong color_ref; + + TT_SBit_LineMetricsRec hori; + TT_SBit_LineMetricsRec vert; + + FT_UShort start_glyph; + FT_UShort end_glyph; + + FT_Byte x_ppem; + FT_Byte y_ppem; + + FT_Byte bit_depth; + FT_Char flags; + + } TT_SBit_StrikeRec, *TT_SBit_Strike; + + + /************************************************************************** + * + * @struct: + * TT_SBit_ComponentRec + * + * @description: + * A simple structure to describe a compound sbit element. + * + * @fields: + * glyph_code :: + * The element's glyph index. + * + * x_offset :: + * The element's left bearing. + * + * y_offset :: + * The element's top bearing. + */ + typedef struct TT_SBit_ComponentRec_ + { + FT_UShort glyph_code; + FT_Char x_offset; + FT_Char y_offset; + + } TT_SBit_ComponentRec, *TT_SBit_Component; + + + /************************************************************************** + * + * @struct: + * TT_SBit_ScaleRec + * + * @description: + * A structure used describe a given bitmap scaling table, as defined in + * the 'EBSC' table. + * + * @fields: + * hori :: + * The horizontal line metrics. + * + * vert :: + * The vertical line metrics. + * + * x_ppem :: + * The number of horizontal pixels per EM. + * + * y_ppem :: + * The number of vertical pixels per EM. + * + * x_ppem_substitute :: + * Substitution x_ppem value. + * + * y_ppem_substitute :: + * Substitution y_ppem value. + */ + typedef struct TT_SBit_ScaleRec_ + { + TT_SBit_LineMetricsRec hori; + TT_SBit_LineMetricsRec vert; + + FT_Byte x_ppem; + FT_Byte y_ppem; + + FT_Byte x_ppem_substitute; + FT_Byte y_ppem_substitute; + + } TT_SBit_ScaleRec, *TT_SBit_Scale; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** POSTSCRIPT GLYPH NAMES SUPPORT ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * TT_Post_NamesRec + * + * @description: + * Postscript names table, either format 2.0 or 2.5. + * + * @fields: + * loaded :: + * A flag to indicate whether the PS names are loaded. + * + * num_glyphs :: + * The number of named glyphs in the table. + * + * num_names :: + * The number of PS names stored in the table. + * + * glyph_indices :: + * The indices of the glyphs in the names arrays. + * + * glyph_names :: + * The PS names not in Mac Encoding. + */ + typedef struct TT_Post_NamesRec_ + { + FT_Bool loaded; + FT_UShort num_glyphs; + FT_UShort num_names; + FT_UShort* glyph_indices; + FT_Byte** glyph_names; + + } TT_Post_NamesRec, *TT_Post_Names; + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** GX VARIATION TABLE SUPPORT ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + typedef struct GX_BlendRec_ *GX_Blend; +#endif + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** EMBEDDED BDF PROPERTIES TABLE SUPPORT ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + /* + * These types are used to support a `BDF ' table that isn't part of the + * official TrueType specification. It is mainly used in SFNT-based bitmap + * fonts that were generated from a set of BDF fonts. + * + * The format of the table is as follows. + * + * USHORT version `BDF ' table version number, should be 0x0001. USHORT + * strikeCount Number of strikes (bitmap sizes) in this table. ULONG + * stringTable Offset (from start of BDF table) to string + * table. + * + * This is followed by an array of `strikeCount' descriptors, having the + * following format. + * + * USHORT ppem Vertical pixels per EM for this strike. USHORT numItems + * Number of items for this strike (properties and + * atoms). Maximum is 255. + * + * This array in turn is followed by `strikeCount' value sets. Each `value + * set' is an array of `numItems' items with the following format. + * + * ULONG item_name Offset in string table to item name. + * USHORT item_type The item type. Possible values are + * 0 => string (e.g., COMMENT) + * 1 => atom (e.g., FONT or even SIZE) + * 2 => int32 + * 3 => uint32 + * 0x10 => A flag to indicate a properties. This + * is ORed with the above values. + * ULONG item_value For strings => Offset into string table without + * the corresponding double quotes. + * For atoms => Offset into string table. + * For integers => Direct value. + * + * All strings in the string table consist of bytes and are + * zero-terminated. + * + */ + +#ifdef TT_CONFIG_OPTION_BDF + + typedef struct TT_BDFRec_ + { + FT_Byte* table; + FT_Byte* table_end; + FT_Byte* strings; + FT_ULong strings_size; + FT_UInt num_strikes; + FT_Bool loaded; + + } TT_BDFRec, *TT_BDF; + +#endif /* TT_CONFIG_OPTION_BDF */ + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** ***/ + /*** ORIGINAL TT_FACE CLASS DEFINITION ***/ + /*** ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * This structure/class is defined here because it is common to the + * following formats: TTF, OpenType-TT, and OpenType-CFF. + * + * Note, however, that the classes TT_Size and TT_GlyphSlot are not shared + * between font drivers, and are thus defined in `ttobjs.h`. + * + */ + + + /************************************************************************** + * + * @type: + * TT_Face + * + * @description: + * A handle to a TrueType face/font object. A TT_Face encapsulates the + * resolution and scaling independent parts of a TrueType font resource. + * + * @note: + * The TT_Face structure is also used as a 'parent class' for the + * OpenType-CFF class (T2_Face). + */ + typedef struct TT_FaceRec_* TT_Face; + + + /* a function type used for the truetype bytecode interpreter hooks */ + typedef FT_Error + (*TT_Interpreter)( void* exec_context ); + + /* forward declaration */ + typedef struct TT_LoaderRec_* TT_Loader; + + + /************************************************************************** + * + * @functype: + * TT_Loader_GotoTableFunc + * + * @description: + * Seeks a stream to the start of a given TrueType table. + * + * @input: + * face :: + * A handle to the target face object. + * + * tag :: + * A 4-byte tag used to name the table. + * + * stream :: + * The input stream. + * + * @output: + * length :: + * The length of the table in bytes. Set to 0 if not needed. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * The stream cursor must be at the font file's origin. + */ + typedef FT_Error + (*TT_Loader_GotoTableFunc)( TT_Face face, + FT_ULong tag, + FT_Stream stream, + FT_ULong* length ); + + + /************************************************************************** + * + * @functype: + * TT_Loader_StartGlyphFunc + * + * @description: + * Seeks a stream to the start of a given glyph element, and opens a + * frame for it. + * + * @input: + * loader :: + * The current TrueType glyph loader object. + * + * glyph index :: The index of the glyph to access. + * + * offset :: + * The offset of the glyph according to the 'locations' table. + * + * byte_count :: + * The size of the frame in bytes. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function is normally equivalent to FT_STREAM_SEEK(offset) + * followed by FT_FRAME_ENTER(byte_count) with the loader's stream, but + * alternative formats (e.g. compressed ones) might use something + * different. + */ + typedef FT_Error + (*TT_Loader_StartGlyphFunc)( TT_Loader loader, + FT_UInt glyph_index, + FT_ULong offset, + FT_UInt byte_count ); + + + /************************************************************************** + * + * @functype: + * TT_Loader_ReadGlyphFunc + * + * @description: + * Reads one glyph element (its header, a simple glyph, or a composite) + * from the loader's current stream frame. + * + * @input: + * loader :: + * The current TrueType glyph loader object. + * + * @return: + * FreeType error code. 0 means success. + */ + typedef FT_Error + (*TT_Loader_ReadGlyphFunc)( TT_Loader loader ); + + + /************************************************************************** + * + * @functype: + * TT_Loader_EndGlyphFunc + * + * @description: + * Closes the current loader stream frame for the glyph. + * + * @input: + * loader :: + * The current TrueType glyph loader object. + */ + typedef void + (*TT_Loader_EndGlyphFunc)( TT_Loader loader ); + + + typedef enum TT_SbitTableType_ + { + TT_SBIT_TABLE_TYPE_NONE = 0, + TT_SBIT_TABLE_TYPE_EBLC, /* `EBLC' (Microsoft), */ + /* `bloc' (Apple) */ + TT_SBIT_TABLE_TYPE_CBLC, /* `CBLC' (Google) */ + TT_SBIT_TABLE_TYPE_SBIX, /* `sbix' (Apple) */ + + /* do not remove */ + TT_SBIT_TABLE_TYPE_MAX + + } TT_SbitTableType; + + + /* OpenType 1.8 brings new tables for variation font support; */ + /* to make the old MM and GX fonts still work we need to check */ + /* the presence (and validity) of the functionality provided */ + /* by those tables. The following flag macros are for the */ + /* field `variation_support'. */ + /* */ + /* Note that `fvar' gets checked immediately at font loading, */ + /* while the other features are only loaded if MM support is */ + /* actually requested. */ + + /* FVAR */ +#define TT_FACE_FLAG_VAR_FVAR ( 1 << 0 ) + + /* HVAR */ +#define TT_FACE_FLAG_VAR_HADVANCE ( 1 << 1 ) +#define TT_FACE_FLAG_VAR_LSB ( 1 << 2 ) +#define TT_FACE_FLAG_VAR_RSB ( 1 << 3 ) + + /* VVAR */ +#define TT_FACE_FLAG_VAR_VADVANCE ( 1 << 4 ) +#define TT_FACE_FLAG_VAR_TSB ( 1 << 5 ) +#define TT_FACE_FLAG_VAR_BSB ( 1 << 6 ) +#define TT_FACE_FLAG_VAR_VORG ( 1 << 7 ) + + /* MVAR */ +#define TT_FACE_FLAG_VAR_MVAR ( 1 << 8 ) + + + /************************************************************************** + * + * TrueType Face Type + * + * @struct: + * TT_Face + * + * @description: + * The TrueType face class. These objects model the resolution and + * point-size independent data found in a TrueType font file. + * + * @fields: + * root :: + * The base FT_Face structure, managed by the base layer. + * + * ttc_header :: + * The TrueType collection header, used when the file is a 'ttc' rather + * than a 'ttf'. For ordinary font files, the field `ttc_header.count` + * is set to 0. + * + * format_tag :: + * The font format tag. + * + * num_tables :: + * The number of TrueType tables in this font file. + * + * dir_tables :: + * The directory of TrueType tables for this font file. + * + * header :: + * The font's font header ('head' table). Read on font opening. + * + * horizontal :: + * The font's horizontal header ('hhea' table). This field also + * contains the associated horizontal metrics table ('hmtx'). + * + * max_profile :: + * The font's maximum profile table. Read on font opening. Note that + * some maximum values cannot be taken directly from this table. We + * thus define additional fields below to hold the computed maxima. + * + * vertical_info :: + * A boolean which is set when the font file contains vertical metrics. + * If not, the value of the 'vertical' field is undefined. + * + * vertical :: + * The font's vertical header ('vhea' table). This field also contains + * the associated vertical metrics table ('vmtx'), if found. + * IMPORTANT: The contents of this field is undefined if the + * `vertical_info` field is unset. + * + * num_names :: + * The number of name records within this TrueType font. + * + * name_table :: + * The table of name records ('name'). + * + * os2 :: + * The font's OS/2 table ('OS/2'). + * + * postscript :: + * The font's PostScript table ('post' table). The PostScript glyph + * names are not loaded by the driver on face opening. See the + * 'ttpost' module for more details. + * + * cmap_table :: + * Address of the face's 'cmap' SFNT table in memory (it's an extracted + * frame). + * + * cmap_size :: + * The size in bytes of the `cmap_table` described above. + * + * goto_table :: + * A function called by each TrueType table loader to position a + * stream's cursor to the start of a given table according to its tag. + * It defaults to TT_Goto_Face but can be different for strange formats + * (e.g. Type 42). + * + * access_glyph_frame :: + * A function used to access the frame of a given glyph within the + * face's font file. + * + * forget_glyph_frame :: + * A function used to forget the frame of a given glyph when all data + * has been loaded. + * + * read_glyph_header :: + * A function used to read a glyph header. It must be called between + * an 'access' and 'forget'. + * + * read_simple_glyph :: + * A function used to read a simple glyph. It must be called after the + * header was read, and before the 'forget'. + * + * read_composite_glyph :: + * A function used to read a composite glyph. It must be called after + * the header was read, and before the 'forget'. + * + * sfnt :: + * A pointer to the SFNT service. + * + * psnames :: + * A pointer to the PostScript names service. + * + * mm :: + * A pointer to the Multiple Masters service. + * + * tt_var :: + * A pointer to the Metrics Variations service for the "truetype" + * driver. + * + * face_var :: + * A pointer to the Metrics Variations service for this `TT_Face`'s + * driver. + * + * psaux :: + * A pointer to the PostScript Auxiliary service. + * + * gasp :: + * The grid-fitting and scaling properties table ('gasp'). This table + * is optional in TrueType/OpenType fonts. + * + * pclt :: + * The 'pclt' SFNT table. + * + * num_sbit_scales :: + * The number of sbit scales for this font. + * + * sbit_scales :: + * Array of sbit scales embedded in this font. This table is optional + * in a TrueType/OpenType font. + * + * postscript_names :: + * A table used to store the Postscript names of the glyphs for this + * font. See the file `ttconfig.h` for comments on the + * TT_CONFIG_OPTION_POSTSCRIPT_NAMES option. + * + * palette_data :: + * Some fields from the 'CPAL' table that are directly indexed. + * + * palette_index :: + * The current palette index, as set by @FT_Palette_Select. + * + * palette :: + * An array containing the current palette's colors. + * + * have_foreground_color :: + * There was a call to @FT_Palette_Set_Foreground_Color. + * + * foreground_color :: + * The current foreground color corresponding to 'CPAL' color index + * 0xFFFF. Only valid if `have_foreground_color` is set. + * + * font_program_size :: + * Size in bytecodes of the face's font program. 0 if none defined. + * Ignored for Type 2 fonts. + * + * font_program :: + * The face's font program (bytecode stream) executed at load time, + * also used during glyph rendering. Comes from the 'fpgm' table. + * Ignored for Type 2 font fonts. + * + * cvt_program_size :: + * The size in bytecodes of the face's cvt program. Ignored for Type 2 + * fonts. + * + * cvt_program :: + * The face's cvt program (bytecode stream) executed each time an + * instance/size is changed/reset. Comes from the 'prep' table. + * Ignored for Type 2 fonts. + * + * cvt_size :: + * Size of the control value table (in entries). Ignored for Type 2 + * fonts. + * + * cvt :: + * The face's original control value table. Coordinates are expressed + * in unscaled font units (in 26.6 format). Comes from the 'cvt~' + * table. Ignored for Type 2 fonts. + * + * If varied by the `CVAR' table, non-integer values are possible. + * + * interpreter :: + * A pointer to the TrueType bytecode interpreters field is also used + * to hook the debugger in 'ttdebug'. + * + * extra :: + * Reserved for third-party font drivers. + * + * postscript_name :: + * The PS name of the font. Used by the postscript name service. + * + * glyf_len :: + * The length of the 'glyf' table. Needed for malformed 'loca' tables. + * + * glyf_offset :: + * The file offset of the 'glyf' table. + * + * is_cff2 :: + * Set if the font format is CFF2. + * + * doblend :: + * A boolean which is set if the font should be blended (this is for GX + * var). + * + * blend :: + * Contains the data needed to control GX variation tables (rather like + * Multiple Master data). + * + * variation_support :: + * Flags that indicate which OpenType functionality related to font + * variation support is present, valid, and usable. For example, + * TT_FACE_FLAG_VAR_FVAR is only set if we have at least one design + * axis. + * + * var_postscript_prefix :: + * The PostScript name prefix needed for constructing a variation font + * instance's PS name . + * + * var_postscript_prefix_len :: + * The length of the `var_postscript_prefix` string. + * + * var_default_named_instance :: + * The index of the default named instance. + * + * non_var_style_name :: + * The non-variation style name, used as a backup. + * + * horz_metrics_size :: + * The size of the 'hmtx' table. + * + * vert_metrics_size :: + * The size of the 'vmtx' table. + * + * num_locations :: + * The number of glyph locations in this TrueType file. This should be + * one more than the number of glyphs. Ignored for Type 2 fonts. + * + * glyph_locations :: + * An array of longs. These are offsets to glyph data within the + * 'glyf' table. Ignored for Type 2 font faces. + * + * hdmx_table :: + * A pointer to the 'hdmx' table. + * + * hdmx_table_size :: + * The size of the 'hdmx' table. + * + * hdmx_record_count :: + * The number of hdmx records. + * + * hdmx_record_size :: + * The size of a single hdmx record. + * + * hdmx_records :: + * A array of pointers to the 'hdmx' table records sorted by ppem. + * + * sbit_table :: + * A pointer to the font's embedded bitmap location table. + * + * sbit_table_size :: + * The size of `sbit_table`. + * + * sbit_table_type :: + * The sbit table type (CBLC, sbix, etc.). + * + * sbit_num_strikes :: + * The number of sbit strikes exposed by FreeType's API, omitting + * invalid strikes. + * + * sbit_strike_map :: + * A mapping between the strike indices exposed by the API and the + * indices used in the font's sbit table. + * + * kern_table :: + * A pointer to the 'kern' table. + * + * kern_table_size :: + * The size of the 'kern' table. + * + * num_kern_tables :: + * The number of supported kern subtables (up to 32; FreeType + * recognizes only horizontal ones with format 0). + * + * kern_avail_bits :: + * The availability status of kern subtables; if bit n is set, table n + * is available. + * + * kern_order_bits :: + * The sortedness status of kern subtables; if bit n is set, table n is + * sorted. + * + * bdf :: + * Data related to an SFNT font's 'bdf' table; see `tttypes.h`. + * + * horz_metrics_offset :: + * The file offset of the 'hmtx' table. + * + * vert_metrics_offset :: + * The file offset of the 'vmtx' table. + * + * ebdt_start :: + * The file offset of the sbit data table (CBDT, bdat, etc.). + * + * ebdt_size :: + * The size of the sbit data table. + * + * cpal :: + * A pointer to data related to the 'CPAL' table. `NULL` if the table + * is not available. + * + * colr :: + * A pointer to data related to the 'COLR' table. `NULL` if the table + * is not available. + * + * svg :: + * A pointer to data related to the 'SVG' table. `NULL` if the table + * is not available. + */ + typedef struct TT_FaceRec_ + { + FT_FaceRec root; + + TTC_HeaderRec ttc_header; + + FT_ULong format_tag; + FT_UShort num_tables; + TT_Table dir_tables; + + TT_Header header; /* TrueType header table */ + TT_HoriHeader horizontal; /* TrueType horizontal header */ + + TT_MaxProfile max_profile; + + FT_Bool vertical_info; + TT_VertHeader vertical; /* TT Vertical header, if present */ + + FT_UShort num_names; /* number of name records */ + TT_NameTableRec name_table; /* name table */ + + TT_OS2 os2; /* TrueType OS/2 table */ + TT_Postscript postscript; /* TrueType Postscript table */ + + FT_Byte* cmap_table; /* extracted `cmap' table */ + FT_ULong cmap_size; + + TT_Loader_GotoTableFunc goto_table; + + TT_Loader_StartGlyphFunc access_glyph_frame; + TT_Loader_EndGlyphFunc forget_glyph_frame; + TT_Loader_ReadGlyphFunc read_glyph_header; + TT_Loader_ReadGlyphFunc read_simple_glyph; + TT_Loader_ReadGlyphFunc read_composite_glyph; + + /* a typeless pointer to the SFNT_Interface table used to load */ + /* the basic TrueType tables in the face object */ + void* sfnt; + + /* a typeless pointer to the FT_Service_PsCMapsRec table used to */ + /* handle glyph names <-> unicode & Mac values */ + void* psnames; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* a typeless pointer to the FT_Service_MultiMasters table used to */ + /* handle variation fonts */ + void* mm; + + /* a typeless pointer to the FT_Service_MetricsVariationsRec table */ + /* used to handle the HVAR, VVAR, and MVAR OpenType tables by the */ + /* "truetype" driver */ + void* tt_var; + + /* a typeless pointer to the FT_Service_MetricsVariationsRec table */ + /* used to handle the HVAR, VVAR, and MVAR OpenType tables by this */ + /* TT_Face's driver */ + void* face_var; /* since 2.13.1 */ +#endif + + /* a typeless pointer to the PostScript Aux service */ + void* psaux; + + + /************************************************************************ + * + * Optional TrueType/OpenType tables + * + */ + + /* grid-fitting and scaling table */ + TT_GaspRec gasp; /* the `gasp' table */ + + /* PCL 5 table */ + TT_PCLT pclt; + + /* embedded bitmaps support */ + FT_ULong num_sbit_scales; + TT_SBit_Scale sbit_scales; + + /* postscript names table */ + TT_Post_NamesRec postscript_names; + + /* glyph colors */ + FT_Palette_Data palette_data; /* since 2.10 */ + FT_UShort palette_index; + FT_Color* palette; + FT_Bool have_foreground_color; + FT_Color foreground_color; + + + /************************************************************************ + * + * TrueType-specific fields (ignored by the CFF driver) + * + */ + + /* the font program, if any */ + FT_ULong font_program_size; + FT_Byte* font_program; + + /* the cvt program, if any */ + FT_ULong cvt_program_size; + FT_Byte* cvt_program; + + /* the original, unscaled, control value table */ + FT_ULong cvt_size; + FT_Int32* cvt; + + /* A pointer to the bytecode interpreter to use. This is also */ + /* used to hook the debugger for the `ttdebug' utility. */ + TT_Interpreter interpreter; + + + /************************************************************************ + * + * Other tables or fields. This is used by derivative formats like + * OpenType. + * + */ + + FT_Generic extra; + + const char* postscript_name; + + FT_ULong glyf_len; + FT_ULong glyf_offset; /* since 2.7.1 */ + + FT_Bool is_cff2; /* since 2.7.1 */ + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_Bool doblend; + GX_Blend blend; + + FT_UInt32 variation_support; /* since 2.7.1 */ + + const char* var_postscript_prefix; /* since 2.7.2 */ + FT_UInt var_postscript_prefix_len; /* since 2.7.2 */ + + FT_UInt var_default_named_instance; /* since 2.13.1 */ + + const char* non_var_style_name; /* since 2.13.1 */ +#endif + + /* since version 2.2 */ + + FT_ULong horz_metrics_size; + FT_ULong vert_metrics_size; + + FT_ULong num_locations; /* up to 0xFFFF + 1 */ + FT_Byte* glyph_locations; + + FT_Byte* hdmx_table; + FT_ULong hdmx_table_size; + FT_UInt hdmx_record_count; + FT_ULong hdmx_record_size; + FT_Byte** hdmx_records; + + FT_Byte* sbit_table; + FT_ULong sbit_table_size; + TT_SbitTableType sbit_table_type; + FT_UInt sbit_num_strikes; + FT_UInt* sbit_strike_map; + + FT_Byte* kern_table; + FT_ULong kern_table_size; + FT_UInt num_kern_tables; + FT_UInt32 kern_avail_bits; + FT_UInt32 kern_order_bits; + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING + FT_Byte* gpos_table; + FT_Bool gpos_kerning_available; +#endif + +#ifdef TT_CONFIG_OPTION_BDF + TT_BDFRec bdf; +#endif /* TT_CONFIG_OPTION_BDF */ + + /* since 2.3.0 */ + FT_ULong horz_metrics_offset; + FT_ULong vert_metrics_offset; + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + /* since 2.7 */ + FT_ULong ebdt_start; /* either `CBDT', `EBDT', or `bdat' */ + FT_ULong ebdt_size; +#endif + + /* since 2.10 */ + void* cpal; + void* colr; + + /* since 2.12 */ + void* svg; + + } TT_FaceRec; + + + /************************************************************************** + * + * @struct: + * TT_GlyphZoneRec + * + * @description: + * A glyph zone is used to load, scale and hint glyph outline + * coordinates. + * + * @fields: + * memory :: + * A handle to the memory manager. + * + * max_points :: + * The maximum size in points of the zone. + * + * max_contours :: + * Max size in links contours of the zone. + * + * n_points :: + * The current number of points in the zone. + * + * n_contours :: + * The current number of contours in the zone. + * + * org :: + * The original glyph coordinates (font units/scaled). + * + * cur :: + * The current glyph coordinates (scaled/hinted). + * + * tags :: + * The point control tags. + * + * contours :: + * The contours end points. + * + * first_point :: + * Offset of the current subglyph's first point. + */ + typedef struct TT_GlyphZoneRec_ + { + FT_Memory memory; + FT_UShort max_points; + FT_UShort max_contours; + FT_UShort n_points; /* number of points in zone */ + FT_UShort n_contours; /* number of contours */ + + FT_Vector* org; /* original point coordinates */ + FT_Vector* cur; /* current point coordinates */ + FT_Vector* orus; /* original (unscaled) point coordinates */ + + FT_Byte* tags; /* current touch flags */ + FT_UShort* contours; /* contour end points */ + + FT_UShort first_point; /* offset of first (#0) point */ + + } TT_GlyphZoneRec, *TT_GlyphZone; + + + /* handle to execution context */ + typedef struct TT_ExecContextRec_* TT_ExecContext; + + + /************************************************************************** + * + * @type: + * TT_Size + * + * @description: + * A handle to a TrueType size object. + */ + typedef struct TT_SizeRec_* TT_Size; + + + /* glyph loader structure */ + typedef struct TT_LoaderRec_ + { + TT_Face face; + TT_Size size; + FT_GlyphSlot glyph; + FT_GlyphLoader gloader; + + FT_ULong load_flags; + FT_UInt glyph_index; + + FT_Stream stream; + FT_UInt byte_len; + + FT_Short n_contours; + FT_BBox bbox; + FT_Int left_bearing; + FT_Int advance; + FT_Int linear; + FT_Bool linear_def; + FT_Vector pp1; + FT_Vector pp2; + + /* the zone where we load our glyphs */ + TT_GlyphZoneRec base; + TT_GlyphZoneRec zone; + + TT_ExecContext exec; + FT_Byte* instructions; + FT_ULong ins_pos; + + /* for possible extensibility in other formats */ + void* other; + + /* since version 2.1.8 */ + FT_Int top_bearing; + FT_Int vadvance; + FT_Vector pp3; + FT_Vector pp4; + + /* since version 2.2.1 */ + FT_Byte* cursor; + FT_Byte* limit; + + /* since version 2.6.2 */ + FT_ListRec composites; + + /* since version 2.11.2 */ + FT_Byte* widthp; + + } TT_LoaderRec; + + +FT_END_HEADER + +#endif /* TTTYPES_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/internal/wofftypes.h b/non-source/foreign/freetype2/freetype/internal/wofftypes.h new file mode 100644 index 000000000..4a169d12f --- /dev/null +++ b/non-source/foreign/freetype2/freetype/internal/wofftypes.h @@ -0,0 +1,312 @@ +/**************************************************************************** + * + * wofftypes.h + * + * Basic WOFF/WOFF2 type definitions and interface (specification + * only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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 <freetype/tttables.h> +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @struct: + * WOFF_HeaderRec + * + * @description: + * WOFF file format header. + * + * @fields: + * See + * + * https://www.w3.org/TR/WOFF/#WOFFHeader + */ + typedef struct WOFF_HeaderRec_ + { + FT_ULong signature; + FT_ULong flavor; + FT_ULong length; + FT_UShort num_tables; + FT_UShort reserved; + FT_ULong totalSfntSize; + FT_UShort majorVersion; + FT_UShort minorVersion; + FT_ULong metaOffset; + FT_ULong metaLength; + FT_ULong metaOrigLength; + FT_ULong privOffset; + FT_ULong privLength; + + } WOFF_HeaderRec, *WOFF_Header; + + + /************************************************************************** + * + * @struct: + * WOFF_TableRec + * + * @description: + * This structure describes a given table of a WOFF font. + * + * @fields: + * Tag :: + * A four-bytes tag describing the table. + * + * Offset :: + * The offset of the table from the start of the WOFF font in its + * resource. + * + * CompLength :: + * Compressed table length (in bytes). + * + * OrigLength :: + * Uncompressed table length (in bytes). + * + * CheckSum :: + * The table checksum. This value can be ignored. + * + * OrigOffset :: + * The uncompressed table file offset. This value gets computed while + * constructing the (uncompressed) SFNT header. It is not contained in + * the WOFF file. + */ + typedef struct WOFF_TableRec_ + { + FT_Tag 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_Tag 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/non-source/foreign/freetype2/freetype/otsvg.h b/non-source/foreign/freetype2/freetype/otsvg.h new file mode 100644 index 000000000..9d356938c --- /dev/null +++ b/non-source/foreign/freetype2/freetype/otsvg.h @@ -0,0 +1,336 @@ +/**************************************************************************** + * + * otsvg.h + * + * Interface for OT-SVG support related things (specification). + * + * Copyright (C) 2022-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef OTSVG_H_ +#define OTSVG_H_ + +#include <freetype/freetype.h> + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * svg_fonts + * + * @title: + * OpenType SVG Fonts + * + * @abstract: + * OT-SVG API between FreeType and an external SVG rendering library. + * + * @description: + * This section describes the four hooks necessary to render SVG + * 'documents' that are contained in an OpenType font's 'SVG~' table. + * + * For more information on the implementation, see our standard hooks + * based on 'librsvg' in the [FreeType Demo + * Programs](https://gitlab.freedesktop.org/freetype/freetype-demos) + * repository. + * + */ + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Init_Func + * + * @description: + * A callback that is called when the first OT-SVG glyph is rendered in + * the lifetime of an @FT_Library object. In a typical implementation, + * one would want to allocate a structure and point the `data_pointer` + * to it and perform any library initializations that might be needed. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @return: + * FreeType error code. 0 means success. + * + * @since: + * 2.12 + */ + typedef FT_Error + (*SVG_Lib_Init_Func)( FT_Pointer *data_pointer ); + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Free_Func + * + * @description: + * A callback that is called when the `ot-svg` module is being freed. + * It is only called if the init hook was called earlier. This means + * that neither the init nor the free hook is called if no OT-SVG glyph + * is rendered. + * + * In a typical implementation, one would want to free any state + * structure that was allocated in the init hook and perform any + * library-related closure that might be needed. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @since: + * 2.12 + */ + typedef void + (*SVG_Lib_Free_Func)( FT_Pointer *data_pointer ); + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Render_Func + * + * @description: + * A callback that is called to render an OT-SVG glyph. This callback + * hook is called right after the preset hook @SVG_Lib_Preset_Slot_Func + * has been called with `cache` set to `TRUE`. The data necessary to + * render is available through the handle @FT_SVG_Document, which is set + * in the `other` field of @FT_GlyphSlotRec. + * + * The render hook is expected to render the SVG glyph to the bitmap + * buffer that is allocated already at `slot->bitmap.buffer`. It also + * sets the `num_grays` value as well as `slot->format`. + * + * @input: + * slot :: + * The slot to render. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @return: + * FreeType error code. 0 means success. + * + * @since: + * 2.12 + */ + typedef FT_Error + (*SVG_Lib_Render_Func)( FT_GlyphSlot slot, + FT_Pointer *data_pointer ); + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Preset_Slot_Func + * + * @description: + * A callback that is called to preset the glyph slot. It is called from + * two places. + * + * 1. When `FT_Load_Glyph` needs to preset the glyph slot. + * + * 2. Right before the `svg` module calls the render callback hook. + * + * When it is the former, the argument `cache` is set to `FALSE`. When + * it is the latter, the argument `cache` is set to `TRUE`. This + * distinction has been made because many calculations that are necessary + * for presetting a glyph slot are the same needed later for the render + * callback hook. Thus, if `cache` is `TRUE`, the hook can _cache_ those + * calculations in a memory block referenced by the state pointer. + * + * This hook is expected to preset the slot by setting parameters such as + * `bitmap_left`, `bitmap_top`, `width`, `rows`, `pitch`, and + * `pixel_mode`. It is also expected to set all the metrics for the slot + * including the vertical advance if it is not already set. Typically, + * fonts have horizontal advances but not vertical ones. If those are + * available, they had already been set, otherwise they have to be + * estimated and set manually. The hook must take into account the + * transformations that have been set, and translate the transformation + * matrices into the SVG coordinate system, as the original matrix is + * intended for the TTF/CFF coordinate system. + * + * @input: + * slot :: + * The glyph slot that has the SVG document loaded. + * + * cache :: + * See description. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @return: + * FreeType error code. 0 means success. + * + * @since: + * 2.12 + */ + typedef FT_Error + (*SVG_Lib_Preset_Slot_Func)( FT_GlyphSlot slot, + FT_Bool cache, + FT_Pointer *state ); + + + /************************************************************************** + * + * @struct: + * SVG_RendererHooks + * + * @description: + * A structure that stores the four hooks needed to render OT-SVG glyphs + * properly. The structure is publicly used to set the hooks via the + * @svg-hooks driver property. + * + * The behavior of each hook is described in its documentation. One + * thing to note is that the preset hook and the render hook often need + * to do the same operations; therefore, it's better to cache the + * intermediate data in a state structure to avoid calculating it twice. + * For example, in the preset hook one can draw the glyph on a recorder + * surface and later create a bitmap surface from it in the render hook. + * + * All four hooks must be non-NULL. + * + * @fields: + * init_svg :: + * The initialization hook. + * + * free_svg :: + * The cleanup hook. + * + * render_hook :: + * The render hook. + * + * preset_slot :: + * The preset hook. + * + * @since: + * 2.12 + */ + typedef struct SVG_RendererHooks_ + { + SVG_Lib_Init_Func init_svg; + SVG_Lib_Free_Func free_svg; + SVG_Lib_Render_Func render_svg; + + SVG_Lib_Preset_Slot_Func preset_slot; + + } SVG_RendererHooks; + + + /************************************************************************** + * + * @struct: + * FT_SVG_DocumentRec + * + * @description: + * A structure that models one SVG document. + * + * @fields: + * svg_document :: + * A pointer to the SVG document. + * + * svg_document_length :: + * The length of `svg_document`. + * + * metrics :: + * A metrics object storing the size information. + * + * units_per_EM :: + * The size of the EM square. + * + * start_glyph_id :: + * The first glyph ID in the glyph range covered by this document. + * + * end_glyph_id :: + * The last glyph ID in the glyph range covered by this document. + * + * transform :: + * A 2x2 transformation matrix to apply to the glyph while rendering + * it. + * + * delta :: + * The translation to apply to the glyph while rendering. + * + * @note: + * When an @FT_GlyphSlot object `slot` is passed down to a renderer, the + * renderer can only access the `metrics` and `units_per_EM` fields via + * `slot->face`. However, when @FT_Glyph_To_Bitmap sets up a dummy + * object, it has no way to set a `face` object. Thus, metrics + * information and `units_per_EM` (which is necessary for OT-SVG) has to + * be stored separately. + * + * @since: + * 2.12 + */ + typedef struct FT_SVG_DocumentRec_ + { + FT_Byte* svg_document; + FT_ULong svg_document_length; + + FT_Size_Metrics metrics; + FT_UShort units_per_EM; + + FT_UShort start_glyph_id; + FT_UShort end_glyph_id; + + FT_Matrix transform; + FT_Vector delta; + + } FT_SVG_DocumentRec; + + + /************************************************************************** + * + * @type: + * FT_SVG_Document + * + * @description: + * A handle to an @FT_SVG_DocumentRec object. + * + * @since: + * 2.12 + */ + typedef struct FT_SVG_DocumentRec_* FT_SVG_Document; + + +FT_END_HEADER + +#endif /* OTSVG_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/freetype/t1tables.h b/non-source/foreign/freetype2/freetype/t1tables.h index e272324ba..fbd558aa3 100644 --- a/non-source/foreign/freetype2/freetype/t1tables.h +++ b/non-source/foreign/freetype2/freetype/t1tables.h @@ -1,28 +1,27 @@ -/***************************************************************************/ -/* */ -/* t1tables.h */ -/* */ -/* Basic Type 1/Type 2 tables definitions and interface (specification */ -/* only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * t1tables.h + * + * Basic Type 1/Type 2 tables definitions and interface (specification + * only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef T1TABLES_H_ #define T1TABLES_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -34,58 +33,58 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* type1_tables */ - /* */ - /* <Title> */ - /* Type 1 Tables */ - /* */ - /* <Abstract> */ - /* Type~1 (PostScript) specific font tables. */ - /* */ - /* <Description> */ - /* This section contains the definition of Type 1-specific tables, */ - /* including structures related to other PostScript font formats. */ - /* */ - /* <Order> */ - /* PS_FontInfoRec */ - /* PS_FontInfo */ - /* PS_PrivateRec */ - /* PS_Private */ - /* */ - /* CID_FaceDictRec */ - /* CID_FaceDict */ - /* CID_FaceInfoRec */ - /* CID_FaceInfo */ - /* */ - /* FT_Has_PS_Glyph_Names */ - /* FT_Get_PS_Font_Info */ - /* FT_Get_PS_Font_Private */ - /* FT_Get_PS_Font_Value */ - /* */ - /* T1_Blend_Flags */ - /* T1_EncodingType */ - /* PS_Dict_Keys */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * @section: + * type1_tables + * + * @title: + * Type 1 Tables + * + * @abstract: + * Type~1-specific font tables. + * + * @description: + * This section contains the definition of Type~1-specific tables, + * including structures related to other PostScript font formats. + * + * @order: + * PS_FontInfoRec + * PS_FontInfo + * PS_PrivateRec + * PS_Private + * + * CID_FaceDictRec + * CID_FaceDict + * CID_FaceInfoRec + * CID_FaceInfo + * + * FT_Has_PS_Glyph_Names + * FT_Get_PS_Font_Info + * FT_Get_PS_Font_Private + * FT_Get_PS_Font_Value + * + * T1_Blend_Flags + * T1_EncodingType + * PS_Dict_Keys + * + */ /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */ /* structures in order to support Multiple Master fonts. */ - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_FontInfoRec */ - /* */ - /* <Description> */ - /* A structure used to model a Type~1 or Type~2 FontInfo dictionary. */ - /* Note that for Multiple Master fonts, each instance has its own */ - /* FontInfo dictionary. */ - /* */ + /************************************************************************** + * + * @struct: + * PS_FontInfoRec + * + * @description: + * A structure used to model a Type~1 or Type~2 FontInfo dictionary. + * Note that for Multiple Master fonts, each instance has its own + * FontInfo dictionary. + */ typedef struct PS_FontInfoRec_ { FT_String* version; @@ -101,40 +100,39 @@ FT_BEGIN_HEADER } PS_FontInfoRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_FontInfo */ - /* */ - /* <Description> */ - /* A handle to a @PS_FontInfoRec structure. */ - /* */ + /************************************************************************** + * + * @struct: + * PS_FontInfo + * + * @description: + * A handle to a @PS_FontInfoRec structure. + */ typedef struct PS_FontInfoRec_* PS_FontInfo; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* T1_FontInfo */ - /* */ - /* <Description> */ - /* This type is equivalent to @PS_FontInfoRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ + /************************************************************************** + * + * @struct: + * T1_FontInfo + * + * @description: + * This type is equivalent to @PS_FontInfoRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ typedef PS_FontInfoRec T1_FontInfo; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_PrivateRec */ - /* */ - /* <Description> */ - /* A structure used to model a Type~1 or Type~2 private dictionary. */ - /* Note that for Multiple Master fonts, each instance has its own */ - /* Private dictionary. */ - /* */ + /************************************************************************** + * + * @struct: + * PS_PrivateRec + * + * @description: + * A structure used to model a Type~1 or Type~2 private dictionary. Note + * that for Multiple Master fonts, each instance has its own Private + * dictionary. + */ typedef struct PS_PrivateRec_ { FT_Int unique_id; @@ -176,56 +174,55 @@ FT_BEGIN_HEADER } PS_PrivateRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* PS_Private */ - /* */ - /* <Description> */ - /* A handle to a @PS_PrivateRec structure. */ - /* */ + /************************************************************************** + * + * @struct: + * PS_Private + * + * @description: + * A handle to a @PS_PrivateRec structure. + */ typedef struct PS_PrivateRec_* PS_Private; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* T1_Private */ - /* */ - /* <Description> */ - /* This type is equivalent to @PS_PrivateRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ + /************************************************************************** + * + * @struct: + * T1_Private + * + * @description: + * This type is equivalent to @PS_PrivateRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ typedef PS_PrivateRec T1_Private; - /*************************************************************************/ - /* */ - /* <Enum> */ - /* T1_Blend_Flags */ - /* */ - /* <Description> */ - /* A set of flags used to indicate which fields are present in a */ - /* given blend dictionary (font info or private). Used to support */ - /* Multiple Masters fonts. */ - /* */ - /* <Values> */ - /* T1_BLEND_UNDERLINE_POSITION :: */ - /* T1_BLEND_UNDERLINE_THICKNESS :: */ - /* T1_BLEND_ITALIC_ANGLE :: */ - /* T1_BLEND_BLUE_VALUES :: */ - /* T1_BLEND_OTHER_BLUES :: */ - /* T1_BLEND_STANDARD_WIDTH :: */ - /* T1_BLEND_STANDARD_HEIGHT :: */ - /* T1_BLEND_STEM_SNAP_WIDTHS :: */ - /* T1_BLEND_STEM_SNAP_HEIGHTS :: */ - /* T1_BLEND_BLUE_SCALE :: */ - /* T1_BLEND_BLUE_SHIFT :: */ - /* T1_BLEND_FAMILY_BLUES :: */ - /* T1_BLEND_FAMILY_OTHER_BLUES :: */ - /* T1_BLEND_FORCE_BOLD :: */ - /* */ + /************************************************************************** + * + * @enum: + * T1_Blend_Flags + * + * @description: + * A set of flags used to indicate which fields are present in a given + * blend dictionary (font info or private). Used to support Multiple + * Masters fonts. + * + * @values: + * T1_BLEND_UNDERLINE_POSITION :: + * T1_BLEND_UNDERLINE_THICKNESS :: + * T1_BLEND_ITALIC_ANGLE :: + * T1_BLEND_BLUE_VALUES :: + * T1_BLEND_OTHER_BLUES :: + * T1_BLEND_STANDARD_WIDTH :: + * T1_BLEND_STANDARD_HEIGHT :: + * T1_BLEND_STEM_SNAP_WIDTHS :: + * T1_BLEND_STEM_SNAP_HEIGHTS :: + * T1_BLEND_BLUE_SCALE :: + * T1_BLEND_BLUE_SHIFT :: + * T1_BLEND_FAMILY_BLUES :: + * T1_BLEND_FAMILY_OTHER_BLUES :: + * T1_BLEND_FORCE_BOLD :: + */ typedef enum T1_Blend_Flags_ { /* required fields in a FontInfo blend dictionary */ @@ -252,7 +249,7 @@ FT_BEGIN_HEADER /* these constants are deprecated; use the corresponding */ - /* `T1_Blend_Flags' values instead */ + /* `T1_Blend_Flags` values instead */ #define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION #define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS #define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE @@ -272,72 +269,23 @@ FT_BEGIN_HEADER /* */ - /* maximum number of Multiple Masters designs, as defined in the spec */ -#define T1_MAX_MM_DESIGNS 16 - - /* maximum number of Multiple Masters axes, as defined in the spec */ -#define T1_MAX_MM_AXIS 4 - - /* maximum number of elements in a design map */ -#define T1_MAX_MM_MAP_POINTS 20 - - - /* this structure is used to store the BlendDesignMap entry for an axis */ - typedef struct PS_DesignMap_ - { - FT_Byte num_points; - FT_Long* design_points; - FT_Fixed* blend_points; - - } PS_DesignMapRec, *PS_DesignMap; - - /* backwards-compatible definition */ - typedef PS_DesignMapRec T1_DesignMap; - - - typedef struct PS_BlendRec_ - { - FT_UInt num_designs; - FT_UInt num_axis; - - FT_String* axis_names[T1_MAX_MM_AXIS]; - FT_Fixed* design_pos[T1_MAX_MM_DESIGNS]; - PS_DesignMapRec design_map[T1_MAX_MM_AXIS]; - - FT_Fixed* weight_vector; - FT_Fixed* default_weight_vector; - - PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1]; - PS_Private privates [T1_MAX_MM_DESIGNS + 1]; - - FT_ULong blend_bitflags; - - FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1]; - - /* since 2.3.0 */ - - /* undocumented, optional: the default design instance; */ - /* corresponds to default_weight_vector -- */ - /* num_default_design_vector == 0 means it is not present */ - /* in the font and associated metrics files */ - FT_UInt default_design_vector[T1_MAX_MM_DESIGNS]; - FT_UInt num_default_design_vector; - - } PS_BlendRec, *PS_Blend; - - - /* backwards-compatible definition */ - typedef PS_BlendRec T1_Blend; - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceDictRec */ - /* */ - /* <Description> */ - /* A structure used to represent data in a CID top-level dictionary. */ - /* */ + /************************************************************************** + * + * @struct: + * CID_FaceDictRec + * + * @description: + * A structure used to represent data in a CID top-level dictionary. In + * most cases, they are part of the font's '/FDArray' array. Within a + * CID font file, such (internal) subfont dictionaries are enclosed by + * '%ADOBeginFontDict' and '%ADOEndFontDict' comments. + * + * Note that `CID_FaceDictRec` misses a field for the '/FontName' + * keyword, specifying the subfont's name (the top-level font name is + * given by the '/CIDFontName' keyword). This is an oversight, but it + * doesn't limit the 'cid' font module's functionality because FreeType + * neither needs this entry nor gives access to CID subfonts. + */ typedef struct CID_FaceDictRec_ { PS_PrivateRec private_dict; @@ -345,8 +293,8 @@ FT_BEGIN_HEADER FT_UInt len_buildchar; FT_Fixed forcebold_threshold; FT_Pos stroke_width; - FT_Fixed expansion_factor; - + FT_Fixed expansion_factor; /* this is a duplicate of */ + /* `private_dict->expansion_factor' */ FT_Byte paint_type; FT_Byte font_type; FT_Matrix font_matrix; @@ -354,43 +302,43 @@ FT_BEGIN_HEADER FT_UInt num_subrs; FT_ULong subrmap_offset; - FT_Int sd_bytes; + FT_UInt sd_bytes; } CID_FaceDictRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceDict */ - /* */ - /* <Description> */ - /* A handle to a @CID_FaceDictRec structure. */ - /* */ + /************************************************************************** + * + * @struct: + * CID_FaceDict + * + * @description: + * A handle to a @CID_FaceDictRec structure. + */ typedef struct CID_FaceDictRec_* CID_FaceDict; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FontDict */ - /* */ - /* <Description> */ - /* This type is equivalent to @CID_FaceDictRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ + /************************************************************************** + * + * @struct: + * CID_FontDict + * + * @description: + * This type is equivalent to @CID_FaceDictRec. It is deprecated but + * kept to maintain source compatibility between various versions of + * FreeType. + */ typedef CID_FaceDictRec CID_FontDict; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceInfoRec */ - /* */ - /* <Description> */ - /* A structure used to represent CID Face information. */ - /* */ + /************************************************************************** + * + * @struct: + * CID_FaceInfoRec + * + * @description: + * A structure used to represent CID Face information. + */ typedef struct CID_FaceInfoRec_ { FT_String* cid_font_name; @@ -409,11 +357,11 @@ FT_BEGIN_HEADER FT_ULong xuid[16]; FT_ULong cidmap_offset; - FT_Int fd_bytes; - FT_Int gd_bytes; + FT_UInt fd_bytes; + FT_UInt gd_bytes; FT_ULong cid_count; - FT_Int num_dicts; + FT_UInt num_dicts; CID_FaceDict font_dicts; FT_ULong data_offset; @@ -421,83 +369,91 @@ FT_BEGIN_HEADER } CID_FaceInfoRec; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_FaceInfo */ - /* */ - /* <Description> */ - /* A handle to a @CID_FaceInfoRec structure. */ - /* */ + /************************************************************************** + * + * @struct: + * CID_FaceInfo + * + * @description: + * A handle to a @CID_FaceInfoRec structure. + */ typedef struct CID_FaceInfoRec_* CID_FaceInfo; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* CID_Info */ - /* */ - /* <Description> */ - /* This type is equivalent to @CID_FaceInfoRec. It is deprecated but */ - /* kept to maintain source compatibility between various versions of */ - /* FreeType. */ - /* */ + /************************************************************************** + * + * @struct: + * CID_Info + * + * @description: + * This type is equivalent to @CID_FaceInfoRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ typedef CID_FaceInfoRec CID_Info; - /************************************************************************ + /************************************************************************** * * @function: - * FT_Has_PS_Glyph_Names + * FT_Has_PS_Glyph_Names * * @description: - * Return true if a given face provides reliable PostScript glyph - * names. This is similar to using the @FT_HAS_GLYPH_NAMES macro, - * except that certain fonts (mostly TrueType) contain incorrect - * glyph name tables. + * Return true if a given face provides reliable PostScript glyph names. + * This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that + * certain fonts (mostly TrueType) contain incorrect glyph name tables. * - * When this function returns true, the caller is sure that the glyph - * names returned by @FT_Get_Glyph_Name are reliable. + * When this function returns true, the caller is sure that the glyph + * names returned by @FT_Get_Glyph_Name are reliable. * * @input: - * face :: - * face handle + * face :: + * face handle * * @return: - * Boolean. True if glyph names are reliable. + * Boolean. True if glyph names are reliable. * */ FT_EXPORT( FT_Int ) FT_Has_PS_Glyph_Names( FT_Face face ); - /************************************************************************ + /************************************************************************** * * @function: - * FT_Get_PS_Font_Info + * FT_Get_PS_Font_Info * * @description: - * Retrieve the @PS_FontInfoRec structure corresponding to a given - * PostScript font. + * Retrieve the @PS_FontInfoRec structure corresponding to a given + * PostScript font. * * @input: - * face :: - * PostScript face handle. + * face :: + * PostScript face handle. * * @output: - * afont_info :: - * Output font info structure pointer. + * afont_info :: + * A pointer to a @PS_FontInfoRec object. * * @return: - * FreeType error code. 0~means success. + * FreeType error code. 0~means success. * * @note: - * String pointers within the @PS_FontInfoRec structure are owned by - * the face and don't need to be freed by the caller. Missing entries - * in the font's FontInfo dictionary are represented by NULL pointers. + * String pointers within the @PS_FontInfoRec structure are owned by the + * face and don't need to be freed by the caller. Missing entries in the + * font's FontInfo dictionary are represented by `NULL` pointers. + * + * The following font formats support this feature: 'Type~1', 'Type~42', + * 'CFF', 'CID~Type~1'. For other font formats this function returns the + * `FT_Err_Invalid_Argument` error code. + * + * @example: + * ``` + * PS_FontInfoRec font_info; + * * - * If the font's format is not PostScript-based, this function will - * return the `FT_Err_Invalid_Argument' error code. + * error = FT_Get_PS_Font_Info( face, &font_info ); + * ... + * ``` * */ FT_EXPORT( FT_Error ) @@ -505,32 +461,42 @@ FT_BEGIN_HEADER PS_FontInfo afont_info ); - /************************************************************************ + /************************************************************************** * * @function: - * FT_Get_PS_Font_Private + * FT_Get_PS_Font_Private * * @description: - * Retrieve the @PS_PrivateRec structure corresponding to a given - * PostScript font. + * Retrieve the @PS_PrivateRec structure corresponding to a given + * PostScript font. * * @input: - * face :: - * PostScript face handle. + * face :: + * PostScript face handle. * * @output: - * afont_private :: - * Output private dictionary structure pointer. + * afont_private :: + * A pointer to a @PS_PrivateRec object. * * @return: - * FreeType error code. 0~means success. + * FreeType error code. 0~means success. * * @note: - * The string pointers within the @PS_PrivateRec structure are owned by - * the face and don't need to be freed by the caller. + * The string pointers within the @PS_PrivateRec structure are owned by + * the face and don't need to be freed by the caller. * - * If the font's format is not PostScript-based, this function returns - * the `FT_Err_Invalid_Argument' error code. + * Only the 'Type~1' font format supports this feature. For other font + * formats this function returns the `FT_Err_Invalid_Argument` error + * code. + * + * @example: + * ``` + * PS_PrivateRec font_private; + * + * + * error = FT_Get_PS_Font_Private( face, &font_private ); + * ... + * ``` * */ FT_EXPORT( FT_Error ) @@ -538,22 +504,24 @@ FT_BEGIN_HEADER PS_Private afont_private ); - /*************************************************************************/ - /* */ - /* <Enum> */ - /* T1_EncodingType */ - /* */ - /* <Description> */ - /* An enumeration describing the `Encoding' entry in a Type 1 */ - /* dictionary. */ - /* */ - /* <Values> */ - /* T1_ENCODING_TYPE_NONE :: */ - /* T1_ENCODING_TYPE_ARRAY :: */ - /* T1_ENCODING_TYPE_STANDARD :: */ - /* T1_ENCODING_TYPE_ISOLATIN1 :: */ - /* T1_ENCODING_TYPE_EXPERT :: */ - /* */ + /************************************************************************** + * + * @enum: + * T1_EncodingType + * + * @description: + * An enumeration describing the 'Encoding' entry in a Type 1 dictionary. + * + * @values: + * T1_ENCODING_TYPE_NONE :: + * T1_ENCODING_TYPE_ARRAY :: + * T1_ENCODING_TYPE_STANDARD :: + * T1_ENCODING_TYPE_ISOLATIN1 :: + * T1_ENCODING_TYPE_EXPERT :: + * + * @since: + * 2.4.8 + */ typedef enum T1_EncodingType_ { T1_ENCODING_TYPE_NONE = 0, @@ -565,63 +533,66 @@ FT_BEGIN_HEADER } T1_EncodingType; - /*************************************************************************/ - /* */ - /* <Enum> */ - /* PS_Dict_Keys */ - /* */ - /* <Description> */ - /* An enumeration used in calls to @FT_Get_PS_Font_Value to identify */ - /* the Type~1 dictionary entry to retrieve. */ - /* */ - /* <Values> */ - /* PS_DICT_FONT_TYPE :: */ - /* PS_DICT_FONT_MATRIX :: */ - /* PS_DICT_FONT_BBOX :: */ - /* PS_DICT_PAINT_TYPE :: */ - /* PS_DICT_FONT_NAME :: */ - /* PS_DICT_UNIQUE_ID :: */ - /* PS_DICT_NUM_CHAR_STRINGS :: */ - /* PS_DICT_CHAR_STRING_KEY :: */ - /* PS_DICT_CHAR_STRING :: */ - /* PS_DICT_ENCODING_TYPE :: */ - /* PS_DICT_ENCODING_ENTRY :: */ - /* PS_DICT_NUM_SUBRS :: */ - /* PS_DICT_SUBR :: */ - /* PS_DICT_STD_HW :: */ - /* PS_DICT_STD_VW :: */ - /* PS_DICT_NUM_BLUE_VALUES :: */ - /* PS_DICT_BLUE_VALUE :: */ - /* PS_DICT_BLUE_FUZZ :: */ - /* PS_DICT_NUM_OTHER_BLUES :: */ - /* PS_DICT_OTHER_BLUE :: */ - /* PS_DICT_NUM_FAMILY_BLUES :: */ - /* PS_DICT_FAMILY_BLUE :: */ - /* PS_DICT_NUM_FAMILY_OTHER_BLUES :: */ - /* PS_DICT_FAMILY_OTHER_BLUE :: */ - /* PS_DICT_BLUE_SCALE :: */ - /* PS_DICT_BLUE_SHIFT :: */ - /* PS_DICT_NUM_STEM_SNAP_H :: */ - /* PS_DICT_STEM_SNAP_H :: */ - /* PS_DICT_NUM_STEM_SNAP_V :: */ - /* PS_DICT_STEM_SNAP_V :: */ - /* PS_DICT_FORCE_BOLD :: */ - /* PS_DICT_RND_STEM_UP :: */ - /* PS_DICT_MIN_FEATURE :: */ - /* PS_DICT_LEN_IV :: */ - /* PS_DICT_PASSWORD :: */ - /* PS_DICT_LANGUAGE_GROUP :: */ - /* PS_DICT_VERSION :: */ - /* PS_DICT_NOTICE :: */ - /* PS_DICT_FULL_NAME :: */ - /* PS_DICT_FAMILY_NAME :: */ - /* PS_DICT_WEIGHT :: */ - /* PS_DICT_IS_FIXED_PITCH :: */ - /* PS_DICT_UNDERLINE_POSITION :: */ - /* PS_DICT_UNDERLINE_THICKNESS :: */ - /* PS_DICT_FS_TYPE :: */ - /* PS_DICT_ITALIC_ANGLE :: */ - /* */ + /************************************************************************** + * + * @enum: + * PS_Dict_Keys + * + * @description: + * An enumeration used in calls to @FT_Get_PS_Font_Value to identify the + * Type~1 dictionary entry to retrieve. + * + * @values: + * PS_DICT_FONT_TYPE :: + * PS_DICT_FONT_MATRIX :: + * PS_DICT_FONT_BBOX :: + * PS_DICT_PAINT_TYPE :: + * PS_DICT_FONT_NAME :: + * PS_DICT_UNIQUE_ID :: + * PS_DICT_NUM_CHAR_STRINGS :: + * PS_DICT_CHAR_STRING_KEY :: + * PS_DICT_CHAR_STRING :: + * PS_DICT_ENCODING_TYPE :: + * PS_DICT_ENCODING_ENTRY :: + * PS_DICT_NUM_SUBRS :: + * PS_DICT_SUBR :: + * PS_DICT_STD_HW :: + * PS_DICT_STD_VW :: + * PS_DICT_NUM_BLUE_VALUES :: + * PS_DICT_BLUE_VALUE :: + * PS_DICT_BLUE_FUZZ :: + * PS_DICT_NUM_OTHER_BLUES :: + * PS_DICT_OTHER_BLUE :: + * PS_DICT_NUM_FAMILY_BLUES :: + * PS_DICT_FAMILY_BLUE :: + * PS_DICT_NUM_FAMILY_OTHER_BLUES :: + * PS_DICT_FAMILY_OTHER_BLUE :: + * PS_DICT_BLUE_SCALE :: + * PS_DICT_BLUE_SHIFT :: + * PS_DICT_NUM_STEM_SNAP_H :: + * PS_DICT_STEM_SNAP_H :: + * PS_DICT_NUM_STEM_SNAP_V :: + * PS_DICT_STEM_SNAP_V :: + * PS_DICT_FORCE_BOLD :: + * PS_DICT_RND_STEM_UP :: + * PS_DICT_MIN_FEATURE :: + * PS_DICT_LEN_IV :: + * PS_DICT_PASSWORD :: + * PS_DICT_LANGUAGE_GROUP :: + * PS_DICT_VERSION :: + * PS_DICT_NOTICE :: + * PS_DICT_FULL_NAME :: + * PS_DICT_FAMILY_NAME :: + * PS_DICT_WEIGHT :: + * PS_DICT_IS_FIXED_PITCH :: + * PS_DICT_UNDERLINE_POSITION :: + * PS_DICT_UNDERLINE_THICKNESS :: + * PS_DICT_FS_TYPE :: + * PS_DICT_ITALIC_ANGLE :: + * + * @since: + * 2.4.8 + */ typedef enum PS_Dict_Keys_ { /* conventionally in the font dictionary */ @@ -681,67 +652,70 @@ FT_BEGIN_HEADER } PS_Dict_Keys; - /************************************************************************ + /************************************************************************** * * @function: - * FT_Get_PS_Font_Value + * FT_Get_PS_Font_Value * * @description: - * Retrieve the value for the supplied key from a PostScript font. + * Retrieve the value for the supplied key from a PostScript font. * * @input: - * face :: - * PostScript face handle. + * face :: + * PostScript face handle. * - * key :: - * An enumeration value representing the dictionary key to retrieve. + * key :: + * An enumeration value representing the dictionary key to retrieve. * - * idx :: - * For array values, this specifies the index to be returned. + * idx :: + * For array values, this specifies the index to be returned. * - * value :: - * A pointer to memory into which to write the value. + * value :: + * A pointer to memory into which to write the value. * - * valen_len :: - * The size, in bytes, of the memory supplied for the value. + * valen_len :: + * The size, in bytes, of the memory supplied for the value. * * @output: - * value :: - * The value matching the above key, if it exists. + * value :: + * The value matching the above key, if it exists. * * @return: - * The amount of memory (in bytes) required to hold the requested - * value (if it exists, -1 otherwise). + * The amount of memory (in bytes) required to hold the requested value + * (if it exists, -1 otherwise). * * @note: - * The values returned are not pointers into the internal structures of - * the face, but are `fresh' copies, so that the memory containing them - * belongs to the calling application. This also enforces the - * `read-only' nature of these values, i.e., this function cannot be - * used to manipulate the face. - * - * `value' is a void pointer because the values returned can be of - * various types. - * - * If either `value' is NULL or `value_len' is too small, just the - * required memory size for the requested entry is returned. - * - * The `idx' parameter is used, not only to retrieve elements of, for - * example, the FontMatrix or FontBBox, but also to retrieve name keys - * from the CharStrings dictionary, and the charstrings themselves. It - * is ignored for atomic values. - * - * PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To - * get the value as in the font stream, you need to divide by - * 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale). - * - * IMPORTANT: Only key/value pairs read by the FreeType interpreter can - * be retrieved. So, for example, PostScript procedures such as NP, - * ND, and RD are not available. Arbitrary keys are, obviously, not be - * available either. - * - * If the font's format is not PostScript-based, this function returns - * the `FT_Err_Invalid_Argument' error code. + * The values returned are not pointers into the internal structures of + * the face, but are 'fresh' copies, so that the memory containing them + * belongs to the calling application. This also enforces the + * 'read-only' nature of these values, i.e., this function cannot be + * used to manipulate the face. + * + * `value` is a void pointer because the values returned can be of + * various types. + * + * If either `value` is `NULL` or `value_len` is too small, just the + * required memory size for the requested entry is returned. + * + * The `idx` parameter is used, not only to retrieve elements of, for + * example, the FontMatrix or FontBBox, but also to retrieve name keys + * from the CharStrings dictionary, and the charstrings themselves. It + * is ignored for atomic values. + * + * `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000. To + * get the value as in the font stream, you need to divide by 65536000.0 + * (to remove the FT_Fixed scale, and the x1000 scale). + * + * IMPORTANT: Only key/value pairs read by the FreeType interpreter can + * be retrieved. So, for example, PostScript procedures such as NP, ND, + * and RD are not available. Arbitrary keys are, obviously, not be + * available either. + * + * If the font's format is not PostScript-based, this function returns + * the `FT_Err_Invalid_Argument` error code. + * + * @since: + * 2.4.8 * */ FT_EXPORT( FT_Long ) diff --git a/non-source/foreign/freetype2/freetype/ttnameid.h b/non-source/foreign/freetype2/freetype/ttnameid.h index ce707f164..d5d470e38 100644 --- a/non-source/foreign/freetype2/freetype/ttnameid.h +++ b/non-source/foreign/freetype2/freetype/ttnameid.h @@ -1,78 +1,78 @@ -/***************************************************************************/ -/* */ -/* ttnameid.h */ -/* */ -/* TrueType name ID definitions (specification only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * ttnameid.h + * + * TrueType name ID definitions (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef TTNAMEID_H_ #define TTNAMEID_H_ -#include <ft2build.h> FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* truetype_tables */ - /* */ + /************************************************************************** + * + * @section: + * truetype_tables + */ - /*************************************************************************/ - /* */ - /* Possible values for the `platform' identifier code in the name */ - /* records of the TTF `name' table. */ - /* */ - /*************************************************************************/ + /************************************************************************** + * + * Possible values for the 'platform' identifier code in the name records + * of an SFNT 'name' table. + * + */ - /*********************************************************************** + /************************************************************************** * * @enum: * TT_PLATFORM_XXX * * @description: - * A list of valid values for the `platform_id' identifier code in + * A list of valid values for the `platform_id` identifier code in * @FT_CharMapRec and @FT_SfntName structures. * * @values: * TT_PLATFORM_APPLE_UNICODE :: * Used by Apple to indicate a Unicode character map and/or name entry. - * See @TT_APPLE_ID_XXX for corresponding `encoding_id' values. Note + * See @TT_APPLE_ID_XXX for corresponding `encoding_id` values. Note * that name entries in this format are coded as big-endian UCS-2 * character codes _only_. * * TT_PLATFORM_MACINTOSH :: - * Used by Apple to indicate a MacOS-specific charmap and/or name entry. - * See @TT_MAC_ID_XXX for corresponding `encoding_id' values. Note that - * most TrueType fonts contain an Apple roman charmap to be usable on - * MacOS systems (even if they contain a Microsoft charmap as well). + * Used by Apple to indicate a MacOS-specific charmap and/or name + * entry. See @TT_MAC_ID_XXX for corresponding `encoding_id` values. + * Note that most TrueType fonts contain an Apple roman charmap to be + * usable on MacOS systems (even if they contain a Microsoft charmap as + * well). * * TT_PLATFORM_ISO :: - * This value was used to specify ISO/IEC 10646 charmaps. It is however - * now deprecated. See @TT_ISO_ID_XXX for a list of corresponding - * `encoding_id' values. + * This value was used to specify ISO/IEC 10646 charmaps. It is + * however now deprecated. See @TT_ISO_ID_XXX for a list of + * corresponding `encoding_id` values. * * TT_PLATFORM_MICROSOFT :: * Used by Microsoft to indicate Windows-specific charmaps. See - * @TT_MS_ID_XXX for a list of corresponding `encoding_id' values. + * @TT_MS_ID_XXX for a list of corresponding `encoding_id` values. * Note that most fonts contain a Unicode charmap using - * (TT_PLATFORM_MICROSOFT, @TT_MS_ID_UNICODE_CS). + * (`TT_PLATFORM_MICROSOFT`, @TT_MS_ID_UNICODE_CS). * * TT_PLATFORM_CUSTOM :: * Used to indicate application-specific charmaps. @@ -91,13 +91,13 @@ FT_BEGIN_HEADER #define TT_PLATFORM_ADOBE 7 /* artificial */ - /*********************************************************************** + /************************************************************************** * * @enum: * TT_APPLE_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for + * A list of valid values for the `encoding_id` for * @TT_PLATFORM_APPLE_UNICODE charmaps and name entries. * * @values: @@ -117,62 +117,31 @@ FT_BEGIN_HEADER * Unicode 3.1 and beyond, using UTF-32. * * TT_APPLE_ID_VARIANT_SELECTOR :: - * From Adobe, not Apple. Not a normal cmap. Specifies variations - * on a real cmap. + * From Adobe, not Apple. Not a normal cmap. Specifies variations on + * a real cmap. + * + * TT_APPLE_ID_FULL_UNICODE :: + * Used for fallback fonts that provide complete Unicode coverage with + * a type~13 cmap. */ -#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ -#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ -#define TT_APPLE_ID_ISO_10646 2 /* deprecated */ -#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ +#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ +#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ +#define TT_APPLE_ID_ISO_10646 2 /* deprecated */ +#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ #define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */ -#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */ +#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */ +#define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */ - /*********************************************************************** + /************************************************************************** * * @enum: * TT_MAC_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for + * A list of valid values for the `encoding_id` for * @TT_PLATFORM_MACINTOSH charmaps and name entries. - * - * @values: - * TT_MAC_ID_ROMAN :: - * TT_MAC_ID_JAPANESE :: - * TT_MAC_ID_TRADITIONAL_CHINESE :: - * TT_MAC_ID_KOREAN :: - * TT_MAC_ID_ARABIC :: - * TT_MAC_ID_HEBREW :: - * TT_MAC_ID_GREEK :: - * TT_MAC_ID_RUSSIAN :: - * TT_MAC_ID_RSYMBOL :: - * TT_MAC_ID_DEVANAGARI :: - * TT_MAC_ID_GURMUKHI :: - * TT_MAC_ID_GUJARATI :: - * TT_MAC_ID_ORIYA :: - * TT_MAC_ID_BENGALI :: - * TT_MAC_ID_TAMIL :: - * TT_MAC_ID_TELUGU :: - * TT_MAC_ID_KANNADA :: - * TT_MAC_ID_MALAYALAM :: - * TT_MAC_ID_SINHALESE :: - * TT_MAC_ID_BURMESE :: - * TT_MAC_ID_KHMER :: - * TT_MAC_ID_THAI :: - * TT_MAC_ID_LAOTIAN :: - * TT_MAC_ID_GEORGIAN :: - * TT_MAC_ID_ARMENIAN :: - * TT_MAC_ID_MALDIVIAN :: - * TT_MAC_ID_SIMPLIFIED_CHINESE :: - * TT_MAC_ID_TIBETAN :: - * TT_MAC_ID_MONGOLIAN :: - * TT_MAC_ID_GEEZ :: - * TT_MAC_ID_SLAVIC :: - * TT_MAC_ID_VIETNAMESE :: - * TT_MAC_ID_SINDHI :: - * TT_MAC_ID_UNINTERP :: */ #define TT_MAC_ID_ROMAN 0 @@ -211,14 +180,14 @@ FT_BEGIN_HEADER #define TT_MAC_ID_UNINTERP 32 - /*********************************************************************** + /************************************************************************** * * @enum: * TT_ISO_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_ISO charmaps and name entries. + * A list of valid values for the `encoding_id` for @TT_PLATFORM_ISO + * charmaps and name entries. * * Their use is now deprecated. * @@ -236,64 +205,66 @@ FT_BEGIN_HEADER #define TT_ISO_ID_8859_1 2 - /*********************************************************************** + /************************************************************************** * * @enum: * TT_MS_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for + * A list of valid values for the `encoding_id` for * @TT_PLATFORM_MICROSOFT charmaps and name entries. * * @values: * TT_MS_ID_SYMBOL_CS :: - * Corresponds to Microsoft symbol encoding. See - * @FT_ENCODING_MS_SYMBOL. + * Microsoft symbol encoding. See @FT_ENCODING_MS_SYMBOL. * * TT_MS_ID_UNICODE_CS :: - * Corresponds to a Microsoft WGL4 charmap, matching Unicode. See - * @FT_ENCODING_UNICODE. + * Microsoft WGL4 charmap, matching Unicode. See @FT_ENCODING_UNICODE. * * TT_MS_ID_SJIS :: - * Corresponds to SJIS Japanese encoding. See @FT_ENCODING_SJIS. + * Shift JIS Japanese encoding. See @FT_ENCODING_SJIS. * - * TT_MS_ID_GB2312 :: - * Corresponds to Simplified Chinese as used in Mainland China. See - * @FT_ENCODING_GB2312. + * TT_MS_ID_PRC :: + * Chinese encodings as used in the People's Republic of China (PRC). + * This means the encodings GB~2312 and its supersets GBK and GB~18030. + * See @FT_ENCODING_PRC. * * TT_MS_ID_BIG_5 :: - * Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. - * See @FT_ENCODING_BIG5. + * Traditional Chinese as used in Taiwan and Hong Kong. See + * @FT_ENCODING_BIG5. * * TT_MS_ID_WANSUNG :: - * Corresponds to Korean Wansung encoding. See @FT_ENCODING_WANSUNG. + * Korean Extended Wansung encoding. See @FT_ENCODING_WANSUNG. * * TT_MS_ID_JOHAB :: - * Corresponds to Johab encoding. See @FT_ENCODING_JOHAB. + * Korean Johab encoding. See @FT_ENCODING_JOHAB. * * TT_MS_ID_UCS_4 :: - * Corresponds to UCS-4 or UTF-32 charmaps. This has been added to - * the OpenType specification version 1.4 (mid-2001.) + * UCS-4 or UTF-32 charmaps. This has been added to the OpenType + * specification version 1.4 (mid-2001). */ #define TT_MS_ID_SYMBOL_CS 0 #define TT_MS_ID_UNICODE_CS 1 #define TT_MS_ID_SJIS 2 -#define TT_MS_ID_GB2312 3 +#define TT_MS_ID_PRC 3 #define TT_MS_ID_BIG_5 4 #define TT_MS_ID_WANSUNG 5 #define TT_MS_ID_JOHAB 6 #define TT_MS_ID_UCS_4 10 + /* this value is deprecated */ +#define TT_MS_ID_GB2312 TT_MS_ID_PRC + - /*********************************************************************** + /************************************************************************** * * @enum: * TT_ADOBE_ID_XXX * * @description: - * A list of valid values for the `encoding_id' for - * @TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific extension! + * A list of valid values for the `encoding_id` for @TT_PLATFORM_ADOBE + * charmaps. This is a FreeType-specific extension! * * @values: * TT_ADOBE_ID_STANDARD :: @@ -312,17 +283,22 @@ FT_BEGIN_HEADER #define TT_ADOBE_ID_LATIN_1 3 - /*************************************************************************/ - /* */ - /* Possible values of the language identifier field in the name records */ - /* of the TTF `name' table if the `platform' identifier code is */ - /* TT_PLATFORM_MACINTOSH. These values are also used as return values */ - /* for function @FT_Get_CMap_Language_ID. */ - /* */ - /* The canonical source for the Apple assigned Language ID's is at */ - /* */ - /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html */ - /* */ + /************************************************************************** + * + * @enum: + * TT_MAC_LANGID_XXX + * + * @description: + * Possible values of the language identifier field in the name records + * of the SFNT 'name' table if the 'platform' identifier code is + * @TT_PLATFORM_MACINTOSH. These values are also used as return values + * for function @FT_Get_CMap_Language_ID. + * + * The canonical source for Apple's IDs is + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html + */ + #define TT_MAC_LANGID_ENGLISH 0 #define TT_MAC_LANGID_FRENCH 1 #define TT_MAC_LANGID_GERMAN 2 @@ -433,15 +409,6 @@ FT_BEGIN_HEADER #define TT_MAC_LANGID_JAVANESE 138 #define TT_MAC_LANGID_SUNDANESE 139 - -#if 0 /* these seem to be errors that have been dropped */ - -#define TT_MAC_LANGID_SCOTTISH_GAELIC 140 -#define TT_MAC_LANGID_IRISH_GAELIC 141 - -#endif - - /* The following codes are new as of 2000-03-10 */ #define TT_MAC_LANGID_GALICIAN 140 #define TT_MAC_LANGID_AFRIKAANS 141 @@ -456,18 +423,30 @@ FT_BEGIN_HEADER #define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150 - /*************************************************************************/ - /* */ - /* Possible values of the language identifier field in the name records */ - /* of the TTF `name' table if the `platform' identifier code is */ - /* TT_PLATFORM_MICROSOFT. */ - /* */ - /* The canonical source for the MS assigned LCIDs is */ - /* */ - /* http://www.microsoft.com/globaldev/reference/lcid-all.mspx */ - /* */ + /************************************************************************** + * + * @enum: + * TT_MS_LANGID_XXX + * + * @description: + * Possible values of the language identifier field in the name records + * of the SFNT 'name' table if the 'platform' identifier code is + * @TT_PLATFORM_MICROSOFT. These values are also used as return values + * for function @FT_Get_CMap_Language_ID. + * + * The canonical source for Microsoft's IDs is + * + * https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings , + * + * however, we only provide macros for language identifiers present in + * the OpenType specification: Microsoft has abandoned the concept of + * LCIDs (language code identifiers), and format~1 of the 'name' table + * provides a better mechanism for languages not covered here. + * + * More legacy values not listed in the reference can be found in the + * @FT_TRUETYPE_IDS_H header file. + */ -#define TT_MS_LANGID_ARABIC_GENERAL 0x0001 #define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401 #define TT_MS_LANGID_ARABIC_IRAQ 0x0801 #define TT_MS_LANGID_ARABIC_EGYPT 0x0C01 @@ -485,39 +464,20 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01 #define TT_MS_LANGID_ARABIC_QATAR 0x4001 #define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402 -#define TT_MS_LANGID_CATALAN_SPAIN 0x0403 -#define TT_MS_LANGID_CHINESE_GENERAL 0x0004 +#define TT_MS_LANGID_CATALAN_CATALAN 0x0403 #define TT_MS_LANGID_CHINESE_TAIWAN 0x0404 #define TT_MS_LANGID_CHINESE_PRC 0x0804 #define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04 #define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004 - -#if 1 /* this looks like the correct value */ -#define TT_MS_LANGID_CHINESE_MACAU 0x1404 -#else /* but beware, Microsoft may change its mind... - the most recent Word reference has the following: */ -#define TT_MS_LANGID_CHINESE_MACAU TT_MS_LANGID_CHINESE_HONG_KONG -#endif - -#if 0 /* used only with .NET `cultures'; commented out */ -#define TT_MS_LANGID_CHINESE_TRADITIONAL 0x7C04 -#endif - +#define TT_MS_LANGID_CHINESE_MACAO 0x1404 #define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405 #define TT_MS_LANGID_DANISH_DENMARK 0x0406 #define TT_MS_LANGID_GERMAN_GERMANY 0x0407 #define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807 #define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07 #define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007 -#define TT_MS_LANGID_GERMAN_LIECHTENSTEI 0x1407 +#define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407 #define TT_MS_LANGID_GREEK_GREECE 0x0408 - - /* don't ask what this one means... It is commented out currently. */ -#if 0 -#define TT_MS_LANGID_GREEK_GREECE2 0x2008 -#endif - -#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009 #define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409 #define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809 #define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09 @@ -531,14 +491,12 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09 #define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009 #define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409 -#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809 -#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09 #define TT_MS_LANGID_ENGLISH_INDIA 0x4009 #define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409 #define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809 #define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A #define TT_MS_LANGID_SPANISH_MEXICO 0x080A -#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT 0x0C0A +#define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A #define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A #define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A #define TT_MS_LANGID_SPANISH_PANAMA 0x180A @@ -557,9 +515,6 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A #define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A #define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A - /* The following ID blatantly violate MS specs by using a */ - /* sublanguage > 0x1F. */ -#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU #define TT_MS_LANGID_FINNISH_FINLAND 0x040B #define TT_MS_LANGID_FRENCH_FRANCE 0x040C #define TT_MS_LANGID_FRENCH_BELGIUM 0x080C @@ -567,27 +522,13 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C #define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C #define TT_MS_LANGID_FRENCH_MONACO 0x180C -#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C -#define TT_MS_LANGID_FRENCH_REUNION 0x200C -#define TT_MS_LANGID_FRENCH_CONGO 0x240C - /* which was formerly: */ -#define TT_MS_LANGID_FRENCH_ZAIRE TT_MS_LANGID_FRENCH_CONGO -#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C -#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C -#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C -#define TT_MS_LANGID_FRENCH_MALI 0x340C -#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C -#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C - /* and another violation of the spec (see 0xE40AU) */ -#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU #define TT_MS_LANGID_HEBREW_ISRAEL 0x040D #define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E #define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F #define TT_MS_LANGID_ITALIAN_ITALY 0x0410 #define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810 #define TT_MS_LANGID_JAPANESE_JAPAN 0x0411 -#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA 0x0412 -#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812 +#define TT_MS_LANGID_KOREAN_KOREA 0x0412 #define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413 #define TT_MS_LANGID_DUTCH_BELGIUM 0x0813 #define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414 @@ -595,26 +536,17 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_POLISH_POLAND 0x0415 #define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416 #define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816 -#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND 0x0417 +#define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417 #define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418 -#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818 #define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419 -#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819 #define TT_MS_LANGID_CROATIAN_CROATIA 0x041A #define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A #define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A - -#if 0 /* this used to be this value, but it looks like we were wrong */ -#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x101A -#else /* current sources say */ #define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A #define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A - /* and XPsp2 Platform SDK added (2004-07-26) */ - /* Names are shortened to be significant within 40 chars. */ #define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A -#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x181A -#endif - +#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A +#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A #define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B #define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C #define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D @@ -622,36 +554,30 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_THAI_THAILAND 0x041E #define TT_MS_LANGID_TURKISH_TURKEY 0x041F #define TT_MS_LANGID_URDU_PAKISTAN 0x0420 -#define TT_MS_LANGID_URDU_INDIA 0x0820 #define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421 #define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422 #define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423 -#define TT_MS_LANGID_SLOVENE_SLOVENIA 0x0424 +#define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424 #define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425 #define TT_MS_LANGID_LATVIAN_LATVIA 0x0426 #define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427 -#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827 #define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428 -#define TT_MS_LANGID_FARSI_IRAN 0x0429 #define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A #define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B #define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C #define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C -#define TT_MS_LANGID_BASQUE_SPAIN 0x042D -#define TT_MS_LANGID_SORBIAN_GERMANY 0x042E +#define TT_MS_LANGID_BASQUE_BASQUE 0x042D +#define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E +#define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E #define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F -#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430 -#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431 -#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA 0x0432 -#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433 -#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA 0x0434 -#define TT_MS_LANGID_ZULU_SOUTH_AFRICA 0x0435 +#define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432 +#define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434 +#define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435 #define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436 #define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437 #define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438 #define TT_MS_LANGID_HINDI_INDIA 0x0439 #define TT_MS_LANGID_MALTESE_MALTA 0x043A - /* Added by XPsp2 Platform SDK (2004-07-26) */ #define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B #define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B #define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B @@ -661,37 +587,21 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B #define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B #define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B - /* ... and we also keep our old identifier... */ -#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B - -#if 0 /* this seems to be a previous inversion */ -#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C -#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C -#else -#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C -#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C -#endif - -#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D +#define TT_MS_LANGID_IRISH_IRELAND 0x083C #define TT_MS_LANGID_MALAY_MALAYSIA 0x043E #define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E -#define TT_MS_LANGID_KAZAK_KAZAKSTAN 0x043F -#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN /* Cyrillic*/ 0x0440 - /* alias declared in Windows 2000 */ -#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \ - TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN - -#define TT_MS_LANGID_SWAHILI_KENYA 0x0441 +#define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F +#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic */ 0x0440 +#define TT_MS_LANGID_KISWAHILI_KENYA 0x0441 #define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442 #define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443 #define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843 -#define TT_MS_LANGID_TATAR_TATARSTAN 0x0444 +#define TT_MS_LANGID_TATAR_RUSSIA 0x0444 #define TT_MS_LANGID_BENGALI_INDIA 0x0445 #define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845 #define TT_MS_LANGID_PUNJABI_INDIA 0x0446 -#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846 #define TT_MS_LANGID_GUJARATI_INDIA 0x0447 -#define TT_MS_LANGID_ORIYA_INDIA 0x0448 +#define TT_MS_LANGID_ODIA_INDIA 0x0448 #define TT_MS_LANGID_TAMIL_INDIA 0x0449 #define TT_MS_LANGID_TELUGU_INDIA 0x044A #define TT_MS_LANGID_KANNADA_INDIA 0x044B @@ -700,142 +610,241 @@ FT_BEGIN_HEADER #define TT_MS_LANGID_MARATHI_INDIA 0x044E #define TT_MS_LANGID_SANSKRIT_INDIA 0x044F #define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450 -#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN 0x0850 -#define TT_MS_LANGID_TIBETAN_CHINA 0x0451 - /* Don't use the next constant! It has */ - /* (1) the wrong spelling (Dzonghka) */ - /* (2) Microsoft doesn't officially define it -- */ - /* at least it is not in the List of Local */ - /* ID Values. */ - /* (3) Dzongkha is not the same language as */ - /* Tibetan, so merging it is wrong anyway. */ - /* */ - /* TT_MS_LANGID_TIBETAN_BHUTAN is correct, BTW. */ -#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851 - -#if 0 - /* the following used to be defined */ -#define TT_MS_LANGID_TIBETAN_BHUTAN 0x0451 - /* ... but it was changed; */ -#else - /* So we will continue to #define it, but with the correct value */ -#define TT_MS_LANGID_TIBETAN_BHUTAN TT_MS_LANGID_DZONGHKA_BHUTAN -#endif - -#define TT_MS_LANGID_WELSH_WALES 0x0452 +#define TT_MS_LANGID_MONGOLIAN_PRC 0x0850 +#define TT_MS_LANGID_TIBETAN_PRC 0x0451 +#define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452 #define TT_MS_LANGID_KHMER_CAMBODIA 0x0453 #define TT_MS_LANGID_LAO_LAOS 0x0454 -#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455 -#define TT_MS_LANGID_GALICIAN_SPAIN 0x0456 +#define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456 #define TT_MS_LANGID_KONKANI_INDIA 0x0457 -#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458 -#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459 -#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859 - /* Missing a LCID for Sindhi in Devanagari script */ #define TT_MS_LANGID_SYRIAC_SYRIA 0x045A -#define TT_MS_LANGID_SINHALESE_SRI_LANKA 0x045B -#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C +#define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B #define TT_MS_LANGID_INUKTITUT_CANADA 0x045D +#define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D #define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E -#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F -#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN 0x085F - /* Missing a LCID for Tifinagh script */ -#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460 - /* Spelled this way by XPsp2 Platform SDK (2004-07-26) */ - /* script is yet unclear... might be Arabic, Nagari or Sharada */ -#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860 - /* ... and aliased (by MS) for compatibility reasons. */ -#define TT_MS_LANGID_KASHMIRI_INDIA TT_MS_LANGID_KASHMIRI_SASIA +#define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F #define TT_MS_LANGID_NEPALI_NEPAL 0x0461 -#define TT_MS_LANGID_NEPALI_INDIA 0x0861 #define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462 #define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463 #define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464 #define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465 - /* alias declared in Windows 2000 */ -#define TT_MS_LANGID_DIVEHI_MALDIVES TT_MS_LANGID_DHIVEHI_MALDIVES -#define TT_MS_LANGID_EDO_NIGERIA 0x0466 -#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467 #define TT_MS_LANGID_HAUSA_NIGERIA 0x0468 -#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469 #define TT_MS_LANGID_YORUBA_NIGERIA 0x046A #define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B #define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B #define TT_MS_LANGID_QUECHUA_PERU 0x0C6B -#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA 0x046C - /* Also spelled by XPsp2 Platform SDK (2004-07-26) */ -#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \ - TT_MS_LANGID_SEPEDI_SOUTH_AFRICA - /* language codes 0x046D, 0x046E and 0x046F are (still) unknown. */ +#define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C +#define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D +#define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E +#define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F #define TT_MS_LANGID_IGBO_NIGERIA 0x0470 +#define TT_MS_LANGID_YI_PRC 0x0478 +#define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A +#define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C +#define TT_MS_LANGID_BRETON_FRANCE 0x047E +#define TT_MS_LANGID_UIGHUR_PRC 0x0480 +#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 +#define TT_MS_LANGID_OCCITAN_FRANCE 0x0482 +#define TT_MS_LANGID_CORSICAN_FRANCE 0x0483 +#define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484 +#define TT_MS_LANGID_YAKUT_RUSSIA 0x0485 +#define TT_MS_LANGID_KICHE_GUATEMALA 0x0486 +#define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487 +#define TT_MS_LANGID_WOLOF_SENEGAL 0x0488 +#define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C + + /* */ + + + /* legacy macro definitions not present in OpenType 1.8.1 */ +#define TT_MS_LANGID_ARABIC_GENERAL 0x0001 +#define TT_MS_LANGID_CATALAN_SPAIN \ + TT_MS_LANGID_CATALAN_CATALAN +#define TT_MS_LANGID_CHINESE_GENERAL 0x0004 +#define TT_MS_LANGID_CHINESE_MACAU \ + TT_MS_LANGID_CHINESE_MACAO +#define TT_MS_LANGID_GERMAN_LIECHTENSTEI \ + TT_MS_LANGID_GERMAN_LIECHTENSTEIN +#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009 +#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809 +#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09 +#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT \ + TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT +#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU +#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C +#define TT_MS_LANGID_FRENCH_REUNION 0x200C +#define TT_MS_LANGID_FRENCH_CONGO 0x240C + /* which was formerly: */ +#define TT_MS_LANGID_FRENCH_ZAIRE \ + TT_MS_LANGID_FRENCH_CONGO +#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C +#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C +#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C +#define TT_MS_LANGID_FRENCH_MALI 0x340C +#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C +#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C +#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU +#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA \ + TT_MS_LANGID_KOREAN_KOREA +#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812 +#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND \ + TT_MS_LANGID_ROMANSH_SWITZERLAND +#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818 +#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819 +#define TT_MS_LANGID_URDU_INDIA 0x0820 +#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827 +#define TT_MS_LANGID_SLOVENE_SLOVENIA \ + TT_MS_LANGID_SLOVENIAN_SLOVENIA +#define TT_MS_LANGID_FARSI_IRAN 0x0429 +#define TT_MS_LANGID_BASQUE_SPAIN \ + TT_MS_LANGID_BASQUE_BASQUE +#define TT_MS_LANGID_SORBIAN_GERMANY \ + TT_MS_LANGID_UPPER_SORBIAN_GERMANY +#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430 +#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431 +#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA \ + TT_MS_LANGID_SETSWANA_SOUTH_AFRICA +#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433 +#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA \ + TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA +#define TT_MS_LANGID_ZULU_SOUTH_AFRICA \ + TT_MS_LANGID_ISIZULU_SOUTH_AFRICA +#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B + /* the next two values are incorrectly inverted */ +#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C +#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C +#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D +#define TT_MS_LANGID_KAZAK_KAZAKSTAN \ + TT_MS_LANGID_KAZAKH_KAZAKHSTAN +#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \ + TT_MS_LANGID_KYRGYZ_KYRGYZSTAN +#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN \ + TT_MS_LANGID_KYRGYZ_KYRGYZSTAN +#define TT_MS_LANGID_SWAHILI_KENYA \ + TT_MS_LANGID_KISWAHILI_KENYA +#define TT_MS_LANGID_TATAR_TATARSTAN \ + TT_MS_LANGID_TATAR_RUSSIA +#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846 +#define TT_MS_LANGID_ORIYA_INDIA \ + TT_MS_LANGID_ODIA_INDIA +#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN \ + TT_MS_LANGID_MONGOLIAN_PRC +#define TT_MS_LANGID_TIBETAN_CHINA \ + TT_MS_LANGID_TIBETAN_PRC +#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851 +#define TT_MS_LANGID_TIBETAN_BHUTAN \ + TT_MS_LANGID_DZONGHKA_BHUTAN +#define TT_MS_LANGID_WELSH_WALES \ + TT_MS_LANGID_WELSH_UNITED_KINGDOM +#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455 +#define TT_MS_LANGID_GALICIAN_SPAIN \ + TT_MS_LANGID_GALICIAN_GALICIAN +#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458 +#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459 +#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859 +#define TT_MS_LANGID_SINHALESE_SRI_LANKA \ + TT_MS_LANGID_SINHALA_SRI_LANKA +#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C +#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F +#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN \ + TT_MS_LANGID_TAMAZIGHT_ALGERIA +#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460 +#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860 +#define TT_MS_LANGID_KASHMIRI_INDIA \ + TT_MS_LANGID_KASHMIRI_SASIA +#define TT_MS_LANGID_NEPALI_INDIA 0x0861 +#define TT_MS_LANGID_DIVEHI_MALDIVES \ + TT_MS_LANGID_DHIVEHI_MALDIVES +#define TT_MS_LANGID_EDO_NIGERIA 0x0466 +#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467 +#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469 +#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA \ + TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA +#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \ + TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA #define TT_MS_LANGID_KANURI_NIGERIA 0x0471 #define TT_MS_LANGID_OROMO_ETHIOPIA 0x0472 #define TT_MS_LANGID_TIGRIGNA_ETHIOPIA 0x0473 #define TT_MS_LANGID_TIGRIGNA_ERYTHREA 0x0873 - /* also spelled in the `Passport SDK' list as: */ -#define TT_MS_LANGID_TIGRIGNA_ERYTREA TT_MS_LANGID_TIGRIGNA_ERYTHREA +#define TT_MS_LANGID_TIGRIGNA_ERYTREA \ + TT_MS_LANGID_TIGRIGNA_ERYTHREA #define TT_MS_LANGID_GUARANI_PARAGUAY 0x0474 #define TT_MS_LANGID_HAWAIIAN_UNITED_STATES 0x0475 #define TT_MS_LANGID_LATIN 0x0476 #define TT_MS_LANGID_SOMALI_SOMALIA 0x0477 - /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */ - /* not written (but OTOH the peculiar writing system is worth */ - /* studying). */ -#define TT_MS_LANGID_YI_CHINA 0x0478 +#define TT_MS_LANGID_YI_CHINA \ + TT_MS_LANGID_YI_PRC #define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479 - /* language codes from 0x047A to 0x047F are (still) unknown. */ -#define TT_MS_LANGID_UIGHUR_CHINA 0x0480 -#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 +#define TT_MS_LANGID_UIGHUR_CHINA \ + TT_MS_LANGID_UIGHUR_PRC + + + /************************************************************************** + * + * @enum: + * TT_NAME_ID_XXX + * + * @description: + * Possible values of the 'name' identifier field in the name records of + * an SFNT 'name' table. These values are platform independent. + */ -#if 0 /* not deemed useful for fonts */ -#define TT_MS_LANGID_HUMAN_INTERFACE_DEVICE 0x04FF -#endif - - - /*************************************************************************/ - /* */ - /* Possible values of the `name' identifier field in the name records of */ - /* the TTF `name' table. These values are platform independent. */ - /* */ -#define TT_NAME_ID_COPYRIGHT 0 -#define TT_NAME_ID_FONT_FAMILY 1 -#define TT_NAME_ID_FONT_SUBFAMILY 2 -#define TT_NAME_ID_UNIQUE_ID 3 -#define TT_NAME_ID_FULL_NAME 4 -#define TT_NAME_ID_VERSION_STRING 5 -#define TT_NAME_ID_PS_NAME 6 -#define TT_NAME_ID_TRADEMARK 7 +#define TT_NAME_ID_COPYRIGHT 0 +#define TT_NAME_ID_FONT_FAMILY 1 +#define TT_NAME_ID_FONT_SUBFAMILY 2 +#define TT_NAME_ID_UNIQUE_ID 3 +#define TT_NAME_ID_FULL_NAME 4 +#define TT_NAME_ID_VERSION_STRING 5 +#define TT_NAME_ID_PS_NAME 6 +#define TT_NAME_ID_TRADEMARK 7 /* the following values are from the OpenType spec */ -#define TT_NAME_ID_MANUFACTURER 8 -#define TT_NAME_ID_DESIGNER 9 -#define TT_NAME_ID_DESCRIPTION 10 -#define TT_NAME_ID_VENDOR_URL 11 -#define TT_NAME_ID_DESIGNER_URL 12 -#define TT_NAME_ID_LICENSE 13 -#define TT_NAME_ID_LICENSE_URL 14 +#define TT_NAME_ID_MANUFACTURER 8 +#define TT_NAME_ID_DESIGNER 9 +#define TT_NAME_ID_DESCRIPTION 10 +#define TT_NAME_ID_VENDOR_URL 11 +#define TT_NAME_ID_DESIGNER_URL 12 +#define TT_NAME_ID_LICENSE 13 +#define TT_NAME_ID_LICENSE_URL 14 /* number 15 is reserved */ -#define TT_NAME_ID_PREFERRED_FAMILY 16 -#define TT_NAME_ID_PREFERRED_SUBFAMILY 17 -#define TT_NAME_ID_MAC_FULL_NAME 18 +#define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16 +#define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17 +#define TT_NAME_ID_MAC_FULL_NAME 18 /* The following code is new as of 2000-01-21 */ -#define TT_NAME_ID_SAMPLE_TEXT 19 +#define TT_NAME_ID_SAMPLE_TEXT 19 /* This is new in OpenType 1.3 */ -#define TT_NAME_ID_CID_FINDFONT_NAME 20 +#define TT_NAME_ID_CID_FINDFONT_NAME 20 /* This is new in OpenType 1.5 */ -#define TT_NAME_ID_WWS_FAMILY 21 -#define TT_NAME_ID_WWS_SUBFAMILY 22 +#define TT_NAME_ID_WWS_FAMILY 21 +#define TT_NAME_ID_WWS_SUBFAMILY 22 + + /* This is new in OpenType 1.7 */ +#define TT_NAME_ID_LIGHT_BACKGROUND 23 +#define TT_NAME_ID_DARK_BACKGROUND 24 + + /* This is new in OpenType 1.8 */ +#define TT_NAME_ID_VARIATIONS_PREFIX 25 + + /* these two values are deprecated */ +#define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY +#define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY + + /************************************************************************** + * + * @enum: + * TT_UCR_XXX + * + * @description: + * Possible bit mask values for the `ulUnicodeRangeX` fields in an SFNT + * 'OS/2' table. + */ - /*************************************************************************/ - /* */ - /* Bit mask values for the Unicode Ranges from the TTF `OS2 ' table. */ - /* */ - /* Updated 08-Nov-2008. */ - /* */ + /* ulUnicodeRange1 */ + /* --------------- */ /* Bit 0 Basic Latin */ #define TT_UCR_BASIC_LATIN (1L << 0) /* U+0020-U+007E */ @@ -857,7 +866,7 @@ FT_BEGIN_HEADER /* U+A700-U+A71F */ /* Bit 6 Combining Diacritical Marks */ /* Combining Diacritical Marks Supplement */ -#define TT_UCR_COMBINING_DIACRITICS (1L << 6) /* U+0300-U+036F */ +#define TT_UCR_COMBINING_DIACRITICAL_MARKS (1L << 6) /* U+0300-U+036F */ /* U+1DC0-U+1DFF */ /* Bit 7 Greek and Coptic */ #define TT_UCR_GREEK (1L << 7) /* U+0370-U+03FF */ @@ -925,12 +934,17 @@ FT_BEGIN_HEADER /* Supplemental Punctuation */ #define TT_UCR_GENERAL_PUNCTUATION (1L << 31) /* U+2000-U+206F */ /* U+2E00-U+2E7F */ + + /* ulUnicodeRange2 */ + /* --------------- */ + /* Bit 32 Superscripts And Subscripts */ #define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L << 0) /* U+2070-U+209F */ /* Bit 33 Currency Symbols */ #define TT_UCR_CURRENCY_SYMBOLS (1L << 1) /* U+20A0-U+20CF */ /* Bit 34 Combining Diacritical Marks For Symbols */ -#define TT_UCR_COMBINING_DIACRITICS_SYMB (1L << 2) /* U+20D0-U+20FF */ +#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \ + (1L << 2) /* U+20D0-U+20FF */ /* Bit 35 Letterlike Symbols */ #define TT_UCR_LETTERLIKE_SYMBOLS (1L << 3) /* U+2100-U+214F */ /* Bit 36 Number Forms */ @@ -996,13 +1010,13 @@ FT_BEGIN_HEADER /* Bit 57 High Surrogates */ /* High Private Use Surrogates */ /* Low Surrogates */ - /* */ + /* According to OpenType specs v.1.3+, */ /* setting bit 57 implies that there is */ /* at least one codepoint beyond the */ /* Basic Multilingual Plane that is */ /* supported by this font. So it really */ - /* means >= U+10000 */ + /* means >= U+10000. */ #define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DB7F */ /* U+DB80-U+DBFF */ /* U+DC00-U+DFFF */ @@ -1034,7 +1048,11 @@ FT_BEGIN_HEADER /* Bit 62 Alphabetic Presentation Forms */ #define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L << 30) /* U+FB00-U+FB4F */ /* Bit 63 Arabic Presentation Forms-A */ -#define TT_UCR_ARABIC_PRESENTATIONS_A (1L << 31) /* U+FB50-U+FDFF */ +#define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L << 31) /* U+FB50-U+FDFF */ + + /* ulUnicodeRange3 */ + /* --------------- */ + /* Bit 64 Combining Half Marks */ #define TT_UCR_COMBINING_HALF_MARKS (1L << 0) /* U+FE20-U+FE2F */ /* Bit 65 Vertical forms */ @@ -1044,7 +1062,7 @@ FT_BEGIN_HEADER /* Bit 66 Small Form Variants */ #define TT_UCR_SMALL_FORM_VARIANTS (1L << 2) /* U+FE50-U+FE6F */ /* Bit 67 Arabic Presentation Forms-B */ -#define TT_UCR_ARABIC_PRESENTATIONS_B (1L << 3) /* U+FE70-U+FEFE */ +#define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L << 3) /* U+FE70-U+FEFE */ /* Bit 68 Halfwidth and Fullwidth Forms */ #define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L << 4) /* U+FF00-U+FFEF */ /* Bit 69 Specials */ @@ -1123,6 +1141,10 @@ FT_BEGIN_HEADER #define TT_UCR_TAI_LE (1L << 30) /* U+1950-U+197F */ /* Bit 95 New Tai Lue */ #define TT_UCR_NEW_TAI_LUE (1L << 31) /* U+1980-U+19DF */ + + /* ulUnicodeRange4 */ + /* --------------- */ + /* Bit 96 Buginese */ #define TT_UCR_BUGINESE (1L << 0) /* U+1A00-U+1A1F */ /* Bit 97 Glagolitic */ @@ -1191,42 +1213,18 @@ FT_BEGIN_HEADER /*U+1F000-U+1F02F*/ /* Bit 123-127 Reserved for process-internal usage */ + /* */ - /*************************************************************************/ - /* */ - /* Some compilers have a very limited length of identifiers. */ - /* */ -#if defined( __TURBOC__ ) && __TURBOC__ < 0x0410 || defined( __PACIFIC__ ) -#define HAVE_LIMIT_ON_IDENTS -#endif - - -#ifndef HAVE_LIMIT_ON_IDENTS - - - /*************************************************************************/ - /* */ - /* Here some alias #defines in order to be clearer. */ - /* */ - /* These are not always #defined to stay within the 31~character limit, */ - /* which some compilers have. */ - /* */ - /* Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern */ - /* Borland compilers (read: from BC++ 3.1 on) can increase this limit. */ - /* If you get a warning with such a compiler, use the -i40 switch. */ - /* */ -#define TT_UCR_ARABIC_PRESENTATION_FORMS_A \ - TT_UCR_ARABIC_PRESENTATIONS_A -#define TT_UCR_ARABIC_PRESENTATION_FORMS_B \ - TT_UCR_ARABIC_PRESENTATIONS_B - -#define TT_UCR_COMBINING_DIACRITICAL_MARKS \ - TT_UCR_COMBINING_DIACRITICS -#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \ - TT_UCR_COMBINING_DIACRITICS_SYMB - + /* for backward compatibility with older FreeType versions */ +#define TT_UCR_ARABIC_PRESENTATION_A \ + TT_UCR_ARABIC_PRESENTATION_FORMS_A +#define TT_UCR_ARABIC_PRESENTATION_B \ + TT_UCR_ARABIC_PRESENTATION_FORMS_B -#endif /* !HAVE_LIMIT_ON_IDENTS */ +#define TT_UCR_COMBINING_DIACRITICS \ + TT_UCR_COMBINING_DIACRITICAL_MARKS +#define TT_UCR_COMBINING_DIACRITICS_SYMB \ + TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB FT_END_HEADER diff --git a/non-source/foreign/freetype2/freetype/tttables.h b/non-source/foreign/freetype2/freetype/tttables.h index dfe3bcb1c..2cf0ff1bc 100644 --- a/non-source/foreign/freetype2/freetype/tttables.h +++ b/non-source/foreign/freetype2/freetype/tttables.h @@ -1,28 +1,27 @@ -/***************************************************************************/ -/* */ -/* tttables.h */ -/* */ -/* Basic SFNT/TrueType tables definitions and interface */ -/* (specification only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * tttables.h + * + * Basic SFNT/TrueType tables definitions and interface + * (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef TTTABLES_H_ #define TTTABLES_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -33,52 +32,55 @@ FT_BEGIN_HEADER - /*************************************************************************/ - /* */ - /* <Section> */ - /* truetype_tables */ - /* */ - /* <Title> */ - /* TrueType Tables */ - /* */ - /* <Abstract> */ - /* TrueType specific table types and functions. */ - /* */ - /* <Description> */ - /* This section contains the definition of TrueType-specific tables */ - /* as well as some routines used to access and process them. */ - /* */ - /* <Order> */ - /* TT_Header */ - /* TT_HoriHeader */ - /* TT_VertHeader */ - /* TT_OS2 */ - /* TT_Postscript */ - /* TT_PCLT */ - /* TT_MaxProfile */ - /* */ - /* FT_Sfnt_Tag */ - /* FT_Get_Sfnt_Table */ - /* FT_Load_Sfnt_Table */ - /* FT_Sfnt_Table_Info */ - /* */ - /* FT_Get_CMap_Language_ID */ - /* FT_Get_CMap_Format */ - /* */ - /* FT_PARAM_TAG_UNPATENTED_HINTING */ - /* */ - /*************************************************************************/ - - - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_Header */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType font header table. All */ - /* fields follow the TrueType specification. */ - /* */ + /************************************************************************** + * + * @section: + * truetype_tables + * + * @title: + * TrueType Tables + * + * @abstract: + * TrueType-specific table types and functions. + * + * @description: + * This section contains definitions of some basic tables specific to + * TrueType and OpenType as well as some routines used to access and + * process them. + * + * @order: + * TT_Header + * TT_HoriHeader + * TT_VertHeader + * TT_OS2 + * TT_Postscript + * TT_PCLT + * TT_MaxProfile + * + * FT_Sfnt_Tag + * FT_Get_Sfnt_Table + * FT_Load_Sfnt_Table + * FT_Sfnt_Table_Info + * + * FT_Get_CMap_Language_ID + * FT_Get_CMap_Format + * + * FT_PARAM_TAG_UNPATENTED_HINTING + * + */ + + + /************************************************************************** + * + * @struct: + * TT_Header + * + * @description: + * A structure to model a TrueType font header table. All fields follow + * the OpenType specification. The 64-bit timestamps are stored in + * two-element arrays `Created` and `Modified`, first the upper then + * the lower 32~bits. + */ typedef struct TT_Header_ { FT_Fixed Table_Version; @@ -90,8 +92,8 @@ FT_BEGIN_HEADER FT_UShort Flags; FT_UShort Units_Per_EM; - FT_Long Created [2]; - FT_Long Modified[2]; + FT_ULong Created [2]; + FT_ULong Modified[2]; FT_Short xMin; FT_Short yMin; @@ -108,94 +110,93 @@ FT_BEGIN_HEADER } TT_Header; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_HoriHeader */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType horizontal header, the `hhea' */ - /* table, as well as the corresponding horizontal metrics table, */ - /* i.e., the `hmtx' table. */ - /* */ - /* <Fields> */ - /* Version :: The table version. */ - /* */ - /* Ascender :: The font's ascender, i.e., the distance */ - /* from the baseline to the top-most of all */ - /* glyph points found in the font. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of the */ - /* glyphs found in the font (maybe ASCII). */ - /* */ - /* You should use the `sTypoAscender' field */ - /* of the OS/2 table instead if you want */ - /* the correct one. */ - /* */ - /* Descender :: The font's descender, i.e., the distance */ - /* from the baseline to the bottom-most of */ - /* all glyph points found in the font. It */ - /* is negative. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of the */ - /* glyphs found in the font (maybe ASCII). */ - /* */ - /* You should use the `sTypoDescender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Line_Gap :: The font's line gap, i.e., the distance */ - /* to add to the ascender and descender to */ - /* get the BTB, i.e., the */ - /* baseline-to-baseline distance for the */ - /* font. */ - /* */ - /* advance_Width_Max :: This field is the maximum of all advance */ - /* widths found in the font. It can be */ - /* used to compute the maximum width of an */ - /* arbitrary string of text. */ - /* */ - /* min_Left_Side_Bearing :: The minimum left side bearing of all */ - /* glyphs within the font. */ - /* */ - /* min_Right_Side_Bearing :: The minimum right side bearing of all */ - /* glyphs within the font. */ - /* */ - /* xMax_Extent :: The maximum horizontal extent (i.e., the */ - /* `width' of a glyph's bounding box) for */ - /* all glyphs in the font. */ - /* */ - /* caret_Slope_Rise :: The rise coefficient of the cursor's */ - /* slope of the cursor (slope=rise/run). */ - /* */ - /* caret_Slope_Run :: The run coefficient of the cursor's */ - /* slope. */ - /* */ - /* Reserved :: 8~reserved bytes. */ - /* */ - /* metric_Data_Format :: Always~0. */ - /* */ - /* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */ - /* table -- this value can be smaller than */ - /* the total number of glyphs in the font. */ - /* */ - /* long_metrics :: A pointer into the `hmtx' table. */ - /* */ - /* short_metrics :: A pointer into the `hmtx' table. */ - /* */ - /* <Note> */ - /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */ - /* be identical except for the names of their fields, */ - /* which are different. */ - /* */ - /* This ensures that a single function in the `ttload' */ - /* module is able to read both the horizontal and vertical */ - /* headers. */ - /* */ + /************************************************************************** + * + * @struct: + * TT_HoriHeader + * + * @description: + * A structure to model a TrueType horizontal header, the 'hhea' table, + * as well as the corresponding horizontal metrics table, 'hmtx'. + * + * @fields: + * Version :: + * The table version. + * + * Ascender :: + * The font's ascender, i.e., the distance from the baseline to the + * top-most of all glyph points found in the font. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoAscender` field of the 'OS/2' table instead + * if you want the correct one. + * + * Descender :: + * The font's descender, i.e., the distance from the baseline to the + * bottom-most of all glyph points found in the font. It is negative. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoDescender` field of the 'OS/2' table + * instead if you want the correct one. + * + * Line_Gap :: + * The font's line gap, i.e., the distance to add to the ascender and + * descender to get the BTB, i.e., the baseline-to-baseline distance + * for the font. + * + * advance_Width_Max :: + * This field is the maximum of all advance widths found in the font. + * It can be used to compute the maximum width of an arbitrary string + * of text. + * + * min_Left_Side_Bearing :: + * The minimum left side bearing of all glyphs within the font. + * + * min_Right_Side_Bearing :: + * The minimum right side bearing of all glyphs within the font. + * + * xMax_Extent :: + * The maximum horizontal extent (i.e., the 'width' of a glyph's + * bounding box) for all glyphs in the font. + * + * caret_Slope_Rise :: + * The rise coefficient of the cursor's slope of the cursor + * (slope=rise/run). + * + * caret_Slope_Run :: + * The run coefficient of the cursor's slope. + * + * caret_Offset :: + * The cursor's offset for slanted fonts. + * + * Reserved :: + * 8~reserved bytes. + * + * metric_Data_Format :: + * Always~0. + * + * number_Of_HMetrics :: + * Number of HMetrics entries in the 'hmtx' table -- this value can be + * smaller than the total number of glyphs in the font. + * + * long_metrics :: + * A pointer into the 'hmtx' table. + * + * short_metrics :: + * A pointer into the 'hmtx' table. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `caret_Slope_Rise`, + * `caret_Slope_Run`, and `caret_Offset`. + */ typedef struct TT_HoriHeader_ { FT_Fixed Version; @@ -217,9 +218,9 @@ FT_BEGIN_HEADER FT_Short metric_Data_Format; FT_UShort number_Of_HMetrics; - /* The following fields are not defined by the TrueType specification */ + /* The following fields are not defined by the OpenType specification */ /* but they are used to connect the metrics header to the relevant */ - /* `HMTX' table. */ + /* 'hmtx' table. */ void* long_metrics; void* short_metrics; @@ -227,101 +228,93 @@ FT_BEGIN_HEADER } TT_HoriHeader; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_VertHeader */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType vertical header, the `vhea' */ - /* table, as well as the corresponding vertical metrics table, i.e., */ - /* the `vmtx' table. */ - /* */ - /* <Fields> */ - /* Version :: The table version. */ - /* */ - /* Ascender :: The font's ascender, i.e., the distance */ - /* from the baseline to the top-most of */ - /* all glyph points found in the font. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of */ - /* the glyphs found in the font (maybe */ - /* ASCII). */ - /* */ - /* You should use the `sTypoAscender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Descender :: The font's descender, i.e., the */ - /* distance from the baseline to the */ - /* bottom-most of all glyph points found */ - /* in the font. It is negative. */ - /* */ - /* This value is invalid in many fonts, as */ - /* it is usually set by the font designer, */ - /* and often reflects only a portion of */ - /* the glyphs found in the font (maybe */ - /* ASCII). */ - /* */ - /* You should use the `sTypoDescender' */ - /* field of the OS/2 table instead if you */ - /* want the correct one. */ - /* */ - /* Line_Gap :: The font's line gap, i.e., the distance */ - /* to add to the ascender and descender to */ - /* get the BTB, i.e., the */ - /* baseline-to-baseline distance for the */ - /* font. */ - /* */ - /* advance_Height_Max :: This field is the maximum of all */ - /* advance heights found in the font. It */ - /* can be used to compute the maximum */ - /* height of an arbitrary string of text. */ - /* */ - /* min_Top_Side_Bearing :: The minimum top side bearing of all */ - /* glyphs within the font. */ - /* */ - /* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */ - /* glyphs within the font. */ - /* */ - /* yMax_Extent :: The maximum vertical extent (i.e., the */ - /* `height' of a glyph's bounding box) for */ - /* all glyphs in the font. */ - /* */ - /* caret_Slope_Rise :: The rise coefficient of the cursor's */ - /* slope of the cursor (slope=rise/run). */ - /* */ - /* caret_Slope_Run :: The run coefficient of the cursor's */ - /* slope. */ - /* */ - /* caret_Offset :: The cursor's offset for slanted fonts. */ - /* This value is `reserved' in vmtx */ - /* version 1.0. */ - /* */ - /* Reserved :: 8~reserved bytes. */ - /* */ - /* metric_Data_Format :: Always~0. */ - /* */ - /* number_Of_HMetrics :: Number of VMetrics entries in the */ - /* `vmtx' table -- this value can be */ - /* smaller than the total number of glyphs */ - /* in the font. */ - /* */ - /* long_metrics :: A pointer into the `vmtx' table. */ - /* */ - /* short_metrics :: A pointer into the `vmtx' table. */ - /* */ - /* <Note> */ - /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */ - /* be identical except for the names of their fields, */ - /* which are different. */ - /* */ - /* This ensures that a single function in the `ttload' */ - /* module is able to read both the horizontal and vertical */ - /* headers. */ - /* */ + /************************************************************************** + * + * @struct: + * TT_VertHeader + * + * @description: + * A structure used to model a TrueType vertical header, the 'vhea' + * table, as well as the corresponding vertical metrics table, 'vmtx'. + * + * @fields: + * Version :: + * The table version. + * + * Ascender :: + * The font's ascender, i.e., the distance from the baseline to the + * top-most of all glyph points found in the font. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoAscender` field of the 'OS/2' table instead + * if you want the correct one. + * + * Descender :: + * The font's descender, i.e., the distance from the baseline to the + * bottom-most of all glyph points found in the font. It is negative. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoDescender` field of the 'OS/2' table + * instead if you want the correct one. + * + * Line_Gap :: + * The font's line gap, i.e., the distance to add to the ascender and + * descender to get the BTB, i.e., the baseline-to-baseline distance + * for the font. + * + * advance_Height_Max :: + * This field is the maximum of all advance heights found in the font. + * It can be used to compute the maximum height of an arbitrary string + * of text. + * + * min_Top_Side_Bearing :: + * The minimum top side bearing of all glyphs within the font. + * + * min_Bottom_Side_Bearing :: + * The minimum bottom side bearing of all glyphs within the font. + * + * yMax_Extent :: + * The maximum vertical extent (i.e., the 'height' of a glyph's + * bounding box) for all glyphs in the font. + * + * caret_Slope_Rise :: + * The rise coefficient of the cursor's slope of the cursor + * (slope=rise/run). + * + * caret_Slope_Run :: + * The run coefficient of the cursor's slope. + * + * caret_Offset :: + * The cursor's offset for slanted fonts. + * + * Reserved :: + * 8~reserved bytes. + * + * metric_Data_Format :: + * Always~0. + * + * number_Of_VMetrics :: + * Number of VMetrics entries in the 'vmtx' table -- this value can be + * smaller than the total number of glyphs in the font. + * + * long_metrics :: + * A pointer into the 'vmtx' table. + * + * short_metrics :: + * A pointer into the 'vmtx' table. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `Ascender`, `Descender`, + * `Line_Gap`, `caret_Slope_Rise`, `caret_Slope_Run`, and `caret_Offset`. + */ typedef struct TT_VertHeader_ { FT_Fixed Version; @@ -331,9 +324,9 @@ FT_BEGIN_HEADER FT_UShort advance_Height_Max; /* advance height maximum */ - FT_Short min_Top_Side_Bearing; /* minimum left-sb or top-sb */ - FT_Short min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */ - FT_Short yMax_Extent; /* xmax or ymax extents */ + FT_Short min_Top_Side_Bearing; /* minimum top-sb */ + FT_Short min_Bottom_Side_Bearing; /* minimum bottom-sb */ + FT_Short yMax_Extent; /* ymax extents */ FT_Short caret_Slope_Rise; FT_Short caret_Slope_Run; FT_Short caret_Offset; @@ -343,9 +336,9 @@ FT_BEGIN_HEADER FT_Short metric_Data_Format; FT_UShort number_Of_VMetrics; - /* The following fields are not defined by the TrueType specification */ - /* but they're used to connect the metrics header to the relevant */ - /* `HMTX' or `VMTX' table. */ + /* The following fields are not defined by the OpenType specification */ + /* but they are used to connect the metrics header to the relevant */ + /* 'vmtx' table. */ void* long_metrics; void* short_metrics; @@ -353,18 +346,32 @@ FT_BEGIN_HEADER } TT_VertHeader; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_OS2 */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType OS/2 table. All fields */ - /* comply to the OpenType specification. */ - /* */ - /* Note that we now support old Mac fonts that do not include an OS/2 */ - /* table. In this case, the `version' field is always set to 0xFFFF. */ - /* */ + /************************************************************************** + * + * @struct: + * TT_OS2 + * + * @description: + * A structure to model a TrueType 'OS/2' table. All fields comply to + * the OpenType specification. + * + * Note that we now support old Mac fonts that do not include an 'OS/2' + * table. In this case, the `version` field is always set to 0xFFFF. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `sCapHeight`, `sTypoAscender`, + * `sTypoDescender`, `sTypoLineGap`, `sxHeight`, `usWinAscent`, + * `usWinDescent`, `yStrikeoutPosition`, `yStrikeoutSize`, + * `ySubscriptXOffset`, `ySubScriptXSize`, `ySubscriptYOffset`, + * `ySubscriptYSize`, `ySuperscriptXOffset`, `ySuperscriptXSize`, + * `ySuperscriptYOffset`, and `ySuperscriptYSize`. + * + * Possible values for bits in the `ulUnicodeRangeX` fields are given by + * the @TT_UCR_XXX macros. + */ + typedef struct TT_OS2_ { FT_UShort version; /* 0x0001 - more or 0xFFFF */ @@ -417,23 +424,29 @@ FT_BEGIN_HEADER /* only version 5 and higher: */ - FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */ - FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */ + FT_UShort usLowerOpticalPointSize; /* in twips (1/20 points) */ + FT_UShort usUpperOpticalPointSize; /* in twips (1/20 points) */ } TT_OS2; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_Postscript */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType PostScript table. All fields */ - /* comply to the TrueType specification. This structure does not */ - /* reference the PostScript glyph names, which can be nevertheless */ - /* accessed with the `ttpost' module. */ - /* */ + /************************************************************************** + * + * @struct: + * TT_Postscript + * + * @description: + * A structure to model a TrueType 'post' table. All fields comply to + * the OpenType specification. This structure does not reference a + * font's PostScript glyph names; use @FT_Get_Glyph_Name to retrieve + * them. + * + * @note: + * For an OpenType variation font, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `underlinePosition` and + * `underlineThickness`. + */ typedef struct TT_Postscript_ { FT_Fixed FormatType; @@ -446,21 +459,21 @@ FT_BEGIN_HEADER FT_ULong minMemType1; FT_ULong maxMemType1; - /* Glyph names follow in the file, but we don't */ - /* load them by default. See the ttpost.c file. */ + /* Glyph names follow in the 'post' table, but we don't */ + /* load them by default. */ } TT_Postscript; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_PCLT */ - /* */ - /* <Description> */ - /* A structure used to model a TrueType PCLT table. All fields */ - /* comply to the TrueType specification. */ - /* */ + /************************************************************************** + * + * @struct: + * TT_PCLT + * + * @description: + * A structure to model a TrueType 'PCLT' table. All fields comply to + * the OpenType specification. + */ typedef struct TT_PCLT_ { FT_Fixed Version; @@ -482,72 +495,75 @@ FT_BEGIN_HEADER } TT_PCLT; - /*************************************************************************/ - /* */ - /* <Struct> */ - /* TT_MaxProfile */ - /* */ - /* <Description> */ - /* The maximum profile is a table containing many max values, which */ - /* can be used to pre-allocate arrays. This ensures that no memory */ - /* allocation occurs during a glyph load. */ - /* */ - /* <Fields> */ - /* version :: The version number. */ - /* */ - /* numGlyphs :: The number of glyphs in this TrueType */ - /* font. */ - /* */ - /* maxPoints :: The maximum number of points in a */ - /* non-composite TrueType glyph. See also */ - /* the structure element */ - /* `maxCompositePoints'. */ - /* */ - /* maxContours :: The maximum number of contours in a */ - /* non-composite TrueType glyph. See also */ - /* the structure element */ - /* `maxCompositeContours'. */ - /* */ - /* maxCompositePoints :: The maximum number of points in a */ - /* composite TrueType glyph. See also the */ - /* structure element `maxPoints'. */ - /* */ - /* maxCompositeContours :: The maximum number of contours in a */ - /* composite TrueType glyph. See also the */ - /* structure element `maxContours'. */ - /* */ - /* maxZones :: The maximum number of zones used for */ - /* glyph hinting. */ - /* */ - /* maxTwilightPoints :: The maximum number of points in the */ - /* twilight zone used for glyph hinting. */ - /* */ - /* maxStorage :: The maximum number of elements in the */ - /* storage area used for glyph hinting. */ - /* */ - /* maxFunctionDefs :: The maximum number of function */ - /* definitions in the TrueType bytecode for */ - /* this font. */ - /* */ - /* maxInstructionDefs :: The maximum number of instruction */ - /* definitions in the TrueType bytecode for */ - /* this font. */ - /* */ - /* maxStackElements :: The maximum number of stack elements used */ - /* during bytecode interpretation. */ - /* */ - /* maxSizeOfInstructions :: The maximum number of TrueType opcodes */ - /* used for glyph hinting. */ - /* */ - /* maxComponentElements :: The maximum number of simple (i.e., non- */ - /* composite) glyphs in a composite glyph. */ - /* */ - /* maxComponentDepth :: The maximum nesting depth of composite */ - /* glyphs. */ - /* */ - /* <Note> */ - /* This structure is only used during font loading. */ - /* */ + /************************************************************************** + * + * @struct: + * TT_MaxProfile + * + * @description: + * The maximum profile ('maxp') table contains many max values, which can + * be used to pre-allocate arrays for speeding up glyph loading and + * hinting. + * + * @fields: + * version :: + * The version number. + * + * numGlyphs :: + * The number of glyphs in this TrueType font. + * + * maxPoints :: + * The maximum number of points in a non-composite TrueType glyph. See + * also `maxCompositePoints`. + * + * maxContours :: + * The maximum number of contours in a non-composite TrueType glyph. + * See also `maxCompositeContours`. + * + * maxCompositePoints :: + * The maximum number of points in a composite TrueType glyph. See + * also `maxPoints`. + * + * maxCompositeContours :: + * The maximum number of contours in a composite TrueType glyph. See + * also `maxContours`. + * + * maxZones :: + * The maximum number of zones used for glyph hinting. + * + * maxTwilightPoints :: + * The maximum number of points in the twilight zone used for glyph + * hinting. + * + * maxStorage :: + * The maximum number of elements in the storage area used for glyph + * hinting. + * + * maxFunctionDefs :: + * The maximum number of function definitions in the TrueType bytecode + * for this font. + * + * maxInstructionDefs :: + * The maximum number of instruction definitions in the TrueType + * bytecode for this font. + * + * maxStackElements :: + * The maximum number of stack elements used during bytecode + * interpretation. + * + * maxSizeOfInstructions :: + * The maximum number of TrueType opcodes used for glyph hinting. + * + * maxComponentElements :: + * The maximum number of simple (i.e., non-composite) glyphs in a + * composite glyph. + * + * maxComponentDepth :: + * The maximum nesting depth of composite glyphs. + * + * @note: + * This structure is only used during font loading. + */ typedef struct TT_MaxProfile_ { FT_Fixed version; @@ -569,30 +585,38 @@ FT_BEGIN_HEADER } TT_MaxProfile; - /*************************************************************************/ - /* */ - /* <Enum> */ - /* FT_Sfnt_Tag */ - /* */ - /* <Description> */ - /* An enumeration used to specify the index of an SFNT table. */ - /* Used in the @FT_Get_Sfnt_Table API function. */ - /* */ - /* <Values> */ - /* FT_SFNT_HEAD :: To access the font's @TT_Header structure. */ - /* */ - /* FT_SFNT_MAXP :: To access the font's @TT_MaxProfile structure. */ - /* */ - /* FT_SFNT_OS2 :: To access the font's @TT_OS2 structure. */ - /* */ - /* FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure. */ - /* */ - /* FT_SFNT_VHEA :: To access the font's @TT_VertHeader struture. */ - /* */ - /* FT_SFNT_POST :: To access the font's @TT_Postscript structure. */ - /* */ - /* FT_SFNT_PCLT :: To access the font's @TT_PCLT structure. */ - /* */ + /************************************************************************** + * + * @enum: + * FT_Sfnt_Tag + * + * @description: + * An enumeration to specify indices of SFNT tables loaded and parsed by + * FreeType during initialization of an SFNT font. Used in the + * @FT_Get_Sfnt_Table API function. + * + * @values: + * FT_SFNT_HEAD :: + * To access the font's @TT_Header structure. + * + * FT_SFNT_MAXP :: + * To access the font's @TT_MaxProfile structure. + * + * FT_SFNT_OS2 :: + * To access the font's @TT_OS2 structure. + * + * FT_SFNT_HHEA :: + * To access the font's @TT_HoriHeader structure. + * + * FT_SFNT_VHEA :: + * To access the font's @TT_VertHeader structure. + * + * FT_SFNT_POST :: + * To access the font's @TT_Postscript structure. + * + * FT_SFNT_PCLT :: + * To access the font's @TT_PCLT structure. + */ typedef enum FT_Sfnt_Tag_ { FT_SFNT_HEAD, @@ -607,7 +631,7 @@ FT_BEGIN_HEADER } FT_Sfnt_Tag; - /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */ + /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag` */ /* values instead */ #define ft_sfnt_head FT_SFNT_HEAD #define ft_sfnt_maxp FT_SFNT_MAXP @@ -618,113 +642,115 @@ FT_BEGIN_HEADER #define ft_sfnt_pclt FT_SFNT_PCLT - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_Sfnt_Table */ - /* */ - /* <Description> */ - /* Return a pointer to a given SFNT table within a face. */ - /* */ - /* <Input> */ - /* face :: A handle to the source. */ - /* */ - /* tag :: The index of the SFNT table. */ - /* */ - /* <Return> */ - /* A type-less pointer to the table. This will be~0 in case of */ - /* error, or if the corresponding table was not found *OR* loaded */ - /* from the file. */ - /* */ - /* Use a typecast according to `tag' to access the structure */ - /* elements. */ - /* */ - /* <Note> */ - /* The table is owned by the face object and disappears with it. */ - /* */ - /* This function is only useful to access SFNT tables that are loaded */ - /* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */ - /* a list. */ - /* */ - /* Here an example how to access the `vhea' table: */ - /* */ - /* { */ - /* TT_VertHeader* vert_header; */ - /* */ - /* */ - /* vert_header = */ - /* (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); */ - /* } */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Table + * + * @description: + * Return a pointer to a given SFNT table stored within a face. + * + * @input: + * face :: + * A handle to the source. + * + * tag :: + * The index of the SFNT table. + * + * @return: + * A type-less pointer to the table. This will be `NULL` in case of + * error, or if the corresponding table was not found **OR** loaded from + * the file. + * + * Use a typecast according to `tag` to access the structure elements. + * + * @note: + * The table is owned by the face object and disappears with it. + * + * This function is only useful to access SFNT tables that are loaded by + * the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for a + * list. + * + * @example: + * Here is an example demonstrating access to the 'vhea' table. + * + * ``` + * TT_VertHeader* vert_header; + * + * + * vert_header = + * (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); + * ``` + */ FT_EXPORT( void* ) FT_Get_Sfnt_Table( FT_Face face, FT_Sfnt_Tag tag ); - /************************************************************************** - * - * @function: - * FT_Load_Sfnt_Table - * - * @description: - * Load any font table into client memory. - * - * @input: - * face :: - * A handle to the source face. - * - * tag :: - * The four-byte tag of the table to load. Use the value~0 if you want - * to access the whole font file. Otherwise, you can use one of the - * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new - * one with @FT_MAKE_TAG. - * - * offset :: - * The starting offset in the table (or file if tag == 0). - * - * @output: - * buffer :: - * The target buffer address. The client must ensure that the memory - * array is big enough to hold the data. - * - * @inout: - * length :: - * If the `length' parameter is NULL, then try to load the whole table. - * Return an error code if it fails. - * - * Else, if `*length' is~0, exit immediately while returning the - * table's (or file) full size in it. - * - * Else the number of bytes to read from the table or file, from the - * starting offset. - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * If you need to determine the table's length you should first call this - * function with `*length' set to~0, as in the following example: - * - * { - * FT_ULong length = 0; - * - * - * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); - * if ( error ) { ... table does not exist ... } - * - * buffer = malloc( length ); - * if ( buffer == NULL ) { ... not enough memory ... } - * - * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); - * if ( error ) { ... could not load table ... } - * } - * - * Note that structures like @TT_Header or @TT_OS2 can't be used with - * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that - * those structures depend on the processor architecture, with varying - * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). - * - */ + /************************************************************************** + * + * @function: + * FT_Load_Sfnt_Table + * + * @description: + * Load any SFNT font table into client memory. + * + * @input: + * face :: + * A handle to the source face. + * + * tag :: + * The four-byte tag of the table to load. Use value~0 if you want to + * access the whole font file. Otherwise, you can use one of the + * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new + * one with @FT_MAKE_TAG. + * + * offset :: + * The starting offset in the table (or file if tag~==~0). + * + * @output: + * buffer :: + * The target buffer address. The client must ensure that the memory + * array is big enough to hold the data. + * + * @inout: + * length :: + * If the `length` parameter is `NULL`, try to load the whole table. + * Return an error code if it fails. + * + * Else, if `*length` is~0, exit immediately while returning the + * table's (or file) full size in it. + * + * Else the number of bytes to read from the table or file, from the + * starting offset. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If you need to determine the table's length you should first call this + * function with `*length` set to~0, as in the following example: + * + * ``` + * FT_ULong length = 0; + * + * + * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); + * if ( error ) { ... table does not exist ... } + * + * buffer = malloc( length ); + * if ( buffer == NULL ) { ... not enough memory ... } + * + * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); + * if ( error ) { ... could not load table ... } + * ``` + * + * Note that structures like @TT_Header or @TT_OS2 can't be used with + * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that + * those structures depend on the processor architecture, with varying + * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). + * + */ FT_EXPORT( FT_Error ) FT_Load_Sfnt_Table( FT_Face face, FT_ULong tag, @@ -733,41 +759,41 @@ FT_BEGIN_HEADER FT_ULong* length ); - /************************************************************************** - * - * @function: - * FT_Sfnt_Table_Info - * - * @description: - * Return information on an SFNT table. - * - * @input: - * face :: - * A handle to the source face. - * - * table_index :: - * The index of an SFNT table. The function returns - * FT_Err_Table_Missing for an invalid value. - * - * @inout: - * tag :: - * The name tag of the SFNT table. If the value is NULL, `table_index' - * is ignored, and `length' returns the number of SFNT tables in the - * font. - * - * @output: - * length :: - * The length of the SFNT table (or the number of SFNT tables, depending - * on `tag'). - * - * @return: - * FreeType error code. 0~means success. - * - * @note: - * While parsing fonts, FreeType handles SFNT tables with length zero as - * missing. - * - */ + /************************************************************************** + * + * @function: + * FT_Sfnt_Table_Info + * + * @description: + * Return information on an SFNT table. + * + * @input: + * face :: + * A handle to the source face. + * + * table_index :: + * The index of an SFNT table. The function returns + * FT_Err_Table_Missing for an invalid value. + * + * @inout: + * tag :: + * The name tag of the SFNT table. If the value is `NULL`, + * `table_index` is ignored, and `length` returns the number of SFNT + * tables in the font. + * + * @output: + * length :: + * The length of the SFNT table (or the number of SFNT tables, + * depending on `tag`). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * While parsing fonts, FreeType handles SFNT tables with length zero as + * missing. + * + */ FT_EXPORT( FT_Error ) FT_Sfnt_Table_Info( FT_Face face, FT_UInt table_index, @@ -775,46 +801,47 @@ FT_BEGIN_HEADER FT_ULong *length ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_CMap_Language_ID */ - /* */ - /* <Description> */ - /* Return TrueType/sfnt specific cmap language ID. Definitions of */ - /* language ID values are in `ttnameid.h'. */ - /* */ - /* <Input> */ - /* charmap :: */ - /* The target charmap. */ - /* */ - /* <Return> */ - /* The language ID of `charmap'. If `charmap' doesn't belong to a */ - /* TrueType/sfnt face, just return~0 as the default value. */ - /* */ - /* For a format~14 cmap (to access Unicode IVS), the return value is */ - /* 0xFFFFFFFF. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_CMap_Language_ID + * + * @description: + * Return cmap language ID as specified in the OpenType standard. + * Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. + * + * @input: + * charmap :: + * The target charmap. + * + * @return: + * The language ID of `charmap`. If `charmap` doesn't belong to an SFNT + * face, just return~0 as the default value. + * + * For a format~14 cmap (to access Unicode IVS), the return value is + * 0xFFFFFFFF. + */ FT_EXPORT( FT_ULong ) FT_Get_CMap_Language_ID( FT_CharMap charmap ); - /*************************************************************************/ - /* */ - /* <Function> */ - /* FT_Get_CMap_Format */ - /* */ - /* <Description> */ - /* Return TrueType/sfnt specific cmap format. */ - /* */ - /* <Input> */ - /* charmap :: */ - /* The target charmap. */ - /* */ - /* <Return> */ - /* The format of `charmap'. If `charmap' doesn't belong to a */ - /* TrueType/sfnt face, return -1. */ - /* */ + /************************************************************************** + * + * @function: + * FT_Get_CMap_Format + * + * @description: + * Return the format of an SFNT 'cmap' table. + * + * @input: + * charmap :: + * The target charmap. + * + * @return: + * The format of `charmap`. If `charmap` doesn't belong to an SFNT face + * (including the synthetic Unicode charmap sometimes created by + * FreeType), return -1. + */ FT_EXPORT( FT_Long ) FT_Get_CMap_Format( FT_CharMap charmap ); diff --git a/non-source/foreign/freetype2/freetype/tttags.h b/non-source/foreign/freetype2/freetype/tttags.h index f3c9aa5fc..da0af5d3f 100644 --- a/non-source/foreign/freetype2/freetype/tttags.h +++ b/non-source/foreign/freetype2/freetype/tttags.h @@ -1,27 +1,26 @@ -/***************************************************************************/ -/* */ -/* tttags.h */ -/* */ -/* Tags for TrueType and OpenType tables (specification only). */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ +/**************************************************************************** + * + * tttags.h + * + * Tags for TrueType and OpenType tables (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ #ifndef TTAGS_H_ #define TTAGS_H_ -#include <ft2build.h> -#include FT_FREETYPE_H +#include <freetype/freetype.h> #ifdef FREETYPE_H #error "freetype.h of FreeType 1 has been loaded!" @@ -43,8 +42,11 @@ FT_BEGIN_HEADER #define TTAG_CBDT FT_MAKE_TAG( 'C', 'B', 'D', 'T' ) #define TTAG_CBLC FT_MAKE_TAG( 'C', 'B', 'L', 'C' ) #define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' ) +#define TTAG_CFF2 FT_MAKE_TAG( 'C', 'F', 'F', '2' ) #define TTAG_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' ) #define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' ) +#define TTAG_COLR FT_MAKE_TAG( 'C', 'O', 'L', 'R' ) +#define TTAG_CPAL FT_MAKE_TAG( 'C', 'P', 'A', 'L' ) #define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' ) #define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' ) #define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' ) @@ -61,6 +63,7 @@ FT_BEGIN_HEADER #define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' ) #define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' ) #define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' ) +#define TTAG_HVAR FT_MAKE_TAG( 'H', 'V', 'A', 'R' ) #define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' ) #define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' ) #define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' ) @@ -79,6 +82,7 @@ FT_BEGIN_HEADER #define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' ) #define TTAG_mort FT_MAKE_TAG( 'm', 'o', 'r', 't' ) #define TTAG_morx FT_MAKE_TAG( 'm', 'o', 'r', 'x' ) +#define TTAG_MVAR FT_MAKE_TAG( 'M', 'V', 'A', 'R' ) #define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' ) #define TTAG_opbd FT_MAKE_TAG( 'o', 'p', 'b', 'd' ) #define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' ) @@ -91,6 +95,7 @@ FT_BEGIN_HEADER #define TTAG_sbix FT_MAKE_TAG( 's', 'b', 'i', 'x' ) #define TTAG_sfnt FT_MAKE_TAG( 's', 'f', 'n', 't' ) #define TTAG_SING FT_MAKE_TAG( 'S', 'I', 'N', 'G' ) +#define TTAG_SVG FT_MAKE_TAG( 'S', 'V', 'G', ' ' ) #define TTAG_trak FT_MAKE_TAG( 't', 'r', 'a', 'k' ) #define TTAG_true FT_MAKE_TAG( 't', 'r', 'u', 'e' ) #define TTAG_ttc FT_MAKE_TAG( 't', 't', 'c', ' ' ) @@ -100,7 +105,15 @@ FT_BEGIN_HEADER #define TTAG_VDMX FT_MAKE_TAG( 'V', 'D', 'M', 'X' ) #define TTAG_vhea FT_MAKE_TAG( 'v', 'h', 'e', 'a' ) #define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' ) +#define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' ) #define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' ) +#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' ) + +/* used by "LastResort.dfont" on legacy Mac OS X */ +#define TTAG_0xA5lst FT_MAKE_TAG( 0xA5, 'l', 's', 't' ) FT_END_HEADER diff --git a/non-source/foreign/freetype2/freetype/ttunpat.h b/non-source/foreign/freetype2/freetype/ttunpat.h deleted file mode 100644 index ca4676baf..000000000 --- a/non-source/foreign/freetype2/freetype/ttunpat.h +++ /dev/null @@ -1,63 +0,0 @@ -/***************************************************************************/ -/* */ -/* ttunpat.h */ -/* */ -/* Definitions for the unpatented TrueType hinting system. */ -/* Obsolete, retained for backwards compatibility. */ -/* */ -/* Copyright 2003-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* Written by Graham Asher <graham.asher@btinternet.com> */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - -#ifndef TTUNPAT_H_ -#define TTUNPAT_H_ - - -#include <ft2build.h> -#include FT_FREETYPE_H - -#ifdef FREETYPE_H -#error "freetype.h of FreeType 1 has been loaded!" -#error "Please fix the directory search order for header files" -#error "so that freetype.h of FreeType 2 is found first." -#endif - - -FT_BEGIN_HEADER - - - /*************************************************************************** - * - * @constant: - * FT_PARAM_TAG_UNPATENTED_HINTING - * - * @description: - * Deprecated. - * - * Previously: A constant used as the tag of an @FT_Parameter structure to - * indicate that unpatented methods only should be used by the TrueType - * bytecode interpreter for a typeface opened by @FT_Open_Face. - * - */ -#define FT_PARAM_TAG_UNPATENTED_HINTING FT_MAKE_TAG( 'u', 'n', 'p', 'a' ) - - /* */ - - -FT_END_HEADER - - -#endif /* TTUNPAT_H_ */ - - -/* END */ diff --git a/non-source/foreign/freetype2/ft2build.h b/non-source/foreign/freetype2/ft2build.h index c89cb469e..d27f711b6 100644 --- a/non-source/foreign/freetype2/ft2build.h +++ b/non-source/foreign/freetype2/ft2build.h @@ -1,39 +1,42 @@ -/***************************************************************************/ -/* */ -/* ft2build.h */ -/* */ -/* FreeType 2 build and setup macros. */ -/* */ -/* Copyright 1996-2016 by */ -/* David Turner, Robert Wilhelm, and Werner Lemberg. */ -/* */ -/* This file is part of the FreeType project, and may only be used, */ -/* modified, and distributed under the terms of the FreeType project */ -/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ -/* this file you indicate that you have read the license and */ -/* understand and accept it fully. */ -/* */ -/***************************************************************************/ - - - /*************************************************************************/ - /* */ - /* This is the `entry point' for FreeType header file inclusions. It is */ - /* the only header file which should be included directly; all other */ - /* FreeType header files should be accessed with macro names (after */ - /* including `ft2build.h'). */ - /* */ - /* A typical example is */ - /* */ - /* #include <ft2build.h> */ - /* #include FT_FREETYPE_H */ - /* */ - /*************************************************************************/ +/**************************************************************************** + * + * ft2build.h + * + * FreeType 2 build and setup macros. + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This is the 'entry point' for FreeType header file inclusions, to be + * loaded before all other header files. + * + * A typical example is + * + * ``` + * #include <ft2build.h> + * #include <freetype/freetype.h> + * ``` + * + */ #ifndef FT2BUILD_H_ #define FT2BUILD_H_ +#define FT_CONFIG_OPTIONS_H "long_ftoption.h" +#define FT_CONFIG_MODULES_H "long_ftmodule.h" + #include <freetype/config/ftheader.h> #endif /* FT2BUILD_H_ */ diff --git a/non-source/foreign/freetype2/long_ftmodule.h b/non-source/foreign/freetype2/long_ftmodule.h new file mode 100644 index 000000000..88c8040b3 --- /dev/null +++ b/non-source/foreign/freetype2/long_ftmodule.h @@ -0,0 +1,33 @@ +/* +* This file registers the FreeType modules compiled into the library. +* +* If you use GNU make, this file IS NOT USED! Instead, it is created in +* the objects directory (normally `<topdir>/objs/`) based on information +* from `<topdir>/modules.cfg`. +* +* Please read `docs/INSTALL.ANY` and `docs/CUSTOMIZE` how to compile +* FreeType without GNU make. +* +*/ + +//FT_USE_MODULE( FT_Module_Class, autofit_module_class ) +FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class ) +//FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class ) +//FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class ) +//FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class ) +//FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class ) +//FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class ) +//FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class ) +//FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class ) +FT_USE_MODULE( FT_Module_Class, psaux_module_class ) +FT_USE_MODULE( FT_Module_Class, psnames_module_class ) +FT_USE_MODULE( FT_Module_Class, pshinter_module_class ) +FT_USE_MODULE( FT_Module_Class, sfnt_module_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class ) +//FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class ) +//FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class ) +//FT_USE_MODULE( FT_Renderer_Class, ft_bitmap_sdf_renderer_class ) +//FT_USE_MODULE( FT_Renderer_Class, ft_svg_renderer_class ) + +/* EOF */ diff --git a/non-source/foreign/freetype2/long_ftoption.h b/non-source/foreign/freetype2/long_ftoption.h new file mode 100644 index 000000000..e5937690b --- /dev/null +++ b/non-source/foreign/freetype2/long_ftoption.h @@ -0,0 +1,1030 @@ +/**************************************************************************** +* +* ftoption.h +* +* User-selectable configuration macros (specification only). +* +* Copyright (C) 1996-2024 by +* David Turner, Robert Wilhelm, and Werner Lemberg. +* +* This file is part of the FreeType project, and may only be used, +* modified, and distributed under the terms of the FreeType project +* license, LICENSE.TXT. By continuing to use, modify, or distribute +* this file you indicate that you have read the license and +* understand and accept it fully. +* +*/ + + +#ifndef FTOPTION_H_ +#define FTOPTION_H_ + + +#include <ft2build.h> + + +FT_BEGIN_HEADER + +/************************************************************************** +* +* USER-SELECTABLE CONFIGURATION MACROS +* +* This file contains the default configuration macro definitions for a +* standard build of the FreeType library. There are three ways to use +* this file to build project-specific versions of the library: +* +* - You can modify this file by hand, but this is not recommended in +* cases where you would like to build several versions of the library +* from a single source directory. +* +* - You can put a copy of this file in your build directory, more +* precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is +* the name of a directory that is included _before_ the FreeType include +* path during compilation. +* +* The default FreeType Makefiles use the build directory +* `builds/<system>` by default, but you can easily change that for your +* own projects. +* +* - Copy the file <ft2build.h> to `$BUILD/ft2build.h` and modify it +* slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate +* this file during the build. For example, +* +* ``` +* #define FT_CONFIG_OPTIONS_H <myftoptions.h> +* #include <freetype/config/ftheader.h> +* ``` +* +* will use `$BUILD/myftoptions.h` instead of this file for macro +* definitions. +* +* Note also that you can similarly pre-define the macro +* `FT_CONFIG_MODULES_H` used to locate the file listing of the modules +* that are statically linked to the library at compile time. By +* default, this file is `<freetype/config/ftmodule.h>`. +* +* We highly recommend using the third method whenever possible. +* +*/ + + +/*************************************************************************/ +/*************************************************************************/ +/**** ****/ +/**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/ +/**** ****/ +/*************************************************************************/ +/*************************************************************************/ + + +/*#************************************************************************ +* +* If you enable this configuration option, FreeType recognizes an +* environment variable called `FREETYPE_PROPERTIES`, which can be used to +* control the various font drivers and modules. The controllable +* properties are listed in the section @properties. +* +* You have to undefine this configuration option on platforms that lack +* the concept of environment variables (and thus don't have the `getenv` +* function), for example Windows CE. +* +* `FREETYPE_PROPERTIES` has the following syntax form (broken here into +* multiple lines for better readability). +* +* ``` +* <optional whitespace> +* <module-name1> ':' +* <property-name1> '=' <property-value1> +* <whitespace> +* <module-name2> ':' +* <property-name2> '=' <property-value2> +* ... +* ``` +* +* Example: +* +* ``` +* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ +* cff:no-stem-darkening=1 +* ``` +* +*/ +#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + + +/************************************************************************** +* +* Uncomment the line below if you want to activate LCD rendering +* technology similar to ClearType in this build of the library. This +* technology triples the resolution in the direction color subpixels. To +* mitigate color fringes inherent to this technology, you also need to +* explicitly set up LCD filtering. +* +* When this macro is not defined, FreeType offers alternative LCD +* rendering technology that produces excellent output. +*/ +/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + +/************************************************************************** +* +* Many compilers provide a non-ANSI 64-bit data type that can be used by +* FreeType to speed up some computations. However, this will create some +* problems when compiling the library in strict ANSI mode. +* +* For this reason, the use of 64-bit integers is normally disabled when +* the `__STDC__` macro is defined. You can however disable this by +* defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here. +* +* For most compilers, this will only create compilation warnings when +* building the library. +* +* ObNote: The compiler-specific 64-bit integers are detected in the +* file `ftconfig.h` either statically or through the `configure` +* script on supported platforms. +*/ +#undef FT_CONFIG_OPTION_FORCE_INT64 + + +/************************************************************************** +* +* If this macro is defined, do not try to use an assembler version of +* performance-critical functions (e.g., @FT_MulFix). You should only do +* that to verify that the assembler function works properly, or to execute +* benchmark tests of the various implementations. +*/ +/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ + + +/************************************************************************** +* +* If this macro is defined, try to use an inlined assembler version of the +* @FT_MulFix function, which is a 'hotspot' when loading and hinting +* glyphs, and which should be executed as fast as possible. +* +* Note that if your compiler or CPU is not supported, this will default to +* the standard and portable implementation found in `ftcalc.c`. +*/ +#define FT_CONFIG_OPTION_INLINE_MULFIX + + +/************************************************************************** +* +* LZW-compressed file support. +* +* FreeType now handles font files that have been compressed with the +* `compress` program. This is mostly used to parse many of the PCF +* files that come with various X11 distributions. The implementation +* uses NetBSD's `zopen` to partially uncompress the file on the fly (see +* `src/lzw/ftgzip.c`). +* +* Define this macro if you want to enable this 'feature'. +*/ +//#define FT_CONFIG_OPTION_USE_LZW + + +/************************************************************************** +* +* Gzip-compressed file support. +* +* FreeType now handles font files that have been compressed with the +* `gzip` program. This is mostly used to parse many of the PCF files +* that come with XFree86. The implementation uses 'zlib' to partially +* uncompress the file on the fly (see `src/gzip/ftgzip.c`). +* +* Define this macro if you want to enable this 'feature'. See also the +* macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below. +*/ +//#define FT_CONFIG_OPTION_USE_ZLIB + + +/************************************************************************** +* +* ZLib library selection +* +* This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined. +* It allows FreeType's 'ftgzip' component to link to the system's +* installation of the ZLib library. This is useful on systems like +* Unix or VMS where it generally is already available. +* +* If you let it undefined, the component will use its own copy of the +* zlib sources instead. These have been modified to be included +* directly within the component and **not** export external function +* names. This allows you to link any program with FreeType _and_ ZLib +* without linking conflicts. +* +* Do not `#undef` this macro here since the build system might define +* it for certain configurations only. +* +* 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. +* +* If you use the GNU make build system directly (that is, without the +* `configure` script) and you define this macro, you also have to pass +* `SYSTEM_ZLIB=yes` as an argument to make. +*/ +/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */ + + +/************************************************************************** +* +* Bzip2-compressed file support. +* +* FreeType now handles font files that have been compressed with the +* `bzip2` program. This is mostly used to parse many of the PCF files +* that come with XFree86. The implementation uses `libbz2` to partially +* uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary +* to gzip, bzip2 currently is not included and need to use the system +* available bzip2 implementation. +* +* Define this macro if you want to enable this 'feature'. +* +* If you use a build system like cmake or the `configure` script, +* options set by those programs have precedence, overwriting the value +* here with the configured one. +*/ +/* #define FT_CONFIG_OPTION_USE_BZIP2 */ + + +/************************************************************************** +* +* Define to disable the use of file stream functions and types, `FILE`, +* `fopen`, etc. Enables the use of smaller system libraries on embedded +* systems that have multiple system libraries, some with or without file +* stream support, in the cases where file stream support is not necessary +* such as memory loading of font files. +*/ +#define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT + + +/************************************************************************** +* +* PNG bitmap support. +* +* FreeType now handles loading color bitmap glyphs in the PNG format. +* This requires help from the external libpng library. Uncompressed +* color bitmaps do not need any external libraries and will be supported +* regardless of this configuration. +* +* Define this macro if you want to enable this 'feature'. +* +* If you use a build system like cmake or the `configure` script, +* options set by those programs have precedence, overwriting the value +* here with the configured one. +*/ +/* #define FT_CONFIG_OPTION_USE_PNG */ + + +/************************************************************************** +* +* HarfBuzz support. +* +* FreeType uses the HarfBuzz library to improve auto-hinting of OpenType +* fonts. If available, many glyphs not directly addressable by a font's +* character map will be hinted also. +* +* Define this macro if you want to enable this 'feature'. +* +* If you use a build system like cmake or the `configure` script, +* options set by those programs have precedence, overwriting the value +* here with the configured one. +*/ +/* #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 +* +* By default, FreeType 2 is compiled with the 'psnames' module. This +* module is in charge of converting a glyph name string into a Unicode +* value, or return a Macintosh standard glyph name for the use with the +* TrueType 'post' table. +* +* Undefine this macro if you do not want 'psnames' compiled in your +* build of FreeType. This has the following effects: +* +* - The TrueType driver will provide its own set of glyph names, if you +* build it to support postscript names in the TrueType 'post' table, +* but will not synthesize a missing Unicode charmap. +* +* - The Type~1 driver will not be able to synthesize a Unicode charmap +* out of the glyphs found in the fonts. +* +* You would normally undefine this configuration macro when building a +* version of FreeType that doesn't contain a Type~1 or CFF driver. +*/ +#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + +/************************************************************************** +* +* Postscript Names to Unicode Values support +* +* By default, FreeType~2 is built with the 'psnames' module compiled in. +* Among other things, the module is used to convert a glyph name into a +* Unicode value. This is especially useful in order to synthesize on +* the fly a Unicode charmap from the CFF/Type~1 driver through a big +* table named the 'Adobe Glyph List' (AGL). +* +* Undefine this macro if you do not want the Adobe Glyph List compiled +* in your 'psnames' module. The Type~1 driver will not be able to +* synthesize a Unicode charmap out of the glyphs found in the fonts. +*/ +#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST + + +/************************************************************************** +* +* Support for Mac fonts +* +* Define this macro if you want support for outline fonts in Mac format +* (mac dfont, mac resource, macbinary containing a mac resource) on +* non-Mac platforms. +* +* Note that the 'FOND' resource isn't checked. +*/ +//#define FT_CONFIG_OPTION_MAC_FONTS + + +/************************************************************************** +* +* Guessing methods to access embedded resource forks +* +* Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux). +* +* Resource forks which include fonts data are stored sometimes in +* locations which users or developers don't expected. In some cases, +* resource forks start with some offset from the head of a file. In +* other cases, the actual resource fork is stored in file different from +* what the user specifies. If this option is activated, FreeType tries +* to guess whether such offsets or different file names must be used. +* +* Note that normal, direct access of resource forks is controlled via +* the `FT_CONFIG_OPTION_MAC_FONTS` option. +*/ +#ifdef FT_CONFIG_OPTION_MAC_FONTS +#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK +#endif + + +/************************************************************************** +* +* Allow the use of `FT_Incremental_Interface` to load typefaces that +* contain no glyph data, but supply it via a callback function. This is +* required by clients supporting document formats which supply font data +* incrementally as the document is parsed, such as the Ghostscript +* interpreter for the PostScript language. +*/ +//#define FT_CONFIG_OPTION_INCREMENTAL + + +/************************************************************************** +* +* The size in bytes of the render pool used by the scan-line converter to +* do all of its work. +*/ +#define FT_RENDER_POOL_SIZE 16384L + + +/************************************************************************** +* +* FT_MAX_MODULES +* +* The maximum number of modules that can be registered in a single +* FreeType library object. 32~is the default. +*/ +#define FT_MAX_MODULES 32 + + +/************************************************************************** +* +* Debug level +* +* FreeType can be compiled in debug or trace mode. In debug mode, +* errors are reported through the 'ftdebug' component. In trace mode, +* additional messages are sent to the standard output during execution. +* +* Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode. +* Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode. +* +* Don't define any of these macros to compile in 'release' mode! +* +* Do not `#undef` these macros here since the build system might define +* them for certain configurations only. +*/ +/* #define FT_DEBUG_LEVEL_ERROR */ +/* #define FT_DEBUG_LEVEL_TRACE */ + + +/************************************************************************** +* +* Logging +* +* Compiling FreeType in debug or trace mode makes FreeType write error +* and trace log messages to `stderr`. Enabling this macro +* automatically forces the `FT_DEBUG_LEVEL_ERROR` and +* `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and +* trace log messages to a file instead of `stderr`. For writing logs +* to a file, FreeType uses an the external `dlg` library (the source +* code is in `src/dlg`). +* +* This option needs a C99 compiler. +*/ +/* #define FT_DEBUG_LOGGING */ + + +/************************************************************************** +* +* Autofitter debugging +* +* If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to +* control the autofitter behaviour for debugging purposes with global +* boolean variables (consequently, you should **never** enable this +* while compiling in 'release' mode): +* +* ``` +* af_debug_disable_horz_hints_ +* af_debug_disable_vert_hints_ +* af_debug_disable_blue_hints_ +* ``` +* +* Additionally, the following functions provide dumps of various +* internal autofit structures to stdout (using `printf`): +* +* ``` +* af_glyph_hints_dump_points +* af_glyph_hints_dump_segments +* af_glyph_hints_dump_edges +* af_glyph_hints_get_num_segments +* af_glyph_hints_get_segment_offset +* ``` +* +* As an argument, they use another global variable: +* +* ``` +* af_debug_hints_ +* ``` +* +* Please have a look at the `ftgrid` demo program to see how those +* variables and macros should be used. +* +* Do not `#undef` these macros here since the build system might define +* them for certain configurations only. +*/ +/* #define FT_DEBUG_AUTOFIT */ + + +/************************************************************************** +* +* Memory Debugging +* +* FreeType now comes with an integrated memory debugger that is capable +* of detecting simple errors like memory leaks or double deletes. To +* compile it within your build of the library, you should define +* `FT_DEBUG_MEMORY` here. +* +* Note that the memory debugger is only activated at runtime when when +* the _environment_ variable `FT2_DEBUG_MEMORY` is defined also! +* +* Do not `#undef` this macro here since the build system might define it +* for certain configurations only. +*/ +/* #define FT_DEBUG_MEMORY */ + + +/************************************************************************** +* +* Module errors +* +* If this macro is set (which is _not_ the default), the higher byte of +* an error code gives the module in which the error has occurred, while +* the lower byte is the real error code. +* +* Setting this macro makes sense for debugging purposes only, since it +* would break source compatibility of certain programs that use +* FreeType~2. +* +* More details can be found in the files `ftmoderr.h` and `fterrors.h`. +*/ +#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS + + +/************************************************************************** +* +* OpenType SVG Glyph Support +* +* Setting this macro enables support for OpenType SVG glyphs. By +* default, FreeType can only fetch SVG documents. However, it can also +* render them if external rendering hook functions are plugged in at +* runtime. +* +* More details on the hooks can be found in file `otsvg.h`. +*/ +//#define FT_CONFIG_OPTION_SVG + + +/************************************************************************** +* +* Error Strings +* +* If this macro is set, `FT_Error_String` will return meaningful +* descriptions. This is not enabled by default to reduce the overall +* size of FreeType. +* +* More details can be found in the file `fterrors.h`. +*/ +#define FT_CONFIG_OPTION_ERROR_STRINGS + + +/*************************************************************************/ +/*************************************************************************/ +/**** ****/ +/**** S F N T D R I V E R C O N F I G U R A T I O N ****/ +/**** ****/ +/*************************************************************************/ +/*************************************************************************/ + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support +* embedded bitmaps in all formats using the 'sfnt' module (namely +* TrueType~& OpenType). +*/ +#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored +* outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' +* module (namely TrueType~& OpenType). +*/ +#define TT_CONFIG_OPTION_COLOR_LAYERS + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to +* load and enumerate Postscript names of glyphs in a TrueType or OpenType +* file. +* +* Note that if you do not compile the 'psnames' module by undefining the +* above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` macro, the 'sfnt' module will +* contain additional code to read the PostScript name table from a font. +* +* (By default, the module uses 'psnames' to extract glyph names.) +*/ +#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access +* the internal name table in a SFNT-based format like TrueType or +* OpenType. The name table contains various strings used to describe the +* font, like family name, copyright, version, etc. It does not contain +* any glyph name though. +* +* Accessing SFNT names is done through the functions declared in +* `ftsnames.h`. +*/ +#define TT_CONFIG_OPTION_SFNT_NAMES + + +/************************************************************************** +* +* TrueType CMap support +* +* Here you can fine-tune which TrueType CMap table format shall be +* supported. +*/ +#define TT_CONFIG_CMAP_FORMAT_0 +#define TT_CONFIG_CMAP_FORMAT_2 +#define TT_CONFIG_CMAP_FORMAT_4 +#define TT_CONFIG_CMAP_FORMAT_6 +#define TT_CONFIG_CMAP_FORMAT_8 +#define TT_CONFIG_CMAP_FORMAT_10 +#define TT_CONFIG_CMAP_FORMAT_12 +#define TT_CONFIG_CMAP_FORMAT_13 +#define TT_CONFIG_CMAP_FORMAT_14 + + +/*************************************************************************/ +/*************************************************************************/ +/**** ****/ +/**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ +/**** ****/ +/*************************************************************************/ +/*************************************************************************/ + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a +* bytecode interpreter in the TrueType driver. +* +* By undefining this, you will only compile the code necessary to load +* TrueType glyphs without hinting. +* +* Do not `#undef` this macro here, since the build system might define it +* for certain configurations only. +*/ +//#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile +* subpixel hinting support into the TrueType driver. This modifies the +* TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is +* requested. +* +* In particular, it modifies the bytecode interpreter to interpret (or +* not) instructions in a certain way so that all TrueType fonts look like +* they do in a Windows ClearType (DirectWrite) environment. See [1] for a +* technical overview on what this means. See `ttinterp.h` for more +* details on this option. +* +* The new default mode focuses on applying a minimal set of rules to all +* fonts indiscriminately so that modern and web fonts render well while +* legacy fonts render okay. The corresponding interpreter version is v40. +* The so-called Infinality mode (v38) is no longer available in FreeType. +* +* By undefining these, you get rendering behavior like on Windows without +* ClearType, i.e., Windows XP without ClearType enabled and Win9x +* (interpreter version v35). Or not, depending on how much hinting blood +* and testing tears the font designer put into a given font. If you +* define one or both subpixel hinting options, you can switch between +* between v35 and the ones you define (using `FT_Property_Set`). +* +* This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be +* defined. +* +* [1] +* https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx +*/ +//#define TT_CONFIG_OPTION_SUBPIXEL_HINTING + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the +* TrueType glyph loader to use Apple's definition of how to handle +* component offsets in composite glyphs. +* +* Apple and MS disagree on the default behavior of component offsets in +* composites. Apple says that they should be scaled by the scaling +* factors in the transformation matrix (roughly, it's more complex) while +* MS says they should not. OpenType defines two bits in the composite +* flags array which can be used to disambiguate, but old fonts will not +* have them. +* +* https://www.microsoft.com/typography/otspec/glyf.htm +* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html +*/ +//#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support +* for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and +* 'avar' tables). Tagged 'Font Variations', this is now part of OpenType +* also. This has many similarities to Type~1 Multiple Masters support. +*/ +//#define TT_CONFIG_OPTION_GX_VAR_SUPPORT + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_NO_BORING_EXPANSION` if you want to exclude +* support for 'boring' OpenType specification expansions. +* +* https://github.com/harfbuzz/boring-expansion-spec +* +* Right now, the following features are covered: +* +* - 'avar' version 2.0 +* +* Most likely, this is a temporary configuration option to be removed in +* the near future, since it is assumed that eventually those features are +* added to the OpenType standard. +*/ +/* #define TT_CONFIG_OPTION_NO_BORING_EXPANSION */ + + +/************************************************************************** +* +* Define `TT_CONFIG_OPTION_BDF` if you want to include support for an +* embedded 'BDF~' table within SFNT-based bitmap formats. +*/ +#define TT_CONFIG_OPTION_BDF + + +/************************************************************************** +* +* Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum +* number of bytecode instructions executed for a single run of the +* bytecode interpreter, needed to prevent infinite loops. You don't want +* to change this except for very special situations (e.g., making a +* library fuzzer spend less time to handle broken fonts). +* +* It is not expected that this value is ever modified by a configuring +* script; instead, it gets surrounded with `#ifndef ... #endif` so that +* the value can be set as a preprocessor option on the compiler's command +* line. +*/ +#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES +#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L +#endif + + +/************************************************************************** +* +* Option `TT_CONFIG_OPTION_GPOS_KERNING` enables a basic GPOS kerning +* implementation (for TrueType fonts only). With this defined, FreeType +* is able to get kerning pair data from the GPOS 'kern' feature as well as +* legacy 'kern' tables; without this defined, FreeType will only be able +* to use legacy 'kern' tables. +* +* Note that FreeType does not support more advanced GPOS layout features; +* even the 'kern' feature implemented here doesn't handle more +* sophisticated kerning variants. Use a higher-level library like +* HarfBuzz instead for that. +*/ +/* #define TT_CONFIG_OPTION_GPOS_KERNING */ + + +/*************************************************************************/ +/*************************************************************************/ +/**** ****/ +/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ +/**** ****/ +/*************************************************************************/ +/*************************************************************************/ + + +/************************************************************************** +* +* `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays +* in the Type~1 stream (see `t1load.c`). A minimum of~4 is required. +*/ +#define T1_MAX_DICT_DEPTH 5 + + +/************************************************************************** +* +* `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine +* calls during glyph loading. +*/ +#define T1_MAX_SUBRS_CALLS 16 + + +/************************************************************************** +* +* `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A +* minimum of~16 is required. +* +* The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character +* set) needs 256. +*/ +#define T1_MAX_CHARSTRINGS_OPERANDS 256 + + +/************************************************************************** +* +* Define this configuration macro if you want to prevent the compilation +* of the 't1afm' module, which is in charge of reading Type~1 AFM files +* into an existing face. Note that if set, the Type~1 driver will be +* unable to produce kerning distances. +*/ +#undef T1_CONFIG_OPTION_NO_AFM + + +/************************************************************************** +* +* Define this configuration macro if you want to prevent the compilation +* of the Multiple Masters font support in the Type~1 driver. +*/ +#undef T1_CONFIG_OPTION_NO_MM_SUPPORT + + +/************************************************************************** +* +* `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1 +* engine gets compiled into FreeType. If defined, it is possible to +* switch between the two engines using the `hinting-engine` property of +* the 'type1' driver module. +*/ +/* #define T1_CONFIG_OPTION_OLD_ENGINE */ + + +/*************************************************************************/ +/*************************************************************************/ +/**** ****/ +/**** C F F D R I V E R C O N F I G U R A T I O N ****/ +/**** ****/ +/*************************************************************************/ +/*************************************************************************/ + + +/************************************************************************** +* +* Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is +* possible to set up the default values of the four control points that +* define the stem darkening behaviour of the (new) CFF engine. For more +* details please read the documentation of the `darkening-parameters` +* property (file `ftdriver.h`), which allows the control at run-time. +* +* Do **not** undefine these macros! +*/ +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 + + +/************************************************************************** +* +* `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine +* gets compiled into FreeType. If defined, it is possible to switch +* between the two engines using the `hinting-engine` property of the 'cff' +* driver module. +*/ +/* #define CFF_CONFIG_OPTION_OLD_ENGINE */ + + +/*************************************************************************/ +/*************************************************************************/ +/**** ****/ +/**** P C F D R I V E R C O N F I G U R A T I O N ****/ +/**** ****/ +/*************************************************************************/ +/*************************************************************************/ + + +/************************************************************************** +* +* There are many PCF fonts just called 'Fixed' which look completely +* different, and which have nothing to do with each other. When selecting +* 'Fixed' in KDE or Gnome one gets results that appear rather random, the +* style changes often if one changes the size and one cannot select some +* fonts at all. This option makes the 'pcf' module prepend the foundry +* name (plus a space) to the family name. +* +* We also check whether we have 'wide' characters; all put together, we +* get family names like 'Sony Fixed' or 'Misc Fixed Wide'. +* +* If this option is activated, it can be controlled with the +* `no-long-family-names` property of the 'pcf' driver module. +*/ +/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ + + +/*************************************************************************/ +/*************************************************************************/ +/**** ****/ +/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ +/**** ****/ +/*************************************************************************/ +/*************************************************************************/ + + +/************************************************************************** +* +* Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script +* support. +*/ +#define AF_CONFIG_OPTION_CJK + + +/************************************************************************** +* +* Compile 'autofit' module with fallback Indic script support, covering +* some scripts that the 'latin' submodule of the 'autofit' module doesn't +* (yet) handle. Currently, this needs option `AF_CONFIG_OPTION_CJK`. +*/ +#ifdef AF_CONFIG_OPTION_CJK +#define AF_CONFIG_OPTION_INDIC +#endif + + +/************************************************************************** +* +* Use TrueType-like size metrics for 'light' auto-hinting. +* +* It is strongly recommended to avoid this option, which exists only to +* help some legacy applications retain its appearance and behaviour with +* respect to auto-hinted TrueType fonts. +* +* The very reason this option exists at all are GNU/Linux distributions +* like Fedora that did not un-patch the following change (which was +* present in FreeType between versions 2.4.6 and 2.7.1, inclusive). +* +* ``` +* 2011-07-16 Steven Chu <steven.f.chu@gmail.com> +* +* [truetype] Fix metrics on size request for scalable fonts. +* ``` +* +* This problematic commit is now reverted (more or less). +*/ +/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */ + +/* */ + + +/* +* This macro is obsolete. Support has been removed in FreeType version +* 2.5. +*/ +/* #define FT_CONFIG_OPTION_OLD_INTERNALS */ + + +/* +* The next two macros are defined if native TrueType hinting is +* requested by the definitions above. Don't change this. +*/ +#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER +#define TT_USE_BYTECODE_INTERPRETER +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING +#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL +#endif +#endif + + +/* +* The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this +* version of FreeType has support for 'COLR' v1 API. This definition is +* useful to FreeType clients that want to build in support for 'COLR' v1 +* depending on a tip-of-tree checkout before it is officially released in +* FreeType, and while the feature cannot yet be tested against using +* version macros. Don't change this macro. This may be removed once the +* feature is in a FreeType release version and version macros can be used +* to test for availability. +*/ +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS +#define TT_SUPPORT_COLRV1 +#endif + + +/* +* Check CFF darkening parameters. The checks are the same as in function +* `cff_property_set` in file `cffdrivr.c`. +*/ +#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500 +#error "Invalid CFF darkening parameters!" +#endif + + +FT_END_HEADER + +#endif /* FTOPTION_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftadvanc.c b/non-source/foreign/freetype2/src/base/ftadvanc.c new file mode 100644 index 000000000..717f7d08b --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftadvanc.c @@ -0,0 +1,174 @@ +/**************************************************************************** + * + * ftadvanc.c + * + * Quick computation of advance widths (body). + * + * Copyright (C) 2008-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> + +#include <freetype/ftadvanc.h> +#include <freetype/internal/ftobjs.h> + + + static FT_Error + ft_face_scale_advances_( FT_Face face, + FT_Fixed* advances, + FT_UInt count, + FT_Int32 flags ) + { + FT_Fixed scale; + FT_UInt nn; + + + if ( flags & FT_LOAD_NO_SCALE ) + return FT_Err_Ok; + + if ( !face->size ) + return FT_THROW( Invalid_Size_Handle ); + + if ( flags & FT_LOAD_VERTICAL_LAYOUT ) + scale = face->size->metrics.y_scale; + else + scale = face->size->metrics.x_scale; + + /* this must be the same scaling as to get linear{Hori,Vert}Advance */ + /* (see `FT_Load_Glyph' implementation in src/base/ftobjs.c) */ + + for ( nn = 0; nn < count; nn++ ) + advances[nn] = FT_MulDiv( advances[nn], scale, 64 ); + + return FT_Err_Ok; + } + + + /* at the moment, we can perform fast advance retrieval only in */ + /* the following cases: */ + /* */ + /* - unscaled load */ + /* - unhinted load */ + /* - light-hinted load */ + /* - if a variations font, it must have an `HVAR' or `VVAR' */ + /* table (thus the old MM or GX fonts don't qualify; this */ + /* gets checked by the driver-specific functions) */ + +#define LOAD_ADVANCE_FAST_CHECK( face, flags ) \ + ( flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING ) || \ + FT_LOAD_TARGET_MODE( flags ) == FT_RENDER_MODE_LIGHT ) + + + /* documentation is in ftadvanc.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Advance( FT_Face face, + FT_UInt gindex, + FT_Int32 flags, + FT_Fixed *padvance ) + { + FT_Face_GetAdvancesFunc func; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !padvance ) + return FT_THROW( Invalid_Argument ); + + if ( gindex >= (FT_UInt)face->num_glyphs ) + return FT_THROW( Invalid_Glyph_Index ); + + func = face->driver->clazz->get_advances; + if ( func && LOAD_ADVANCE_FAST_CHECK( face, flags ) ) + { + FT_Error error; + + + error = func( face, gindex, 1, flags, padvance ); + if ( !error ) + return ft_face_scale_advances_( face, padvance, 1, flags ); + + if ( FT_ERR_NEQ( error, Unimplemented_Feature ) ) + return error; + } + + return FT_Get_Advances( face, gindex, 1, flags, padvance ); + } + + + /* documentation is in ftadvanc.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Advances( FT_Face face, + FT_UInt start, + FT_UInt count, + FT_Int32 flags, + FT_Fixed *padvances ) + { + FT_Error error = FT_Err_Ok; + + FT_Face_GetAdvancesFunc func; + + FT_UInt num, end, nn; + FT_Int factor; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !padvances ) + return FT_THROW( Invalid_Argument ); + + num = (FT_UInt)face->num_glyphs; + end = start + count; + if ( start >= num || end < start || end > num ) + return FT_THROW( Invalid_Glyph_Index ); + + if ( count == 0 ) + return FT_Err_Ok; + + func = face->driver->clazz->get_advances; + if ( func && LOAD_ADVANCE_FAST_CHECK( face, flags ) ) + { + error = func( face, start, count, flags, padvances ); + if ( !error ) + return ft_face_scale_advances_( face, padvances, count, flags ); + + if ( FT_ERR_NEQ( error, Unimplemented_Feature ) ) + return error; + } + + error = FT_Err_Ok; + + if ( flags & FT_ADVANCE_FLAG_FAST_ONLY ) + return FT_THROW( Unimplemented_Feature ); + + flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY; + factor = ( flags & FT_LOAD_NO_SCALE ) ? 1 : 1024; + for ( nn = 0; nn < count; nn++ ) + { + error = FT_Load_Glyph( face, start + nn, flags ); + if ( error ) + break; + + /* scale from 26.6 to 16.16, unless NO_SCALE was requested */ + padvances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT ) + ? face->glyph->advance.y * factor + : face->glyph->advance.x * factor; + } + + return error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftbase.c b/non-source/foreign/freetype2/src/base/ftbase.c new file mode 100644 index 000000000..50805ccec --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftbase.c @@ -0,0 +1,41 @@ +/**************************************************************************** + * + * ftbase.c + * + * Single object library component (body only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "ftadvanc.c" +#include "ftcalc.c" +#include "ftcolor.c" +#include "ftdbgmem.c" +#include "fterrors.c" +#include "ftfntfmt.c" +#include "ftgloadr.c" +#include "fthash.c" +#include "ftlcdfil.c" +#include "ftmac.c" +#include "ftobjs.c" +#include "ftoutln.c" +#include "ftpsprop.c" +#include "ftrfork.c" +#include "ftsnames.c" +#include "ftstream.c" +#include "fttrigon.c" +#include "ftutil.c" + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftbase.h b/non-source/foreign/freetype2/src/base/ftbase.h new file mode 100644 index 000000000..1d98b26dd --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftbase.h @@ -0,0 +1,82 @@ +/**************************************************************************** + * + * ftbase.h + * + * Private functions used in the `base' module (specification). + * + * Copyright (C) 2008-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTBASE_H_ +#define FTBASE_H_ + + +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + + + FT_DECLARE_GLYPH( ft_bitmap_glyph_class ) + FT_DECLARE_GLYPH( ft_outline_glyph_class ) + FT_DECLARE_GLYPH( ft_svg_glyph_class ) + + +#ifdef FT_CONFIG_OPTION_MAC_FONTS + + /* MacOS resource fork cannot exceed 16MB at least for Carbon code; */ + /* see https://support.microsoft.com/en-us/kb/130437 */ +#define FT_MAC_RFORK_MAX_LEN 0x00FFFFFFUL + + + /* Assume the stream is sfnt-wrapped PS Type1 or sfnt-wrapped CID-keyed */ + /* font, and try to load a face specified by the face_index. */ + FT_LOCAL( FT_Error ) + open_face_PS_from_sfnt_stream( FT_Library library, + FT_Stream stream, + FT_Long face_index, + FT_Int num_params, + FT_Parameter *params, + FT_Face *aface ); + + + /* Create a new FT_Face given a buffer and a driver name. */ + /* From ftmac.c. */ + FT_LOCAL( FT_Error ) + open_face_from_buffer( FT_Library library, + FT_Byte* base, + FT_ULong size, + FT_Long face_index, + const char* driver_name, + FT_Face *aface ); + + +#if defined( FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK ) && \ + !defined( FT_MACINTOSH ) + /* Mac OS X/Darwin kernel often changes recommended method to access */ + /* the resource fork and older methods makes the kernel issue the */ + /* warning of deprecated method. To calm it down, the methods based */ + /* on Darwin VFS should be grouped and skip the rest methods after */ + /* the case the resource is opened but found to lack a font in it. */ + FT_LOCAL( FT_Bool ) + ft_raccess_rule_by_darwin_vfs( FT_Library library, FT_UInt rule_index ); +#endif + +#endif /* FT_CONFIG_OPTION_MAC_FONTS */ + + +FT_END_HEADER + +#endif /* FTBASE_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftbitmap.c b/non-source/foreign/freetype2/src/base/ftbitmap.c new file mode 100644 index 000000000..4be145679 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftbitmap.c @@ -0,0 +1,1144 @@ +/**************************************************************************** + * + * ftbitmap.c + * + * FreeType utility functions for bitmaps (body). + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> + +#include <freetype/ftbitmap.h> +#include <freetype/ftimage.h> +#include <freetype/internal/ftobjs.h> + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT bitmap + + + static + const FT_Bitmap null_bitmap = { 0, 0, 0, NULL, 0, 0, 0, NULL }; + + + /* documentation is in ftbitmap.h */ + + FT_EXPORT_DEF( void ) + FT_Bitmap_Init( FT_Bitmap *abitmap ) + { + if ( abitmap ) + *abitmap = null_bitmap; + } + + + /* deprecated function name; retained for ABI compatibility */ + + FT_EXPORT_DEF( void ) + FT_Bitmap_New( FT_Bitmap *abitmap ) + { + if ( abitmap ) + *abitmap = null_bitmap; + } + + + /* documentation is in ftbitmap.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Bitmap_Copy( FT_Library library, + const FT_Bitmap *source, + FT_Bitmap *target) + { + FT_Memory memory; + FT_Error error = FT_Err_Ok; + FT_Int pitch; + FT_Int flip; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !source || !target ) + return FT_THROW( Invalid_Argument ); + + if ( source == target ) + return FT_Err_Ok; + + flip = ( source->pitch < 0 && target->pitch > 0 ) || + ( source->pitch > 0 && target->pitch < 0 ); + + memory = library->memory; + FT_FREE( target->buffer ); + + *target = *source; + + if ( flip ) + target->pitch = -target->pitch; + + if ( !source->buffer ) + return FT_Err_Ok; + + pitch = source->pitch; + if ( pitch < 0 ) + pitch = -pitch; + + FT_MEM_QALLOC_MULT( target->buffer, target->rows, pitch ); + + if ( !error ) + { + if ( flip ) + { + /* take care of bitmap flow */ + FT_UInt i; + FT_Byte* s = source->buffer; + FT_Byte* t = target->buffer; + + + t += (FT_ULong)pitch * ( target->rows - 1 ); + + for ( i = target->rows; i > 0; i-- ) + { + FT_ARRAY_COPY( t, s, pitch ); + + s += pitch; + t -= pitch; + } + } + else + FT_MEM_COPY( target->buffer, source->buffer, + (FT_Long)source->rows * pitch ); + } + + return error; + } + + + /* Enlarge `bitmap' horizontally and vertically by `xpixels' */ + /* and `ypixels', respectively. */ + + static FT_Error + ft_bitmap_assure_buffer( FT_Memory memory, + FT_Bitmap* bitmap, + FT_UInt xpixels, + FT_UInt ypixels ) + { + FT_Error error; + unsigned int pitch; + unsigned int new_pitch; + FT_UInt bpp; + FT_UInt width, height; + unsigned char* buffer = NULL; + + + width = bitmap->width; + height = bitmap->rows; + pitch = (unsigned int)FT_ABS( bitmap->pitch ); + + switch ( bitmap->pixel_mode ) + { + case FT_PIXEL_MODE_MONO: + bpp = 1; + new_pitch = ( width + xpixels + 7 ) >> 3; + break; + case FT_PIXEL_MODE_GRAY2: + bpp = 2; + new_pitch = ( width + xpixels + 3 ) >> 2; + break; + case FT_PIXEL_MODE_GRAY4: + bpp = 4; + new_pitch = ( width + xpixels + 1 ) >> 1; + break; + case FT_PIXEL_MODE_GRAY: + case FT_PIXEL_MODE_LCD: + case FT_PIXEL_MODE_LCD_V: + bpp = 8; + new_pitch = width + xpixels; + break; + default: + return FT_THROW( Invalid_Glyph_Format ); + } + + /* if no need to allocate memory */ + if ( ypixels == 0 && new_pitch <= pitch ) + { + /* zero the padding */ + FT_UInt bit_width = pitch * 8; + FT_UInt bit_last = ( width + xpixels ) * bpp; + + + if ( bit_last < bit_width ) + { + FT_Byte* line = bitmap->buffer + ( bit_last >> 3 ); + FT_Byte* end = bitmap->buffer + pitch; + FT_UInt shift = bit_last & 7; + FT_UInt mask = 0xFF00U >> shift; + FT_UInt count = height; + + + for ( ; count > 0; count--, line += pitch, end += pitch ) + { + FT_Byte* write = line; + + + if ( shift > 0 ) + { + write[0] = (FT_Byte)( write[0] & mask ); + write++; + } + if ( write < end ) + FT_MEM_ZERO( write, end - write ); + } + } + + return FT_Err_Ok; + } + + /* otherwise allocate new buffer */ + if ( FT_QALLOC_MULT( buffer, bitmap->rows + ypixels, new_pitch ) ) + return error; + + /* new rows get added at the top of the bitmap, */ + /* thus take care of the flow direction */ + if ( bitmap->pitch > 0 ) + { + FT_UInt len = ( width * bpp + 7 ) >> 3; + + unsigned char* in = bitmap->buffer; + unsigned char* out = buffer; + + unsigned char* limit = bitmap->buffer + pitch * bitmap->rows; + unsigned int delta = new_pitch - len; + + + FT_MEM_ZERO( out, new_pitch * ypixels ); + out += new_pitch * ypixels; + + while ( in < limit ) + { + FT_MEM_COPY( out, in, len ); + in += pitch; + out += len; + + /* we use FT_QALLOC_MULT, which doesn't zero out the buffer; */ + /* consequently, we have to manually zero out the remaining bytes */ + FT_MEM_ZERO( out, delta ); + out += delta; + } + } + else + { + FT_UInt len = ( width * bpp + 7 ) >> 3; + + unsigned char* in = bitmap->buffer; + unsigned char* out = buffer; + + unsigned char* limit = bitmap->buffer + pitch * bitmap->rows; + unsigned int delta = new_pitch - len; + + + while ( in < limit ) + { + FT_MEM_COPY( out, in, len ); + in += pitch; + out += len; + + FT_MEM_ZERO( out, delta ); + out += delta; + } + + FT_MEM_ZERO( out, new_pitch * ypixels ); + } + + FT_FREE( bitmap->buffer ); + bitmap->buffer = buffer; + + /* set pitch only, width and height are left untouched */ + if ( bitmap->pitch < 0 ) + bitmap->pitch = -(int)new_pitch; + else + bitmap->pitch = (int)new_pitch; + + return FT_Err_Ok; + } + + + /* documentation is in ftbitmap.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Bitmap_Embolden( FT_Library library, + FT_Bitmap* bitmap, + FT_Pos xStrength, + FT_Pos yStrength ) + { + FT_Error error; + unsigned char* p; + FT_Int i, x, pitch; + FT_UInt y; + FT_Int xstr, ystr; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !bitmap || !bitmap->buffer ) + return FT_THROW( Invalid_Argument ); + + if ( ( ( FT_PIX_ROUND( xStrength ) >> 6 ) > FT_INT_MAX ) || + ( ( FT_PIX_ROUND( yStrength ) >> 6 ) > FT_INT_MAX ) ) + return FT_THROW( Invalid_Argument ); + + xstr = (FT_Int)FT_PIX_ROUND( xStrength ) >> 6; + ystr = (FT_Int)FT_PIX_ROUND( yStrength ) >> 6; + + if ( xstr == 0 && ystr == 0 ) + return FT_Err_Ok; + else if ( xstr < 0 || ystr < 0 ) + return FT_THROW( Invalid_Argument ); + + switch ( bitmap->pixel_mode ) + { + case FT_PIXEL_MODE_GRAY2: + case FT_PIXEL_MODE_GRAY4: + { + FT_Bitmap tmp; + + + /* convert to 8bpp */ + FT_Bitmap_Init( &tmp ); + error = FT_Bitmap_Convert( library, bitmap, &tmp, 1 ); + if ( error ) + return error; + + FT_Bitmap_Done( library, bitmap ); + *bitmap = tmp; + } + break; + + case FT_PIXEL_MODE_MONO: + if ( xstr > 8 ) + xstr = 8; + break; + + case FT_PIXEL_MODE_LCD: + xstr *= 3; + break; + + case FT_PIXEL_MODE_LCD_V: + ystr *= 3; + break; + + case FT_PIXEL_MODE_BGRA: + /* We don't embolden color glyphs. */ + return FT_Err_Ok; + } + + error = ft_bitmap_assure_buffer( library->memory, bitmap, + (FT_UInt)xstr, (FT_UInt)ystr ); + if ( error ) + return error; + + /* take care of bitmap flow */ + pitch = bitmap->pitch; + if ( pitch > 0 ) + p = bitmap->buffer + pitch * ystr; + else + { + pitch = -pitch; + p = bitmap->buffer + (FT_UInt)pitch * ( bitmap->rows - 1 ); + } + + /* for each row */ + for ( y = 0; y < bitmap->rows; y++ ) + { + /* + * Horizontally: + * + * From the last pixel on, make each pixel or'ed with the + * `xstr' pixels before it. + */ + for ( x = pitch - 1; x >= 0; x-- ) + { + unsigned char tmp; + + + tmp = p[x]; + for ( i = 1; i <= xstr; i++ ) + { + if ( bitmap->pixel_mode == FT_PIXEL_MODE_MONO ) + { + p[x] |= tmp >> i; + + /* the maximum value of 8 for `xstr' comes from here */ + if ( x > 0 ) + p[x] |= p[x - 1] << ( 8 - i ); + +#if 0 + if ( p[x] == 0xFF ) + break; +#endif + } + else + { + if ( x - i >= 0 ) + { + if ( p[x] + p[x - i] > bitmap->num_grays - 1 ) + { + p[x] = (unsigned char)( bitmap->num_grays - 1 ); + break; + } + else + { + p[x] = (unsigned char)( p[x] + p[x - i] ); + if ( p[x] == bitmap->num_grays - 1 ) + break; + } + } + else + break; + } + } + } + + /* + * Vertically: + * + * Make the above `ystr' rows or'ed with it. + */ + for ( x = 1; x <= ystr; x++ ) + { + unsigned char* q; + + + q = p - bitmap->pitch * x; + for ( i = 0; i < pitch; i++ ) + q[i] |= p[i]; + } + + p += bitmap->pitch; + } + + bitmap->width += (FT_UInt)xstr; + bitmap->rows += (FT_UInt)ystr; + + return FT_Err_Ok; + } + + + static FT_Byte + ft_gray_for_premultiplied_srgb_bgra( const FT_Byte* bgra ) + { + FT_UInt a = bgra[3]; + FT_UInt l; + + + /* Short-circuit transparent color to avoid division by zero. */ + if ( !a ) + return 0; + + /* + * Luminosity for sRGB is defined using ~0.2126,0.7152,0.0722 + * coefficients for RGB channels *on the linear colors*. + * A gamma of 2.2 is fair to assume. And then, we need to + * undo the premultiplication too. + * + * http://www.brucelindbloom.com/index.html?WorkingSpaceInfo.html#SideNotes + * + * We do the computation with integers only, applying a gamma of 2.0. + * We guarantee 32-bit arithmetic to avoid overflow but the resulting + * luminosity fits into 16 bits. + * + */ + + l = ( 4731UL /* 0.072186 * 65536 */ * bgra[0] * bgra[0] + + 46868UL /* 0.715158 * 65536 */ * bgra[1] * bgra[1] + + 13937UL /* 0.212656 * 65536 */ * bgra[2] * bgra[2] ) >> 16; + + /* + * Final transparency can be determined as follows. + * + * - If alpha is zero, we want 0. + * - If alpha is zero and luminosity is zero, we want 255. + * - If alpha is zero and luminosity is one, we want 0. + * + * So the formula is a * (1 - l) = a - l * a. + * + * We still need to undo premultiplication by dividing l by a*a. + * + */ + + return (FT_Byte)( a - l / a ); + } + + + /* documentation is in ftbitmap.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Bitmap_Convert( FT_Library library, + const FT_Bitmap *source, + FT_Bitmap *target, + FT_Int alignment ) + { + FT_Error error = FT_Err_Ok; + FT_Memory memory; + + FT_Byte* s; + FT_Byte* t; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !source || !target ) + return FT_THROW( Invalid_Argument ); + + memory = library->memory; + + switch ( source->pixel_mode ) + { + case FT_PIXEL_MODE_MONO: + case FT_PIXEL_MODE_GRAY: + case FT_PIXEL_MODE_GRAY2: + case FT_PIXEL_MODE_GRAY4: + case FT_PIXEL_MODE_LCD: + case FT_PIXEL_MODE_LCD_V: + case FT_PIXEL_MODE_BGRA: + { + FT_Int width = (FT_Int)source->width; + FT_Int neg = ( target->pitch == 0 && source->pitch < 0 ) || + target->pitch < 0; + + + FT_Bitmap_Done( library, target ); + + target->pixel_mode = FT_PIXEL_MODE_GRAY; + target->rows = source->rows; + target->width = source->width; + + if ( alignment ) + { + FT_Int rem = width % alignment; + + + if ( rem ) + width = alignment > 0 ? width - rem + alignment + : width - rem - alignment; + } + + if ( FT_QALLOC_MULT( target->buffer, target->rows, width ) ) + return error; + + target->pitch = neg ? -width : width; + } + break; + + default: + error = FT_THROW( Invalid_Argument ); + } + + s = source->buffer; + t = target->buffer; + + /* take care of bitmap flow */ + if ( source->pitch < 0 ) + s -= source->pitch * (FT_Int)( source->rows - 1 ); + if ( target->pitch < 0 ) + t -= target->pitch * (FT_Int)( target->rows - 1 ); + + switch ( source->pixel_mode ) + { + case FT_PIXEL_MODE_MONO: + { + FT_UInt i; + + + target->num_grays = 2; + + for ( i = source->rows; i > 0; i-- ) + { + FT_Byte* ss = s; + FT_Byte* tt = t; + FT_UInt j; + + + /* get the full bytes */ + for ( j = source->width >> 3; j > 0; j-- ) + { + FT_Int val = ss[0]; /* avoid a byte->int cast on each line */ + + + tt[0] = (FT_Byte)( ( val & 0x80 ) >> 7 ); + tt[1] = (FT_Byte)( ( val & 0x40 ) >> 6 ); + tt[2] = (FT_Byte)( ( val & 0x20 ) >> 5 ); + tt[3] = (FT_Byte)( ( val & 0x10 ) >> 4 ); + tt[4] = (FT_Byte)( ( val & 0x08 ) >> 3 ); + tt[5] = (FT_Byte)( ( val & 0x04 ) >> 2 ); + tt[6] = (FT_Byte)( ( val & 0x02 ) >> 1 ); + tt[7] = (FT_Byte)( val & 0x01 ); + + tt += 8; + ss += 1; + } + + /* get remaining pixels (if any) */ + j = source->width & 7; + if ( j > 0 ) + { + FT_Int val = *ss; + + + for ( ; j > 0; j-- ) + { + tt[0] = (FT_Byte)( ( val & 0x80 ) >> 7); + val <<= 1; + tt += 1; + } + } + + s += source->pitch; + t += target->pitch; + } + } + break; + + + case FT_PIXEL_MODE_GRAY: + case FT_PIXEL_MODE_LCD: + case FT_PIXEL_MODE_LCD_V: + { + FT_UInt width = source->width; + FT_UInt i; + + + target->num_grays = 256; + + for ( i = source->rows; i > 0; i-- ) + { + FT_ARRAY_COPY( t, s, width ); + + s += source->pitch; + t += target->pitch; + } + } + break; + + + case FT_PIXEL_MODE_GRAY2: + { + FT_UInt i; + + + target->num_grays = 4; + + for ( i = source->rows; i > 0; i-- ) + { + FT_Byte* ss = s; + FT_Byte* tt = t; + FT_UInt j; + + + /* get the full bytes */ + for ( j = source->width >> 2; j > 0; j-- ) + { + FT_Int val = ss[0]; + + + tt[0] = (FT_Byte)( ( val & 0xC0 ) >> 6 ); + tt[1] = (FT_Byte)( ( val & 0x30 ) >> 4 ); + tt[2] = (FT_Byte)( ( val & 0x0C ) >> 2 ); + tt[3] = (FT_Byte)( ( val & 0x03 ) ); + + ss += 1; + tt += 4; + } + + j = source->width & 3; + if ( j > 0 ) + { + FT_Int val = ss[0]; + + + for ( ; j > 0; j-- ) + { + tt[0] = (FT_Byte)( ( val & 0xC0 ) >> 6 ); + val <<= 2; + tt += 1; + } + } + + s += source->pitch; + t += target->pitch; + } + } + break; + + + case FT_PIXEL_MODE_GRAY4: + { + FT_UInt i; + + + target->num_grays = 16; + + for ( i = source->rows; i > 0; i-- ) + { + FT_Byte* ss = s; + FT_Byte* tt = t; + FT_UInt j; + + + /* get the full bytes */ + for ( j = source->width >> 1; j > 0; j-- ) + { + FT_Int val = ss[0]; + + + tt[0] = (FT_Byte)( ( val & 0xF0 ) >> 4 ); + tt[1] = (FT_Byte)( ( val & 0x0F ) ); + + ss += 1; + tt += 2; + } + + if ( source->width & 1 ) + tt[0] = (FT_Byte)( ( ss[0] & 0xF0 ) >> 4 ); + + s += source->pitch; + t += target->pitch; + } + } + break; + + + case FT_PIXEL_MODE_BGRA: + { + FT_UInt i; + + + target->num_grays = 256; + + for ( i = source->rows; i > 0; i-- ) + { + FT_Byte* ss = s; + FT_Byte* tt = t; + FT_UInt j; + + + for ( j = source->width; j > 0; j-- ) + { + tt[0] = ft_gray_for_premultiplied_srgb_bgra( ss ); + + ss += 4; + tt += 1; + } + + s += source->pitch; + t += target->pitch; + } + } + break; + + default: + ; + } + + return error; + } + + + /* documentation is in ftbitmap.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Bitmap_Blend( FT_Library library, + const FT_Bitmap* source_, + const FT_Vector source_offset_, + FT_Bitmap* target, + FT_Vector *atarget_offset, + FT_Color color ) + { + FT_Error error = FT_Err_Ok; + FT_Memory memory; + + FT_Bitmap source_bitmap; + const FT_Bitmap* source; + + FT_Vector source_offset; + FT_Vector target_offset; + + FT_Bool free_source_bitmap = 0; + FT_Bool free_target_bitmap_on_error = 0; + + FT_Pos source_llx, source_lly, source_urx, source_ury; + FT_Pos target_llx, target_lly, target_urx, target_ury; + FT_Pos final_llx, final_lly, final_urx, final_ury; + + unsigned int final_rows, final_width; + long x, y; + + + if ( !library || !target || !source_ || !atarget_offset ) + return FT_THROW( Invalid_Argument ); + + memory = library->memory; + + if ( !( target->pixel_mode == FT_PIXEL_MODE_NONE || + ( target->pixel_mode == FT_PIXEL_MODE_BGRA && + target->buffer ) ) ) + return FT_THROW( Invalid_Argument ); + + if ( source_->pixel_mode == FT_PIXEL_MODE_NONE ) + return FT_Err_Ok; /* nothing to do */ + + /* pitches must have the same sign */ + if ( target->pixel_mode == FT_PIXEL_MODE_BGRA && + ( source_->pitch ^ target->pitch ) < 0 ) + return FT_THROW( Invalid_Argument ); + + if ( !( source_->width && source_->rows ) ) + return FT_Err_Ok; /* nothing to do */ + + /* assure integer pixel offsets */ + source_offset.x = FT_PIX_FLOOR( source_offset_.x ); + source_offset.y = FT_PIX_FLOOR( source_offset_.y ); + target_offset.x = FT_PIX_FLOOR( atarget_offset->x ); + target_offset.y = FT_PIX_FLOOR( atarget_offset->y ); + + /* get source bitmap dimensions */ + source_llx = source_offset.x; + if ( FT_LONG_MIN + (FT_Pos)( source_->rows << 6 ) + 64 > source_offset.y ) + { + FT_TRACE5(( + "FT_Bitmap_Blend: y coordinate overflow in source bitmap\n" )); + return FT_THROW( Invalid_Argument ); + } + source_lly = source_offset.y - ( source_->rows << 6 ); + + if ( FT_LONG_MAX - (FT_Pos)( source_->width << 6 ) - 64 < source_llx ) + { + FT_TRACE5(( + "FT_Bitmap_Blend: x coordinate overflow in source bitmap\n" )); + return FT_THROW( Invalid_Argument ); + } + source_urx = source_llx + ( source_->width << 6 ); + source_ury = source_offset.y; + + /* get target bitmap dimensions */ + if ( target->width && target->rows ) + { + target_llx = target_offset.x; + if ( FT_LONG_MIN + (FT_Pos)( target->rows << 6 ) > target_offset.y ) + { + FT_TRACE5(( + "FT_Bitmap_Blend: y coordinate overflow in target bitmap\n" )); + return FT_THROW( Invalid_Argument ); + } + target_lly = target_offset.y - ( target->rows << 6 ); + + if ( FT_LONG_MAX - (FT_Pos)( target->width << 6 ) < target_llx ) + { + FT_TRACE5(( + "FT_Bitmap_Blend: x coordinate overflow in target bitmap\n" )); + return FT_THROW( Invalid_Argument ); + } + target_urx = target_llx + ( target->width << 6 ); + target_ury = target_offset.y; + } + else + { + target_llx = FT_LONG_MAX; + target_lly = FT_LONG_MAX; + target_urx = FT_LONG_MIN; + target_ury = FT_LONG_MIN; + } + + /* compute final bitmap dimensions */ + final_llx = FT_MIN( source_llx, target_llx ); + final_lly = FT_MIN( source_lly, target_lly ); + final_urx = FT_MAX( source_urx, target_urx ); + final_ury = FT_MAX( source_ury, target_ury ); + + final_width = ( final_urx - final_llx ) >> 6; + final_rows = ( final_ury - final_lly ) >> 6; + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE5(( "FT_Bitmap_Blend:\n" )); + FT_TRACE5(( " 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: (%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" )); + + 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; + source_lly -= final_lly; + + if ( target->width && target->rows ) + { + target_llx -= final_llx; + target_lly -= final_lly; + } + + /* set up target bitmap */ + if ( target->pixel_mode == FT_PIXEL_MODE_NONE ) + { + /* create new empty bitmap */ + target->width = final_width; + target->rows = final_rows; + target->pixel_mode = FT_PIXEL_MODE_BGRA; + target->pitch = (int)final_width * 4; + target->num_grays = 256; + + if ( FT_LONG_MAX / target->pitch < (int)target->rows ) + { + FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n", + final_width, final_rows )); + return FT_THROW( Invalid_Argument ); + } + + if ( FT_ALLOC( target->buffer, target->pitch * (int)target->rows ) ) + return error; + + free_target_bitmap_on_error = 1; + } + else if ( target->width != final_width || + target->rows != final_rows ) + { + /* adjust old bitmap to enlarged size */ + int pitch, new_pitch; + + unsigned char* buffer = NULL; + + + pitch = target->pitch; + + if ( pitch < 0 ) + pitch = -pitch; + + new_pitch = (int)final_width * 4; + + if ( FT_LONG_MAX / new_pitch < (int)final_rows ) + { + FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n", + final_width, final_rows )); + return FT_THROW( Invalid_Argument ); + } + + /* TODO: provide an in-buffer solution for large bitmaps */ + /* to avoid allocation of a new buffer */ + if ( FT_ALLOC( buffer, new_pitch * (int)final_rows ) ) + goto Error; + + /* copy data to new buffer */ + x = target_llx >> 6; + y = target_lly >> 6; + + /* the bitmap flow is from top to bottom, */ + /* but y is measured from bottom to top */ + if ( target->pitch < 0 ) + { + /* XXX */ + } + else + { + unsigned char* p = + target->buffer; + unsigned char* q = + buffer + + ( final_rows - y - target->rows ) * new_pitch + + x * 4; + unsigned char* limit_p = + p + pitch * (int)target->rows; + + + while ( p < limit_p ) + { + FT_MEM_COPY( q, p, pitch ); + + p += pitch; + q += new_pitch; + } + } + + FT_FREE( target->buffer ); + + target->width = final_width; + target->rows = final_rows; + + if ( target->pitch < 0 ) + target->pitch = -new_pitch; + else + target->pitch = new_pitch; + + target->buffer = buffer; + } + + /* adjust source bitmap if necessary */ + if ( source_->pixel_mode != FT_PIXEL_MODE_GRAY ) + { + FT_Bitmap_Init( &source_bitmap ); + error = FT_Bitmap_Convert( library, source_, &source_bitmap, 1 ); + if ( error ) + goto Error; + + source = &source_bitmap; + free_source_bitmap = 1; + } + else + source = source_; + + /* do blending; the code below returns pre-multiplied channels, */ + /* similar to what FreeType gets from `CBDT' tables */ + x = source_llx >> 6; + y = source_lly >> 6; + + /* the bitmap flow is from top to bottom, */ + /* but y is measured from bottom to top */ + if ( target->pitch < 0 ) + { + /* XXX */ + } + else + { + unsigned char* p = + source->buffer; + unsigned char* q = + target->buffer + + ( target->rows - y - source->rows ) * target->pitch + + x * 4; + unsigned char* limit_p = + p + source->pitch * (int)source->rows; + + + while ( p < limit_p ) + { + unsigned char* r = p; + unsigned char* s = q; + unsigned char* limit_r = r + source->width; + + + while ( r < limit_r ) + { + int aa = *r++; + int fa = color.alpha * aa / 255; + + int fb = color.blue * fa / 255; + int fg = color.green * fa / 255; + int fr = color.red * fa / 255; + + int ba2 = 255 - fa; + + int bb = s[0]; + int bg = s[1]; + int br = s[2]; + int ba = s[3]; + + + *s++ = (unsigned char)( bb * ba2 / 255 + fb ); + *s++ = (unsigned char)( bg * ba2 / 255 + fg ); + *s++ = (unsigned char)( br * ba2 / 255 + fr ); + *s++ = (unsigned char)( ba * ba2 / 255 + fa ); + } + + p += source->pitch; + q += target->pitch; + } + } + + atarget_offset->x = final_llx; + atarget_offset->y = final_lly + ( final_rows << 6 ); + + Error: + if ( error && free_target_bitmap_on_error ) + FT_Bitmap_Done( library, target ); + + if ( free_source_bitmap ) + FT_Bitmap_Done( library, &source_bitmap ); + + return error; + } + + + /* documentation is in ftbitmap.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot ) + { + if ( slot && slot->format == FT_GLYPH_FORMAT_BITMAP && + !( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) ) + { + FT_Bitmap bitmap; + FT_Error error; + + + FT_Bitmap_Init( &bitmap ); + error = FT_Bitmap_Copy( slot->library, &slot->bitmap, &bitmap ); + if ( error ) + return error; + + slot->bitmap = bitmap; + slot->internal->flags |= FT_GLYPH_OWN_BITMAP; + } + + return FT_Err_Ok; + } + + + /* documentation is in ftbitmap.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Bitmap_Done( FT_Library library, + FT_Bitmap *bitmap ) + { + FT_Memory memory; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !bitmap ) + return FT_THROW( Invalid_Argument ); + + memory = library->memory; + + FT_FREE( bitmap->buffer ); + *bitmap = null_bitmap; + + return FT_Err_Ok; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftcalc.c b/non-source/foreign/freetype2/src/base/ftcalc.c new file mode 100644 index 000000000..92de09ed8 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftcalc.c @@ -0,0 +1,1126 @@ +/**************************************************************************** + * + * ftcalc.c + * + * Arithmetic computations (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * Support for 1-complement arithmetic has been totally dropped in this + * release. You can still write your own code if you need it. + * + */ + + /************************************************************************** + * + * Implementing basic computation routines. + * + * FT_MulDiv(), FT_MulFix(), FT_DivFix(), FT_RoundFix(), FT_CeilFix(), + * and FT_FloorFix() are declared in freetype.h. + * + */ + + +#include <freetype/ftglyph.h> +#include <freetype/fttrigon.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftobjs.h> + + +#ifdef FT_MULFIX_ASSEMBLER +#undef FT_MulFix +#endif + +/* we need to emulate a 64-bit data type if a real one isn't available */ + +#ifndef FT_INT64 + + typedef struct FT_Int64_ + { + FT_UInt32 lo; + FT_UInt32 hi; + + } FT_Int64; + +#endif /* !FT_INT64 */ + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT calc + + + /* transfer sign, leaving a positive number; */ + /* we need an unsigned value to safely negate INT_MIN (or LONG_MIN) */ +#define FT_MOVE_SIGN( utype, x, x_unsigned, s ) \ + FT_BEGIN_STMNT \ + if ( x < 0 ) \ + { \ + x_unsigned = 0U - (utype)x; \ + s = -s; \ + } \ + else \ + x_unsigned = (utype)x; \ + FT_END_STMNT + + /* The following three functions are available regardless of whether */ + /* FT_INT64 is defined. */ + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Fixed ) + FT_RoundFix( FT_Fixed a ) + { + return ( ADD_LONG( a, 0x8000L - ( a < 0 ) ) ) & ~0xFFFFL; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Fixed ) + FT_CeilFix( FT_Fixed a ) + { + return ( ADD_LONG( a, 0xFFFFL ) ) & ~0xFFFFL; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Fixed ) + FT_FloorFix( FT_Fixed a ) + { + return a & ~0xFFFFL; + } + +#ifndef FT_MSB + + FT_BASE_DEF( FT_Int ) + FT_MSB( FT_UInt32 z ) + { + FT_Int shift = 0; + + + /* determine msb bit index in `shift' */ + if ( z & 0xFFFF0000UL ) + { + z >>= 16; + shift += 16; + } + if ( z & 0x0000FF00UL ) + { + z >>= 8; + shift += 8; + } + if ( z & 0x000000F0UL ) + { + z >>= 4; + shift += 4; + } + if ( z & 0x0000000CUL ) + { + z >>= 2; + shift += 2; + } + if ( z & 0x00000002UL ) + { + /* z >>= 1; */ + shift += 1; + } + + return shift; + } + +#endif /* !FT_MSB */ + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( FT_Fixed ) + FT_Hypot( FT_Fixed x, + FT_Fixed y ) + { + FT_Vector v; + + + v.x = x; + v.y = y; + + return FT_Vector_Length( &v ); + } + + +#ifdef FT_INT64 + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Long ) + FT_MulDiv( FT_Long a_, + FT_Long b_, + FT_Long c_ ) + { + FT_Int s = 1; + FT_UInt64 a, b, c, d; + FT_Long d_; + + + FT_MOVE_SIGN( FT_UInt64, a_, a, s ); + FT_MOVE_SIGN( FT_UInt64, b_, b, s ); + FT_MOVE_SIGN( FT_UInt64, c_, c, s ); + + d = c > 0 ? ( a * b + ( c >> 1 ) ) / c + : 0x7FFFFFFFUL; + + d_ = (FT_Long)d; + + return s < 0 ? NEG_LONG( d_ ) : d_; + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( FT_Long ) + FT_MulDiv_No_Round( FT_Long a_, + FT_Long b_, + FT_Long c_ ) + { + FT_Int s = 1; + FT_UInt64 a, b, c, d; + FT_Long d_; + + + FT_MOVE_SIGN( FT_UInt64, a_, a, s ); + FT_MOVE_SIGN( FT_UInt64, b_, b, s ); + FT_MOVE_SIGN( FT_UInt64, c_, c, s ); + + d = c > 0 ? a * b / c + : 0x7FFFFFFFUL; + + d_ = (FT_Long)d; + + return s < 0 ? NEG_LONG( d_ ) : d_; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Long ) + FT_MulFix( FT_Long a_, + FT_Long b_ ) + { +#ifdef FT_MULFIX_ASSEMBLER + + return FT_MULFIX_ASSEMBLER( (FT_Int32)a_, (FT_Int32)b_ ); + +#else + + FT_Int64 ab = (FT_Int64)a_ * (FT_Int64)b_; + + /* this requires arithmetic right shift of signed numbers */ + return (FT_Long)( ( ab + 0x8000L - ( ab < 0 ) ) >> 16 ); + +#endif /* FT_MULFIX_ASSEMBLER */ + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Long ) + FT_DivFix( FT_Long a_, + FT_Long b_ ) + { + FT_Int s = 1; + FT_UInt64 a, b, q; + FT_Long q_; + + + FT_MOVE_SIGN( FT_UInt64, a_, a, s ); + FT_MOVE_SIGN( FT_UInt64, b_, b, s ); + + q = b > 0 ? ( ( a << 16 ) + ( b >> 1 ) ) / b + : 0x7FFFFFFFUL; + + q_ = (FT_Long)q; + + return s < 0 ? NEG_LONG( q_ ) : q_; + } + + +#else /* !FT_INT64 */ + + + static void + ft_multo64( FT_UInt32 x, + FT_UInt32 y, + FT_Int64 *z ) + { + FT_UInt32 lo1, hi1, lo2, hi2, lo, hi, i1, i2; + + + lo1 = x & 0x0000FFFFU; hi1 = x >> 16; + lo2 = y & 0x0000FFFFU; hi2 = y >> 16; + + lo = lo1 * lo2; + i1 = lo1 * hi2; + i2 = lo2 * hi1; + hi = hi1 * hi2; + + /* Check carry overflow of i1 + i2 */ + i1 += i2; + hi += (FT_UInt32)( i1 < i2 ) << 16; + + hi += i1 >> 16; + i1 = i1 << 16; + + /* Check carry overflow of i1 + lo */ + lo += i1; + hi += ( lo < i1 ); + + z->lo = lo; + z->hi = hi; + } + + + static FT_UInt32 + ft_div64by32( FT_UInt32 hi, + FT_UInt32 lo, + FT_UInt32 y ) + { + FT_UInt32 r, q; + FT_Int i; + + + if ( hi >= y ) + return (FT_UInt32)0x7FFFFFFFL; + + /* We shift as many bits as we can into the high register, perform */ + /* 32-bit division with modulo there, then work through the remaining */ + /* bits with long division. This optimization is especially noticeable */ + /* for smaller dividends that barely use the high register. */ + + i = 31 - FT_MSB( hi ); + r = ( hi << i ) | ( lo >> ( 32 - i ) ); lo <<= i; /* left 64-bit shift */ + q = r / y; + r -= q * y; /* remainder */ + + i = 32 - i; /* bits remaining in low register */ + do + { + q <<= 1; + r = ( r << 1 ) | ( lo >> 31 ); lo <<= 1; + + if ( r >= y ) + { + r -= y; + q |= 1; + } + } while ( --i ); + + return q; + } + + + static void + FT_Add64( FT_Int64* x, + FT_Int64* y, + FT_Int64 *z ) + { + FT_UInt32 lo, hi; + + + lo = x->lo + y->lo; + hi = x->hi + y->hi + ( lo < x->lo ); + + z->lo = lo; + z->hi = hi; + } + + + /* The FT_MulDiv function has been optimized thanks to ideas from */ + /* Graham Asher and Alexei Podtelezhnikov. The trick is to optimize */ + /* a rather common case when everything fits within 32-bits. */ + /* */ + /* We compute 'a*b+c/2', then divide it by 'c' (all positive values). */ + /* */ + /* The product of two positive numbers never exceeds the square of */ + /* its mean values. Therefore, we always avoid the overflow by */ + /* imposing */ + /* */ + /* (a + b) / 2 <= sqrt(X - c/2) , */ + /* */ + /* where X = 2^32 - 1, the maximum unsigned 32-bit value, and using */ + /* unsigned arithmetic. Now we replace `sqrt' with a linear function */ + /* that is smaller or equal for all values of c in the interval */ + /* [0;X/2]; it should be equal to sqrt(X) and sqrt(3X/4) at the */ + /* endpoints. Substituting the linear solution and explicit numbers */ + /* we get */ + /* */ + /* a + b <= 131071.99 - c / 122291.84 . */ + /* */ + /* In practice, we should use a faster and even stronger inequality */ + /* */ + /* a + b <= 131071 - (c >> 16) */ + /* */ + /* or, alternatively, */ + /* */ + /* a + b <= 129894 - (c >> 17) . */ + /* */ + /* FT_MulFix, on the other hand, is optimized for a small value of */ + /* the first argument, when the second argument can be much larger. */ + /* This can be achieved by scaling the second argument and the limit */ + /* in the above inequalities. For example, */ + /* */ + /* a + (b >> 8) <= (131071 >> 4) */ + /* */ + /* covers the practical range of use. The actual test below is a bit */ + /* tighter to avoid the border case overflows. */ + /* */ + /* In the case of FT_DivFix, the exact overflow check */ + /* */ + /* a << 16 <= X - c/2 */ + /* */ + /* is scaled down by 2^16 and we use */ + /* */ + /* a <= 65535 - (c >> 17) . */ + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Long ) + FT_MulDiv( FT_Long a_, + FT_Long b_, + FT_Long c_ ) + { + FT_Int s = 1; + FT_UInt32 a, b, c; + + + /* XXX: this function does not allow 64-bit arguments */ + + FT_MOVE_SIGN( FT_UInt32, a_, a, s ); + FT_MOVE_SIGN( FT_UInt32, b_, b, s ); + FT_MOVE_SIGN( FT_UInt32, c_, c, s ); + + if ( c == 0 ) + a = 0x7FFFFFFFUL; + + else if ( a + b <= 129894UL - ( c >> 17 ) ) + a = ( a * b + ( c >> 1 ) ) / c; + + else + { + FT_Int64 temp, temp2; + + + ft_multo64( a, b, &temp ); + + temp2.hi = 0; + temp2.lo = c >> 1; + + FT_Add64( &temp, &temp2, &temp ); + + /* last attempt to ditch long division */ + a = ( temp.hi == 0 ) ? temp.lo / c + : ft_div64by32( temp.hi, temp.lo, c ); + } + + a_ = (FT_Long)a; + + return s < 0 ? NEG_LONG( a_ ) : a_; + } + + + FT_BASE_DEF( FT_Long ) + FT_MulDiv_No_Round( FT_Long a_, + FT_Long b_, + FT_Long c_ ) + { + FT_Int s = 1; + FT_UInt32 a, b, c; + + + /* XXX: this function does not allow 64-bit arguments */ + + FT_MOVE_SIGN( FT_UInt32, a_, a, s ); + FT_MOVE_SIGN( FT_UInt32, b_, b, s ); + FT_MOVE_SIGN( FT_UInt32, c_, c, s ); + + if ( c == 0 ) + a = 0x7FFFFFFFUL; + + else if ( a + b <= 131071UL ) + a = a * b / c; + + else + { + FT_Int64 temp; + + + ft_multo64( a, b, &temp ); + + /* last attempt to ditch long division */ + a = ( temp.hi == 0 ) ? temp.lo / c + : ft_div64by32( temp.hi, temp.lo, c ); + } + + a_ = (FT_Long)a; + + return s < 0 ? NEG_LONG( a_ ) : a_; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Long ) + FT_MulFix( FT_Long a_, + FT_Long b_ ) + { +#ifdef FT_MULFIX_ASSEMBLER + + return FT_MULFIX_ASSEMBLER( a_, b_ ); + +#elif 0 + + /* + * This code is nonportable. See comment below. + * + * However, on a platform where right-shift of a signed quantity fills + * the leftmost bits by copying the sign bit, it might be faster. + */ + + FT_Long sa, sb; + FT_UInt32 a, b; + + + /* + * This is a clever way of converting a signed number `a' into its + * absolute value (stored back into `a') and its sign. The sign is + * stored in `sa'; 0 means `a' was positive or zero, and -1 means `a' + * was negative. (Similarly for `b' and `sb'). + * + * Unfortunately, it doesn't work (at least not portably). + * + * It makes the assumption that right-shift on a negative signed value + * fills the leftmost bits by copying the sign bit. This is wrong. + * According to K&R 2nd ed, section `A7.8 Shift Operators' on page 206, + * the result of right-shift of a negative signed value is + * implementation-defined. At least one implementation fills the + * leftmost bits with 0s (i.e., it is exactly the same as an unsigned + * right shift). This means that when `a' is negative, `sa' ends up + * with the value 1 rather than -1. After that, everything else goes + * wrong. + */ + sa = ( a_ >> ( sizeof ( a_ ) * 8 - 1 ) ); + a = ( a_ ^ sa ) - sa; + sb = ( b_ >> ( sizeof ( b_ ) * 8 - 1 ) ); + b = ( b_ ^ sb ) - sb; + + a = (FT_UInt32)a_; + b = (FT_UInt32)b_; + + if ( a + ( b >> 8 ) <= 8190UL ) + a = ( a * b + 0x8000U ) >> 16; + else + { + FT_UInt32 al = a & 0xFFFFUL; + + + a = ( a >> 16 ) * b + al * ( b >> 16 ) + + ( ( al * ( b & 0xFFFFUL ) + 0x8000UL ) >> 16 ); + } + + sa ^= sb; + a = ( a ^ sa ) - sa; + + return (FT_Long)a; + +#else /* 0 */ + + FT_Int s = 1; + FT_UInt32 a, b; + + + /* XXX: this function does not allow 64-bit arguments */ + + FT_MOVE_SIGN( FT_UInt32, a_, a, s ); + FT_MOVE_SIGN( FT_UInt32, b_, b, s ); + + if ( a + ( b >> 8 ) <= 8190UL ) + a = ( a * b + 0x8000UL ) >> 16; + else + { + FT_UInt32 al = a & 0xFFFFUL; + + + a = ( a >> 16 ) * b + al * ( b >> 16 ) + + ( ( al * ( b & 0xFFFFUL ) + 0x8000UL ) >> 16 ); + } + + a_ = (FT_Long)a; + + return s < 0 ? NEG_LONG( a_ ) : a_; + +#endif /* 0 */ + + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Long ) + FT_DivFix( FT_Long a_, + FT_Long b_ ) + { + FT_Int s = 1; + FT_UInt32 a, b, q; + FT_Long q_; + + + /* XXX: this function does not allow 64-bit arguments */ + + FT_MOVE_SIGN( FT_UInt32, a_, a, s ); + FT_MOVE_SIGN( FT_UInt32, b_, b, s ); + + if ( b == 0 ) + { + /* check for division by 0 */ + q = 0x7FFFFFFFUL; + } + else if ( a <= 65535UL - ( b >> 17 ) ) + { + /* compute result directly */ + q = ( ( a << 16 ) + ( b >> 1 ) ) / b; + } + else + { + /* we need more bits; we have to do it by hand */ + FT_Int64 temp, temp2; + + + temp.hi = a >> 16; + temp.lo = a << 16; + temp2.hi = 0; + temp2.lo = b >> 1; + + FT_Add64( &temp, &temp2, &temp ); + q = ft_div64by32( temp.hi, temp.lo, b ); + } + + q_ = (FT_Long)q; + + return s < 0 ? NEG_LONG( q_ ) : q_; + } + + +#endif /* !FT_INT64 */ + + + /* documentation is in ftglyph.h */ + + FT_EXPORT_DEF( void ) + FT_Matrix_Multiply( const FT_Matrix* a, + FT_Matrix *b ) + { + FT_Fixed xx, xy, yx, yy; + + + if ( !a || !b ) + return; + + xx = ADD_LONG( FT_MulFix( a->xx, b->xx ), + FT_MulFix( a->xy, b->yx ) ); + xy = ADD_LONG( FT_MulFix( a->xx, b->xy ), + FT_MulFix( a->xy, b->yy ) ); + yx = ADD_LONG( FT_MulFix( a->yx, b->xx ), + FT_MulFix( a->yy, b->yx ) ); + yy = ADD_LONG( FT_MulFix( a->yx, b->xy ), + FT_MulFix( a->yy, b->yy ) ); + + b->xx = xx; + b->xy = xy; + b->yx = yx; + b->yy = yy; + } + + + /* documentation is in ftglyph.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Matrix_Invert( FT_Matrix* matrix ) + { + FT_Pos delta, xx, yy; + + + if ( !matrix ) + return FT_THROW( Invalid_Argument ); + + /* compute discriminant */ + delta = FT_MulFix( matrix->xx, matrix->yy ) - + FT_MulFix( matrix->xy, matrix->yx ); + + if ( !delta ) + return FT_THROW( Invalid_Argument ); /* matrix can't be inverted */ + + matrix->xy = -FT_DivFix( matrix->xy, delta ); + matrix->yx = -FT_DivFix( matrix->yx, delta ); + + xx = matrix->xx; + yy = matrix->yy; + + matrix->xx = FT_DivFix( yy, delta ); + matrix->yy = FT_DivFix( xx, delta ); + + return FT_Err_Ok; + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( void ) + FT_Matrix_Multiply_Scaled( const FT_Matrix* a, + FT_Matrix *b, + FT_Long scaling ) + { + FT_Fixed xx, xy, yx, yy; + + FT_Long val = 0x10000L * scaling; + + + if ( !a || !b ) + return; + + xx = ADD_LONG( FT_MulDiv( a->xx, b->xx, val ), + FT_MulDiv( a->xy, b->yx, val ) ); + xy = ADD_LONG( FT_MulDiv( a->xx, b->xy, val ), + FT_MulDiv( a->xy, b->yy, val ) ); + yx = ADD_LONG( FT_MulDiv( a->yx, b->xx, val ), + FT_MulDiv( a->yy, b->yx, val ) ); + yy = ADD_LONG( FT_MulDiv( a->yx, b->xy, val ), + FT_MulDiv( a->yy, b->yy, val ) ); + + b->xx = xx; + b->xy = xy; + b->yx = yx; + b->yy = yy; + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( FT_Bool ) + FT_Matrix_Check( const FT_Matrix* matrix ) + { + FT_Fixed xx, xy, yx, yy; + FT_Fixed val; + FT_Int shift; + FT_ULong temp1, temp2; + + + if ( !matrix ) + return 0; + + xx = matrix->xx; + xy = matrix->xy; + yx = matrix->yx; + yy = matrix->yy; + val = FT_ABS( xx ) | FT_ABS( xy ) | FT_ABS( yx ) | FT_ABS( yy ); + + /* we only handle non-zero 32-bit values */ + if ( !val || val > 0x7FFFFFFFL ) + return 0; + + /* Scale matrix to avoid the temp1 overflow, which is */ + /* more stringent than avoiding the temp2 overflow. */ + + shift = FT_MSB( val ) - 12; + + if ( shift > 0 ) + { + xx >>= shift; + xy >>= shift; + yx >>= shift; + yy >>= shift; + } + + temp1 = 32U * (FT_ULong)FT_ABS( xx * yy - xy * yx ); + temp2 = (FT_ULong)( xx * xx ) + (FT_ULong)( xy * xy ) + + (FT_ULong)( yx * yx ) + (FT_ULong)( yy * yy ); + + if ( temp1 <= temp2 ) + return 0; + + return 1; + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( void ) + FT_Vector_Transform_Scaled( FT_Vector* vector, + const FT_Matrix* matrix, + FT_Long scaling ) + { + FT_Pos xz, yz; + + FT_Long val = 0x10000L * scaling; + + + if ( !vector || !matrix ) + return; + + xz = ADD_LONG( FT_MulDiv( vector->x, matrix->xx, val ), + FT_MulDiv( vector->y, matrix->xy, val ) ); + yz = ADD_LONG( FT_MulDiv( vector->x, matrix->yx, val ), + FT_MulDiv( vector->y, matrix->yy, val ) ); + + vector->x = xz; + vector->y = yz; + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( FT_UInt32 ) + FT_Vector_NormLen( FT_Vector* vector ) + { + FT_Int32 x_ = vector->x; + FT_Int32 y_ = vector->y; + FT_Int32 b, z; + FT_UInt32 x, y, u, v, l; + FT_Int sx = 1, sy = 1, shift; + + + FT_MOVE_SIGN( FT_UInt32, x_, x, sx ); + FT_MOVE_SIGN( FT_UInt32, y_, y, sy ); + + /* trivial cases */ + if ( x == 0 ) + { + if ( y > 0 ) + vector->y = sy * 0x10000; + return y; + } + else if ( y == 0 ) + { + if ( x > 0 ) + vector->x = sx * 0x10000; + return x; + } + + /* Estimate length and prenormalize by shifting so that */ + /* the new approximate length is between 2/3 and 4/3. */ + /* The magic constant 0xAAAAAAAAUL (2/3 of 2^32) helps */ + /* achieve this in 16.16 fixed-point representation. */ + l = x > y ? x + ( y >> 1 ) + : y + ( x >> 1 ); + + shift = 31 - FT_MSB( l ); + shift -= 15 + ( l >= ( 0xAAAAAAAAUL >> shift ) ); + + if ( shift > 0 ) + { + x <<= shift; + y <<= shift; + + /* re-estimate length for tiny vectors */ + l = x > y ? x + ( y >> 1 ) + : y + ( x >> 1 ); + } + else + { + x >>= -shift; + y >>= -shift; + l >>= -shift; + } + + /* lower linear approximation for reciprocal length minus one */ + b = 0x10000 - (FT_Int32)l; + + x_ = (FT_Int32)x; + y_ = (FT_Int32)y; + + /* Newton's iterations */ + do + { + u = (FT_UInt32)( x_ + ( x_ * b >> 16 ) ); + v = (FT_UInt32)( y_ + ( y_ * b >> 16 ) ); + + /* Normalized squared length in the parentheses approaches 2^32. */ + /* On two's complement systems, converting to signed gives the */ + /* difference with 2^32 even if the expression wraps around. */ + z = -(FT_Int32)( u * u + v * v ) / 0x200; + z = z * ( ( 0x10000 + b ) >> 8 ) / 0x10000; + + b += z; + + } while ( z > 0 ); + + vector->x = sx < 0 ? -(FT_Pos)u : (FT_Pos)u; + vector->y = sy < 0 ? -(FT_Pos)v : (FT_Pos)v; + + /* Conversion to signed helps to recover from likely wrap around */ + /* in calculating the prenormalized length, because it gives the */ + /* correct difference with 2^32 on two's complement systems. */ + l = (FT_UInt32)( 0x10000 + (FT_Int32)( u * x + v * y ) / 0x10000 ); + if ( shift > 0 ) + l = ( l + ( 1 << ( shift - 1 ) ) ) >> shift; + else + l <<= -shift; + + return l; + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( FT_UInt32 ) + FT_SqrtFixed( FT_UInt32 v ) + { + if ( v == 0 ) + return 0; + +#ifndef FT_INT64 + + /* Algorithm by Christophe Meessen (1993) with overflow fixed and */ + /* rounding added. Any unsigned fixed 16.16 argument is acceptable. */ + /* However, this algorithm is slower than the Babylonian method with */ + /* a good initial guess. We only use it for large 32-bit values when */ + /* 64-bit computations are not desirable. */ + else if ( v > 0x10000U ) + { + FT_UInt32 r = v >> 1; + FT_UInt32 q = ( v & 1 ) << 15; + FT_UInt32 b = 0x20000000; + FT_UInt32 t; + + + do + { + t = q + b; + if ( r >= t ) + { + r -= t; + q = t + b; /* equivalent to q += 2*b */ + } + r <<= 1; + b >>= 1; + + } while ( b > 0x10 ); /* exactly 25 cycles */ + + return ( q + 0x40 ) >> 7; + } + else + { + FT_UInt32 r = ( v << 16 ) - 1; + +#else /* FT_INT64 */ + + else + { + FT_UInt64 r = ( (FT_UInt64)v << 16 ) - 1; + +#endif /* FT_INT64 */ + + FT_UInt32 q = 1 << ( ( 17 + FT_MSB( v ) ) >> 1 ); + FT_UInt32 t; + + + /* Babylonian method with rounded-up division */ + do + { + t = q; + q = ( t + (FT_UInt32)( r / t ) + 1 ) >> 1; + + } while ( q != t ); /* less than 6 cycles */ + + return q; + } + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( FT_Int ) + ft_corner_orientation( FT_Pos in_x, + FT_Pos in_y, + FT_Pos out_x, + FT_Pos out_y ) + { + /* we silently ignore overflow errors since such large values */ + /* lead to even more (harmless) rendering errors later on */ + +#ifdef FT_INT64 + + FT_Int64 delta = SUB_INT64( MUL_INT64( in_x, out_y ), + MUL_INT64( in_y, out_x ) ); + + + return ( delta > 0 ) - ( delta < 0 ); + +#else + + FT_Int result; + + + if ( ADD_LONG( FT_ABS( in_x ), FT_ABS( out_y ) ) <= 131071L && + ADD_LONG( FT_ABS( in_y ), FT_ABS( out_x ) ) <= 131071L ) + { + FT_Long z1 = MUL_LONG( in_x, out_y ); + FT_Long z2 = MUL_LONG( in_y, out_x ); + + + if ( z1 > z2 ) + result = +1; + else if ( z1 < z2 ) + result = -1; + else + result = 0; + } + else /* products might overflow 32 bits */ + { + FT_Int64 z1, z2; + + + /* XXX: this function does not allow 64-bit arguments */ + ft_multo64( (FT_UInt32)in_x, (FT_UInt32)out_y, &z1 ); + ft_multo64( (FT_UInt32)in_y, (FT_UInt32)out_x, &z2 ); + + if ( z1.hi > z2.hi ) + result = +1; + else if ( z1.hi < z2.hi ) + result = -1; + else if ( z1.lo > z2.lo ) + result = +1; + else if ( z1.lo < z2.lo ) + result = -1; + else + result = 0; + } + + /* XXX: only the sign of return value, +1/0/-1 must be used */ + return result; + +#endif + } + + + /* documentation is in ftcalc.h */ + + FT_BASE_DEF( FT_Int ) + ft_corner_is_flat( FT_Pos in_x, + FT_Pos in_y, + FT_Pos out_x, + FT_Pos out_y ) + { + FT_Pos ax = in_x + out_x; + FT_Pos ay = in_y + out_y; + + FT_Pos d_in, d_out, d_hypot; + + + /* The idea of this function is to compare the length of the */ + /* hypotenuse with the `in' and `out' length. The `corner' */ + /* represented by `in' and `out' is flat if the hypotenuse's */ + /* length isn't too large. */ + /* */ + /* This approach has the advantage that the angle between */ + /* `in' and `out' is not checked. In case one of the two */ + /* vectors is `dominant', that is, much larger than the */ + /* other vector, we thus always have a flat corner. */ + /* */ + /* hypotenuse */ + /* x---------------------------x */ + /* \ / */ + /* \ / */ + /* in \ / out */ + /* \ / */ + /* o */ + /* Point */ + + d_in = FT_HYPOT( in_x, in_y ); + d_out = FT_HYPOT( out_x, out_y ); + d_hypot = FT_HYPOT( ax, ay ); + + /* now do a simple length comparison: */ + /* */ + /* d_in + d_out < 17/16 d_hypot */ + + return ( d_in + d_out - d_hypot ) < ( d_hypot >> 4 ); + } + + + FT_BASE_DEF( FT_Int32 ) + FT_MulAddFix( FT_Fixed* s, + FT_Int32* f, + FT_UInt count ) + { + FT_UInt i; + FT_Int64 temp; + + +#ifdef FT_INT64 + temp = 0; + + for ( i = 0; i < count; ++i ) + temp += (FT_Int64)s[i] * f[i]; + + return (FT_Int32)( ( temp + 0x8000 ) >> 16 ); +#else + temp.hi = 0; + temp.lo = 0; + + for ( i = 0; i < count; ++i ) + { + FT_Int64 multResult; + + FT_Int sign = 1; + FT_UInt32 carry = 0; + + FT_UInt32 scalar; + FT_UInt32 factor; + + + FT_MOVE_SIGN( FT_UInt32, s[i], scalar, sign ); + FT_MOVE_SIGN( FT_UInt32, f[i], factor, sign ); + + ft_multo64( scalar, factor, &multResult ); + + if ( sign < 0 ) + { + /* Emulated `FT_Int64` negation. */ + carry = ( multResult.lo == 0 ); + + multResult.lo = ~multResult.lo + 1; + multResult.hi = ~multResult.hi + carry; + } + + FT_Add64( &temp, &multResult, &temp ); + } + + /* Shift and round value. */ + return (FT_Int32)( ( ( temp.hi << 16 ) | ( temp.lo >> 16 ) ) + + ( 1 & ( temp.lo >> 15 ) ) ); + + +#endif /* !FT_INT64 */ + + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftcolor.c b/non-source/foreign/freetype2/src/base/ftcolor.c new file mode 100644 index 000000000..c6bf2a3cd --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftcolor.c @@ -0,0 +1,156 @@ +/**************************************************************************** + * + * ftcolor.c + * + * FreeType's glyph color management (body). + * + * Copyright (C) 2018-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/sfnt.h> +#include <freetype/internal/tttypes.h> +#include <freetype/ftcolor.h> + + +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS + + static + const FT_Palette_Data null_palette_data = { 0, NULL, NULL, 0, NULL }; + + + /* documentation is in ftcolor.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Palette_Data_Get( FT_Face face, + FT_Palette_Data *apalette_data ) + { + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + if ( !apalette_data) + return FT_THROW( Invalid_Argument ); + + if ( FT_IS_SFNT( face ) ) + *apalette_data = ( (TT_Face)face )->palette_data; + else + *apalette_data = null_palette_data; + + return FT_Err_Ok; + } + + + /* documentation is in ftcolor.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Palette_Select( FT_Face face, + FT_UShort palette_index, + FT_Color* *apalette ) + { + FT_Error error; + + TT_Face ttface; + SFNT_Service sfnt; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !FT_IS_SFNT( face ) ) + { + if ( apalette ) + *apalette = NULL; + + return FT_Err_Ok; + } + + ttface = (TT_Face)face; + sfnt = (SFNT_Service)ttface->sfnt; + + error = sfnt->set_palette( ttface, palette_index ); + if ( error ) + return error; + + ttface->palette_index = palette_index; + + if ( apalette ) + *apalette = ttface->palette; + + return FT_Err_Ok; + } + + + /* documentation is in ftcolor.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Palette_Set_Foreground_Color( FT_Face face, + FT_Color foreground_color ) + { + TT_Face ttface; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !FT_IS_SFNT( face ) ) + return FT_Err_Ok; + + ttface = (TT_Face)face; + + ttface->foreground_color = foreground_color; + ttface->have_foreground_color = 1; + + return FT_Err_Ok; + } + +#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */ + + FT_EXPORT_DEF( FT_Error ) + FT_Palette_Data_Get( FT_Face face, + FT_Palette_Data *apalette_data ) + { + FT_UNUSED( face ); + FT_UNUSED( apalette_data ); + + + return FT_THROW( Unimplemented_Feature ); + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Palette_Select( FT_Face face, + FT_UShort palette_index, + FT_Color* *apalette ) + { + FT_UNUSED( face ); + FT_UNUSED( palette_index ); + FT_UNUSED( apalette ); + + + return FT_THROW( Unimplemented_Feature ); + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Palette_Set_Foreground_Color( FT_Face face, + FT_Color foreground_color ) + { + FT_UNUSED( face ); + FT_UNUSED( foreground_color ); + + + return FT_THROW( Unimplemented_Feature ); + } + +#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftdbgmem.c b/non-source/foreign/freetype2/src/base/ftdbgmem.c new file mode 100644 index 000000000..902a5dc8b --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftdbgmem.c @@ -0,0 +1,971 @@ +/**************************************************************************** + * + * ftdbgmem.c + * + * Memory debugger (body). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftmemory.h> +#include <freetype/ftsystem.h> +#include <freetype/fterrors.h> +#include <freetype/fttypes.h> + + +#ifdef FT_DEBUG_MEMORY + +#define KEEPALIVE /* `Keep alive' means that freed blocks aren't released + * to the heap. This is useful to detect double-frees + * or weird heap corruption, but it uses large amounts of + * memory, however. + */ + +#include FT_CONFIG_STANDARD_LIBRARY_H + + FT_BASE_DEF( const char* ) ft_debug_file_ = NULL; + FT_BASE_DEF( long ) ft_debug_lineno_ = 0; + + extern void + FT_DumpMemory( FT_Memory memory ); + + + typedef struct FT_MemSourceRec_* FT_MemSource; + typedef struct FT_MemNodeRec_* FT_MemNode; + typedef struct FT_MemTableRec_* FT_MemTable; + + +#define FT_MEM_VAL( addr ) ( (FT_PtrDist)(FT_Pointer)( addr ) ) + + /* + * This structure holds statistics for a single allocation/release + * site. This is useful to know where memory operations happen the + * most. + */ + typedef struct FT_MemSourceRec_ + { + const char* file_name; + long line_no; + + FT_Long cur_blocks; /* current number of allocated blocks */ + FT_Long max_blocks; /* max. number of allocated blocks */ + FT_Long all_blocks; /* total number of blocks allocated */ + + FT_Long cur_size; /* current cumulative allocated size */ + FT_Long max_size; /* maximum cumulative allocated size */ + FT_Long all_size; /* total cumulative allocated size */ + + FT_Long cur_max; /* current maximum allocated size */ + + FT_UInt32 hash; + FT_MemSource link; + + } FT_MemSourceRec; + + + /* + * We don't need a resizable array for the memory sources because + * their number is pretty limited within FreeType. + */ +#define FT_MEM_SOURCE_BUCKETS 128 + + /* + * This structure holds information related to a single allocated + * memory block. If KEEPALIVE is defined, blocks that are freed by + * FreeType are never released to the system. Instead, their `size' + * field is set to `-size'. This is mainly useful to detect double + * frees, at the price of a large memory footprint during execution. + */ + typedef struct FT_MemNodeRec_ + { + FT_Byte* address; + FT_Long size; /* < 0 if the block was freed */ + + FT_MemSource source; + +#ifdef KEEPALIVE + const char* free_file_name; + FT_Long free_line_no; +#endif + + FT_MemNode link; + + } FT_MemNodeRec; + + + /* + * The global structure, containing compound statistics and all hash + * tables. + */ + typedef struct FT_MemTableRec_ + { + FT_Long size; + FT_Long nodes; + FT_MemNode* buckets; + + FT_Long alloc_total; + FT_Long alloc_current; + FT_Long alloc_max; + FT_Long alloc_count; + + FT_Bool bound_total; + FT_Long alloc_total_max; + + FT_Bool bound_count; + FT_Long alloc_count_max; + + FT_MemSource sources[FT_MEM_SOURCE_BUCKETS]; + + FT_Bool keep_alive; + + FT_Memory memory; + FT_Pointer memory_user; + FT_Alloc_Func alloc; + FT_Free_Func free; + FT_Realloc_Func realloc; + + } FT_MemTableRec; + + +#define FT_MEM_SIZE_MIN 7 +#define FT_MEM_SIZE_MAX 13845163 + +#define FT_FILENAME( x ) ( (x) ? (x) : "unknown file" ) + + + /* + * Prime numbers are ugly to handle. It would be better to implement + * L-Hashing, which is 10% faster and doesn't require divisions. + */ + static const FT_Int ft_mem_primes[] = + { + 7, + 11, + 19, + 37, + 73, + 109, + 163, + 251, + 367, + 557, + 823, + 1237, + 1861, + 2777, + 4177, + 6247, + 9371, + 14057, + 21089, + 31627, + 47431, + 71143, + 106721, + 160073, + 240101, + 360163, + 540217, + 810343, + 1215497, + 1823231, + 2734867, + 4102283, + 6153409, + 9230113, + 13845163, + }; + + + static FT_Long + ft_mem_closest_prime( FT_Long num ) + { + size_t i; + + + for ( i = 0; + i < sizeof ( ft_mem_primes ) / sizeof ( ft_mem_primes[0] ); i++ ) + if ( ft_mem_primes[i] > num ) + return ft_mem_primes[i]; + + return FT_MEM_SIZE_MAX; + } + + + static void + ft_mem_debug_panic( const char* fmt, + ... ) + { + va_list ap; + + + printf( "FreeType.Debug: " ); + + va_start( ap, fmt ); + vprintf( fmt, ap ); + va_end( ap ); + + printf( "\n" ); + exit( EXIT_FAILURE ); + } + + + static FT_Pointer + ft_mem_table_alloc( FT_MemTable table, + FT_Long size ) + { + FT_Memory memory = table->memory; + FT_Pointer block; + + + memory->user = table->memory_user; + block = table->alloc( memory, size ); + memory->user = table; + + return block; + } + + + static void + ft_mem_table_free( FT_MemTable table, + FT_Pointer block ) + { + FT_Memory memory = table->memory; + + + memory->user = table->memory_user; + table->free( memory, block ); + memory->user = table; + } + + + static void + ft_mem_table_resize( FT_MemTable table ) + { + FT_Long new_size; + + + new_size = ft_mem_closest_prime( table->nodes ); + if ( new_size != table->size ) + { + FT_MemNode* new_buckets; + FT_Long i; + + + new_buckets = (FT_MemNode *) + ft_mem_table_alloc( + table, + new_size * (FT_Long)sizeof ( FT_MemNode ) ); + if ( !new_buckets ) + return; + + FT_ARRAY_ZERO( new_buckets, new_size ); + + for ( i = 0; i < table->size; i++ ) + { + FT_MemNode node, next, *pnode; + FT_PtrDist hash; + + + node = table->buckets[i]; + while ( node ) + { + next = node->link; + hash = FT_MEM_VAL( node->address ) % (FT_PtrDist)new_size; + pnode = new_buckets + hash; + + node->link = pnode[0]; + pnode[0] = node; + + node = next; + } + } + + if ( table->buckets ) + ft_mem_table_free( table, table->buckets ); + + table->buckets = new_buckets; + table->size = new_size; + } + } + + + static void + ft_mem_table_destroy( FT_MemTable table ) + { + FT_Long i; + FT_Long leak_count = 0; + FT_Long leaks = 0; + + + /* remove all blocks from the table, revealing leaked ones */ + for ( i = 0; i < table->size; i++ ) + { + FT_MemNode *pnode = table->buckets + i, next, node = *pnode; + + + while ( node ) + { + next = node->link; + node->link = NULL; + + if ( node->size > 0 ) + { + printf( + "leaked memory block at address %p, size %8ld in (%s:%ld)\n", + (void*)node->address, + node->size, + FT_FILENAME( node->source->file_name ), + node->source->line_no ); + + leak_count++; + leaks += node->size; + + ft_mem_table_free( table, node->address ); + } + + node->address = NULL; + node->size = 0; + + ft_mem_table_free( table, node ); + node = next; + } + table->buckets[i] = NULL; + } + + ft_mem_table_free( table, table->buckets ); + table->buckets = NULL; + + table->size = 0; + table->nodes = 0; + + /* remove all sources */ + for ( i = 0; i < FT_MEM_SOURCE_BUCKETS; i++ ) + { + FT_MemSource source, next; + + + for ( source = table->sources[i]; source != NULL; source = next ) + { + next = source->link; + ft_mem_table_free( table, source ); + } + + table->sources[i] = NULL; + } + + printf( "FreeType: total memory allocations = %ld\n", + table->alloc_total ); + printf( "FreeType: maximum memory footprint = %ld\n", + table->alloc_max ); + + if ( leak_count > 0 ) + ft_mem_debug_panic( + "FreeType: %ld bytes of memory leaked in %ld blocks\n", + leaks, leak_count ); + + printf( "FreeType: no memory leaks detected\n" ); + } + + + static FT_MemNode* + ft_mem_table_get_nodep( FT_MemTable table, + FT_Byte* address ) + { + FT_PtrDist hash; + FT_MemNode *pnode, node; + + + hash = FT_MEM_VAL( address ); + pnode = table->buckets + ( hash % (FT_PtrDist)table->size ); + + for (;;) + { + node = pnode[0]; + if ( !node ) + break; + + if ( node->address == address ) + break; + + pnode = &node->link; + } + return pnode; + } + + + static FT_MemSource + ft_mem_table_get_source( FT_MemTable table ) + { + FT_UInt32 hash; + FT_MemSource node, *pnode; + + + /* cast to FT_PtrDist first since void* can be larger */ + /* than FT_UInt32 and GCC 4.1.1 emits a warning */ + hash = (FT_UInt32)(FT_PtrDist)(void*)ft_debug_file_ + + (FT_UInt32)( 5 * ft_debug_lineno_ ); + pnode = &table->sources[hash % FT_MEM_SOURCE_BUCKETS]; + + for (;;) + { + node = *pnode; + if ( !node ) + break; + + if ( node->file_name == ft_debug_file_ && + node->line_no == ft_debug_lineno_ ) + goto Exit; + + pnode = &node->link; + } + + node = (FT_MemSource)ft_mem_table_alloc( table, sizeof ( *node ) ); + if ( !node ) + ft_mem_debug_panic( + "not enough memory to perform memory debugging\n" ); + + node->file_name = ft_debug_file_; + node->line_no = ft_debug_lineno_; + + node->cur_blocks = 0; + node->max_blocks = 0; + node->all_blocks = 0; + + node->cur_size = 0; + node->max_size = 0; + node->all_size = 0; + + node->cur_max = 0; + + node->link = NULL; + node->hash = hash; + *pnode = node; + + Exit: + return node; + } + + + static void + ft_mem_table_set( FT_MemTable table, + FT_Byte* address, + FT_Long size, + FT_Long delta ) + { + FT_MemNode *pnode, node; + + + if ( table ) + { + FT_MemSource source; + + + pnode = ft_mem_table_get_nodep( table, address ); + node = *pnode; + if ( node ) + { + if ( node->size < 0 ) + { + /* This block was already freed. Our memory is now completely */ + /* corrupted! */ + /* This can only happen in keep-alive mode. */ + ft_mem_debug_panic( + "memory heap corrupted (allocating freed block)" ); + } + else + { + /* This block was already allocated. This means that our memory */ + /* is also corrupted! */ + ft_mem_debug_panic( + "memory heap corrupted (re-allocating allocated block at" + " %p, of size %ld)\n" + "org=%s:%d new=%s:%d\n", + node->address, node->size, + FT_FILENAME( node->source->file_name ), node->source->line_no, + FT_FILENAME( ft_debug_file_ ), ft_debug_lineno_ ); + } + } + + /* we need to create a new node in this table */ + node = (FT_MemNode)ft_mem_table_alloc( table, sizeof ( *node ) ); + if ( !node ) + ft_mem_debug_panic( "not enough memory to run memory tests" ); + + node->address = address; + node->size = size; + node->source = source = ft_mem_table_get_source( table ); + + if ( delta == 0 ) + { + /* this is an allocation */ + source->all_blocks++; + source->cur_blocks++; + if ( source->cur_blocks > source->max_blocks ) + source->max_blocks = source->cur_blocks; + } + + if ( size > source->cur_max ) + source->cur_max = size; + + if ( delta != 0 ) + { + /* we are growing or shrinking a reallocated block */ + source->cur_size += delta; + table->alloc_current += delta; + } + else + { + /* we are allocating a new block */ + source->cur_size += size; + table->alloc_current += size; + } + + source->all_size += size; + + if ( source->cur_size > source->max_size ) + source->max_size = source->cur_size; + + node->free_file_name = NULL; + node->free_line_no = 0; + + node->link = pnode[0]; + + pnode[0] = node; + table->nodes++; + + table->alloc_total += size; + + if ( table->alloc_current > table->alloc_max ) + table->alloc_max = table->alloc_current; + + if ( table->nodes * 3 < table->size || + table->size * 3 < table->nodes ) + ft_mem_table_resize( table ); + } + } + + + static void + ft_mem_table_remove( FT_MemTable table, + FT_Byte* address, + FT_Long delta ) + { + if ( table ) + { + FT_MemNode *pnode, node; + + + pnode = ft_mem_table_get_nodep( table, address ); + node = *pnode; + if ( node ) + { + FT_MemSource source; + + + if ( node->size < 0 ) + ft_mem_debug_panic( + "freeing memory block at %p more than once\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, + FT_FILENAME( node->free_file_name ), node->free_line_no ); + + /* scramble the node's content for additional safety */ + FT_MEM_SET( address, 0xF3, node->size ); + + if ( delta == 0 ) + { + source = node->source; + + source->cur_blocks--; + source->cur_size -= node->size; + + table->alloc_current -= node->size; + } + + if ( table->keep_alive ) + { + /* we simply invert the node's size to indicate that the node */ + /* was freed. */ + node->size = -node->size; + node->free_file_name = ft_debug_file_; + node->free_line_no = ft_debug_lineno_; + } + else + { + table->nodes--; + + *pnode = node->link; + + node->size = 0; + node->source = NULL; + + ft_mem_table_free( table, node ); + + if ( table->nodes * 3 < table->size || + table->size * 3 < table->nodes ) + ft_mem_table_resize( table ); + } + } + else + ft_mem_debug_panic( + "trying to free unknown block at %p in (%s:%ld)\n", + address, + FT_FILENAME( ft_debug_file_ ), ft_debug_lineno_ ); + } + } + + + static FT_Pointer + ft_mem_debug_alloc( FT_Memory memory, + FT_Long size ) + { + FT_MemTable table = (FT_MemTable)memory->user; + FT_Byte* block; + + + if ( size <= 0 ) + ft_mem_debug_panic( "negative block size allocation (%ld)", size ); + + /* return NULL if the maximum number of allocations was reached */ + if ( table->bound_count && + table->alloc_count >= table->alloc_count_max ) + return NULL; + + /* return NULL if this allocation would overflow the maximum heap size */ + if ( table->bound_total && + table->alloc_total_max - table->alloc_current > size ) + return NULL; + + block = (FT_Byte *)ft_mem_table_alloc( table, size ); + if ( block ) + { + ft_mem_table_set( table, block, size, 0 ); + + table->alloc_count++; + } + + ft_debug_file_ = "<unknown>"; + ft_debug_lineno_ = 0; + + return (FT_Pointer)block; + } + + + static void + ft_mem_debug_free( FT_Memory memory, + FT_Pointer block ) + { + FT_MemTable table = (FT_MemTable)memory->user; + + + if ( !block ) + ft_mem_debug_panic( "trying to free NULL in (%s:%ld)", + FT_FILENAME( ft_debug_file_ ), + ft_debug_lineno_ ); + + ft_mem_table_remove( table, (FT_Byte*)block, 0 ); + + if ( !table->keep_alive ) + ft_mem_table_free( table, block ); + + table->alloc_count--; + + ft_debug_file_ = "<unknown>"; + ft_debug_lineno_ = 0; + } + + + static FT_Pointer + ft_mem_debug_realloc( FT_Memory memory, + FT_Long cur_size, + FT_Long new_size, + FT_Pointer block ) + { + FT_MemTable table = (FT_MemTable)memory->user; + FT_MemNode node, *pnode; + FT_Pointer new_block; + FT_Long delta; + + const char* file_name = FT_FILENAME( ft_debug_file_ ); + FT_Long line_no = ft_debug_lineno_; + + + /* unlikely, but possible */ + if ( new_size == cur_size ) + return block; + + /* the following is valid according to ANSI C */ +#if 0 + if ( !block || !cur_size ) + ft_mem_debug_panic( "trying to reallocate NULL in (%s:%ld)", + file_name, line_no ); +#endif + + /* while the following is allowed in ANSI C also, we abort since */ + /* such case should be handled by FreeType. */ + if ( new_size <= 0 ) + ft_mem_debug_panic( + "trying to reallocate %p to size 0 (current is %ld) in (%s:%ld)", + block, cur_size, file_name, line_no ); + + /* check `cur_size' value */ + pnode = ft_mem_table_get_nodep( table, (FT_Byte*)block ); + node = *pnode; + if ( !node ) + ft_mem_debug_panic( + "trying to reallocate unknown block at %p in (%s:%ld)", + block, file_name, line_no ); + + if ( node->size <= 0 ) + ft_mem_debug_panic( + "trying to reallocate freed block at %p in (%s:%ld)", + block, file_name, line_no ); + + if ( node->size != cur_size ) + ft_mem_debug_panic( "invalid ft_realloc request for %p. cur_size is " + "%ld instead of %ld in (%s:%ld)", + block, cur_size, node->size, file_name, line_no ); + + /* return NULL if the maximum number of allocations was reached */ + if ( table->bound_count && + table->alloc_count >= table->alloc_count_max ) + return NULL; + + delta = new_size - cur_size; + + /* return NULL if this allocation would overflow the maximum heap size */ + if ( delta > 0 && + table->bound_total && + table->alloc_current + delta > table->alloc_total_max ) + return NULL; + + new_block = (FT_Pointer)ft_mem_table_alloc( table, new_size ); + if ( !new_block ) + return NULL; + + ft_mem_table_set( table, (FT_Byte*)new_block, new_size, delta ); + + ft_memcpy( new_block, block, cur_size < new_size ? (size_t)cur_size + : (size_t)new_size ); + + ft_mem_table_remove( table, (FT_Byte*)block, delta ); + + ft_debug_file_ = "<unknown>"; + ft_debug_lineno_ = 0; + + if ( !table->keep_alive ) + ft_mem_table_free( table, block ); + + return new_block; + } + + + extern void + ft_mem_debug_init( FT_Memory memory ) + { + FT_MemTable table; + + + if ( !ft_getenv( "FT2_DEBUG_MEMORY" ) ) + return; + + table = (FT_MemTable)memory->alloc( memory, sizeof ( *table ) ); + + if ( table ) + { + FT_ZERO( table ); + + table->memory = memory; + table->memory_user = memory->user; + table->alloc = memory->alloc; + table->realloc = memory->realloc; + table->free = memory->free; + + ft_mem_table_resize( table ); + + if ( table->size ) + { + const char* p; + + + memory->user = table; + memory->alloc = ft_mem_debug_alloc; + memory->realloc = ft_mem_debug_realloc; + memory->free = ft_mem_debug_free; + + p = ft_getenv( "FT2_ALLOC_TOTAL_MAX" ); + if ( p ) + { + FT_Long total_max = ft_strtol( p, NULL, 10 ); + + + if ( total_max > 0 ) + { + table->bound_total = 1; + table->alloc_total_max = total_max; + } + } + + p = ft_getenv( "FT2_ALLOC_COUNT_MAX" ); + if ( p ) + { + FT_Long total_count = ft_strtol( p, NULL, 10 ); + + + if ( total_count > 0 ) + { + table->bound_count = 1; + table->alloc_count_max = total_count; + } + } + + p = ft_getenv( "FT2_KEEP_ALIVE" ); + if ( p ) + { + FT_Long keep_alive = ft_strtol( p, NULL, 10 ); + + + if ( keep_alive > 0 ) + table->keep_alive = 1; + } + } + else + memory->free( memory, table ); + } + } + + + extern void + ft_mem_debug_done( FT_Memory memory ) + { + if ( memory->free == ft_mem_debug_free ) + { + FT_MemTable table = (FT_MemTable)memory->user; + + + FT_DumpMemory( memory ); + + ft_mem_table_destroy( table ); + + memory->free = table->free; + memory->realloc = table->realloc; + memory->alloc = table->alloc; + memory->user = table->memory_user; + + memory->free( memory, table ); + } + } + + + FT_COMPARE_DEF( int ) + ft_mem_source_compare( const void* p1, + const void* p2 ) + { + FT_MemSource s1 = *(FT_MemSource*)p1; + FT_MemSource s2 = *(FT_MemSource*)p2; + + + if ( s2->max_size > s1->max_size ) + return 1; + else if ( s2->max_size < s1->max_size ) + return -1; + else + return 0; + } + + + extern void + FT_DumpMemory( FT_Memory memory ) + { + if ( memory->free == ft_mem_debug_free ) + { + FT_MemTable table = (FT_MemTable)memory->user; + FT_MemSource* bucket = table->sources; + FT_MemSource* limit = bucket + FT_MEM_SOURCE_BUCKETS; + FT_MemSource* sources; + FT_Int nn, count; + const char* fmt; + + + count = 0; + for ( ; bucket < limit; bucket++ ) + { + FT_MemSource source = *bucket; + + + for ( ; source; source = source->link ) + count++; + } + + sources = (FT_MemSource*) + ft_mem_table_alloc( + table, count * (FT_Long)sizeof ( *sources ) ); + + count = 0; + for ( bucket = table->sources; bucket < limit; bucket++ ) + { + FT_MemSource source = *bucket; + + + for ( ; source; source = source->link ) + sources[count++] = source; + } + + ft_qsort( sources, + (size_t)count, + sizeof ( *sources ), + ft_mem_source_compare ); + + printf( "FreeType Memory Dump: " + "current=%ld max=%ld total=%ld count=%ld\n", + table->alloc_current, table->alloc_max, + table->alloc_total, table->alloc_count ); + printf( " block block sizes sizes sizes source\n" ); + printf( " count high sum highsum max location\n" ); + printf( "-------------------------------------------------\n" ); + + fmt = "%6ld %6ld %8ld %8ld %8ld %s:%d\n"; + + for ( nn = 0; nn < count; nn++ ) + { + FT_MemSource source = sources[nn]; + + + printf( fmt, + source->cur_blocks, source->max_blocks, + source->cur_size, source->max_size, source->cur_max, + FT_FILENAME( source->file_name ), + source->line_no ); + } + printf( "------------------------------------------------\n" ); + + ft_mem_table_free( table, sources ); + } + } + +#else /* !FT_DEBUG_MEMORY */ + + /* ANSI C doesn't like empty source files */ + typedef int debug_mem_dummy_; + +#endif /* !FT_DEBUG_MEMORY */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftdebug.c b/non-source/foreign/freetype2/src/base/ftdebug.c new file mode 100644 index 000000000..11307eaac --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftdebug.c @@ -0,0 +1,644 @@ +/**************************************************************************** + * + * ftdebug.c + * + * Debugging and logging component (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This component contains various macros and functions used to ease the + * debugging of the FreeType engine. Its main purpose is in assertion + * checking, tracing, and error detection. + * + * There are now three debugging modes: + * + * - trace mode + * + * Error and trace messages are sent to the log file (which can be the + * standard error output). + * + * - error mode + * + * Only error messages are generated. + * + * - release mode: + * + * No error message is sent or generated. The code is free from any + * debugging parts. + * + */ + + +#include <freetype/freetype.h> +#include <freetype/ftlogging.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftobjs.h> + + +#ifdef FT_DEBUG_LOGGING + + /************************************************************************** + * + * Variables used to control logging. + * + * 1. `ft_default_trace_level` stores the value of trace levels, which are + * provided to FreeType using the `FT2_DEBUG` environment variable. + * + * 2. `ft_fileptr` stores the `FILE*` handle. + * + * 3. `ft_component` is a string that holds the name of `FT_COMPONENT`. + * + * 4. The flag `ft_component_flag` prints the name of `FT_COMPONENT` along + * with the actual log message if set to true. + * + * 5. The flag `ft_timestamp_flag` prints time along with the actual log + * message if set to ture. + * + * 6. `ft_have_newline_char` is used to differentiate between a log + * message with and without a trailing newline character. + * + * 7. `ft_custom_trace_level` stores the custom trace level value, which + * is provided by the user at run-time. + * + * We use `static` to avoid 'unused variable' warnings. + * + */ + static const char* ft_default_trace_level = NULL; + static FILE* ft_fileptr = NULL; + static const char* ft_component = NULL; + static FT_Bool ft_component_flag = FALSE; + static FT_Bool ft_timestamp_flag = FALSE; + static FT_Bool ft_have_newline_char = TRUE; + static const char* ft_custom_trace_level = NULL; + + /* declared in ftdebug.h */ + + dlg_handler ft_default_log_handler = NULL; + FT_Custom_Log_Handler custom_output_handler = NULL; + +#endif /* FT_DEBUG_LOGGING */ + + +#ifdef FT_DEBUG_LEVEL_ERROR + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( void ) + FT_Message( const char* fmt, + ... ) + { + va_list ap; + + + va_start( ap, fmt ); + vfprintf( stderr, fmt, ap ); + va_end( ap ); + } + + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( void ) + FT_Panic( const char* fmt, + ... ) + { + va_list ap; + + + va_start( ap, fmt ); + vfprintf( stderr, fmt, ap ); + va_end( ap ); + + exit( EXIT_FAILURE ); + } + + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( int ) + FT_Throw( FT_Error error, + int line, + const char* file ) + { +#if 0 + /* activating the code in this block makes FreeType very chatty */ + fprintf( stderr, + "%s:%d: error 0x%02x: %s\n", + file, + line, + error, + FT_Error_String( error ) ); +#else + FT_UNUSED( error ); + FT_UNUSED( line ); + FT_UNUSED( file ); +#endif + + return 0; + } + +#endif /* FT_DEBUG_LEVEL_ERROR */ + + +#ifdef FT_DEBUG_LEVEL_TRACE + + /* array of trace levels, initialized to 0; */ + /* this gets adjusted at run-time */ + static int ft_trace_levels_enabled[trace_count]; + + /* array of trace levels, always initialized to 0 */ + static int ft_trace_levels_disabled[trace_count]; + + /* a pointer to either `ft_trace_levels_enabled' */ + /* or `ft_trace_levels_disabled' */ + int* ft_trace_levels; + + /* define array of trace toggle names */ +#define FT_TRACE_DEF( x ) #x , + + static const char* ft_trace_toggles[trace_count + 1] = + { +#include <freetype/internal/fttrace.h> + NULL + }; + +#undef FT_TRACE_DEF + + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( FT_Int ) + FT_Trace_Get_Count( void ) + { + return trace_count; + } + + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( const char * ) + FT_Trace_Get_Name( FT_Int idx ) + { + int max = FT_Trace_Get_Count(); + + + if ( idx < max ) + return ft_trace_toggles[idx]; + else + return NULL; + } + + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( void ) + FT_Trace_Disable( void ) + { + ft_trace_levels = ft_trace_levels_disabled; + } + + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( void ) + FT_Trace_Enable( void ) + { + ft_trace_levels = ft_trace_levels_enabled; + } + + + /************************************************************************** + * + * Initialize the tracing sub-system. This is done by retrieving the + * value of the `FT2_DEBUG' environment variable. It must be a list of + * toggles, separated by spaces, `;', or `,'. Example: + * + * export FT2_DEBUG="any:3 memory:7 stream:5" + * + * This requests that all levels be set to 3, except the trace level for + * the memory and stream components which are set to 7 and 5, + * respectively. + * + * See the file `include/freetype/internal/fttrace.h' for details of + * the available toggle names. + * + * The level must be between 0 and 7; 0 means quiet (except for serious + * runtime errors), and 7 means _very_ verbose. + */ + FT_BASE_DEF( void ) + ft_debug_init( void ) + { + const char* ft2_debug = NULL; + + +#ifdef FT_DEBUG_LOGGING + if ( ft_custom_trace_level != NULL ) + ft2_debug = ft_custom_trace_level; + else + ft2_debug = ft_default_trace_level; +#else + ft2_debug = ft_getenv( "FT2_DEBUG" ); +#endif + + if ( ft2_debug ) + { + const char* p = ft2_debug; + const char* q; + + + for ( ; *p; p++ ) + { + /* skip leading whitespace and separators */ + if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' ) + continue; + +#ifdef FT_DEBUG_LOGGING + + /* check extra arguments for logging */ + if ( *p == '-' ) + { + const char* r = ++p; + + + if ( *r == 'v' ) + { + const char* s = ++r; + + + ft_component_flag = TRUE; + + if ( *s == 't' ) + { + ft_timestamp_flag = TRUE; + p++; + } + + p++; + } + + else if ( *r == 't' ) + { + const char* s = ++r; + + + ft_timestamp_flag = TRUE; + + if ( *s == 'v' ) + { + ft_component_flag = TRUE; + p++; + } + + p++; + } + } + +#endif /* FT_DEBUG_LOGGING */ + + /* read toggle name, followed by ':' */ + q = p; + while ( *p && *p != ':' ) + p++; + + if ( !*p ) + break; + + if ( *p == ':' && p > q ) + { + FT_Int n, i, len = (FT_Int)( p - q ); + FT_Int level = -1, found = -1; + + + for ( n = 0; n < trace_count; n++ ) + { + const char* toggle = ft_trace_toggles[n]; + + + for ( i = 0; i < len; i++ ) + { + if ( toggle[i] != q[i] ) + break; + } + + if ( i == len && toggle[i] == 0 ) + { + found = n; + break; + } + } + + /* read level */ + p++; + if ( *p ) + { + level = *p - '0'; + if ( level < 0 || level > 7 ) + level = -1; + } + + if ( found >= 0 && level >= 0 ) + { + if ( found == trace_any ) + { + /* special case for `any' */ + for ( n = 0; n < trace_count; n++ ) + ft_trace_levels_enabled[n] = level; + } + else + ft_trace_levels_enabled[found] = level; + } + } + } + } + + ft_trace_levels = ft_trace_levels_enabled; + } + + +#else /* !FT_DEBUG_LEVEL_TRACE */ + + + FT_BASE_DEF( void ) + ft_debug_init( void ) + { + /* nothing */ + } + + + FT_BASE_DEF( FT_Int ) + FT_Trace_Get_Count( void ) + { + return 0; + } + + + FT_BASE_DEF( const char * ) + FT_Trace_Get_Name( FT_Int idx ) + { + FT_UNUSED( idx ); + + return NULL; + } + + + FT_BASE_DEF( void ) + FT_Trace_Disable( void ) + { + /* nothing */ + } + + + /* documentation is in ftdebug.h */ + + FT_BASE_DEF( void ) + FT_Trace_Enable( void ) + { + /* nothing */ + } + +#endif /* !FT_DEBUG_LEVEL_TRACE */ + + +#ifdef FT_DEBUG_LOGGING + + /************************************************************************** + * + * Initialize and de-initialize 'dlg' library. + * + */ + + FT_BASE_DEF( void ) + ft_logging_init( void ) + { + ft_default_log_handler = ft_log_handler; + ft_default_trace_level = ft_getenv( "FT2_DEBUG" ); + + if ( ft_getenv( "FT_LOGGING_FILE" ) ) + ft_fileptr = ft_fopen( ft_getenv( "FT_LOGGING_FILE" ), "w" ); + else + ft_fileptr = stderr; + + ft_debug_init(); + + /* Set the default output handler for 'dlg'. */ + dlg_set_handler( ft_default_log_handler, NULL ); + } + + + FT_BASE_DEF( void ) + ft_logging_deinit( void ) + { + if ( ft_fileptr != stderr ) + ft_fclose( ft_fileptr ); + } + + + /************************************************************************** + * + * An output log handler for FreeType. + * + */ + FT_BASE_DEF( void ) + ft_log_handler( const struct dlg_origin* origin, + const char* string, + void* data ) + { + char features_buf[128]; + char* bufp = features_buf; + + FT_UNUSED( data ); + + + if ( ft_have_newline_char ) + { + const char* features = NULL; + size_t features_length = 0; + + +#define FEATURES_TIMESTAMP "[%h:%m] " +#define FEATURES_COMPONENT "[%t] " +#define FEATURES_TIMESTAMP_COMPONENT "[%h:%m %t] " + + if ( ft_timestamp_flag && ft_component_flag ) + { + features = FEATURES_TIMESTAMP_COMPONENT; + features_length = sizeof ( FEATURES_TIMESTAMP_COMPONENT ); + } + else if ( ft_timestamp_flag ) + { + features = FEATURES_TIMESTAMP; + features_length = sizeof ( FEATURES_TIMESTAMP ); + } + else if ( ft_component_flag ) + { + features = FEATURES_COMPONENT; + features_length = sizeof ( FEATURES_COMPONENT ); + } + + if ( ft_component_flag || ft_timestamp_flag ) + { + ft_strncpy( features_buf, features, features_length ); + bufp += features_length - 1; + } + + if ( ft_component_flag ) + { + size_t tag_length = ft_strlen( *origin->tags ); + size_t i; + + + /* To vertically align tracing messages we compensate the */ + /* different FT_COMPONENT string lengths by inserting an */ + /* appropriate amount of space characters. */ + for ( i = 0; + i < FT_MAX_TRACE_LEVEL_LENGTH - tag_length; + i++ ) + *bufp++ = ' '; + } + } + + /* Finally add the format string for the tracing message. */ + *bufp++ = '%'; + *bufp++ = 'c'; + *bufp = '\0'; + + dlg_generic_outputf_stream( ft_fileptr, + (const char*)features_buf, + origin, + string, + dlg_default_output_styles, + true ); + + if ( ft_strrchr( string, '\n' ) ) + ft_have_newline_char = TRUE; + else + ft_have_newline_char = FALSE; + } + + + /* documentation is in ftdebug.h */ + FT_BASE_DEF( void ) + ft_add_tag( const char* tag ) + { + ft_component = tag; + + dlg_add_tag( tag, NULL ); + } + + + /* documentation is in ftdebug.h */ + FT_BASE_DEF( void ) + ft_remove_tag( const char* tag ) + { + dlg_remove_tag( tag, NULL ); + } + + + /* documentation is in ftlogging.h */ + + FT_EXPORT_DEF( void ) + FT_Trace_Set_Level( const char* level ) + { + ft_component_flag = FALSE; + ft_timestamp_flag = FALSE; + ft_custom_trace_level = level; + + ft_debug_init(); + } + + + /* documentation is in ftlogging.h */ + + FT_EXPORT_DEF( void ) + FT_Trace_Set_Default_Level( void ) + { + ft_component_flag = FALSE; + ft_timestamp_flag = FALSE; + ft_custom_trace_level = NULL; + + ft_debug_init(); + } + + + /************************************************************************** + * + * Functions to handle a custom log handler. + * + */ + + /* documentation is in ftlogging.h */ + + FT_EXPORT_DEF( void ) + FT_Set_Log_Handler( FT_Custom_Log_Handler handler ) + { + custom_output_handler = handler; + } + + + /* documentation is in ftlogging.h */ + + FT_EXPORT_DEF( void ) + FT_Set_Default_Log_Handler( void ) + { + custom_output_handler = NULL; + } + + + /* documentation is in ftdebug.h */ + FT_BASE_DEF( void ) + FT_Logging_Callback( const char* fmt, + ... ) + { + va_list ap; + + + va_start( ap, fmt ); + custom_output_handler( ft_component, fmt, ap ); + va_end( ap ); + } + +#else /* !FT_DEBUG_LOGGING */ + + FT_EXPORT_DEF( void ) + FT_Trace_Set_Level( const char* level ) + { + FT_UNUSED( level ); + } + + + FT_EXPORT_DEF( void ) + FT_Trace_Set_Default_Level( void ) + { + /* nothing */ + } + + + FT_EXPORT_DEF( void ) + FT_Set_Log_Handler( FT_Custom_Log_Handler handler ) + { + FT_UNUSED( handler ); + } + + + FT_EXPORT_DEF( void ) + FT_Set_Default_Log_Handler( void ) + { + /* nothing */ + } + +#endif /* !FT_DEBUG_LOGGING */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/fterrors.c b/non-source/foreign/freetype2/src/base/fterrors.c new file mode 100644 index 000000000..61041a37c --- /dev/null +++ b/non-source/foreign/freetype2/src/base/fterrors.c @@ -0,0 +1,45 @@ +/**************************************************************************** + * + * fterrors.c + * + * FreeType API for error code handling. + * + * Copyright (C) 2018-2024 by + * Armin Hasitzka, David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/fterrors.h> + + + /* documentation is in fterrors.h */ + + FT_EXPORT_DEF( const char* ) + FT_Error_String( FT_Error error_code ) + { + if ( error_code < 0 || + error_code >= FT_ERR_CAT( FT_ERR_PREFIX, Max ) ) + return NULL; + +#if defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || \ + defined( FT_DEBUG_LEVEL_ERROR ) + +#undef FTERRORS_H_ +#define FT_ERROR_START_LIST switch ( FT_ERROR_BASE( error_code ) ) { +#define FT_ERRORDEF( e, v, s ) case v: return s; +#define FT_ERROR_END_LIST } + +#include <freetype/fterrors.h> + +#endif /* defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || ... */ + + return NULL; + } diff --git a/non-source/foreign/freetype2/src/base/ftfntfmt.c b/non-source/foreign/freetype2/src/base/ftfntfmt.c new file mode 100644 index 000000000..77b4089e7 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftfntfmt.c @@ -0,0 +1,54 @@ +/**************************************************************************** + * + * ftfntfmt.c + * + * FreeType utility file for font formats (body). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/ftfntfmt.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/services/svfntfmt.h> + + + /* documentation is in ftfntfmt.h */ + + FT_EXPORT_DEF( const char* ) + FT_Get_Font_Format( FT_Face face ) + { + const char* result = NULL; + + + if ( face ) + FT_FACE_FIND_SERVICE( face, result, FONT_FORMAT ); + + return result; + } + + + /* deprecated function name; retained for ABI compatibility */ + + FT_EXPORT_DEF( const char* ) + FT_Get_X11_Font_Format( FT_Face face ) + { + const char* result = NULL; + + + if ( face ) + FT_FACE_FIND_SERVICE( face, result, FONT_FORMAT ); + + return result; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftgloadr.c b/non-source/foreign/freetype2/src/base/ftgloadr.c new file mode 100644 index 000000000..484d98f17 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftgloadr.c @@ -0,0 +1,383 @@ +/**************************************************************************** + * + * ftgloadr.c + * + * The FreeType glyph loader (body). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftgloadr.h> +#include <freetype/internal/ftmemory.h> +#include <freetype/internal/ftobjs.h> + +#undef FT_COMPONENT +#define FT_COMPONENT gloader + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** *****/ + /***** G L Y P H L O A D E R *****/ + /***** *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * The glyph loader is a simple object which is used to load a set of + * glyphs easily. It is critical for the correct loading of composites. + * + * Ideally, one can see it as a stack of abstract `glyph' objects. + * + * loader.base Is really the bottom of the stack. It describes a + * single glyph image made of the juxtaposition of + * several glyphs (those `in the stack'). + * + * loader.current Describes the top of the stack, on which a new + * glyph can be loaded. + * + * Rewind Clears the stack. + * Prepare Set up `loader.current' for addition of a new glyph + * image. + * Add Add the `current' glyph image to the `base' one, + * and prepare for another one. + * + * The glyph loader is now a base object. Each driver used to + * re-implement it in one way or the other, which wasted code and + * energy. + * + */ + + + /* create a new glyph loader */ + FT_BASE_DEF( FT_Error ) + FT_GlyphLoader_New( FT_Memory memory, + FT_GlyphLoader *aloader ) + { + FT_GlyphLoader loader = NULL; + FT_Error error; + + + if ( !FT_NEW( loader ) ) + { + loader->memory = memory; + *aloader = loader; + } + return error; + } + + + /* rewind the glyph loader - reset counters to 0 */ + FT_BASE_DEF( void ) + FT_GlyphLoader_Rewind( FT_GlyphLoader loader ) + { + FT_GlyphLoad base = &loader->base; + FT_GlyphLoad current = &loader->current; + + + base->outline.n_points = 0; + base->outline.n_contours = 0; + base->outline.flags = 0; + base->num_subglyphs = 0; + + *current = *base; + } + + + /* reset glyph loader, free all allocated tables, */ + /* and start from zero */ + FT_BASE_DEF( void ) + FT_GlyphLoader_Reset( FT_GlyphLoader loader ) + { + FT_Memory memory = loader->memory; + + + FT_FREE( loader->base.outline.points ); + FT_FREE( loader->base.outline.tags ); + FT_FREE( loader->base.outline.contours ); + FT_FREE( loader->base.extra_points ); + FT_FREE( loader->base.subglyphs ); + + loader->base.extra_points2 = NULL; + + loader->max_points = 0; + loader->max_contours = 0; + loader->max_subglyphs = 0; + + FT_GlyphLoader_Rewind( loader ); + } + + + /* delete a glyph loader */ + FT_BASE_DEF( void ) + FT_GlyphLoader_Done( FT_GlyphLoader loader ) + { + if ( loader ) + { + FT_Memory memory = loader->memory; + + + FT_GlyphLoader_Reset( loader ); + FT_FREE( loader ); + } + } + + + /* re-adjust the `current' outline fields */ + static void + FT_GlyphLoader_Adjust_Points( FT_GlyphLoader loader ) + { + FT_Outline* base = &loader->base.outline; + FT_Outline* current = &loader->current.outline; + + + current->points = 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 ) + { + loader->current.extra_points = loader->base.extra_points + + base->n_points; + + loader->current.extra_points2 = loader->base.extra_points2 + + base->n_points; + } + } + + + FT_BASE_DEF( FT_Error ) + FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader ) + { + FT_Error error; + FT_Memory memory = loader->memory; + + + if ( 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; + loader->base.extra_points2 = loader->base.extra_points + + loader->max_points; + + FT_GlyphLoader_Adjust_Points( loader ); + } + return error; + } + + + /* re-adjust the `current' subglyphs field */ + static void + FT_GlyphLoader_Adjust_Subglyphs( FT_GlyphLoader loader ) + { + FT_GlyphLoad base = &loader->base; + FT_GlyphLoad current = &loader->current; + + + current->subglyphs = FT_OFFSET( base->subglyphs, base->num_subglyphs ); + } + + + /* Ensure that we can add `n_points' and `n_contours' to our glyph. */ + /* This function reallocates its outline tables if necessary. Note that */ + /* it DOESN'T change the number of points within the loader! */ + /* */ + FT_BASE_DEF( FT_Error ) + FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader, + FT_UInt n_points, + FT_UInt n_contours ) + { + FT_Memory memory = loader->memory; + FT_Error error = FT_Err_Ok; + FT_Outline* base = &loader->base.outline; + FT_Outline* current = &loader->current.outline; + FT_Bool adjust = 0; + + FT_UInt new_max, old_max, min_new_max; + + + error = FT_GlyphLoader_CreateExtra( loader ); + if ( error ) + goto Exit; + + /* check points & tags */ + new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points + + n_points; + old_max = loader->max_points; + + if ( new_max > old_max ) + { + if ( new_max > FT_OUTLINE_POINTS_MAX ) + { + error = FT_THROW( Array_Too_Large ); + goto Exit; + } + + min_new_max = old_max + ( old_max >> 1 ); + if ( new_max < min_new_max ) + new_max = min_new_max; + new_max = FT_PAD_CEIL( new_max, 8 ); + if ( new_max > FT_OUTLINE_POINTS_MAX ) + new_max = FT_OUTLINE_POINTS_MAX; + + if ( FT_RENEW_ARRAY( base->points, old_max, new_max ) || + FT_RENEW_ARRAY( base->tags, old_max, new_max ) ) + goto Exit; + + if ( loader->use_extra ) + { + if ( FT_RENEW_ARRAY( loader->base.extra_points, + old_max * 2, new_max * 2 ) ) + goto Exit; + + FT_ARRAY_MOVE( loader->base.extra_points + new_max, + loader->base.extra_points + old_max, + old_max ); + + loader->base.extra_points2 = loader->base.extra_points + new_max; + } + + adjust = 1; + loader->max_points = new_max; + } + + error = FT_GlyphLoader_CreateExtra( loader ); + if ( error ) + goto Exit; + + /* check contours */ + old_max = loader->max_contours; + new_max = (FT_UInt)base->n_contours + (FT_UInt)current->n_contours + + n_contours; + if ( new_max > old_max ) + { + if ( new_max > FT_OUTLINE_CONTOURS_MAX ) + { + error = FT_THROW( Array_Too_Large ); + goto Exit; + } + + min_new_max = old_max + ( old_max >> 1 ); + if ( new_max < min_new_max ) + new_max = min_new_max; + new_max = FT_PAD_CEIL( new_max, 4 ); + if ( new_max > FT_OUTLINE_CONTOURS_MAX ) + new_max = FT_OUTLINE_CONTOURS_MAX; + + if ( FT_RENEW_ARRAY( base->contours, old_max, new_max ) ) + goto Exit; + + adjust = 1; + loader->max_contours = new_max; + } + + if ( adjust ) + FT_GlyphLoader_Adjust_Points( loader ); + + Exit: + if ( error ) + FT_GlyphLoader_Reset( loader ); + + return error; + } + + + /* Ensure that we can add `n_subglyphs' to our glyph. this function */ + /* reallocates its subglyphs table if necessary. Note that it DOES */ + /* NOT change the number of subglyphs within the loader! */ + /* */ + FT_BASE_DEF( FT_Error ) + FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader, + FT_UInt n_subs ) + { + FT_Memory memory = loader->memory; + FT_Error error = FT_Err_Ok; + FT_UInt new_max, old_max; + + FT_GlyphLoad base = &loader->base; + FT_GlyphLoad current = &loader->current; + + + new_max = base->num_subglyphs + current->num_subglyphs + n_subs; + old_max = loader->max_subglyphs; + if ( new_max > old_max ) + { + new_max = FT_PAD_CEIL( new_max, 2 ); + if ( FT_RENEW_ARRAY( base->subglyphs, old_max, new_max ) ) + goto Exit; + + loader->max_subglyphs = new_max; + + FT_GlyphLoader_Adjust_Subglyphs( loader ); + } + + Exit: + return error; + } + + + /* prepare loader for the addition of a new glyph on top of the base one */ + FT_BASE_DEF( void ) + FT_GlyphLoader_Prepare( FT_GlyphLoader loader ) + { + FT_GlyphLoad current = &loader->current; + + + current->outline.n_points = 0; + current->outline.n_contours = 0; + current->num_subglyphs = 0; + + FT_GlyphLoader_Adjust_Points ( loader ); + FT_GlyphLoader_Adjust_Subglyphs( loader ); + } + + + /* add current glyph to the base image -- and prepare for another */ + FT_BASE_DEF( void ) + FT_GlyphLoader_Add( FT_GlyphLoader loader ) + { + FT_Outline* base; + FT_Outline* current; + FT_Int n; + + + if ( !loader ) + return; + + base = &loader->base.outline; + current = &loader->current.outline; + + /* adjust contours count in newest outline */ + for ( n = 0; n < current->n_contours; n++ ) + current->contours[n] += base->n_points; + + base->n_points += current->n_points; + base->n_contours += current->n_contours; + + loader->base.num_subglyphs += loader->current.num_subglyphs; + + /* prepare for another new glyph image */ + FT_GlyphLoader_Prepare( loader ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/fthash.c b/non-source/foreign/freetype2/src/base/fthash.c new file mode 100644 index 000000000..313bbbb4b --- /dev/null +++ b/non-source/foreign/freetype2/src/base/fthash.c @@ -0,0 +1,338 @@ +/**************************************************************************** + * + * fthash.c + * + * Hashing functions (body). + * + */ + +/* + * Copyright 2000 Computing Research Labs, New Mexico State University + * Copyright 2001-2015 + * Francesco Zappa Nardelli + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT + * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + /************************************************************************** + * + * This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 + * + * taken from Mark Leisher's xmbdfed package + * + */ + + +#include <freetype/internal/fthash.h> +#include <freetype/internal/ftmemory.h> + + +#define INITIAL_HT_SIZE 241 + + + static FT_ULong + hash_str_lookup( FT_Hashkey* key ) + { + const char* kp = key->str; + FT_ULong res = 0; + + + /* Mocklisp hash function. */ + while ( *kp ) + res = ( res << 5 ) - res + (FT_ULong)*kp++; + + return res; + } + + + static FT_ULong + hash_num_lookup( FT_Hashkey* key ) + { + FT_ULong num = (FT_ULong)key->num; + FT_ULong res; + + + /* Mocklisp hash function. */ + res = num & 0xFF; + res = ( res << 5 ) - res + ( ( num >> 8 ) & 0xFF ); + res = ( res << 5 ) - res + ( ( num >> 16 ) & 0xFF ); + res = ( res << 5 ) - res + ( ( num >> 24 ) & 0xFF ); + + return res; + } + + + static FT_Bool + hash_str_compare( FT_Hashkey* a, + FT_Hashkey* b ) + { + if ( a->str[0] == b->str[0] && + ft_strcmp( a->str, b->str ) == 0 ) + return 1; + + return 0; + } + + + static FT_Bool + hash_num_compare( FT_Hashkey* a, + FT_Hashkey* b ) + { + if ( a->num == b->num ) + return 1; + + return 0; + } + + + static FT_Hashnode* + hash_bucket( FT_Hashkey key, + FT_Hash hash ) + { + FT_ULong res = 0; + FT_Hashnode* bp = hash->table; + FT_Hashnode* ndp; + + + res = (hash->lookup)( &key ); + + ndp = bp + ( res % hash->size ); + while ( *ndp ) + { + if ( (hash->compare)( &(*ndp)->key, &key ) ) + break; + + ndp--; + if ( ndp < bp ) + ndp = bp + ( hash->size - 1 ); + } + + return ndp; + } + + + static FT_Error + hash_rehash( FT_Hash hash, + FT_Memory memory ) + { + FT_Hashnode* obp = hash->table; + FT_Hashnode* bp; + FT_Hashnode* nbp; + + FT_UInt i, sz = hash->size; + FT_Error error = FT_Err_Ok; + + + hash->size <<= 1; + hash->limit = hash->size / 3; + + if ( FT_NEW_ARRAY( hash->table, hash->size ) ) + goto Exit; + + for ( i = 0, bp = obp; i < sz; i++, bp++ ) + { + if ( *bp ) + { + nbp = hash_bucket( (*bp)->key, hash ); + *nbp = *bp; + } + } + + FT_FREE( obp ); + + Exit: + return error; + } + + + static FT_Error + hash_init( FT_Hash hash, + FT_Bool is_num, + FT_Memory memory ) + { + FT_UInt sz = INITIAL_HT_SIZE; + FT_Error error; + + + hash->size = sz; + hash->limit = sz / 3; + hash->used = 0; + + if ( is_num ) + { + hash->lookup = hash_num_lookup; + hash->compare = hash_num_compare; + } + else + { + hash->lookup = hash_str_lookup; + hash->compare = hash_str_compare; + } + + FT_MEM_NEW_ARRAY( hash->table, sz ); + + return error; + } + + + FT_Error + ft_hash_str_init( FT_Hash hash, + FT_Memory memory ) + { + return hash_init( hash, 0, memory ); + } + + + FT_Error + ft_hash_num_init( FT_Hash hash, + FT_Memory memory ) + { + return hash_init( hash, 1, memory ); + } + + + void + ft_hash_str_free( FT_Hash hash, + FT_Memory memory ) + { + if ( hash ) + { + FT_UInt sz = hash->size; + FT_Hashnode* bp = hash->table; + FT_UInt i; + + + for ( i = 0; i < sz; i++, bp++ ) + FT_FREE( *bp ); + + FT_FREE( hash->table ); + } + } + + + /* `ft_hash_num_free' is the same as `ft_hash_str_free' */ + + + static FT_Error + hash_insert( FT_Hashkey key, + size_t data, + FT_Hash hash, + FT_Memory memory ) + { + FT_Hashnode nn; + FT_Hashnode* bp = hash_bucket( key, hash ); + FT_Error error = FT_Err_Ok; + + + nn = *bp; + if ( !nn ) + { + if ( FT_QNEW( nn ) ) + goto Exit; + *bp = nn; + + nn->key = key; + nn->data = data; + + if ( hash->used >= hash->limit ) + { + error = hash_rehash( hash, memory ); + if ( error ) + goto Exit; + } + + hash->used++; + } + else + nn->data = data; + + Exit: + return error; + } + + + FT_Error + ft_hash_str_insert( const char* key, + size_t data, + FT_Hash hash, + FT_Memory memory ) + { + FT_Hashkey hk; + + + hk.str = key; + + return hash_insert( hk, data, hash, memory ); + } + + + FT_Error + ft_hash_num_insert( FT_Int num, + size_t data, + FT_Hash hash, + FT_Memory memory ) + { + FT_Hashkey hk; + + + hk.num = num; + + return hash_insert( hk, data, hash, memory ); + } + + + static size_t* + hash_lookup( FT_Hashkey key, + FT_Hash hash ) + { + FT_Hashnode* np = hash_bucket( key, hash ); + + + return (*np) ? &(*np)->data + : NULL; + } + + + size_t* + ft_hash_str_lookup( const char* key, + FT_Hash hash ) + { + FT_Hashkey hk; + + + hk.str = key; + + return hash_lookup( hk, hash ); + } + + + size_t* + ft_hash_num_lookup( FT_Int num, + FT_Hash hash ) + { + FT_Hashkey hk; + + + hk.num = num; + + return hash_lookup( hk, hash ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftinit.c b/non-source/foreign/freetype2/src/base/ftinit.c new file mode 100644 index 000000000..9a6c00e13 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftinit.c @@ -0,0 +1,263 @@ +/**************************************************************************** + * + * ftinit.c + * + * FreeType initialization layer (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * The purpose of this file is to implement the following two + * functions: + * + * FT_Add_Default_Modules(): + * This function is used to add the set of default modules to a + * fresh new library object. The set is taken from the header file + * `freetype/config/ftmodule.h'. See the document `FreeType 2.0 + * Build System' for more information. + * + * FT_Init_FreeType(): + * This function creates a system object for the current platform, + * builds a library out of it, then calls FT_Default_Drivers(). + * + * Note that even if FT_Init_FreeType() uses the implementation of the + * system object defined at build time, client applications are still + * able to provide their own `ftsystem.c'. + * + */ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/ftmodapi.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 init + + +#undef FT_USE_MODULE +#ifdef __cplusplus +#define FT_USE_MODULE( type, x ) extern "C" const type x; +#else +#define FT_USE_MODULE( type, x ) extern const type x; +#endif + +#include FT_CONFIG_MODULES_H + +#undef FT_USE_MODULE +#define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x), + + static + const FT_Module_Class* const ft_default_modules[] = + { +#include FT_CONFIG_MODULES_H + 0 + }; + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( void ) + FT_Add_Default_Modules( FT_Library library ) + { + FT_Error error; + const FT_Module_Class* const* cur; + + + /* GCC 4.6 warns the type difference: + * FT_Module_Class** != const FT_Module_Class* const* + */ + cur = (const FT_Module_Class* const*)ft_default_modules; + + /* test for valid `library' delayed to FT_Add_Module() */ + while ( *cur ) + { + error = FT_Add_Module( library, *cur ); + /* notify errors, but don't stop */ + if ( error ) + FT_TRACE0(( "FT_Add_Default_Module:" + " Cannot install `%s', error = 0x%x\n", + (*cur)->module_name, error )); + cur++; + } + } + + +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + +#define MAX_LENGTH 128 + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( void ) + FT_Set_Default_Properties( FT_Library library ) + { + const char* env; + const char* p; + const char* q; + + char module_name[MAX_LENGTH + 1]; + char property_name[MAX_LENGTH + 1]; + char property_value[MAX_LENGTH + 1]; + + int i; + + + env = ft_getenv( "FREETYPE_PROPERTIES" ); + if ( !env ) + return; + + for ( p = env; *p; p++ ) + { + /* skip leading whitespace and separators */ + if ( *p == ' ' || *p == '\t' ) + continue; + + /* read module name, followed by `:' */ + q = p; + for ( i = 0; i < MAX_LENGTH; i++ ) + { + if ( !*p || *p == ':' ) + break; + module_name[i] = *p++; + } + module_name[i] = '\0'; + + if ( !*p || *p != ':' || p == q ) + break; + + /* read property name, followed by `=' */ + q = ++p; + for ( i = 0; i < MAX_LENGTH; i++ ) + { + if ( !*p || *p == '=' ) + break; + property_name[i] = *p++; + } + property_name[i] = '\0'; + + if ( !*p || *p != '=' || p == q ) + break; + + /* read property value, followed by whitespace (if any) */ + q = ++p; + for ( i = 0; i < MAX_LENGTH; i++ ) + { + if ( !*p || *p == ' ' || *p == '\t' ) + break; + property_value[i] = *p++; + } + property_value[i] = '\0'; + + if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q ) + break; + + /* we completely ignore errors */ + ft_property_string_set( library, + module_name, + property_name, + property_value ); + + if ( !*p ) + break; + } + } + +#else + + FT_EXPORT_DEF( void ) + FT_Set_Default_Properties( FT_Library library ) + { + FT_UNUSED( library ); + } + +#endif + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Init_FreeType( FT_Library *alibrary ) + { + FT_Error error; + FT_Memory memory; + + +#ifdef FT_DEBUG_LOGGING + ft_logging_init(); +#endif + + /* check of `alibrary' delayed to `FT_New_Library' */ + + /* First of all, allocate a new system object -- this function is part */ + /* of the system-specific component, i.e. `ftsystem.c'. */ + + memory = FT_New_Memory(); + if ( !memory ) + { + FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" )); + return FT_THROW( Unimplemented_Feature ); + } + + /* build a library out of it, then fill it with the set of */ + /* default drivers. */ + + error = FT_New_Library( memory, alibrary ); + if ( error ) + FT_Done_Memory( memory ); + else + FT_Add_Default_Modules( *alibrary ); + + FT_Set_Default_Properties( *alibrary ); + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Done_FreeType( FT_Library library ) + { + FT_Memory memory; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + memory = library->memory; + + /* Discard the library object */ + FT_Done_Library( library ); + + /* discard memory manager */ + FT_Done_Memory( memory ); + +#ifdef FT_DEBUG_LOGGING + ft_logging_deinit(); +#endif + + return FT_Err_Ok; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftlcdfil.c b/non-source/foreign/freetype2/src/base/ftlcdfil.c new file mode 100644 index 000000000..1e69d4da7 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftlcdfil.c @@ -0,0 +1,437 @@ +/**************************************************************************** + * + * ftlcdfil.c + * + * FreeType API for color filtering of subpixel bitmap glyphs (body). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> + +#include <freetype/ftlcdfil.h> +#include <freetype/ftimage.h> +#include <freetype/internal/ftobjs.h> + + +#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + +/* define USE_LEGACY to implement the legacy filter */ +#define USE_LEGACY + +#define FT_SHIFTCLAMP( x ) ( x >>= 8, (FT_Byte)( x > 255 ? 255 : x ) ) + + + /* add padding according to filter weights */ + FT_BASE_DEF( void ) + ft_lcd_padding( FT_BBox* cbox, + FT_GlyphSlot slot, + FT_Render_Mode mode ) + { + 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 ) + { + 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 == ft_lcd_filter_fir ) + { + if ( mode == FT_RENDER_MODE_LCD ) + { + cbox->xMin -= lcd_weights[0] ? 43 : + lcd_weights[1] ? 22 : 0; + cbox->xMax += lcd_weights[4] ? 43 : + lcd_weights[3] ? 22 : 0; + } + else if ( mode == FT_RENDER_MODE_LCD_V ) + { + cbox->yMin -= lcd_weights[0] ? 43 : + lcd_weights[1] ? 22 : 0; + cbox->yMax += lcd_weights[4] ? 43 : + lcd_weights[3] ? 22 : 0; + } + } + } + + + /* FIR filter used by the default and light filters */ + FT_BASE_DEF( void ) + ft_lcd_filter_fir( FT_Bitmap* bitmap, + 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 */ + if ( pitch > 0 && height > 0 ) + origin += pitch * (FT_Int)( height - 1 ); + + /* horizontal in-place FIR filter */ + if ( mode == FT_PIXEL_MODE_LCD && width >= 2 ) + { + FT_Byte* line = origin; + + + /* `fir' must be at least 32 bit wide, since the sum of */ + /* the values in `weights' can exceed 0xFF */ + + for ( ; height > 0; height--, line -= pitch ) + { + FT_UInt fir[5]; + FT_UInt val, xx; + + + val = line[0]; + fir[2] = weights[2] * val; + fir[3] = weights[3] * val; + fir[4] = weights[4] * val; + + val = line[1]; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; + + for ( xx = 2; xx < width; xx++ ) + { + val = line[xx]; + fir[0] = fir[1] + weights[0] * val; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; + + line[xx - 2] = FT_SHIFTCLAMP( fir[0] ); + } + + line[xx - 2] = FT_SHIFTCLAMP( fir[1] ); + line[xx - 1] = FT_SHIFTCLAMP( fir[2] ); + } + } + + /* vertical in-place FIR filter */ + else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 2 ) + { + FT_Byte* column = origin; + + + for ( ; width > 0; width--, column++ ) + { + FT_Byte* col = column; + FT_UInt fir[5]; + FT_UInt val, yy; + + + val = col[0]; + fir[2] = weights[2] * val; + fir[3] = weights[3] * val; + fir[4] = weights[4] * val; + col -= pitch; + + val = col[0]; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; + col -= pitch; + + for ( yy = 2; yy < height; yy++, col -= pitch ) + { + val = col[0]; + fir[0] = fir[1] + weights[0] * val; + fir[1] = fir[2] + weights[1] * val; + fir[2] = fir[3] + weights[2] * val; + fir[3] = fir[4] + weights[3] * val; + fir[4] = weights[4] * val; + + col[pitch * 2] = FT_SHIFTCLAMP( fir[0] ); + } + + col[pitch * 2] = FT_SHIFTCLAMP( fir[1] ); + col[pitch] = FT_SHIFTCLAMP( fir[2] ); + } + } + } + + +#ifdef USE_LEGACY + + /* intra-pixel filter used by the legacy filter */ + static void + _ft_lcd_filter_legacy( FT_Bitmap* bitmap, + 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] = + { + { 65538 * 9/13, 65538 * 1/6, 65538 * 1/13 }, + { 65538 * 3/13, 65538 * 4/6, 65538 * 3/13 }, + { 65538 * 1/13, 65538 * 1/6, 65538 * 9/13 } + }; + + FT_UNUSED( weights ); + + + /* take care of bitmap flow */ + if ( pitch > 0 && height > 0 ) + origin += pitch * (FT_Int)( height - 1 ); + + /* horizontal in-place intra-pixel filter */ + if ( mode == FT_PIXEL_MODE_LCD && width >= 3 ) + { + FT_Byte* line = origin; + + + for ( ; height > 0; height--, line -= pitch ) + { + FT_UInt xx; + + + for ( xx = 0; xx < width; xx += 3 ) + { + FT_UInt r, g, b; + FT_UInt p; + + + p = line[xx]; + r = filters[0][0] * p; + g = filters[0][1] * p; + b = filters[0][2] * p; + + p = line[xx + 1]; + r += filters[1][0] * p; + g += filters[1][1] * p; + b += filters[1][2] * p; + + p = line[xx + 2]; + r += filters[2][0] * p; + g += filters[2][1] * p; + b += filters[2][2] * p; + + line[xx] = (FT_Byte)( r / 65536 ); + line[xx + 1] = (FT_Byte)( g / 65536 ); + line[xx + 2] = (FT_Byte)( b / 65536 ); + } + } + } + else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 3 ) + { + FT_Byte* column = origin; + + + for ( ; width > 0; width--, column++ ) + { + FT_Byte* col = column - 2 * pitch; + + + for ( ; height > 0; height -= 3, col -= 3 * pitch ) + { + FT_UInt r, g, b; + FT_UInt p; + + + p = col[0]; + r = filters[0][0] * p; + g = filters[0][1] * p; + b = filters[0][2] * p; + + p = col[pitch]; + r += filters[1][0] * p; + g += filters[1][1] * p; + b += filters[1][2] * p; + + p = col[pitch * 2]; + r += filters[2][0] * p; + g += filters[2][1] * p; + b += filters[2][2] * p; + + col[0] = (FT_Byte)( r / 65536 ); + col[pitch] = (FT_Byte)( g / 65536 ); + col[pitch * 2] = (FT_Byte)( b / 65536 ); + } + } + } + } + +#endif /* USE_LEGACY */ + + + /* documentation in ftlcdfil.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Library_SetLcdFilterWeights( FT_Library library, + unsigned char *weights ) + { + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !weights ) + return FT_THROW( Invalid_Argument ); + + ft_memcpy( library->lcd_weights, weights, FT_LCD_FILTER_FIVE_TAPS ); + library->lcd_filter_func = ft_lcd_filter_fir; + + return FT_Err_Ok; + } + + + /* documentation in ftlcdfil.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Library_SetLcdFilter( FT_Library library, + FT_LcdFilter filter ) + { + static const FT_LcdFiveTapFilter default_weights = + { 0x08, 0x4d, 0x56, 0x4d, 0x08 }; + static const FT_LcdFiveTapFilter light_weights = + { 0x00, 0x55, 0x56, 0x55, 0x00 }; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + switch ( filter ) + { + case FT_LCD_FILTER_NONE: + library->lcd_filter_func = NULL; + break; + + case FT_LCD_FILTER_DEFAULT: + ft_memcpy( library->lcd_weights, + default_weights, + FT_LCD_FILTER_FIVE_TAPS ); + library->lcd_filter_func = ft_lcd_filter_fir; + break; + + case FT_LCD_FILTER_LIGHT: + ft_memcpy( library->lcd_weights, + light_weights, + FT_LCD_FILTER_FIVE_TAPS ); + library->lcd_filter_func = ft_lcd_filter_fir; + break; + +#ifdef USE_LEGACY + + case FT_LCD_FILTER_LEGACY: + case FT_LCD_FILTER_LEGACY1: + library->lcd_filter_func = _ft_lcd_filter_legacy; + break; + +#endif + + default: + return FT_THROW( Invalid_Argument ); + } + + return FT_Err_Ok; + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Library_SetLcdGeometry( FT_Library library, + FT_Vector sub[3] ) + { + FT_UNUSED( library ); + FT_UNUSED( sub ); + + return FT_THROW( Unimplemented_Feature ); + } + +#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + /* add padding to accommodate outline shifts */ + FT_BASE_DEF( void ) + ft_lcd_padding( FT_BBox* cbox, + FT_GlyphSlot slot, + FT_Render_Mode mode ) + { + FT_Vector* sub = slot->library->lcd_geometry; + + if ( mode == FT_RENDER_MODE_LCD ) + { + cbox->xMin -= FT_MAX( FT_MAX( sub[0].x, sub[1].x ), sub[2].x ); + cbox->xMax -= FT_MIN( FT_MIN( sub[0].x, sub[1].x ), sub[2].x ); + cbox->yMin -= FT_MAX( FT_MAX( sub[0].y, sub[1].y ), sub[2].y ); + cbox->yMax -= FT_MIN( FT_MIN( sub[0].y, sub[1].y ), sub[2].y ); + } + else if ( mode == FT_RENDER_MODE_LCD_V ) + { + cbox->xMin -= FT_MAX( FT_MAX( sub[0].y, sub[1].y ), sub[2].y ); + cbox->xMax -= FT_MIN( FT_MIN( sub[0].y, sub[1].y ), sub[2].y ); + cbox->yMin += FT_MIN( FT_MIN( sub[0].x, sub[1].x ), sub[2].x ); + cbox->yMax += FT_MAX( FT_MAX( sub[0].x, sub[1].x ), sub[2].x ); + } + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Library_SetLcdFilterWeights( FT_Library library, + unsigned char *weights ) + { + FT_UNUSED( library ); + FT_UNUSED( weights ); + + return FT_THROW( Unimplemented_Feature ); + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Library_SetLcdFilter( FT_Library library, + FT_LcdFilter filter ) + { + FT_UNUSED( library ); + FT_UNUSED( filter ); + + return FT_THROW( Unimplemented_Feature ); + } + + + /* documentation in ftlcdfil.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Library_SetLcdGeometry( FT_Library library, + FT_Vector sub[3] ) + { + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !sub ) + return FT_THROW( Invalid_Argument ); + + ft_memcpy( library->lcd_geometry, sub, 3 * sizeof( FT_Vector ) ); + + return FT_Err_Ok; + } + +#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftmac.c b/non-source/foreign/freetype2/src/base/ftmac.c new file mode 100644 index 000000000..e8e35627b --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftmac.c @@ -0,0 +1,1099 @@ +/**************************************************************************** + * + * ftmac.c + * + * Mac FOND support. Written by just@letterror.com. + * Heavily modified by mpsuzuki, George Williams, and Sean McBride. + * + * This file is for Mac OS X only; see builds/mac/ftoldmac.c for + * classic platforms built by MPW. + * + * Copyright (C) 1996-2024 by + * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /* + Notes + + Mac suitcase files can (and often do!) contain multiple fonts. To + support this I use the face_index argument of FT_(Open|New)_Face() + functions, and pretend the suitcase file is a collection. + + Warning: fbit and NFNT bitmap resources are not supported yet. In old + sfnt fonts, bitmap glyph data for each size is stored in each `NFNT' + resources instead of the `bdat' table in the sfnt resource. Therefore, + face->num_fixed_sizes is set to 0, because bitmap data in `NFNT' + resource is unavailable at present. + + The Mac FOND support works roughly like this: + + - Check whether the offered stream points to a Mac suitcase file. This + is done by checking the file type: it has to be 'FFIL' or 'tfil'. The + stream that gets passed to our init_face() routine is a stdio stream, + which isn't usable for us, since the FOND resources live in the + resource fork. So we just grab the stream->pathname field. + + - Read the FOND resource into memory, then check whether there is a + TrueType font and/or(!) a Type 1 font available. + + - If there is a Type 1 font available (as a separate `LWFN' file), read + its data into memory, massage it slightly so it becomes PFB data, wrap + it into a memory stream, load the Type 1 driver and delegate the rest + of the work to it by calling FT_Open_Face(). (XXX TODO: after this + has been done, the kerning data from the FOND resource should be + appended to the face: On the Mac there are usually no AFM files + available. However, this is tricky since we need to map Mac char + codes to ps glyph names to glyph ID's...) + + - If there is a TrueType font (an `sfnt' resource), read it into memory, + wrap it into a memory stream, load the TrueType driver and delegate + the rest of the work to it, by calling FT_Open_Face(). + + - Some suitcase fonts (notably Onyx) might point the `LWFN' file to + itself, even though it doesn't contains `POST' resources. To handle + this special case without opening the file an extra time, we just + ignore errors from the `LWFN' and fallback to the `sfnt' if both are + available. + */ + + +#include <freetype/freetype.h> +#include <freetype/tttags.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include "ftbase.h" + + +#ifdef FT_MACINTOSH + + /* This is for Mac OS X. Without redefinition, OS_INLINE */ + /* expands to `static inline' which doesn't survive the */ + /* -ansi compilation flag of GCC. */ +#if !HAVE_ANSI_OS_INLINE +#undef OS_INLINE +#define OS_INLINE static __inline__ +#endif + + /* `configure' checks the availability of `ResourceIndex' strictly */ + /* and sets HAVE_TYPE_RESOURCE_INDEX 1 or 0 always. If it is */ + /* not set (e.g., a build without `configure'), the availability */ + /* is guessed from the SDK version. */ +#ifndef HAVE_TYPE_RESOURCE_INDEX +#if !defined( MAC_OS_X_VERSION_10_5 ) || \ + ( MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 ) +#define HAVE_TYPE_RESOURCE_INDEX 0 +#else +#define HAVE_TYPE_RESOURCE_INDEX 1 +#endif +#endif /* !HAVE_TYPE_RESOURCE_INDEX */ + +#if ( HAVE_TYPE_RESOURCE_INDEX == 0 ) + typedef short ResourceIndex; +#endif + +#include <CoreServices/CoreServices.h> +#include <ApplicationServices/ApplicationServices.h> +#include <sys/syslimits.h> /* PATH_MAX */ + + /* Don't want warnings about our own use of deprecated functions. */ +#define FT_DEPRECATED_ATTRIBUTE + +#include <freetype/ftmac.h> + +#ifndef kATSOptionFlagsUnRestrictedScope /* since Mac OS X 10.1 */ +#define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault +#endif + + + /* Set PREFER_LWFN to 1 if LWFN (Type 1) is preferred over + TrueType in case *both* are available (this is not common, + but it *is* possible). */ +#ifndef PREFER_LWFN +#define PREFER_LWFN 1 +#endif + + + /* This function is deprecated because FSSpec is deprecated in Mac OS X */ + FT_EXPORT_DEF( FT_Error ) + FT_GetFile_From_Mac_Name( const char* fontName, + FSSpec* pathSpec, + FT_Long* face_index ) + { + FT_UNUSED( fontName ); + FT_UNUSED( pathSpec ); + FT_UNUSED( face_index ); + + return FT_THROW( Unimplemented_Feature ); + } + + + /* Private function. */ + /* The FSSpec type has been discouraged for a long time, */ + /* unfortunately an FSRef replacement API for */ + /* ATSFontGetFileSpecification() is only available in */ + /* Mac OS X 10.5 and later. */ + static OSStatus + FT_ATSFontGetFileReference( ATSFontRef ats_font_id, + FSRef* ats_font_ref ) + { +#if defined( MAC_OS_X_VERSION_10_5 ) && \ + ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) + + OSStatus err; + + err = ATSFontGetFileReference( ats_font_id, ats_font_ref ); + + return err; +#elif __LP64__ /* No 64bit Carbon API on legacy platforms */ + FT_UNUSED( ats_font_id ); + FT_UNUSED( ats_font_ref ); + + + return fnfErr; +#else /* 32bit Carbon API on legacy platforms */ + OSStatus err; + FSSpec spec; + + + err = ATSFontGetFileSpecification( ats_font_id, &spec ); + if ( noErr == err ) + err = FSpMakeFSRef( &spec, ats_font_ref ); + + return err; +#endif + } + + + static FT_Error + FT_GetFileRef_From_Mac_ATS_Name( const char* fontName, + FSRef* ats_font_ref, + FT_Long* face_index ) + { + CFStringRef cf_fontName; + ATSFontRef ats_font_id; + + + *face_index = 0; + + cf_fontName = CFStringCreateWithCString( NULL, fontName, + kCFStringEncodingMacRoman ); + ats_font_id = ATSFontFindFromName( cf_fontName, + kATSOptionFlagsUnRestrictedScope ); + CFRelease( cf_fontName ); + + if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL ) + return FT_THROW( Unknown_File_Format ); + + if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) ) + return FT_THROW( Unknown_File_Format ); + + /* face_index calculation by searching preceding fontIDs */ + /* with same FSRef */ + { + ATSFontRef id2 = ats_font_id - 1; + FSRef ref2; + + + while ( id2 > 0 ) + { + if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) ) + break; + if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) ) + break; + + id2 --; + } + *face_index = ats_font_id - ( id2 + 1 ); + } + + return FT_Err_Ok; + } + + + FT_EXPORT_DEF( FT_Error ) + FT_GetFilePath_From_Mac_ATS_Name( const char* fontName, + UInt8* path, + UInt32 maxPathSize, + FT_Long* face_index ) + { + FSRef ref; + FT_Error err; + + + if ( !fontName || !face_index ) + return FT_THROW( Invalid_Argument); + + err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index ); + if ( err ) + return err; + + if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) ) + return FT_THROW( Unknown_File_Format ); + + return FT_Err_Ok; + } + + + /* This function is deprecated because FSSpec is deprecated in Mac OS X */ + FT_EXPORT_DEF( FT_Error ) + FT_GetFile_From_Mac_ATS_Name( const char* fontName, + FSSpec* pathSpec, + FT_Long* face_index ) + { +#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \ + ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) ) + FT_UNUSED( fontName ); + FT_UNUSED( pathSpec ); + FT_UNUSED( face_index ); + + return FT_THROW( Unimplemented_Feature ); +#else + FSRef ref; + FT_Error err; + + + if ( !fontName || !face_index ) + return FT_THROW( Invalid_Argument ); + + err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index ); + if ( err ) + return err; + + if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL, + pathSpec, NULL ) ) + return FT_THROW( Unknown_File_Format ); + + return FT_Err_Ok; +#endif + } + + + static OSErr + FT_FSPathMakeRes( const UInt8* pathname, + ResFileRefNum* res ) + { + OSErr err; + FSRef ref; + + + if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) ) + return FT_THROW( Cannot_Open_Resource ); + + /* at present, no support for dfont format */ + err = FSOpenResourceFile( &ref, 0, NULL, fsRdPerm, res ); + if ( noErr == err ) + return err; + + /* fallback to original resource-fork font */ + *res = FSOpenResFile( &ref, fsRdPerm ); + err = ResError(); + + return err; + } + + + /* Return the file type for given pathname */ + static OSType + get_file_type_from_path( const UInt8* pathname ) + { + FSRef ref; + FSCatalogInfo info; + + + if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) ) + return ( OSType ) 0; + + if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoFinderInfo, &info, + NULL, NULL, NULL ) ) + return ( OSType ) 0; + + return ( (FInfo *)( info.finderInfo ) )->fdType; + } + + + /* Given a PostScript font name, create the Macintosh LWFN file name. */ + static void + create_lwfn_name( char* ps_name, + Str255 lwfn_file_name ) + { + int max = 5, count = 0; + FT_Byte* p = lwfn_file_name; + FT_Byte* q = (FT_Byte*)ps_name; + + + lwfn_file_name[0] = 0; + + while ( *q ) + { + if ( ft_isupper( *q ) ) + { + if ( count ) + max = 3; + count = 0; + } + if ( count < max && ( ft_isalnum( *q ) || *q == '_' ) ) + { + *++p = *q; + lwfn_file_name[0]++; + count++; + } + q++; + } + } + + + static short + count_faces_sfnt( char* fond_data ) + { + /* The count is 1 greater than the value in the FOND. */ + /* Isn't that cute? :-) */ + + return EndianS16_BtoN( *( (short*)( fond_data + + sizeof ( FamRec ) ) ) ) + 1; + } + + + static short + count_faces_scalable( char* fond_data ) + { + AsscEntry* assoc; + short i, face, face_all; + + + face_all = EndianS16_BtoN( *( (short *)( fond_data + + sizeof ( FamRec ) ) ) ) + 1; + assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 ); + face = 0; + + for ( i = 0; i < face_all; i++ ) + { + if ( 0 == EndianS16_BtoN( assoc[i].fontSize ) ) + face++; + } + return face; + } + + + /* Look inside the FOND data, answer whether there should be an SFNT + resource, and answer the name of a possible LWFN Type 1 file. + + Thanks to Paul Miller (paulm@profoundeffects.com) for the fix + to load a face OTHER than the first one in the FOND! + */ + + + static void + parse_fond( char* fond_data, + short* have_sfnt, + ResID* sfnt_id, + Str255 lwfn_file_name, + short face_index ) + { + AsscEntry* assoc; + AsscEntry* base_assoc; + FamRec* fond; + + + *sfnt_id = 0; + *have_sfnt = 0; + lwfn_file_name[0] = 0; + + fond = (FamRec*)fond_data; + assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 ); + base_assoc = assoc; + + /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */ + if ( 47 < face_index ) + return; + + /* Let's do a little range checking before we get too excited here */ + if ( face_index < count_faces_sfnt( fond_data ) ) + { + assoc += face_index; /* add on the face_index! */ + + /* if the face at this index is not scalable, + fall back to the first one (old behavior) */ + if ( EndianS16_BtoN( assoc->fontSize ) == 0 ) + { + *have_sfnt = 1; + *sfnt_id = EndianS16_BtoN( assoc->fontID ); + } + else if ( base_assoc->fontSize == 0 ) + { + *have_sfnt = 1; + *sfnt_id = EndianS16_BtoN( base_assoc->fontID ); + } + } + + if ( EndianS32_BtoN( fond->ffStylOff ) ) + { + unsigned char* p = (unsigned char*)fond_data; + StyleTable* style; + unsigned short string_count; + char ps_name[256]; + unsigned char* names[64]; + int i; + + + p += EndianS32_BtoN( fond->ffStylOff ); + style = (StyleTable*)p; + p += sizeof ( StyleTable ); + string_count = EndianS16_BtoN( *(short*)(p) ); + string_count = FT_MIN( 64, string_count ); + p += sizeof ( short ); + + for ( i = 0; i < string_count; i++ ) + { + names[i] = p; + p += names[i][0]; + p++; + } + + { + size_t ps_name_len = (size_t)names[0][0]; + + + if ( ps_name_len != 0 ) + { + ft_memcpy( ps_name, names[0] + 1, ps_name_len ); + ps_name[ps_name_len] = 0; + } + if ( style->indexes[face_index] > 1 && + style->indexes[face_index] <= string_count ) + { + unsigned char* suffixes = names[style->indexes[face_index] - 1]; + + + for ( i = 1; i <= suffixes[0]; i++ ) + { + unsigned char* s; + size_t j = suffixes[i] - 1; + + + if ( j < string_count && ( s = names[j] ) != NULL ) + { + size_t s_len = (size_t)s[0]; + + + if ( s_len != 0 && ps_name_len + s_len < sizeof ( ps_name ) ) + { + ft_memcpy( ps_name + ps_name_len, s + 1, s_len ); + ps_name_len += s_len; + ps_name[ps_name_len] = 0; + } + } + } + } + } + + create_lwfn_name( ps_name, lwfn_file_name ); + } + } + + + static FT_Error + lookup_lwfn_by_fond( const UInt8* path_fond, + ConstStr255Param base_lwfn, + UInt8* path_lwfn, + size_t path_size ) + { + FSRef ref, par_ref; + size_t dirname_len; + + + /* Pathname for FSRef can be in various formats: HFS, HFS+, and POSIX. */ + /* We should not extract parent directory by string manipulation. */ + + if ( noErr != FSPathMakeRef( path_fond, &ref, FALSE ) ) + return FT_THROW( Invalid_Argument ); + + if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, + NULL, NULL, NULL, &par_ref ) ) + return FT_THROW( Invalid_Argument ); + + if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) ) + return FT_THROW( Invalid_Argument ); + + if ( ft_strlen( (char *)path_lwfn ) + 1 + base_lwfn[0] > path_size ) + return FT_THROW( Invalid_Argument ); + + /* now we have absolute dirname in path_lwfn */ + ft_strcat( (char *)path_lwfn, "/" ); + dirname_len = ft_strlen( (char *)path_lwfn ); + ft_strcat( (char *)path_lwfn, (char *)base_lwfn + 1 ); + path_lwfn[dirname_len + base_lwfn[0]] = '\0'; + + if ( noErr != FSPathMakeRef( path_lwfn, &ref, FALSE ) ) + return FT_THROW( Cannot_Open_Resource ); + + if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, + NULL, NULL, NULL, NULL ) ) + return FT_THROW( Cannot_Open_Resource ); + + return FT_Err_Ok; + } + + + static short + count_faces( Handle fond, + const UInt8* pathname ) + { + ResID sfnt_id; + short have_sfnt, have_lwfn; + Str255 lwfn_file_name; + UInt8 buff[PATH_MAX]; + FT_Error err; + short num_faces; + + + have_sfnt = have_lwfn = 0; + + parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, 0 ); + + if ( lwfn_file_name[0] ) + { + err = lookup_lwfn_by_fond( pathname, lwfn_file_name, + buff, sizeof ( buff ) ); + if ( !err ) + have_lwfn = 1; + } + + if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) ) + num_faces = 1; + else + num_faces = count_faces_scalable( *fond ); + + return num_faces; + } + + + /* Read Type 1 data from the POST resources inside the LWFN file, + return a PFB buffer. This is somewhat convoluted because the FT2 + PFB parser wants the ASCII header as one chunk, and the LWFN + chunks are often not organized that way, so we glue chunks + of the same type together. */ + static FT_Error + read_lwfn( FT_Memory memory, + ResFileRefNum res, + FT_Byte** pfb_data, + FT_ULong* size ) + { + FT_Error error = FT_Err_Ok; + ResID res_id; + unsigned char *buffer, *p, *size_p = NULL; + FT_ULong total_size = 0; + FT_ULong old_total_size = 0; + FT_ULong post_size, pfb_chunk_size; + Handle post_data; + char code, last_code; + + + UseResFile( res ); + + /* First pass: load all POST resources, and determine the size of */ + /* the output buffer. */ + res_id = 501; + last_code = -1; + + for (;;) + { + post_data = Get1Resource( TTAG_POST, res_id++ ); + if ( !post_data ) + break; /* we are done */ + + code = (*post_data)[0]; + + if ( code != last_code ) + { + if ( code == 5 ) + total_size += 2; /* just the end code */ + else + total_size += 6; /* code + 4 bytes chunk length */ + } + + total_size += (FT_ULong)GetHandleSize( post_data ) - 2; + last_code = code; + + /* detect resource fork overflow */ + if ( FT_MAC_RFORK_MAX_LEN < total_size ) + { + error = FT_THROW( Array_Too_Large ); + goto Error; + } + + old_total_size = total_size; + } + + if ( FT_QALLOC( buffer, (FT_Long)total_size ) ) + goto Error; + + /* Second pass: append all POST data to the buffer, add PFB fields. */ + /* Glue all consecutive chunks of the same type together. */ + p = buffer; + res_id = 501; + last_code = -1; + pfb_chunk_size = 0; + + for (;;) + { + post_data = Get1Resource( TTAG_POST, res_id++ ); + if ( !post_data ) + break; /* we are done */ + + post_size = (FT_ULong)GetHandleSize( post_data ) - 2; + code = (*post_data)[0]; + + if ( code != last_code ) + { + if ( last_code != -1 ) + { + /* we are done adding a chunk, fill in the size field */ + if ( size_p ) + { + *size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF ); + *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8 ) & 0xFF ); + *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 16 ) & 0xFF ); + *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 24 ) & 0xFF ); + } + pfb_chunk_size = 0; + } + + *p++ = 0x80; + if ( code == 5 ) + *p++ = 0x03; /* the end */ + else if ( code == 2 ) + *p++ = 0x02; /* binary segment */ + else + *p++ = 0x01; /* ASCII segment */ + + if ( code != 5 ) + { + size_p = p; /* save for later */ + p += 4; /* make space for size field */ + } + } + + ft_memcpy( p, *post_data + 2, post_size ); + pfb_chunk_size += post_size; + p += post_size; + last_code = code; + } + + *pfb_data = buffer; + *size = total_size; + + Error: + CloseResFile( res ); + return error; + } + + + /* Create a new FT_Face from a file path to an LWFN file. */ + static FT_Error + FT_New_Face_From_LWFN( FT_Library library, + const UInt8* pathname, + FT_Long face_index, + FT_Face* aface ) + { + FT_Byte* pfb_data; + FT_ULong pfb_size; + FT_Error error; + ResFileRefNum res; + + + if ( noErr != FT_FSPathMakeRes( pathname, &res ) ) + return FT_THROW( Cannot_Open_Resource ); + + pfb_data = NULL; + pfb_size = 0; + error = read_lwfn( library->memory, res, &pfb_data, &pfb_size ); + CloseResFile( res ); /* PFB is already loaded, useless anymore */ + if ( error ) + return error; + + return open_face_from_buffer( library, + pfb_data, + pfb_size, + face_index, + "type1", + aface ); + } + + + /* Create a new FT_Face from an SFNT resource, specified by res ID. */ + static FT_Error + FT_New_Face_From_SFNT( FT_Library library, + ResID sfnt_id, + FT_Long face_index, + FT_Face* aface ) + { + Handle sfnt = NULL; + FT_Byte* sfnt_data; + size_t sfnt_size; + FT_Error error = FT_Err_Ok; + FT_Memory memory = library->memory; + int is_cff, is_sfnt_ps; + + + sfnt = GetResource( TTAG_sfnt, sfnt_id ); + if ( !sfnt ) + return FT_THROW( Invalid_Handle ); + + sfnt_size = (FT_ULong)GetHandleSize( sfnt ); + + /* detect resource fork overflow */ + if ( FT_MAC_RFORK_MAX_LEN < sfnt_size ) + return FT_THROW( Array_Too_Large ); + + if ( FT_QALLOC( sfnt_data, (FT_Long)sfnt_size ) ) + { + ReleaseResource( sfnt ); + return error; + } + + ft_memcpy( sfnt_data, *sfnt, sfnt_size ); + ReleaseResource( sfnt ); + + is_cff = sfnt_size > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 ); + is_sfnt_ps = sfnt_size > 4 && !ft_memcmp( sfnt_data, "typ1", 4 ); + + if ( is_sfnt_ps ) + { + FT_Stream stream; + + + if ( FT_NEW( stream ) ) + goto Try_OpenType; + + FT_Stream_OpenMemory( stream, sfnt_data, sfnt_size ); + if ( !open_face_PS_from_sfnt_stream( library, + stream, + face_index, + 0, NULL, + aface ) ) + { + FT_Stream_Close( stream ); + FT_FREE( stream ); + FT_FREE( sfnt_data ); + goto Exit; + } + + FT_FREE( stream ); + } + Try_OpenType: + error = open_face_from_buffer( library, + sfnt_data, + sfnt_size, + face_index, + is_cff ? "cff" : "truetype", + aface ); + Exit: + return error; + } + + + /* Create a new FT_Face from a file path to a suitcase file. */ + static FT_Error + FT_New_Face_From_Suitcase( FT_Library library, + const UInt8* pathname, + FT_Long face_index, + FT_Face* aface ) + { + FT_Error error = FT_ERR( Cannot_Open_Resource ); + ResFileRefNum res_ref; + ResourceIndex res_index; + Handle fond; + short num_faces_in_res; + FT_Long count; + + + if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) ) + return FT_THROW( Cannot_Open_Resource ); + + UseResFile( res_ref ); + if ( ResError() ) + return FT_THROW( Cannot_Open_Resource ); + + res_index = 1; + num_faces_in_res = 0; + count = face_index; + while ( count >= 0 ) + { + short num_faces_in_fond; + + + fond = Get1IndResource( TTAG_FOND, res_index ); + if ( ResError() ) + break; + + num_faces_in_fond = count_faces( fond, pathname ); + num_faces_in_res += num_faces_in_fond; + + if ( count < num_faces_in_fond ) + error = FT_New_Face_From_FOND( library, fond, count, aface ); + + res_index++; + count -= num_faces_in_fond; + } + + CloseResFile( res_ref ); + + if ( !error && aface && *aface ) + { + (*aface)->num_faces = num_faces_in_res; + (*aface)->face_index = face_index; + } + + return error; + } + + + /* documentation is in ftmac.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_New_Face_From_FOND( FT_Library library, + Handle fond, + FT_Long face_index, + FT_Face* aface ) + { + short have_sfnt, have_lwfn = 0; + ResID sfnt_id, fond_id; + OSType fond_type; + Str255 fond_name; + Str255 lwfn_file_name; + UInt8 path_lwfn[PATH_MAX]; + OSErr err; + FT_Error error = FT_Err_Ok; + + + /* check of `library' and `aface' delayed to `FT_New_Face_From_XXX' */ + + GetResInfo( fond, &fond_id, &fond_type, fond_name ); + if ( ResError() != noErr || fond_type != TTAG_FOND ) + return FT_THROW( Invalid_File_Format ); + + parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, face_index ); + + if ( lwfn_file_name[0] ) + { + ResFileRefNum res; + + + res = HomeResFile( fond ); + if ( noErr != ResError() ) + goto found_no_lwfn_file; + + { + UInt8 path_fond[PATH_MAX]; + FSRef ref; + + + err = FSGetForkCBInfo( res, kFSInvalidVolumeRefNum, + NULL, NULL, NULL, &ref, NULL ); + if ( noErr != err ) + goto found_no_lwfn_file; + + err = FSRefMakePath( &ref, path_fond, sizeof ( path_fond ) ); + if ( noErr != err ) + goto found_no_lwfn_file; + + error = lookup_lwfn_by_fond( path_fond, lwfn_file_name, + path_lwfn, sizeof ( path_lwfn ) ); + if ( !error ) + have_lwfn = 1; + } + } + + if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) ) + error = FT_New_Face_From_LWFN( library, + path_lwfn, + face_index, + aface ); + else + error = FT_THROW( Unknown_File_Format ); + + found_no_lwfn_file: + if ( have_sfnt && error ) + error = FT_New_Face_From_SFNT( library, + sfnt_id, + face_index, + aface ); + + return error; + } + + + /* Common function to load a new FT_Face from a resource file. */ + static FT_Error + FT_New_Face_From_Resource( FT_Library library, + const UInt8* pathname, + FT_Long face_index, + FT_Face* aface ) + { + OSType file_type; + FT_Error error; + + + /* LWFN is a (very) specific file format, check for it explicitly */ + file_type = get_file_type_from_path( pathname ); + if ( file_type == TTAG_LWFN ) + return FT_New_Face_From_LWFN( library, pathname, face_index, aface ); + + /* Otherwise the file type doesn't matter (there are more than */ + /* `FFIL' and `tfil'). Just try opening it as a font suitcase; */ + /* if it works, fine. */ + + error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface ); + if ( error ) + { + /* let it fall through to normal loader (.ttf, .otf, etc.); */ + /* we signal this by returning no error and no FT_Face */ + *aface = NULL; + } + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * FT_New_Face + * + * @Description: + * This is the Mac-specific implementation of FT_New_Face. In + * addition to the standard FT_New_Face() functionality, it also + * accepts pathnames to Mac suitcase files. For further + * documentation see the original FT_New_Face() in freetype.h. + */ + FT_EXPORT_DEF( FT_Error ) + FT_New_Face( FT_Library library, + const char* pathname, + FT_Long face_index, + FT_Face* aface ) + { + FT_Open_Args args; + FT_Error error; + + + /* test for valid `library' and `aface' delayed to FT_Open_Face() */ + if ( !pathname ) + return FT_THROW( Invalid_Argument ); + + *aface = NULL; + + /* try resourcefork based font: LWFN, FFIL */ + error = FT_New_Face_From_Resource( library, (UInt8 *)pathname, + face_index, aface ); + if ( error || *aface ) + return error; + + /* let it fall through to normal loader (.ttf, .otf, etc.) */ + args.flags = FT_OPEN_PATHNAME; + args.pathname = (char*)pathname; + + return FT_Open_Face( library, &args, face_index, aface ); + } + + + /************************************************************************** + * + * @Function: + * FT_New_Face_From_FSRef + * + * @Description: + * FT_New_Face_From_FSRef is identical to FT_New_Face except it + * accepts an FSRef instead of a path. + * + * This function is deprecated because Carbon data types (FSRef) + * are not cross-platform, and thus not suitable for the FreeType API. + */ + FT_EXPORT_DEF( FT_Error ) + FT_New_Face_From_FSRef( FT_Library library, + const FSRef* ref, + FT_Long face_index, + FT_Face* aface ) + { + FT_Error error; + FT_Open_Args args; + + OSErr err; + UInt8 pathname[PATH_MAX]; + + + /* check of `library' and `aface' delayed to */ + /* `FT_New_Face_From_Resource' */ + + if ( !ref ) + return FT_THROW( Invalid_Argument ); + + err = FSRefMakePath( ref, pathname, sizeof ( pathname ) ); + if ( err ) + error = FT_THROW( Cannot_Open_Resource ); + + error = FT_New_Face_From_Resource( library, pathname, face_index, aface ); + if ( error || *aface ) + return error; + + /* fallback to datafork font */ + args.flags = FT_OPEN_PATHNAME; + args.pathname = (char*)pathname; + return FT_Open_Face( library, &args, face_index, aface ); + } + + + /************************************************************************** + * + * @Function: + * FT_New_Face_From_FSSpec + * + * @Description: + * FT_New_Face_From_FSSpec is identical to FT_New_Face except it + * accepts an FSSpec instead of a path. + * + * This function is deprecated because FSSpec is deprecated in Mac OS X + */ + FT_EXPORT_DEF( FT_Error ) + FT_New_Face_From_FSSpec( FT_Library library, + const FSSpec* spec, + FT_Long face_index, + FT_Face* aface ) + { +#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \ + ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) ) + FT_UNUSED( library ); + FT_UNUSED( spec ); + FT_UNUSED( face_index ); + FT_UNUSED( aface ); + + return FT_THROW( Unimplemented_Feature ); +#else + FSRef ref; + + + /* check of `library' and `aface' delayed to `FT_New_Face_From_FSRef' */ + + if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr ) + return FT_THROW( Invalid_Argument ); + else + return FT_New_Face_From_FSRef( library, &ref, face_index, aface ); +#endif + } + +#else /* !FT_MACINTOSH */ + + /* ANSI C doesn't like empty source files */ + typedef int ft_mac_dummy_; + +#endif /* !FT_MACINTOSH */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftobjs.c b/non-source/foreign/freetype2/src/base/ftobjs.c new file mode 100644 index 000000000..9b97820c3 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftobjs.c @@ -0,0 +1,5917 @@ +/**************************************************************************** + * + * ftobjs.c + * + * The FreeType private base classes (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/ftlist.h> +#include <freetype/ftoutln.h> +#include <freetype/ftfntfmt.h> +#include <freetype/otsvg.h> + +#include <freetype/internal/ftvalid.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftrfork.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/sfnt.h> /* for SFNT_Load_Table_Func */ +#include <freetype/internal/psaux.h> /* for PS_Driver */ +#include <freetype/internal/svginterface.h> + +#include <freetype/tttables.h> +#include <freetype/tttags.h> +#include <freetype/ttnameid.h> + +#include <freetype/internal/services/svprop.h> +#include <freetype/internal/services/svsfnt.h> +#include <freetype/internal/services/svpostnm.h> +#include <freetype/internal/services/svgldict.h> +#include <freetype/internal/services/svttcmap.h> +#include <freetype/internal/services/svkern.h> +#include <freetype/internal/services/svtteng.h> + +#include <freetype/ftdriver.h> + +#ifdef FT_CONFIG_OPTION_MAC_FONTS +#include "ftbase.h" +#endif + + +#ifdef FT_DEBUG_LEVEL_TRACE + +#include <freetype/ftbitmap.h> + +#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */ + /* We disable the warning `conversion from XXX to YYY, */ + /* possible loss of data' in order to compile cleanly with */ + /* the maximum level of warnings: `md5.c' is non-FreeType */ + /* code, and it gets used during development builds only. */ +#pragma warning( push ) +#pragma warning( disable : 4244 ) +#endif /* _MSC_VER */ + + /* It's easiest to include `md5.c' directly. However, since OpenSSL */ + /* also provides the same functions, there might be conflicts if */ + /* both FreeType and OpenSSL are built as static libraries. For */ + /* this reason, we put the MD5 stuff into the `FT_' namespace. */ +#define MD5_u32plus FT_MD5_u32plus +#define MD5_CTX FT_MD5_CTX +#define MD5_Init FT_MD5_Init +#define MD5_Update FT_MD5_Update +#define MD5_Final FT_MD5_Final + +#undef HAVE_OPENSSL + +#include "md5.c" + +#if defined( _MSC_VER ) +#pragma warning( pop ) +#endif + + /* This array must stay in sync with the @FT_Pixel_Mode enumeration */ + /* (in file `ftimage.h`). */ + + static const char* const pixel_modes[] = + { + "none", + "monochrome bitmap", + "gray 8-bit bitmap", + "gray 2-bit bitmap", + "gray 4-bit bitmap", + "LCD 8-bit bitmap", + "vertical LCD 8-bit bitmap", + "BGRA 32-bit color image bitmap", + "SDF 8-bit bitmap" + }; + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + +#define GRID_FIT_METRICS + + + /* forward declaration */ + static FT_Error + ft_open_face_internal( FT_Library library, + const FT_Open_Args* args, + FT_Long face_index, + FT_Face *aface, + FT_Bool test_mac_fonts ); + + + FT_BASE_DEF( FT_Pointer ) + ft_service_list_lookup( FT_ServiceDesc service_descriptors, + const char* service_id ) + { + FT_Pointer result = NULL; + FT_ServiceDesc desc = service_descriptors; + + + if ( desc && service_id ) + { + for ( ; desc->serv_id != NULL; desc++ ) + { + if ( ft_strcmp( desc->serv_id, service_id ) == 0 ) + { + result = (FT_Pointer)desc->serv_data; + break; + } + } + } + + return result; + } + + + FT_BASE_DEF( void ) + ft_validator_init( FT_Validator valid, + const FT_Byte* base, + const FT_Byte* limit, + FT_ValidationLevel level ) + { + valid->base = base; + valid->limit = limit; + valid->level = level; + valid->error = FT_Err_Ok; + } + + + FT_BASE_DEF( FT_Int ) + ft_validator_run( FT_Validator valid ) + { + /* This function doesn't work! None should call it. */ + FT_UNUSED( valid ); + + return -1; + } + + + FT_BASE_DEF( void ) + ft_validator_error( FT_Validator valid, + FT_Error error ) + { + /* since the cast below also disables the compiler's */ + /* type check, we introduce a dummy variable, which */ + /* will be optimized away */ + volatile ft_jmp_buf* jump_buffer = &valid->jump_buffer; + + + valid->error = error; + + /* throw away volatileness; use `jump_buffer' or the */ + /* compiler may warn about an unused local variable */ + ft_longjmp( *(ft_jmp_buf*) jump_buffer, 1 ); + } + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** S T R E A M ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /* create a new input stream from an FT_Open_Args structure */ + /* */ + FT_BASE_DEF( FT_Error ) + FT_Stream_New( FT_Library library, + const FT_Open_Args* args, + FT_Stream *astream ) + { + FT_Error error; + FT_Memory memory; + FT_Stream stream = NULL; + FT_UInt mode; + + + *astream = NULL; + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !args ) + return FT_THROW( Invalid_Argument ); + + memory = library->memory; + mode = args->flags & + ( FT_OPEN_MEMORY | FT_OPEN_STREAM | FT_OPEN_PATHNAME ); + + if ( mode == FT_OPEN_MEMORY ) + { + /* create a memory-based stream */ + if ( FT_NEW( stream ) ) + goto Exit; + + FT_Stream_OpenMemory( stream, + (const FT_Byte*)args->memory_base, + (FT_ULong)args->memory_size ); + stream->memory = memory; + } + +#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT + + else if ( mode == FT_OPEN_PATHNAME ) + { + /* create a normal system stream */ + if ( FT_NEW( stream ) ) + goto Exit; + + stream->memory = memory; + error = FT_Stream_Open( stream, args->pathname ); + if ( error ) + FT_FREE( stream ); + } + else if ( ( mode == FT_OPEN_STREAM ) && args->stream ) + { + /* use an existing, user-provided stream */ + + /* in this case, we do not need to allocate a new stream object */ + /* since the caller is responsible for closing it himself */ + stream = args->stream; + stream->memory = memory; + error = FT_Err_Ok; + } + +#endif + + else + { + error = FT_THROW( Invalid_Argument ); + if ( ( args->flags & FT_OPEN_STREAM ) && args->stream ) + FT_Stream_Close( args->stream ); + } + + if ( !error ) + *astream = stream; + + Exit: + return error; + } + + + FT_BASE_DEF( void ) + FT_Stream_Free( FT_Stream stream, + FT_Int external ) + { + if ( stream ) + { + FT_Memory memory = stream->memory; + + + FT_Stream_Close( stream ); + + if ( !external ) + FT_FREE( stream ); + } + } + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT objs + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** FACE, SIZE & GLYPH SLOT OBJECTS ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + static FT_Error + ft_glyphslot_init( FT_GlyphSlot slot ) + { + FT_Driver driver = slot->face->driver; + FT_Driver_Class clazz = driver->clazz; + FT_Memory memory = driver->root.memory; + FT_Error error = FT_Err_Ok; + FT_Slot_Internal internal = NULL; + + + slot->library = driver->root.library; + + if ( FT_NEW( internal ) ) + goto Exit; + + slot->internal = internal; + + if ( FT_DRIVER_USES_OUTLINES( driver ) ) + error = FT_GlyphLoader_New( memory, &internal->loader ); + + if ( !error && clazz->init_slot ) + error = clazz->init_slot( slot ); + +#ifdef FT_CONFIG_OPTION_SVG + /* if SVG table exists, allocate the space in `slot->other` */ + if ( slot->face->face_flags & FT_FACE_FLAG_SVG ) + { + FT_SVG_Document document = NULL; + + + if ( FT_NEW( document ) ) + goto Exit; + slot->other = document; + } +#endif + + Exit: + return error; + } + + + FT_BASE_DEF( void ) + ft_glyphslot_free_bitmap( FT_GlyphSlot slot ) + { + if ( slot->internal && ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) ) + { + FT_Memory memory = FT_FACE_MEMORY( slot->face ); + + + FT_FREE( slot->bitmap.buffer ); + slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP; + } + else + { + /* assume that the bitmap buffer was stolen or not */ + /* allocated from the heap */ + slot->bitmap.buffer = NULL; + } + } + + + /* overflow-resistant presetting of bitmap position and dimensions; */ + /* also check whether the size is too large for rendering */ + FT_BASE_DEF( FT_Bool ) + ft_glyphslot_preset_bitmap( FT_GlyphSlot slot, + FT_Render_Mode mode, + const FT_Vector* origin ) + { + FT_Outline* outline = &slot->outline; + FT_Bitmap* bitmap = &slot->bitmap; + + FT_Pixel_Mode pixel_mode; + + FT_BBox cbox, pbox; + FT_Pos x_shift = 0; + FT_Pos y_shift = 0; + FT_Pos x_left, y_top; + FT_Pos width, height, pitch; + + + if ( slot->format == FT_GLYPH_FORMAT_SVG ) + { + FT_Module module; + SVG_Service svg_service; + + + module = FT_Get_Module( slot->library, "ot-svg" ); + svg_service = (SVG_Service)module->clazz->module_interface; + + return (FT_Bool)svg_service->preset_slot( module, slot, FALSE ); + } + else if ( slot->format != FT_GLYPH_FORMAT_OUTLINE ) + return 1; + + if ( origin ) + { + x_shift = origin->x; + y_shift = origin->y; + } + + /* compute the control box, and grid-fit it, */ + /* taking into account the origin shift */ + FT_Outline_Get_CBox( outline, &cbox ); + + /* rough estimate of pixel box */ + pbox.xMin = ( cbox.xMin >> 6 ) + ( x_shift >> 6 ); + pbox.yMin = ( cbox.yMin >> 6 ) + ( y_shift >> 6 ); + pbox.xMax = ( cbox.xMax >> 6 ) + ( x_shift >> 6 ); + pbox.yMax = ( cbox.yMax >> 6 ) + ( y_shift >> 6 ); + + /* tiny remainder box */ + cbox.xMin = ( cbox.xMin & 63 ) + ( x_shift & 63 ); + cbox.yMin = ( cbox.yMin & 63 ) + ( y_shift & 63 ); + cbox.xMax = ( cbox.xMax & 63 ) + ( x_shift & 63 ); + cbox.yMax = ( cbox.yMax & 63 ) + ( y_shift & 63 ); + + switch ( mode ) + { + case FT_RENDER_MODE_MONO: + pixel_mode = FT_PIXEL_MODE_MONO; +#if 1 + /* x */ + + /* undocumented but confirmed: bbox values get rounded; */ + /* we do asymmetric rounding so that the center of a pixel */ + /* gets always included */ + + pbox.xMin += ( cbox.xMin + 31 ) >> 6; + pbox.xMax += ( cbox.xMax + 32 ) >> 6; + + /* if the bbox collapsed, we add a pixel based on the total */ + /* rounding remainder to cover most of the original cbox */ + + if ( pbox.xMin == pbox.xMax ) + { + if ( ( ( cbox.xMin + 31 ) & 63 ) - 31 + + ( ( cbox.xMax + 32 ) & 63 ) - 32 < 0 ) + pbox.xMin -= 1; + else + pbox.xMax += 1; + } + + /* y */ + + pbox.yMin += ( cbox.yMin + 31 ) >> 6; + pbox.yMax += ( cbox.yMax + 32 ) >> 6; + + if ( pbox.yMin == pbox.yMax ) + { + if ( ( ( cbox.yMin + 31 ) & 63 ) - 31 + + ( ( cbox.yMax + 32 ) & 63 ) - 32 < 0 ) + pbox.yMin -= 1; + else + pbox.yMax += 1; + } + + break; +#else + goto Adjust; +#endif + + case FT_RENDER_MODE_LCD: + pixel_mode = FT_PIXEL_MODE_LCD; + ft_lcd_padding( &cbox, slot, mode ); + goto Adjust; + + case FT_RENDER_MODE_LCD_V: + pixel_mode = FT_PIXEL_MODE_LCD_V; + ft_lcd_padding( &cbox, slot, mode ); + goto Adjust; + + case FT_RENDER_MODE_NORMAL: + case FT_RENDER_MODE_LIGHT: + default: + pixel_mode = FT_PIXEL_MODE_GRAY; + Adjust: + pbox.xMin += cbox.xMin >> 6; + pbox.yMin += cbox.yMin >> 6; + pbox.xMax += ( cbox.xMax + 63 ) >> 6; + pbox.yMax += ( cbox.yMax + 63 ) >> 6; + } + + x_left = pbox.xMin; + y_top = pbox.yMax; + + width = pbox.xMax - pbox.xMin; + height = pbox.yMax - pbox.yMin; + + switch ( pixel_mode ) + { + case FT_PIXEL_MODE_MONO: + pitch = ( ( width + 15 ) >> 4 ) << 1; + break; + + case FT_PIXEL_MODE_LCD: + width *= 3; + pitch = FT_PAD_CEIL( width, 4 ); + break; + + case FT_PIXEL_MODE_LCD_V: + height *= 3; + FALL_THROUGH; + + case FT_PIXEL_MODE_GRAY: + default: + pitch = width; + } + + slot->bitmap_left = (FT_Int)x_left; + slot->bitmap_top = (FT_Int)y_top; + + bitmap->pixel_mode = (unsigned char)pixel_mode; + bitmap->num_grays = 256; + bitmap->width = (unsigned int)width; + bitmap->rows = (unsigned int)height; + bitmap->pitch = pitch; + + if ( pbox.xMin < -0x8000 || pbox.xMax > 0x7FFF || + pbox.yMin < -0x8000 || pbox.yMax > 0x7FFF ) + { + FT_TRACE3(( "ft_glyphslot_preset_bitmap: [%ld %ld %ld %ld]\n", + pbox.xMin, pbox.yMin, pbox.xMax, pbox.yMax )); + return 1; + } + + return 0; + } + + + FT_BASE_DEF( void ) + ft_glyphslot_set_bitmap( FT_GlyphSlot slot, + FT_Byte* buffer ) + { + ft_glyphslot_free_bitmap( slot ); + + slot->bitmap.buffer = buffer; + + FT_ASSERT( (slot->internal->flags & FT_GLYPH_OWN_BITMAP) == 0 ); + } + + + FT_BASE_DEF( FT_Error ) + ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot, + FT_ULong size ) + { + FT_Memory memory = FT_FACE_MEMORY( slot->face ); + FT_Error error; + + + if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) + FT_FREE( slot->bitmap.buffer ); + else + slot->internal->flags |= FT_GLYPH_OWN_BITMAP; + + FT_MEM_ALLOC( slot->bitmap.buffer, size ); + return error; + } + + + static void + ft_glyphslot_clear( FT_GlyphSlot slot ) + { + /* free bitmap if needed */ + ft_glyphslot_free_bitmap( slot ); + + /* clear all public fields in the glyph slot */ + slot->glyph_index = 0; + + FT_ZERO( &slot->metrics ); + FT_ZERO( &slot->outline ); + + slot->bitmap.width = 0; + slot->bitmap.rows = 0; + slot->bitmap.pitch = 0; + slot->bitmap.pixel_mode = 0; + /* `slot->bitmap.buffer' has been handled by ft_glyphslot_free_bitmap */ + + slot->bitmap_left = 0; + slot->bitmap_top = 0; + slot->num_subglyphs = 0; + slot->subglyphs = NULL; + slot->control_data = NULL; + slot->control_len = 0; + +#ifndef FT_CONFIG_OPTION_SVG + slot->other = NULL; +#else + if ( !( slot->face->face_flags & FT_FACE_FLAG_SVG ) ) + slot->other = NULL; + else + { + if ( slot->internal->flags & FT_GLYPH_OWN_GZIP_SVG ) + { + FT_Memory memory = slot->face->memory; + FT_SVG_Document doc = (FT_SVG_Document)slot->other; + + + FT_FREE( doc->svg_document ); + slot->internal->flags &= ~FT_GLYPH_OWN_GZIP_SVG; + } + } +#endif + + slot->format = FT_GLYPH_FORMAT_NONE; + + slot->linearHoriAdvance = 0; + slot->linearVertAdvance = 0; + slot->advance.x = 0; + slot->advance.y = 0; + slot->lsb_delta = 0; + slot->rsb_delta = 0; + } + + + static void + ft_glyphslot_done( FT_GlyphSlot slot ) + { + FT_Driver driver = slot->face->driver; + FT_Driver_Class clazz = driver->clazz; + FT_Memory memory = driver->root.memory; + +#ifdef FT_CONFIG_OPTION_SVG + if ( slot->face->face_flags & FT_FACE_FLAG_SVG ) + { + /* Free memory in case SVG was there. */ + /* `slot->internal` might be NULL in out-of-memory situations. */ + if ( slot->internal && slot->internal->flags & FT_GLYPH_OWN_GZIP_SVG ) + { + FT_SVG_Document doc = (FT_SVG_Document)slot->other; + + + FT_FREE( doc->svg_document ); + + slot->internal->flags &= ~FT_GLYPH_OWN_GZIP_SVG; + } + + FT_FREE( slot->other ); + } +#endif + + if ( clazz->done_slot ) + clazz->done_slot( slot ); + + /* free bitmap buffer if needed */ + ft_glyphslot_free_bitmap( slot ); + + /* slot->internal might be NULL in out-of-memory situations */ + if ( slot->internal ) + { + /* free glyph loader */ + if ( FT_DRIVER_USES_OUTLINES( driver ) ) + { + FT_GlyphLoader_Done( slot->internal->loader ); + slot->internal->loader = NULL; + } + + FT_FREE( slot->internal ); + } + } + + + /* documentation is in ftobjs.h */ + + FT_BASE_DEF( FT_Error ) + FT_New_GlyphSlot( FT_Face face, + FT_GlyphSlot *aslot ) + { + FT_Error error; + FT_Driver driver; + FT_Driver_Class clazz; + FT_Memory memory; + FT_GlyphSlot slot = NULL; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !face->driver ) + return FT_THROW( Invalid_Argument ); + + driver = face->driver; + clazz = driver->clazz; + memory = driver->root.memory; + + FT_TRACE4(( "FT_New_GlyphSlot: Creating new slot object\n" )); + if ( !FT_ALLOC( slot, clazz->slot_object_size ) ) + { + slot->face = face; + + error = ft_glyphslot_init( slot ); + if ( error ) + { + ft_glyphslot_done( slot ); + FT_FREE( slot ); + goto Exit; + } + + slot->next = face->glyph; + face->glyph = slot; + + if ( aslot ) + *aslot = slot; + } + else if ( aslot ) + *aslot = NULL; + + + Exit: + FT_TRACE4(( "FT_New_GlyphSlot: Return 0x%x\n", error )); + + return error; + } + + + /* documentation is in ftobjs.h */ + + FT_BASE_DEF( void ) + FT_Done_GlyphSlot( FT_GlyphSlot slot ) + { + if ( slot ) + { + FT_Driver driver = slot->face->driver; + FT_Memory memory = driver->root.memory; + FT_GlyphSlot prev; + FT_GlyphSlot cur; + + + /* Remove slot from its parent face's list */ + prev = NULL; + cur = slot->face->glyph; + + while ( cur ) + { + if ( cur == slot ) + { + if ( !prev ) + slot->face->glyph = cur->next; + else + prev->next = cur->next; + + /* finalize client-specific data */ + if ( slot->generic.finalizer ) + slot->generic.finalizer( slot ); + + ft_glyphslot_done( slot ); + FT_FREE( slot ); + break; + } + prev = cur; + cur = cur->next; + } + } + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( void ) + FT_Set_Transform( FT_Face face, + FT_Matrix* matrix, + FT_Vector* delta ) + { + FT_Face_Internal internal; + + + if ( !face ) + return; + + internal = face->internal; + + internal->transform_flags = 0; + + if ( !matrix ) + { + internal->transform_matrix.xx = 0x10000L; + internal->transform_matrix.xy = 0; + internal->transform_matrix.yx = 0; + internal->transform_matrix.yy = 0x10000L; + + matrix = &internal->transform_matrix; + } + else + internal->transform_matrix = *matrix; + + /* set transform_flags bit flag 0 if `matrix' isn't the identity */ + if ( ( matrix->xy | matrix->yx ) || + matrix->xx != 0x10000L || + matrix->yy != 0x10000L ) + internal->transform_flags |= 1; + + if ( !delta ) + { + internal->transform_delta.x = 0; + internal->transform_delta.y = 0; + + delta = &internal->transform_delta; + } + else + internal->transform_delta = *delta; + + /* set transform_flags bit flag 1 if `delta' isn't the null vector */ + if ( delta->x | delta->y ) + internal->transform_flags |= 2; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( void ) + FT_Get_Transform( FT_Face face, + FT_Matrix* matrix, + FT_Vector* delta ) + { + FT_Face_Internal internal; + + + if ( !face ) + return; + + internal = face->internal; + + if ( matrix ) + *matrix = internal->transform_matrix; + + if ( delta ) + *delta = internal->transform_delta; + } + + + static FT_Renderer + ft_lookup_glyph_renderer( FT_GlyphSlot slot ); + + +#ifdef GRID_FIT_METRICS + static void + ft_glyphslot_grid_fit_metrics( FT_GlyphSlot slot, + FT_Bool vertical ) + { + FT_Glyph_Metrics* metrics = &slot->metrics; + FT_Pos right, bottom; + + + if ( vertical ) + { + metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX ); + metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY ); + + right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingX, + metrics->width ) ); + bottom = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingY, + metrics->height ) ); + + metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX ); + metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY ); + + metrics->width = SUB_LONG( right, + metrics->vertBearingX ); + metrics->height = SUB_LONG( bottom, + metrics->vertBearingY ); + } + else + { + metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX ); + metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY ); + + right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->horiBearingX, + metrics->width ) ); + bottom = FT_PIX_FLOOR( SUB_LONG( metrics->horiBearingY, + metrics->height ) ); + + metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX ); + metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY ); + + metrics->width = SUB_LONG( right, + metrics->horiBearingX ); + metrics->height = SUB_LONG( metrics->horiBearingY, + bottom ); + } + + metrics->horiAdvance = FT_PIX_ROUND_LONG( metrics->horiAdvance ); + metrics->vertAdvance = FT_PIX_ROUND_LONG( metrics->vertAdvance ); + } +#endif /* GRID_FIT_METRICS */ + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Load_Glyph( FT_Face face, + FT_UInt glyph_index, + FT_Int32 load_flags ) + { + FT_Error error; + FT_Driver driver; + FT_GlyphSlot slot; + FT_Library library; + FT_Bool autohint = FALSE; + FT_Module hinter; + TT_Face ttface = (TT_Face)face; + + + if ( !face || !face->size || !face->glyph ) + return FT_THROW( Invalid_Face_Handle ); + + /* The validity test for `glyph_index' is performed by the */ + /* font drivers. */ + + slot = face->glyph; + ft_glyphslot_clear( slot ); + + driver = face->driver; + library = driver->root.library; + hinter = library->auto_hinter; + + /* undefined scale means no scale */ + if ( face->size->metrics.x_ppem == 0 || + face->size->metrics.y_ppem == 0 ) + load_flags |= FT_LOAD_NO_SCALE; + + /* resolve load flags dependencies */ + + if ( load_flags & FT_LOAD_NO_RECURSE ) + load_flags |= FT_LOAD_NO_SCALE | + FT_LOAD_IGNORE_TRANSFORM; + + if ( load_flags & FT_LOAD_NO_SCALE ) + { + load_flags |= FT_LOAD_NO_HINTING | + FT_LOAD_NO_BITMAP; + + load_flags &= ~FT_LOAD_RENDER; + } + + if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) + load_flags &= ~FT_LOAD_RENDER; + + /* + * Determine whether we need to auto-hint or not. + * The general rules are: + * + * - Do only auto-hinting if we have + * + * - a hinter module, + * - a scalable font, + * - not a tricky font, and + * - no transforms except simple slants and/or rotations by + * integer multiples of 90 degrees. + * + * - Then, auto-hint if FT_LOAD_FORCE_AUTOHINT is set or if we don't + * have a native font hinter. + * + * - Otherwise, auto-hint for LIGHT hinting mode or if there isn't + * any hinting bytecode in the TrueType/OpenType font. + * + * - Exception: The font is `tricky' and requires the native hinter to + * load properly. + */ + + if ( hinter && + !( load_flags & FT_LOAD_NO_HINTING ) && + !( load_flags & FT_LOAD_NO_AUTOHINT ) && + FT_IS_SCALABLE( face ) && + !FT_IS_TRICKY( face ) && + ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) || + ( face->internal->transform_matrix.yx == 0 && + face->internal->transform_matrix.xx != 0 ) || + ( face->internal->transform_matrix.xx == 0 && + face->internal->transform_matrix.yx != 0 ) ) ) + { + if ( ( load_flags & FT_LOAD_FORCE_AUTOHINT ) || + !FT_DRIVER_HAS_HINTER( driver ) ) + autohint = TRUE; + else + { + FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags ); + FT_Bool is_light_type1; + + + /* only the new Adobe engine (for both CFF and Type 1) is `light'; */ + /* we use `strstr' to catch both `Type 1' and `CID Type 1' */ + is_light_type1 = + ft_strstr( FT_Get_Font_Format( face ), "Type 1" ) != NULL && + ((PS_Driver)driver)->hinting_engine == FT_HINTING_ADOBE; + + /* the check for `num_locations' assures that we actually */ + /* test for instructions in a TTF and not in a CFF-based OTF */ + /* */ + /* since `maxSizeOfInstructions' might be unreliable, we */ + /* check the size of the `fpgm' and `prep' tables, too -- */ + /* the assumption is that there don't exist real TTFs where */ + /* both `fpgm' and `prep' tables are missing */ + if ( ( mode == FT_RENDER_MODE_LIGHT && + ( !FT_DRIVER_HINTS_LIGHTLY( driver ) && + !is_light_type1 ) ) || + ( FT_IS_SFNT( face ) && + ttface->num_locations && + ttface->max_profile.maxSizeOfInstructions == 0 && + ttface->font_program_size == 0 && + ttface->cvt_program_size == 0 ) ) + autohint = TRUE; + } + } + + if ( autohint ) + { + FT_AutoHinter_Interface hinting; + + + /* XXX: The use of the `FT_LOAD_XXX_ONLY` flags is not very */ + /* elegant. */ + + /* try to load SVG documents if available */ + if ( ( load_flags & FT_LOAD_NO_SVG ) == 0 && + FT_HAS_SVG( face ) ) + { + error = driver->clazz->load_glyph( slot, face->size, + glyph_index, + load_flags | FT_LOAD_SVG_ONLY ); + + if ( !error && slot->format == FT_GLYPH_FORMAT_SVG ) + goto Load_Ok; + } + + /* try to load embedded bitmaps if available */ + if ( FT_HAS_FIXED_SIZES( face ) && + ( load_flags & FT_LOAD_NO_BITMAP ) == 0 ) + { + error = driver->clazz->load_glyph( slot, face->size, + glyph_index, + load_flags | FT_LOAD_SBITS_ONLY ); + + if ( !error && slot->format == FT_GLYPH_FORMAT_BITMAP ) + goto Load_Ok; + } + + { + FT_Face_Internal internal = face->internal; + FT_Int transform_flags = internal->transform_flags; + + + /* since the auto-hinter calls FT_Load_Glyph by itself, */ + /* make sure that glyphs aren't transformed */ + internal->transform_flags = 0; + + /* load auto-hinted outline */ + hinting = (FT_AutoHinter_Interface)hinter->clazz->module_interface; + + error = hinting->load_glyph( (FT_AutoHinter)hinter, + slot, face->size, + glyph_index, load_flags ); + + internal->transform_flags = transform_flags; + } + } + else + { + error = driver->clazz->load_glyph( slot, + face->size, + glyph_index, + load_flags ); + if ( error ) + goto Exit; + + if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ) + { + /* check that the loaded outline is correct */ + error = FT_Outline_Check( &slot->outline ); + if ( error ) + goto Exit; + +#ifdef GRID_FIT_METRICS + if ( !( load_flags & FT_LOAD_NO_HINTING ) ) + ft_glyphslot_grid_fit_metrics( + slot, + FT_BOOL( load_flags & FT_LOAD_VERTICAL_LAYOUT ) ); +#endif + } + } + + Load_Ok: + /* compute the advance */ + if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) + { + slot->advance.x = 0; + slot->advance.y = slot->metrics.vertAdvance; + } + else + { + slot->advance.x = slot->metrics.horiAdvance; + slot->advance.y = 0; + } + + /* compute the linear advance in 16.16 pixels */ + if ( ( load_flags & FT_LOAD_LINEAR_DESIGN ) == 0 && + FT_IS_SCALABLE( face ) ) + { + FT_Size_Metrics* metrics = &face->size->metrics; + + + /* it's tricky! */ + slot->linearHoriAdvance = FT_MulDiv( slot->linearHoriAdvance, + metrics->x_scale, 64 ); + + slot->linearVertAdvance = FT_MulDiv( slot->linearVertAdvance, + metrics->y_scale, 64 ); + } + + if ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) == 0 ) + { + FT_Face_Internal internal = face->internal; + + + /* now, transform the glyph image if needed */ + if ( internal->transform_flags ) + { + /* get renderer */ + FT_Renderer renderer = ft_lookup_glyph_renderer( slot ); + + + if ( renderer ) + error = renderer->clazz->transform_glyph( + renderer, slot, + &internal->transform_matrix, + &internal->transform_delta ); + else if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ) + { + /* apply `standard' transformation if no renderer is available */ + if ( internal->transform_flags & 1 ) + FT_Outline_Transform( &slot->outline, + &internal->transform_matrix ); + + if ( internal->transform_flags & 2 ) + FT_Outline_Translate( &slot->outline, + internal->transform_delta.x, + internal->transform_delta.y ); + } + + /* transform advance */ + FT_Vector_Transform( &slot->advance, &internal->transform_matrix ); + } + } + + slot->glyph_index = glyph_index; + slot->internal->load_flags = load_flags; + + /* do we need to render the image or preset the bitmap now? */ + if ( !error && + ( load_flags & FT_LOAD_NO_SCALE ) == 0 && + slot->format != FT_GLYPH_FORMAT_BITMAP && + slot->format != FT_GLYPH_FORMAT_COMPOSITE ) + { + FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags ); + + + if ( mode == FT_RENDER_MODE_NORMAL && + load_flags & FT_LOAD_MONOCHROME ) + mode = FT_RENDER_MODE_MONO; + + if ( load_flags & FT_LOAD_RENDER ) + error = FT_Render_Glyph( slot, mode ); + else + ft_glyphslot_preset_bitmap( slot, mode, NULL ); + } + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE5(( "FT_Load_Glyph: index %d, flags 0x%x\n", + glyph_index, load_flags )); + FT_TRACE5(( " bitmap %dx%d %s, %s (mode %d)\n", + slot->bitmap.width, + slot->bitmap.rows, + slot->outline.points ? + slot->bitmap.buffer ? "rendered" + : "preset" + : + slot->internal->flags & FT_GLYPH_OWN_BITMAP ? "owned" + : "unowned", + pixel_modes[slot->bitmap.pixel_mode], + slot->bitmap.pixel_mode )); + FT_TRACE5(( "\n" )); + FT_TRACE5(( " x advance: %f\n", (double)slot->advance.x / 64 )); + FT_TRACE5(( " y advance: %f\n", (double)slot->advance.y / 64 )); + FT_TRACE5(( " linear x advance: %f\n", + (double)slot->linearHoriAdvance / 65536 )); + FT_TRACE5(( " linear y advance: %f\n", + (double)slot->linearVertAdvance / 65536 )); + + { + FT_Glyph_Metrics* metrics = &slot->metrics; + + + FT_TRACE5(( " metrics:\n" )); + FT_TRACE5(( " width: %f\n", (double)metrics->width / 64 )); + FT_TRACE5(( " height: %f\n", (double)metrics->height / 64 )); + FT_TRACE5(( "\n" )); + FT_TRACE5(( " horiBearingX: %f\n", + (double)metrics->horiBearingX / 64 )); + FT_TRACE5(( " horiBearingY: %f\n", + (double)metrics->horiBearingY / 64 )); + FT_TRACE5(( " horiAdvance: %f\n", + (double)metrics->horiAdvance / 64 )); + FT_TRACE5(( "\n" )); + FT_TRACE5(( " vertBearingX: %f\n", + (double)metrics->vertBearingX / 64 )); + FT_TRACE5(( " vertBearingY: %f\n", + (double)metrics->vertBearingY / 64 )); + FT_TRACE5(( " vertAdvance: %f\n", + (double)metrics->vertAdvance / 64 )); + } +#endif + + Exit: + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Load_Char( FT_Face face, + FT_ULong char_code, + FT_Int32 load_flags ) + { + FT_UInt glyph_index; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + glyph_index = (FT_UInt)char_code; + if ( face->charmap ) + glyph_index = FT_Get_Char_Index( face, char_code ); + + return FT_Load_Glyph( face, glyph_index, load_flags ); + } + + + /* destructor for sizes list */ + static void + destroy_size( FT_Memory memory, + void* size_, + void* driver_ ) + { + FT_Size size = (FT_Size)size_; + FT_Driver driver = (FT_Driver)driver_; + + + /* finalize client-specific data */ + if ( size->generic.finalizer ) + size->generic.finalizer( size ); + + /* finalize format-specific stuff */ + if ( driver->clazz->done_size ) + driver->clazz->done_size( size ); + + FT_FREE( size->internal ); + FT_FREE( size ); + } + + + static void + ft_cmap_done_internal( FT_CMap cmap ); + + + static void + destroy_charmaps( FT_Face face, + FT_Memory memory ) + { + FT_Int n; + + + if ( !face ) + return; + + for ( n = 0; n < face->num_charmaps; n++ ) + { + FT_CMap cmap = FT_CMAP( face->charmaps[n] ); + + + ft_cmap_done_internal( cmap ); + + face->charmaps[n] = NULL; + } + + FT_FREE( face->charmaps ); + face->num_charmaps = 0; + } + + + /* destructor for faces list */ + static void + destroy_face( FT_Memory memory, + void* face_, + void* driver_ ) + { + FT_Face face = (FT_Face)face_; + FT_Driver driver = (FT_Driver)driver_; + FT_Driver_Class clazz = driver->clazz; + + + /* discard auto-hinting data */ + if ( face->autohint.finalizer ) + face->autohint.finalizer( face->autohint.data ); + + /* Discard glyph slots for this face. */ + /* Beware! FT_Done_GlyphSlot() changes the field `face->glyph' */ + while ( face->glyph ) + FT_Done_GlyphSlot( face->glyph ); + + /* discard all sizes for this face */ + FT_List_Finalize( &face->sizes_list, + destroy_size, + memory, + driver ); + face->size = NULL; + + /* now discard client data */ + if ( face->generic.finalizer ) + face->generic.finalizer( face ); + + /* discard charmaps */ + destroy_charmaps( face, memory ); + + /* finalize format-specific stuff */ + if ( clazz->done_face ) + clazz->done_face( face ); + + /* close the stream for this face if needed */ + FT_Stream_Free( + face->stream, + ( face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 ); + + face->stream = NULL; + + /* get rid of it */ + if ( face->internal ) + { + FT_FREE( face->internal ); + } + FT_FREE( face ); + } + + + static void + Destroy_Driver( FT_Driver driver ) + { + FT_List_Finalize( &driver->faces_list, + destroy_face, + driver->root.memory, + driver ); + } + + + /************************************************************************** + * + * @Function: + * find_unicode_charmap + * + * @Description: + * This function finds a Unicode charmap, if there is one. + * And if there is more than one, it tries to favour the more + * extensive one, i.e., one that supports UCS-4 against those which + * are limited to the BMP (said UCS-2 encoding.) + * + * This function is called from open_face() (just below), and also + * from FT_Select_Charmap( ..., FT_ENCODING_UNICODE ). + */ + static FT_Error + find_unicode_charmap( FT_Face face ) + { + FT_CharMap* first; + FT_CharMap* cur; + + + /* caller should have already checked that `face' is valid */ + FT_ASSERT( face ); + + first = face->charmaps; + + if ( !first ) + return FT_THROW( Invalid_CharMap_Handle ); + + /* + * The original TrueType specification(s) only specified charmap + * formats that are capable of mapping 8 or 16 bit character codes to + * glyph indices. + * + * However, recent updates to the Apple and OpenType specifications + * introduced new formats that are capable of mapping 32-bit character + * codes as well. And these are already used on some fonts, mainly to + * map non-BMP Asian ideographs as defined in Unicode. + * + * For compatibility purposes, these fonts generally come with + * *several* Unicode charmaps: + * + * - One of them in the "old" 16-bit format, that cannot access + * all glyphs in the font. + * + * - Another one in the "new" 32-bit format, that can access all + * the glyphs. + * + * This function has been written to always favor a 32-bit charmap + * when found. Otherwise, a 16-bit one is returned when found. + */ + + /* Since the `interesting' table, with IDs (3,10), is normally the */ + /* last one, we loop backwards. This loses with type1 fonts with */ + /* non-BMP characters (<.0001%), this wins with .ttf with non-BMP */ + /* chars (.01% ?), and this is the same about 99.99% of the time! */ + + cur = first + face->num_charmaps; /* points after the last one */ + + for ( ; --cur >= first; ) + { + if ( cur[0]->encoding == FT_ENCODING_UNICODE ) + { + /* XXX If some new encodings to represent UCS-4 are added, */ + /* they should be added here. */ + if ( ( cur[0]->platform_id == TT_PLATFORM_MICROSOFT && + cur[0]->encoding_id == TT_MS_ID_UCS_4 ) || + ( cur[0]->platform_id == TT_PLATFORM_APPLE_UNICODE && + cur[0]->encoding_id == TT_APPLE_ID_UNICODE_32 ) ) + { + face->charmap = cur[0]; + return FT_Err_Ok; + } + } + } + + /* We do not have any UCS-4 charmap. */ + /* Do the loop again and search for UCS-2 charmaps. */ + cur = first + face->num_charmaps; + + for ( ; --cur >= first; ) + { + if ( cur[0]->encoding == FT_ENCODING_UNICODE ) + { + face->charmap = cur[0]; + return FT_Err_Ok; + } + } + + return FT_THROW( Invalid_CharMap_Handle ); + } + + + /************************************************************************** + * + * @Function: + * find_variant_selector_charmap + * + * @Description: + * This function finds the variant selector charmap, if there is one. + * There can only be one (platform=0, specific=5, format=14). + */ + static FT_CharMap + find_variant_selector_charmap( FT_Face face ) + { + FT_CharMap* first; + FT_CharMap* end; + FT_CharMap* cur; + + + /* caller should have already checked that `face' is valid */ + FT_ASSERT( face ); + + first = face->charmaps; + + if ( !first ) + return NULL; + + end = first + face->num_charmaps; /* points after the last one */ + + for ( cur = first; cur < end; cur++ ) + { + if ( cur[0]->platform_id == TT_PLATFORM_APPLE_UNICODE && + cur[0]->encoding_id == TT_APPLE_ID_VARIANT_SELECTOR && + FT_Get_CMap_Format( cur[0] ) == 14 ) + return cur[0]; + } + + return NULL; + } + + + /************************************************************************** + * + * @Function: + * open_face + * + * @Description: + * This function does some work for FT_Open_Face(). + */ + static FT_Error + open_face( FT_Driver driver, + FT_Stream *astream, + FT_Bool *anexternal_stream, + FT_Long face_index, + FT_Int num_params, + FT_Parameter* params, + FT_Face *aface ) + { + FT_Memory memory; + FT_Driver_Class clazz; + FT_Face face = NULL; + FT_Face_Internal internal = NULL; + + FT_Error error, error2; + + + clazz = driver->clazz; + memory = driver->root.memory; + + /* allocate the face object and perform basic initialization */ + if ( FT_ALLOC( face, clazz->face_object_size ) ) + goto Fail; + + face->driver = driver; + face->memory = memory; + face->stream = *astream; + + /* set the FT_FACE_FLAG_EXTERNAL_STREAM bit for FT_Done_Face */ + if ( *anexternal_stream ) + face->face_flags |= FT_FACE_FLAG_EXTERNAL_STREAM; + + if ( FT_NEW( internal ) ) + goto Fail; + + face->internal = internal; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + { + int i; + + + face->internal->incremental_interface = NULL; + for ( i = 0; i < num_params && !face->internal->incremental_interface; + i++ ) + if ( params[i].tag == FT_PARAM_TAG_INCREMENTAL ) + face->internal->incremental_interface = + (FT_Incremental_Interface)params[i].data; + } +#endif + + face->internal->random_seed = -1; + + if ( clazz->init_face ) + error = clazz->init_face( *astream, + face, + (FT_Int)face_index, + num_params, + params ); + /* Stream may have been changed. */ + *astream = face->stream; + *anexternal_stream = + ( face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0; + if ( error ) + goto Fail; + + /* select Unicode charmap by default */ + error2 = find_unicode_charmap( face ); + + /* if no Unicode charmap can be found, FT_Err_Invalid_CharMap_Handle */ + /* is returned. */ + + /* no error should happen, but we want to play safe */ + if ( error2 && FT_ERR_NEQ( error2, Invalid_CharMap_Handle ) ) + { + error = error2; + goto Fail; + } + + *aface = face; + + Fail: + if ( error ) + { + destroy_charmaps( face, memory ); + if ( clazz->done_face ) + clazz->done_face( face ); + FT_FREE( internal ); + FT_FREE( face ); + *aface = NULL; + } + + return error; + } + + + /* there's a Mac-specific extended implementation of FT_New_Face() */ + /* in src/base/ftmac.c */ + +#ifndef FT_MACINTOSH + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_New_Face( FT_Library library, + const char* pathname, + FT_Long face_index, + FT_Face *aface ) + { + FT_Open_Args args; + + + /* test for valid `library' and `aface' delayed to `FT_Open_Face' */ + if ( !pathname ) + return FT_THROW( Invalid_Argument ); + + args.flags = FT_OPEN_PATHNAME; + args.pathname = (char*)pathname; + args.stream = NULL; + + return ft_open_face_internal( library, &args, face_index, aface, 1 ); + } + +#endif + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_New_Memory_Face( FT_Library library, + const FT_Byte* file_base, + FT_Long file_size, + FT_Long face_index, + FT_Face *aface ) + { + FT_Open_Args args; + + + /* test for valid `library' and `face' delayed to `FT_Open_Face' */ + if ( !file_base ) + return FT_THROW( Invalid_Argument ); + + args.flags = FT_OPEN_MEMORY; + args.memory_base = file_base; + args.memory_size = file_size; + args.stream = NULL; + + return ft_open_face_internal( library, &args, face_index, aface, 1 ); + } + + +#ifdef FT_CONFIG_OPTION_MAC_FONTS + + /* The behavior here is very similar to that in base/ftmac.c, but it */ + /* is designed to work on non-mac systems, so no mac specific calls. */ + /* */ + /* We look at the file and determine if it is a mac dfont file or a mac */ + /* resource file, or a macbinary file containing a mac resource file. */ + /* */ + /* Unlike ftmac I'm not going to look at a `FOND'. I don't really see */ + /* the point, especially since there may be multiple `FOND' resources. */ + /* Instead I'll just look for `sfnt' and `POST' resources, ordered as */ + /* they occur in the file. */ + /* */ + /* Note that multiple `POST' resources do not mean multiple postscript */ + /* fonts; they all get jammed together to make what is essentially a */ + /* pfb file. */ + /* */ + /* We aren't interested in `NFNT' or `FONT' bitmap resources. */ + /* */ + /* As soon as we get an `sfnt' load it into memory and pass it off to */ + /* FT_Open_Face. */ + /* */ + /* If we have a (set of) `POST' resources, massage them into a (memory) */ + /* pfb file and pass that to FT_Open_Face. (As with ftmac.c I'm not */ + /* going to try to save the kerning info. After all that lives in the */ + /* `FOND' which isn't in the file containing the `POST' resources so */ + /* we don't really have access to it. */ + + + /* Finalizer for a memory stream; gets called by FT_Done_Face(). */ + /* It frees the memory it uses. */ + /* From `ftmac.c'. */ + static void + memory_stream_close( FT_Stream stream ) + { + FT_Memory memory = (FT_Memory)stream->descriptor.pointer; + + + FT_FREE( stream->base ); + stream->size = 0; + stream->close = NULL; + FT_FREE( stream ); + } + + + /* Create a new memory stream from a buffer and a size. */ + /* From `ftmac.c'. */ + static FT_Error + new_memory_stream( FT_Library library, + FT_Byte* base, + FT_ULong size, + FT_Stream_CloseFunc close, + FT_Stream *astream ) + { + FT_Error error; + FT_Memory memory; + FT_Stream stream = NULL; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !base ) + return FT_THROW( Invalid_Argument ); + + *astream = NULL; + memory = library->memory; + if ( FT_NEW( stream ) ) + goto Exit; + + FT_Stream_OpenMemory( stream, base, size ); + + stream->descriptor.pointer = memory; + stream->close = close; + + *astream = stream; + + Exit: + return error; + } + + + /* Create a new FT_Face given a buffer and a driver name. */ + /* From `ftmac.c'. */ + FT_LOCAL_DEF( FT_Error ) + open_face_from_buffer( FT_Library library, + FT_Byte* base, + FT_ULong size, + FT_Long face_index, + const char* driver_name, + FT_Face *aface ) + { + FT_Open_Args args; + FT_Error error; + FT_Memory memory = library->memory; + + + args.driver = NULL; + args.flags = 0; + + if ( driver_name ) + { + args.driver = FT_Get_Module( library, driver_name ); + if ( !args.driver ) + { + FT_FREE( base ); + return FT_THROW( Missing_Module ); + } + + args.flags = args.flags | FT_OPEN_DRIVER; + } + + /* `memory_stream_close` also frees the stream object. */ + error = new_memory_stream( library, + base, + size, + memory_stream_close, + &args.stream ); + if ( error ) + { + FT_FREE( base ); + return error; + } + + args.flags |= FT_OPEN_STREAM; + +#ifdef FT_MACINTOSH + /* At this point, the face index has served its purpose; */ + /* whoever calls this function has already used it to */ + /* locate the correct font data. We should not propagate */ + /* this index to FT_Open_Face() (unless it is negative). */ + + if ( face_index > 0 ) + face_index &= 0x7FFF0000L; /* retain GX data */ +#endif + + return ft_open_face_internal( library, &args, face_index, aface, 0 ); + } + + + /* Look up `TYP1' or `CID ' table from sfnt table directory. */ + /* `offset' and `length' must exclude the binary header in tables. */ + + /* Type 1 and CID-keyed font drivers should recognize sfnt-wrapped */ + /* format too. Here, since we can't expect that the TrueType font */ + /* driver is loaded unconditionally, we must parse the font by */ + /* ourselves. We are only interested in the name of the table and */ + /* the offset. */ + + static FT_Error + ft_lookup_PS_in_sfnt_stream( FT_Stream stream, + FT_Long face_index, + FT_ULong* offset, + FT_ULong* length, + FT_Bool* is_sfnt_cid ) + { + FT_Error error; + FT_UShort numTables; + FT_Long pstable_index; + FT_ULong tag; + int i; + + + *offset = 0; + *length = 0; + *is_sfnt_cid = FALSE; + + /* TODO: support for sfnt-wrapped PS/CID in TTC format */ + + /* version check for 'typ1' (should be ignored?) */ + if ( FT_READ_ULONG( tag ) ) + return error; + if ( tag != TTAG_typ1 ) + return FT_THROW( Unknown_File_Format ); + + if ( FT_READ_USHORT( numTables ) ) + return error; + if ( FT_STREAM_SKIP( 2 * 3 ) ) /* skip binary search header */ + return error; + + pstable_index = -1; + *is_sfnt_cid = FALSE; + + for ( i = 0; i < numTables; i++ ) + { + if ( FT_READ_ULONG( tag ) || FT_STREAM_SKIP( 4 ) || + FT_READ_ULONG( *offset ) || FT_READ_ULONG( *length ) ) + return error; + + if ( tag == TTAG_CID ) + { + pstable_index++; + *offset += 22; + *length -= 22; + *is_sfnt_cid = TRUE; + if ( face_index < 0 ) + return FT_Err_Ok; + } + else if ( tag == TTAG_TYP1 ) + { + pstable_index++; + *offset += 24; + *length -= 24; + *is_sfnt_cid = FALSE; + if ( face_index < 0 ) + return FT_Err_Ok; + } + if ( face_index >= 0 && pstable_index == face_index ) + return FT_Err_Ok; + } + + return FT_THROW( Table_Missing ); + } + + + FT_LOCAL_DEF( FT_Error ) + open_face_PS_from_sfnt_stream( FT_Library library, + FT_Stream stream, + FT_Long face_index, + FT_Int num_params, + FT_Parameter *params, + FT_Face *aface ) + { + FT_Error error; + FT_Memory memory = library->memory; + FT_ULong offset, length; + FT_ULong pos; + FT_Bool is_sfnt_cid; + FT_Byte* sfnt_ps = NULL; + + FT_UNUSED( num_params ); + FT_UNUSED( params ); + + + /* ignore GX stuff */ + if ( face_index > 0 ) + face_index &= 0xFFFFL; + + pos = FT_STREAM_POS(); + + error = ft_lookup_PS_in_sfnt_stream( stream, + face_index, + &offset, + &length, + &is_sfnt_cid ); + if ( error ) + goto Exit; + + if ( offset > stream->size ) + { + FT_TRACE2(( "open_face_PS_from_sfnt_stream: invalid table offset\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + else if ( length > stream->size - offset ) + { + FT_TRACE2(( "open_face_PS_from_sfnt_stream: invalid table length\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + error = FT_Stream_Seek( stream, pos + offset ); + if ( error ) + goto Exit; + + if ( FT_QALLOC( sfnt_ps, (FT_Long)length ) ) + goto Exit; + + error = FT_Stream_Read( stream, (FT_Byte *)sfnt_ps, length ); + if ( error ) + { + FT_FREE( sfnt_ps ); + goto Exit; + } + + error = open_face_from_buffer( library, + sfnt_ps, + length, + FT_MIN( face_index, 0 ), + is_sfnt_cid ? "t1cid" : "type1", + aface ); + Exit: + { + FT_Error error1; + + + if ( FT_ERR_EQ( error, Unknown_File_Format ) ) + { + error1 = FT_Stream_Seek( stream, pos ); + if ( error1 ) + return error1; + } + + return error; + } + } + + +#ifndef FT_MACINTOSH + + /* The resource header says we've got resource_cnt `POST' (type1) */ + /* resources in this file. They all need to be coalesced into */ + /* one lump which gets passed on to the type1 driver. */ + /* Here can be only one PostScript font in a file so face_index */ + /* must be 0 (or -1). */ + /* */ + static FT_Error + Mac_Read_POST_Resource( FT_Library library, + FT_Stream stream, + FT_Long *offsets, + FT_Long resource_cnt, + FT_Long face_index, + FT_Face *aface ) + { + FT_Error error = FT_ERR( Cannot_Open_Resource ); + FT_Memory memory = library->memory; + + FT_Byte* pfb_data = NULL; + int i, type, flags; + FT_ULong len; + FT_ULong pfb_len, pfb_pos, pfb_lenpos; + FT_ULong rlen, temp; + + + if ( face_index == -1 ) + face_index = 0; + if ( face_index != 0 ) + return error; + + /* Find the length of all the POST resources, concatenated. Assume */ + /* worst case (each resource in its own section). */ + pfb_len = 0; + for ( i = 0; i < resource_cnt; i++ ) + { + error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] ); + if ( error ) + goto Exit; + if ( FT_READ_ULONG( temp ) ) /* actually LONG */ + goto Exit; + + /* FT2 allocator takes signed long buffer length, + * too large value causing overflow should be checked + */ + FT_TRACE4(( " POST fragment #%d: length=0x%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%08lx\n", + FT_MAC_RFORK_MAX_LEN )); + + error = FT_THROW( Invalid_Offset ); + goto Exit; + } + + pfb_len += temp + 6; + } + + FT_TRACE2(( " total buffer size to concatenate" + " %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%08lx\n", + pfb_len )); + + error = FT_THROW( Array_Too_Large ); + goto Exit; + } + + if ( FT_QALLOC( pfb_data, (FT_Long)pfb_len + 2 ) ) + goto Exit; + + pfb_data[0] = 0x80; + pfb_data[1] = 1; /* Ascii section */ + pfb_data[2] = 0; /* 4-byte length, fill in later */ + pfb_data[3] = 0; + pfb_data[4] = 0; + pfb_data[5] = 0; + pfb_pos = 6; + pfb_lenpos = 2; + + len = 0; + type = 1; + + for ( i = 0; i < resource_cnt; i++ ) + { + error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] ); + if ( error ) + goto Exit2; + if ( FT_READ_ULONG( rlen ) ) + goto Exit2; + + /* FT2 allocator takes signed long buffer length, + * too large fragment length causing overflow should be checked + */ + if ( 0x7FFFFFFFUL < rlen ) + { + error = FT_THROW( Invalid_Offset ); + goto Exit2; + } + + if ( FT_READ_USHORT( flags ) ) + goto Exit2; + + FT_TRACE3(( "POST fragment[%d]:" + " offsets=0x%08lx, rlen=0x%08lx, flags=0x%04x\n", + i, offsets[i], rlen, flags )); + + error = FT_ERR( Array_Too_Large ); + + /* postpone the check of `rlen longer than buffer' */ + /* until `FT_Stream_Read' */ + + if ( ( flags >> 8 ) == 0 ) /* Comment, should not be loaded */ + { + FT_TRACE3(( " Skip POST fragment #%d because it is a comment\n", + i )); + continue; + } + + /* the flags are part of the resource, so rlen >= 2, */ + /* but some fonts declare rlen = 0 for empty fragment */ + if ( rlen > 2 ) + rlen -= 2; + else + rlen = 0; + + if ( ( flags >> 8 ) == type ) + len += rlen; + else + { + FT_TRACE3(( " Write POST fragment #%d header (4-byte) to buffer" + " %p + 0x%08lx\n", + i, (void*)pfb_data, pfb_lenpos )); + + if ( pfb_lenpos + 3 > pfb_len + 2 ) + goto Exit2; + + pfb_data[pfb_lenpos ] = (FT_Byte)( len ); + pfb_data[pfb_lenpos + 1] = (FT_Byte)( len >> 8 ); + pfb_data[pfb_lenpos + 2] = (FT_Byte)( len >> 16 ); + pfb_data[pfb_lenpos + 3] = (FT_Byte)( len >> 24 ); + + if ( ( flags >> 8 ) == 5 ) /* End of font mark */ + break; + + FT_TRACE3(( " Write POST fragment #%d header (6-byte) to buffer" + " %p + 0x%08lx\n", + i, (void*)pfb_data, pfb_pos )); + + if ( pfb_pos + 6 > pfb_len + 2 ) + goto Exit2; + + pfb_data[pfb_pos++] = 0x80; + + type = flags >> 8; + len = rlen; + + pfb_data[pfb_pos++] = (FT_Byte)type; + pfb_lenpos = pfb_pos; + pfb_data[pfb_pos++] = 0; /* 4-byte length, fill in later */ + pfb_data[pfb_pos++] = 0; + pfb_data[pfb_pos++] = 0; + pfb_data[pfb_pos++] = 0; + } + + if ( pfb_pos > pfb_len || pfb_pos + rlen > pfb_len ) + goto Exit2; + + FT_TRACE3(( " Load POST fragment #%d (%ld byte) to buffer" + " %p + 0x%08lx\n", + i, rlen, (void*)pfb_data, pfb_pos )); + + error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen ); + if ( error ) + goto Exit2; + + pfb_pos += rlen; + } + + error = FT_ERR( Array_Too_Large ); + + if ( pfb_pos + 2 > pfb_len + 2 ) + goto Exit2; + pfb_data[pfb_pos++] = 0x80; + pfb_data[pfb_pos++] = 3; + + if ( pfb_lenpos + 3 > pfb_len + 2 ) + goto Exit2; + pfb_data[pfb_lenpos ] = (FT_Byte)( len ); + pfb_data[pfb_lenpos + 1] = (FT_Byte)( len >> 8 ); + pfb_data[pfb_lenpos + 2] = (FT_Byte)( len >> 16 ); + pfb_data[pfb_lenpos + 3] = (FT_Byte)( len >> 24 ); + + return open_face_from_buffer( library, + pfb_data, + pfb_pos, + face_index, + "type1", + aface ); + + Exit2: + if ( FT_ERR_EQ( error, Array_Too_Large ) ) + FT_TRACE2(( " Abort due to too-short buffer to store" + " all POST fragments\n" )); + else if ( FT_ERR_EQ( error, Invalid_Offset ) ) + FT_TRACE2(( " Abort due to invalid offset in a POST fragment\n" )); + + if ( error ) + error = FT_ERR( Cannot_Open_Resource ); + FT_FREE( pfb_data ); + + Exit: + return error; + } + + + /* The resource header says we've got resource_cnt `sfnt' */ + /* (TrueType/OpenType) resources in this file. Look through */ + /* them for the one indicated by face_index, load it into mem, */ + /* pass it on to the truetype driver, and return it. */ + /* */ + static FT_Error + Mac_Read_sfnt_Resource( FT_Library library, + FT_Stream stream, + FT_Long *offsets, + FT_Long resource_cnt, + FT_Long face_index, + FT_Face *aface ) + { + FT_Memory memory = library->memory; + FT_Byte* sfnt_data = NULL; + FT_Error error; + FT_ULong flag_offset; + FT_ULong rlen; + int is_cff; + FT_Long face_index_in_resource = 0; + + + if ( face_index < 0 ) + face_index = -face_index - 1; + if ( face_index >= resource_cnt ) + return FT_THROW( Cannot_Open_Resource ); + + flag_offset = (FT_ULong)offsets[face_index]; + error = FT_Stream_Seek( stream, flag_offset ); + if ( error ) + goto Exit; + + if ( FT_READ_ULONG( rlen ) ) + goto Exit; + if ( !rlen ) + return FT_THROW( Cannot_Open_Resource ); + if ( rlen > FT_MAC_RFORK_MAX_LEN ) + return FT_THROW( Invalid_Offset ); + + error = open_face_PS_from_sfnt_stream( library, + stream, + face_index, + 0, NULL, + aface ); + if ( !error ) + goto Exit; + + /* rewind sfnt stream before open_face_PS_from_sfnt_stream() */ + error = FT_Stream_Seek( stream, flag_offset + 4 ); + if ( error ) + goto Exit; + + if ( FT_QALLOC( sfnt_data, rlen ) ) + return error; + error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, rlen ); + if ( error ) + { + FT_FREE( sfnt_data ); + goto Exit; + } + + is_cff = rlen > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 ); + error = open_face_from_buffer( library, + sfnt_data, + rlen, + face_index_in_resource, + is_cff ? "cff" : "truetype", + aface ); + + Exit: + return error; + } + + + /* Check for a valid resource fork header, or a valid dfont */ + /* header. In a resource fork the first 16 bytes are repeated */ + /* at the location specified by bytes 4-7. In a dfont bytes */ + /* 4-7 point to 16 bytes of zeroes instead. */ + /* */ + static FT_Error + IsMacResource( FT_Library library, + FT_Stream stream, + FT_Long resource_offset, + FT_Long face_index, + FT_Face *aface ) + { + FT_Memory memory = library->memory; + FT_Error error; + FT_Long map_offset, rdata_pos; + FT_Long *data_offsets; + FT_Long count; + + + error = FT_Raccess_Get_HeaderInfo( library, stream, resource_offset, + &map_offset, &rdata_pos ); + if ( error ) + return error; + + /* POST resources must be sorted to concatenate properly */ + error = FT_Raccess_Get_DataOffsets( library, stream, + map_offset, rdata_pos, + TTAG_POST, TRUE, + &data_offsets, &count ); + if ( !error ) + { + error = Mac_Read_POST_Resource( library, stream, data_offsets, count, + face_index, aface ); + FT_FREE( data_offsets ); + /* POST exists in an LWFN providing a single face */ + if ( !error ) + (*aface)->num_faces = 1; + return error; + } + + /* sfnt resources should not be sorted to preserve the face order by + QuickDraw API */ + error = FT_Raccess_Get_DataOffsets( library, stream, + map_offset, rdata_pos, + TTAG_sfnt, FALSE, + &data_offsets, &count ); + if ( !error ) + { + FT_Long face_index_internal = face_index % count; + + + error = Mac_Read_sfnt_Resource( library, stream, data_offsets, count, + face_index_internal, aface ); + FT_FREE( data_offsets ); + if ( !error ) + { + (*aface)->num_faces = count; + (*aface)->face_index = face_index_internal; + } + } + + return error; + } + + + /* Check for a valid macbinary header, and if we find one */ + /* check that the (flattened) resource fork in it is valid. */ + /* */ + static FT_Error + IsMacBinary( FT_Library library, + FT_Stream stream, + FT_Long face_index, + FT_Face *aface ) + { + unsigned char header[128]; + FT_Error error; + FT_Long dlen, offset; + + + if ( !stream ) + return FT_THROW( Invalid_Stream_Operation ); + + error = FT_Stream_Seek( stream, 0 ); + if ( error ) + goto Exit; + + error = FT_Stream_Read( stream, (FT_Byte*)header, 128 ); + if ( error ) + goto Exit; + + if ( header[ 0] != 0 || + header[74] != 0 || + header[82] != 0 || + header[ 1] == 0 || + header[ 1] > 33 || + header[63] != 0 || + header[2 + header[1]] != 0 || + header[0x53] > 0x7F ) + return FT_THROW( Unknown_File_Format ); + + dlen = ( header[0x53] << 24 ) | + ( header[0x54] << 16 ) | + ( header[0x55] << 8 ) | + header[0x56]; +#if 0 + rlen = ( header[0x57] << 24 ) | + ( header[0x58] << 16 ) | + ( header[0x59] << 8 ) | + header[0x5A]; +#endif /* 0 */ + offset = 128 + ( ( dlen + 127 ) & ~127 ); + + return IsMacResource( library, stream, offset, face_index, aface ); + + Exit: + return error; + } + + + static FT_Error + load_face_in_embedded_rfork( FT_Library library, + FT_Stream stream, + FT_Long face_index, + FT_Face *aface, + const FT_Open_Args *args ) + { + +#undef FT_COMPONENT +#define FT_COMPONENT raccess + + FT_Memory memory = library->memory; + FT_Error error = FT_ERR( Unknown_File_Format ); + FT_UInt i; + + char* file_names[FT_RACCESS_N_RULES]; + FT_Long offsets[FT_RACCESS_N_RULES]; + FT_Error errors[FT_RACCESS_N_RULES]; + FT_Bool is_darwin_vfs, vfs_rfork_has_no_font = FALSE; /* not tested */ + + FT_Open_Args args2; + FT_Stream stream2 = NULL; + + + FT_Raccess_Guess( library, stream, + args->pathname, file_names, offsets, errors ); + + for ( i = 0; i < FT_RACCESS_N_RULES; i++ ) + { + is_darwin_vfs = ft_raccess_rule_by_darwin_vfs( library, i ); + if ( is_darwin_vfs && vfs_rfork_has_no_font ) + { + FT_TRACE3(( "Skip rule %d: darwin vfs resource fork" + " is already checked and" + " no font is found\n", + i )); + continue; + } + + if ( errors[i] ) + { + FT_TRACE3(( "Error 0x%x has occurred in rule %d\n", + errors[i], i )); + continue; + } + + args2.flags = FT_OPEN_PATHNAME; + args2.pathname = file_names[i] ? file_names[i] : args->pathname; + + FT_TRACE3(( "Try rule %d: %s (offset=%ld) ...", + i, args2.pathname, offsets[i] )); + + error = FT_Stream_New( library, &args2, &stream2 ); + if ( is_darwin_vfs && FT_ERR_EQ( error, Cannot_Open_Stream ) ) + vfs_rfork_has_no_font = TRUE; + + if ( error ) + { + FT_TRACE3(( "failed\n" )); + continue; + } + + error = IsMacResource( library, stream2, offsets[i], + face_index, aface ); + FT_Stream_Free( stream2, 0 ); + + FT_TRACE3(( "%s\n", error ? "failed": "successful" )); + + if ( !error ) + break; + else if ( is_darwin_vfs ) + vfs_rfork_has_no_font = TRUE; + } + + for (i = 0; i < FT_RACCESS_N_RULES; i++) + { + if ( file_names[i] ) + FT_FREE( file_names[i] ); + } + + /* Caller (load_mac_face) requires FT_Err_Unknown_File_Format. */ + if ( error ) + error = FT_ERR( Unknown_File_Format ); + + return error; + +#undef FT_COMPONENT +#define FT_COMPONENT objs + + } + + + /* Check for some macintosh formats without Carbon framework. */ + /* Is this a macbinary file? If so look at the resource fork. */ + /* Is this a mac dfont file? */ + /* Is this an old style resource fork? (in data) */ + /* Else call load_face_in_embedded_rfork to try extra rules */ + /* (defined in `ftrfork.c'). */ + /* */ + static FT_Error + load_mac_face( FT_Library library, + FT_Stream stream, + FT_Long face_index, + FT_Face *aface, + const FT_Open_Args *args ) + { + FT_Error error; + FT_UNUSED( args ); + + + error = IsMacBinary( library, stream, face_index, aface ); + if ( FT_ERR_EQ( error, Unknown_File_Format ) ) + { + +#undef FT_COMPONENT +#define FT_COMPONENT raccess + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE3(( "Try as dfont: " )); + if ( !( args->flags & FT_OPEN_MEMORY ) ) + FT_TRACE3(( "%s ...", args->pathname )); +#endif + + error = IsMacResource( library, stream, 0, face_index, aface ); + + FT_TRACE3(( "%s\n", error ? "failed" : "successful" )); + +#undef FT_COMPONENT +#define FT_COMPONENT objs + + } + + if ( ( FT_ERR_EQ( error, Unknown_File_Format ) || + FT_ERR_EQ( error, Invalid_Stream_Operation ) ) && + ( args->flags & FT_OPEN_PATHNAME ) ) + error = load_face_in_embedded_rfork( library, stream, + face_index, aface, args ); + return error; + } +#endif + +#endif /* !FT_MACINTOSH && FT_CONFIG_OPTION_MAC_FONTS */ + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Open_Face( FT_Library library, + const FT_Open_Args* args, + FT_Long face_index, + FT_Face *aface ) + { + return ft_open_face_internal( library, args, face_index, aface, 1 ); + } + + + static FT_Error + ft_open_face_internal( FT_Library library, + const FT_Open_Args* args, + FT_Long face_index, + FT_Face *aface, + FT_Bool test_mac_fonts ) + { + FT_Error error; + FT_Driver driver = NULL; + FT_Memory memory = NULL; + FT_Stream stream = NULL; + FT_Face face = NULL; + FT_ListNode node = NULL; + FT_Bool external_stream; + FT_Module* cur; + FT_Module* limit; + +#ifndef FT_CONFIG_OPTION_MAC_FONTS + FT_UNUSED( test_mac_fonts ); +#endif + + + /* only use lower 31 bits together with sign bit */ + if ( face_index > 0 ) + face_index &= 0x7FFFFFFFL; + else + { + face_index = -face_index; + face_index &= 0x7FFFFFFFL; + face_index = -face_index; + } + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE3(( "FT_Open_Face: " )); + if ( face_index < 0 ) + FT_TRACE3(( "Requesting number of faces and named instances\n")); + else + { + FT_TRACE3(( "Requesting face %ld", face_index & 0xFFFFL )); + if ( face_index & 0x7FFF0000L ) + FT_TRACE3(( ", named instance %ld", face_index >> 16 )); + FT_TRACE3(( "\n" )); + } +#endif + + /* test for valid `library' delayed to `FT_Stream_New' */ + + if ( !args ) + return FT_THROW( Invalid_Argument ); + + external_stream = FT_BOOL( ( args->flags & FT_OPEN_STREAM ) && + args->stream ); + + /* create input stream */ + error = FT_Stream_New( library, args, &stream ); + if ( error ) + goto Fail3; + + /* Do this error check after `FT_Stream_New` to ensure that the */ + /* 'close' callback is called. */ + if ( !aface && face_index >= 0 ) + { + error = FT_THROW( Invalid_Argument ); + goto Fail3; + } + + memory = library->memory; + + /* If the font driver is specified in the `args' structure, use */ + /* it. Otherwise, we scan the list of registered drivers. */ + if ( ( args->flags & FT_OPEN_DRIVER ) && args->driver ) + { + driver = FT_DRIVER( args->driver ); + + /* not all modules are drivers, so check... */ + if ( FT_MODULE_IS_DRIVER( driver ) ) + { + FT_Int num_params = 0; + FT_Parameter* params = NULL; + + + if ( args->flags & FT_OPEN_PARAMS ) + { + num_params = args->num_params; + params = args->params; + } + + error = open_face( driver, &stream, &external_stream, face_index, + num_params, params, &face ); + if ( !error ) + goto Success; + } + else + error = FT_THROW( Invalid_Handle ); + + FT_Stream_Free( stream, external_stream ); + goto Fail; + } + else + { + error = FT_ERR( Missing_Module ); + + /* check each font driver for an appropriate format */ + cur = library->modules; + limit = cur + library->num_modules; + + for ( ; cur < limit; cur++ ) + { + /* not all modules are font drivers, so check... */ + if ( FT_MODULE_IS_DRIVER( cur[0] ) ) + { + FT_Int num_params = 0; + FT_Parameter* params = NULL; + + + driver = FT_DRIVER( cur[0] ); + + if ( args->flags & FT_OPEN_PARAMS ) + { + num_params = args->num_params; + params = args->params; + } + + error = open_face( driver, &stream, &external_stream, face_index, + num_params, params, &face ); + if ( !error ) + goto Success; + +#ifdef FT_CONFIG_OPTION_MAC_FONTS + if ( test_mac_fonts && + ft_strcmp( cur[0]->clazz->module_name, "truetype" ) == 0 && + FT_ERR_EQ( error, Table_Missing ) ) + { + /* TrueType but essential tables are missing */ + error = FT_Stream_Seek( stream, 0 ); + if ( error ) + break; + + error = open_face_PS_from_sfnt_stream( library, + stream, + face_index, + num_params, + params, + aface ); + if ( !error ) + { + FT_Stream_Free( stream, external_stream ); + return error; + } + } +#endif + + if ( FT_ERR_NEQ( error, Unknown_File_Format ) ) + goto Fail3; + } + } + + Fail3: + /* If we are on the mac, and we get an */ + /* FT_Err_Invalid_Stream_Operation it may be because we have an */ + /* empty data fork, so we need to check the resource fork. */ + if ( FT_ERR_NEQ( error, Cannot_Open_Stream ) && + FT_ERR_NEQ( error, Unknown_File_Format ) && + FT_ERR_NEQ( error, Invalid_Stream_Operation ) ) + goto Fail2; + +#if !defined( FT_MACINTOSH ) && defined( FT_CONFIG_OPTION_MAC_FONTS ) + if ( test_mac_fonts ) + { + error = load_mac_face( library, stream, face_index, aface, args ); + if ( !error ) + { + /* We don't want to go to Success here. We've already done */ + /* that. On the other hand, if we succeeded we still need to */ + /* close this stream (we opened a different stream which */ + /* extracted the interesting information out of this stream */ + /* here. That stream will still be open and the face will */ + /* point to it). */ + FT_Stream_Free( stream, external_stream ); + return error; + } + } + + if ( FT_ERR_NEQ( error, Unknown_File_Format ) ) + goto Fail2; +#endif /* !FT_MACINTOSH && FT_CONFIG_OPTION_MAC_FONTS */ + + /* no driver is able to handle this format */ + error = FT_THROW( Unknown_File_Format ); + + Fail2: + FT_Stream_Free( stream, external_stream ); + goto Fail; + } + + Success: + FT_TRACE4(( "FT_Open_Face: New face object, adding to list\n" )); + + /* add the face object to its driver's list */ + if ( FT_QNEW( node ) ) + goto Fail; + + node->data = face; + /* don't assume driver is the same as face->driver, so use */ + /* face->driver instead. */ + FT_List_Add( &face->driver->faces_list, node ); + + /* now allocate a glyph slot object for the face */ + FT_TRACE4(( "FT_Open_Face: Creating glyph slot\n" )); + + if ( face_index >= 0 ) + { + error = FT_New_GlyphSlot( face, NULL ); + if ( error ) + goto Fail; + + /* finally, allocate a size object for the face */ + { + FT_Size size; + + + FT_TRACE4(( "FT_Open_Face: Creating size object\n" )); + + error = FT_New_Size( face, &size ); + if ( error ) + goto Fail; + + face->size = size; + } + } + + /* some checks */ + + if ( FT_IS_SCALABLE( face ) ) + { + if ( face->height < 0 ) + face->height = (FT_Short)-face->height; + + if ( !FT_HAS_VERTICAL( face ) ) + face->max_advance_height = (FT_Short)face->height; + } + + if ( FT_HAS_FIXED_SIZES( face ) ) + { + FT_Int i; + + + for ( i = 0; i < face->num_fixed_sizes; i++ ) + { + FT_Bitmap_Size* bsize = face->available_sizes + i; + + + if ( bsize->height < 0 ) + bsize->height = -bsize->height; + if ( bsize->x_ppem < 0 ) + bsize->x_ppem = -bsize->x_ppem; + if ( bsize->y_ppem < 0 ) + bsize->y_ppem = -bsize->y_ppem; + + /* check whether negation actually has worked */ + if ( bsize->height < 0 || bsize->x_ppem < 0 || bsize->y_ppem < 0 ) + { + FT_TRACE0(( "FT_Open_Face:" + " Invalid bitmap dimensions for strike %d," + " now disabled\n", i )); + bsize->width = 0; + bsize->height = 0; + bsize->size = 0; + bsize->x_ppem = 0; + bsize->y_ppem = 0; + } + } + } + + /* initialize internal face data */ + { + FT_Face_Internal internal = face->internal; + + + internal->transform_matrix.xx = 0x10000L; + internal->transform_matrix.xy = 0; + internal->transform_matrix.yx = 0; + internal->transform_matrix.yy = 0x10000L; + + internal->transform_delta.x = 0; + internal->transform_delta.y = 0; + + internal->refcount = 1; + + internal->no_stem_darkening = -1; + +#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + /* Per-face filtering can only be set up by FT_Face_Properties */ + internal->lcd_filter_func = NULL; +#endif + } + + if ( aface ) + *aface = face; + else + FT_Done_Face( face ); + + goto Exit; + + Fail: + if ( node ) + FT_Done_Face( face ); /* face must be in the driver's list */ + else if ( face ) + destroy_face( memory, face, driver ); + + Exit: +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !error && face_index < 0 ) + { + FT_TRACE3(( "FT_Open_Face: The font has %ld face%s\n", + face->num_faces, + face->num_faces == 1 ? "" : "s" )); + FT_TRACE3(( " and %ld named instance%s for face %ld\n", + face->style_flags >> 16, + ( face->style_flags >> 16 ) == 1 ? "" : "s", + -face_index - 1 )); + } +#endif + + FT_TRACE4(( "FT_Open_Face: Return 0x%x\n", error )); + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Attach_File( FT_Face face, + const char* filepathname ) + { + FT_Open_Args open; + + + /* test for valid `face' delayed to `FT_Attach_Stream' */ + + if ( !filepathname ) + return FT_THROW( Invalid_Argument ); + + open.stream = NULL; + open.flags = FT_OPEN_PATHNAME; + open.pathname = (char*)filepathname; + + return FT_Attach_Stream( face, &open ); + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Attach_Stream( FT_Face face, + const FT_Open_Args* parameters ) + { + FT_Stream stream; + FT_Error error; + FT_Driver driver; + + FT_Driver_Class clazz; + + + /* test for valid `parameters' delayed to `FT_Stream_New' */ + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + driver = face->driver; + if ( !driver ) + return FT_THROW( Invalid_Driver_Handle ); + + error = FT_Stream_New( driver->root.library, parameters, &stream ); + if ( error ) + goto Exit; + + /* we implement FT_Attach_Stream in each driver through the */ + /* `attach_file' interface */ + + error = FT_ERR( Unimplemented_Feature ); + clazz = driver->clazz; + if ( clazz->attach_file ) + error = clazz->attach_file( face, stream ); + + /* close the attached stream */ + FT_Stream_Free( stream, + FT_BOOL( parameters->stream && + ( parameters->flags & FT_OPEN_STREAM ) ) ); + + Exit: + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Reference_Face( FT_Face face ) + { + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + face->internal->refcount++; + + return FT_Err_Ok; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Done_Face( FT_Face face ) + { + FT_Error error; + FT_Driver driver; + FT_Memory memory; + FT_ListNode node; + + + error = FT_ERR( Invalid_Face_Handle ); + if ( face && face->driver ) + { + face->internal->refcount--; + if ( face->internal->refcount > 0 ) + error = FT_Err_Ok; + else + { + driver = face->driver; + memory = driver->root.memory; + + /* find face in driver's list */ + node = FT_List_Find( &driver->faces_list, face ); + if ( node ) + { + /* remove face object from the driver's list */ + FT_List_Remove( &driver->faces_list, node ); + FT_FREE( node ); + + /* now destroy the object proper */ + destroy_face( memory, face, driver ); + error = FT_Err_Ok; + } + } + } + + return error; + } + + + /* documentation is in ftobjs.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_New_Size( FT_Face face, + FT_Size *asize ) + { + FT_Error error; + FT_Memory memory; + FT_Driver driver; + FT_Driver_Class clazz; + + FT_Size size = NULL; + FT_ListNode node = NULL; + + FT_Size_Internal internal = NULL; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !asize ) + return FT_THROW( Invalid_Argument ); + + if ( !face->driver ) + return FT_THROW( Invalid_Driver_Handle ); + + *asize = NULL; + + driver = face->driver; + clazz = driver->clazz; + memory = face->memory; + + /* Allocate new size object and perform basic initialisation */ + if ( FT_ALLOC( size, clazz->size_object_size ) || FT_QNEW( node ) ) + goto Exit; + + size->face = face; + + if ( FT_NEW( internal ) ) + goto Exit; + + size->internal = internal; + + if ( clazz->init_size ) + error = clazz->init_size( size ); + + /* in case of success, add to the face's list */ + if ( !error ) + { + *asize = size; + node->data = size; + FT_List_Add( &face->sizes_list, node ); + } + + Exit: + if ( error ) + { + FT_FREE( node ); + if ( size ) + FT_FREE( size->internal ); + FT_FREE( size ); + } + + return error; + } + + + /* documentation is in ftobjs.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Done_Size( FT_Size size ) + { + FT_Error error; + FT_Driver driver; + FT_Memory memory; + FT_Face face; + FT_ListNode node; + + + if ( !size ) + return FT_THROW( Invalid_Size_Handle ); + + face = size->face; + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + driver = face->driver; + if ( !driver ) + return FT_THROW( Invalid_Driver_Handle ); + + memory = driver->root.memory; + + error = FT_Err_Ok; + node = FT_List_Find( &face->sizes_list, size ); + if ( node ) + { + FT_List_Remove( &face->sizes_list, node ); + FT_FREE( node ); + + if ( face->size == size ) + { + face->size = NULL; + if ( face->sizes_list.head ) + face->size = (FT_Size)(face->sizes_list.head->data); + } + + destroy_size( memory, size, driver ); + } + else + error = FT_THROW( Invalid_Size_Handle ); + + return error; + } + + + /* documentation is in ftobjs.h */ + + FT_BASE_DEF( FT_Error ) + FT_Match_Size( FT_Face face, + FT_Size_Request req, + FT_Bool ignore_width, + FT_ULong* size_index ) + { + FT_Int i; + FT_Long w, h; + + + if ( !FT_HAS_FIXED_SIZES( face ) ) + return FT_THROW( Invalid_Face_Handle ); + + /* FT_Bitmap_Size doesn't provide enough info... */ + if ( req->type != FT_SIZE_REQUEST_TYPE_NOMINAL ) + return FT_THROW( Unimplemented_Feature ); + + w = FT_REQUEST_WIDTH ( req ); + h = FT_REQUEST_HEIGHT( req ); + + if ( req->width && !req->height ) + h = w; + else if ( !req->width && req->height ) + w = h; + + w = FT_PIX_ROUND( w ); + h = FT_PIX_ROUND( h ); + + if ( !w || !h ) + return FT_THROW( Invalid_Pixel_Size ); + + for ( i = 0; i < face->num_fixed_sizes; i++ ) + { + FT_Bitmap_Size* bsize = face->available_sizes + i; + + + if ( h != FT_PIX_ROUND( bsize->y_ppem ) ) + continue; + + if ( w == FT_PIX_ROUND( bsize->x_ppem ) || ignore_width ) + { + FT_TRACE3(( "FT_Match_Size: bitmap strike %d matches\n", i )); + + if ( size_index ) + *size_index = (FT_ULong)i; + + return FT_Err_Ok; + } + } + + FT_TRACE3(( "FT_Match_Size: no matching bitmap strike\n" )); + + return FT_THROW( Invalid_Pixel_Size ); + } + + + /* documentation is in ftobjs.h */ + + FT_BASE_DEF( void ) + ft_synthesize_vertical_metrics( FT_Glyph_Metrics* metrics, + FT_Pos advance ) + { + FT_Pos height = metrics->height; + + + /* compensate for glyph with bbox above/below the baseline */ + if ( metrics->horiBearingY < 0 ) + { + if ( height < metrics->horiBearingY ) + height = metrics->horiBearingY; + } + else if ( metrics->horiBearingY > 0 ) + height -= metrics->horiBearingY; + + /* the factor 1.2 is a heuristical value */ + if ( !advance ) + advance = height * 12 / 10; + + metrics->vertBearingX = metrics->horiBearingX - metrics->horiAdvance / 2; + metrics->vertBearingY = ( advance - height ) / 2; + metrics->vertAdvance = advance; + } + + + static void + ft_recompute_scaled_metrics( FT_Face face, + FT_Size_Metrics* metrics ) + { + /* Compute root ascender, descender, test height, and max_advance */ + +#ifdef GRID_FIT_METRICS + metrics->ascender = FT_PIX_CEIL( FT_MulFix( face->ascender, + metrics->y_scale ) ); + + metrics->descender = FT_PIX_FLOOR( FT_MulFix( face->descender, + metrics->y_scale ) ); + + metrics->height = FT_PIX_ROUND( FT_MulFix( face->height, + metrics->y_scale ) ); + + metrics->max_advance = FT_PIX_ROUND( FT_MulFix( face->max_advance_width, + metrics->x_scale ) ); +#else /* !GRID_FIT_METRICS */ + metrics->ascender = FT_MulFix( face->ascender, + metrics->y_scale ); + + metrics->descender = FT_MulFix( face->descender, + metrics->y_scale ); + + metrics->height = FT_MulFix( face->height, + metrics->y_scale ); + + metrics->max_advance = FT_MulFix( face->max_advance_width, + metrics->x_scale ); +#endif /* !GRID_FIT_METRICS */ + } + + + FT_BASE_DEF( void ) + FT_Select_Metrics( FT_Face face, + FT_ULong strike_index ) + { + FT_Size_Metrics* metrics; + FT_Bitmap_Size* bsize; + + + metrics = &face->size->metrics; + bsize = face->available_sizes + strike_index; + + metrics->x_ppem = (FT_UShort)( ( bsize->x_ppem + 32 ) >> 6 ); + metrics->y_ppem = (FT_UShort)( ( bsize->y_ppem + 32 ) >> 6 ); + + if ( FT_IS_SCALABLE( face ) ) + { + metrics->x_scale = FT_DivFix( bsize->x_ppem, + face->units_per_EM ); + metrics->y_scale = FT_DivFix( bsize->y_ppem, + face->units_per_EM ); + + ft_recompute_scaled_metrics( face, metrics ); + } + else + { + metrics->x_scale = 1L << 16; + metrics->y_scale = 1L << 16; + metrics->ascender = bsize->y_ppem; + metrics->descender = 0; + metrics->height = bsize->height << 6; + metrics->max_advance = bsize->x_ppem; + } + } + + + FT_BASE_DEF( FT_Error ) + FT_Request_Metrics( FT_Face face, + FT_Size_Request req ) + { + FT_Error error = FT_Err_Ok; + + FT_Size_Metrics* metrics; + + + metrics = &face->size->metrics; + + if ( FT_IS_SCALABLE( face ) ) + { + FT_Long w = 0, h = 0, scaled_w = 0, scaled_h = 0; + + + switch ( req->type ) + { + case FT_SIZE_REQUEST_TYPE_NOMINAL: + w = h = face->units_per_EM; + break; + + case FT_SIZE_REQUEST_TYPE_REAL_DIM: + w = h = face->ascender - face->descender; + break; + + case FT_SIZE_REQUEST_TYPE_BBOX: + w = face->bbox.xMax - face->bbox.xMin; + h = face->bbox.yMax - face->bbox.yMin; + break; + + case FT_SIZE_REQUEST_TYPE_CELL: + w = face->max_advance_width; + h = face->ascender - face->descender; + break; + + case FT_SIZE_REQUEST_TYPE_SCALES: + metrics->x_scale = (FT_Fixed)req->width; + metrics->y_scale = (FT_Fixed)req->height; + if ( !metrics->x_scale ) + metrics->x_scale = metrics->y_scale; + else if ( !metrics->y_scale ) + metrics->y_scale = metrics->x_scale; + goto Calculate_Ppem; + + case FT_SIZE_REQUEST_TYPE_MAX: + break; + } + + /* to be on the safe side */ + if ( w < 0 ) + w = -w; + + if ( h < 0 ) + h = -h; + + scaled_w = FT_REQUEST_WIDTH ( req ); + scaled_h = FT_REQUEST_HEIGHT( req ); + + /* determine scales */ + if ( req->height || !req->width ) + { + if ( h == 0 ) + { + FT_ERROR(( "FT_Request_Metrics: Divide by zero\n" )); + error = FT_ERR( Divide_By_Zero ); + goto Exit; + } + + metrics->y_scale = FT_DivFix( scaled_h, h ); + } + + if ( req->width ) + { + if ( w == 0 ) + { + FT_ERROR(( "FT_Request_Metrics: Divide by zero\n" )); + error = FT_ERR( Divide_By_Zero ); + goto Exit; + } + + metrics->x_scale = FT_DivFix( scaled_w, w ); + } + else + { + metrics->x_scale = metrics->y_scale; + scaled_w = FT_MulDiv( scaled_h, w, h ); + } + + if ( !req->height ) + { + metrics->y_scale = metrics->x_scale; + scaled_h = FT_MulDiv( scaled_w, h, w ); + } + + if ( req->type == FT_SIZE_REQUEST_TYPE_CELL ) + { + if ( metrics->y_scale > metrics->x_scale ) + metrics->y_scale = metrics->x_scale; + else + metrics->x_scale = metrics->y_scale; + } + + Calculate_Ppem: + /* calculate the ppems */ + if ( req->type != FT_SIZE_REQUEST_TYPE_NOMINAL ) + { + scaled_w = FT_MulFix( face->units_per_EM, metrics->x_scale ); + scaled_h = FT_MulFix( face->units_per_EM, metrics->y_scale ); + } + + scaled_w = ( scaled_w + 32 ) >> 6; + scaled_h = ( scaled_h + 32 ) >> 6; + if ( scaled_w > (FT_Long)FT_USHORT_MAX || + scaled_h > (FT_Long)FT_USHORT_MAX ) + { + FT_ERROR(( "FT_Request_Metrics: Resulting ppem size too large\n" )); + error = FT_ERR( Invalid_Pixel_Size ); + goto Exit; + } + + metrics->x_ppem = (FT_UShort)scaled_w; + metrics->y_ppem = (FT_UShort)scaled_h; + + ft_recompute_scaled_metrics( face, metrics ); + } + else + { + FT_ZERO( metrics ); + metrics->x_scale = 1L << 16; + metrics->y_scale = 1L << 16; + } + + Exit: + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Select_Size( FT_Face face, + FT_Int strike_index ) + { + FT_Error error = FT_Err_Ok; + FT_Driver_Class clazz; + + + if ( !face || !FT_HAS_FIXED_SIZES( face ) ) + return FT_THROW( Invalid_Face_Handle ); + + if ( strike_index < 0 || strike_index >= face->num_fixed_sizes ) + return FT_THROW( Invalid_Argument ); + + clazz = face->driver->clazz; + + if ( clazz->select_size ) + { + error = clazz->select_size( face->size, (FT_ULong)strike_index ); + + FT_TRACE5(( "FT_Select_Size (%s driver):\n", + face->driver->root.clazz->module_name )); + } + else + { + FT_Select_Metrics( face, (FT_ULong)strike_index ); + + FT_TRACE5(( "FT_Select_Size:\n" )); + } + +#ifdef FT_DEBUG_LEVEL_TRACE + { + FT_Size_Metrics* metrics = &face->size->metrics; + + + FT_TRACE5(( " x scale: %ld (%f)\n", + metrics->x_scale, (double)metrics->x_scale / 65536 )); + FT_TRACE5(( " y scale: %ld (%f)\n", + metrics->y_scale, (double)metrics->y_scale / 65536 )); + FT_TRACE5(( " ascender: %f\n", + (double)metrics->ascender / 64 )); + FT_TRACE5(( " descender: %f\n", + (double)metrics->descender / 64 )); + FT_TRACE5(( " height: %f\n", + (double)metrics->height / 64 )); + FT_TRACE5(( " max advance: %f\n", + (double)metrics->max_advance / 64 )); + FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem )); + FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem )); + } +#endif + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Request_Size( FT_Face face, + FT_Size_Request req ) + { + FT_Error error; + FT_Driver_Class clazz; + FT_ULong strike_index; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !face->size ) + return FT_THROW( Invalid_Size_Handle ); + + if ( !req || req->width < 0 || req->height < 0 || + req->type >= FT_SIZE_REQUEST_TYPE_MAX ) + return FT_THROW( Invalid_Argument ); + + /* signal the auto-hinter to recompute its size metrics */ + /* (if requested) */ + face->size->internal->autohint_metrics.x_scale = 0; + + clazz = face->driver->clazz; + + if ( clazz->request_size ) + { + error = clazz->request_size( face->size, req ); + + FT_TRACE5(( "FT_Request_Size (%s driver):\n", + face->driver->root.clazz->module_name )); + } + else if ( !FT_IS_SCALABLE( face ) && FT_HAS_FIXED_SIZES( face ) ) + { + /* + * The reason that a driver doesn't have `request_size' defined is + * either that the scaling here suffices or that the supported formats + * are bitmap-only and size matching is not implemented. + * + * In the latter case, a simple size matching is done. + */ + error = FT_Match_Size( face, req, 0, &strike_index ); + if ( error ) + goto Exit; + + return FT_Select_Size( face, (FT_Int)strike_index ); + } + else + { + error = FT_Request_Metrics( face, req ); + if ( error ) + goto Exit; + + FT_TRACE5(( "FT_Request_Size:\n" )); + } + +#ifdef FT_DEBUG_LEVEL_TRACE + { + FT_Size_Metrics* metrics = &face->size->metrics; + + + FT_TRACE5(( " x scale: %ld (%f)\n", + metrics->x_scale, (double)metrics->x_scale / 65536 )); + FT_TRACE5(( " y scale: %ld (%f)\n", + metrics->y_scale, (double)metrics->y_scale / 65536 )); + FT_TRACE5(( " ascender: %f\n", + (double)metrics->ascender / 64 )); + FT_TRACE5(( " descender: %f\n", + (double)metrics->descender / 64 )); + FT_TRACE5(( " height: %f\n", + (double)metrics->height / 64 )); + FT_TRACE5(( " max advance: %f\n", + (double)metrics->max_advance / 64 )); + FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem )); + FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem )); + } +#endif + + Exit: + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Set_Char_Size( FT_Face face, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ) + { + FT_Size_RequestRec req; + + + /* check of `face' delayed to `FT_Request_Size' */ + + if ( !char_width ) + char_width = char_height; + else if ( !char_height ) + char_height = char_width; + + if ( !horz_resolution ) + horz_resolution = vert_resolution; + else if ( !vert_resolution ) + vert_resolution = horz_resolution; + + if ( char_width < 1 * 64 ) + char_width = 1 * 64; + if ( char_height < 1 * 64 ) + char_height = 1 * 64; + + if ( !horz_resolution ) + horz_resolution = vert_resolution = 72; + + req.type = FT_SIZE_REQUEST_TYPE_NOMINAL; + req.width = char_width; + req.height = char_height; + req.horiResolution = horz_resolution; + req.vertResolution = vert_resolution; + + return FT_Request_Size( face, &req ); + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Set_Pixel_Sizes( FT_Face face, + FT_UInt pixel_width, + FT_UInt pixel_height ) + { + FT_Size_RequestRec req; + + + /* check of `face' delayed to `FT_Request_Size' */ + + if ( pixel_width == 0 ) + pixel_width = pixel_height; + else if ( pixel_height == 0 ) + pixel_height = pixel_width; + + if ( pixel_width < 1 ) + pixel_width = 1; + if ( pixel_height < 1 ) + pixel_height = 1; + + /* use `>=' to avoid potential compiler warning on 16bit platforms */ + if ( pixel_width >= 0xFFFFU ) + pixel_width = 0xFFFFU; + if ( pixel_height >= 0xFFFFU ) + pixel_height = 0xFFFFU; + + req.type = FT_SIZE_REQUEST_TYPE_NOMINAL; + req.width = (FT_Long)( pixel_width << 6 ); + req.height = (FT_Long)( pixel_height << 6 ); + req.horiResolution = 0; + req.vertResolution = 0; + + return FT_Request_Size( face, &req ); + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Kerning( FT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph, + FT_UInt kern_mode, + FT_Vector *akerning ) + { + FT_Error error = FT_Err_Ok; + FT_Driver driver; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !akerning ) + return FT_THROW( Invalid_Argument ); + + driver = face->driver; + + akerning->x = 0; + akerning->y = 0; + + if ( driver->clazz->get_kerning ) + { + error = driver->clazz->get_kerning( face, + left_glyph, + right_glyph, + akerning ); + if ( !error ) + { + if ( kern_mode != FT_KERNING_UNSCALED ) + { + akerning->x = FT_MulFix( akerning->x, face->size->metrics.x_scale ); + akerning->y = FT_MulFix( akerning->y, face->size->metrics.y_scale ); + + if ( kern_mode != FT_KERNING_UNFITTED ) + { + FT_Pos orig_x = akerning->x; + FT_Pos orig_y = akerning->y; + + + /* we scale down kerning values for small ppem values */ + /* to avoid that rounding makes them too big. */ + /* `25' has been determined heuristically. */ + if ( face->size->metrics.x_ppem < 25 ) + akerning->x = FT_MulDiv( orig_x, + face->size->metrics.x_ppem, 25 ); + if ( face->size->metrics.y_ppem < 25 ) + akerning->y = FT_MulDiv( orig_y, + face->size->metrics.y_ppem, 25 ); + + akerning->x = FT_PIX_ROUND( akerning->x ); + akerning->y = FT_PIX_ROUND( akerning->y ); + +#ifdef FT_DEBUG_LEVEL_TRACE + { + FT_Pos orig_x_rounded = FT_PIX_ROUND( orig_x ); + FT_Pos orig_y_rounded = FT_PIX_ROUND( orig_y ); + + + if ( akerning->x != orig_x_rounded || + akerning->y != orig_y_rounded ) + FT_TRACE5(( "FT_Get_Kerning: horizontal kerning" + " (%ld, %ld) scaled down to (%ld, %ld) pixels\n", + orig_x_rounded / 64, orig_y_rounded / 64, + akerning->x / 64, akerning->y / 64 )); + } +#endif + } + } + } + } + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Track_Kerning( FT_Face face, + FT_Fixed point_size, + FT_Int degree, + FT_Fixed* akerning ) + { + FT_Service_Kerning service; + FT_Error error = FT_Err_Ok; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !akerning ) + return FT_THROW( Invalid_Argument ); + + FT_FACE_FIND_SERVICE( face, service, KERNING ); + if ( !service ) + return FT_THROW( Unimplemented_Feature ); + + error = service->get_track( face, + point_size, + degree, + akerning ); + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Select_Charmap( FT_Face face, + FT_Encoding encoding ) + { + FT_CharMap* cur; + FT_CharMap* limit; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + /* FT_ENCODING_NONE is a valid encoding for BDF, PCF, and Windows FNT */ + if ( encoding == FT_ENCODING_NONE && !face->num_charmaps ) + return FT_THROW( Invalid_Argument ); + + /* FT_ENCODING_UNICODE is special. We try to find the `best' Unicode */ + /* charmap available, i.e., one with UCS-4 characters, if possible. */ + /* */ + /* This is done by find_unicode_charmap() above, to share code. */ + if ( encoding == FT_ENCODING_UNICODE ) + return find_unicode_charmap( face ); + + cur = face->charmaps; + if ( !cur ) + return FT_THROW( Invalid_CharMap_Handle ); + + limit = cur + face->num_charmaps; + + for ( ; cur < limit; cur++ ) + { + if ( cur[0]->encoding == encoding ) + { + face->charmap = cur[0]; + return FT_Err_Ok; + } + } + + return FT_THROW( Invalid_Argument ); + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Set_Charmap( FT_Face face, + FT_CharMap charmap ) + { + FT_CharMap* cur; + FT_CharMap* limit; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + cur = face->charmaps; + if ( !cur || !charmap ) + return FT_THROW( Invalid_CharMap_Handle ); + + limit = cur + face->num_charmaps; + + for ( ; cur < limit; cur++ ) + { + if ( cur[0] == charmap && + FT_Get_CMap_Format ( charmap ) != 14 ) + { + face->charmap = cur[0]; + return FT_Err_Ok; + } + } + + return FT_THROW( Invalid_Argument ); + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Int ) + FT_Get_Charmap_Index( FT_CharMap charmap ) + { + FT_Int i; + + + if ( !charmap || !charmap->face ) + return -1; + + for ( i = 0; i < charmap->face->num_charmaps; i++ ) + if ( charmap->face->charmaps[i] == charmap ) + break; + + FT_ASSERT( i < charmap->face->num_charmaps ); + + return i; + } + + + static void + ft_cmap_done_internal( FT_CMap cmap ) + { + FT_CMap_Class clazz = cmap->clazz; + FT_Face face = cmap->charmap.face; + FT_Memory memory = FT_FACE_MEMORY( face ); + + + if ( clazz->done ) + clazz->done( cmap ); + + FT_FREE( cmap ); + } + + + FT_BASE_DEF( void ) + FT_CMap_Done( FT_CMap cmap ) + { + if ( cmap ) + { + FT_Face face = cmap->charmap.face; + FT_Memory memory = FT_FACE_MEMORY( face ); + FT_Error error; + FT_Int i, j; + + + for ( i = 0; i < face->num_charmaps; i++ ) + { + if ( (FT_CMap)face->charmaps[i] == cmap ) + { + FT_CharMap last_charmap = face->charmaps[face->num_charmaps - 1]; + + + if ( FT_QRENEW_ARRAY( face->charmaps, + face->num_charmaps, + face->num_charmaps - 1 ) ) + return; + + /* remove it from our list of charmaps */ + for ( j = i + 1; j < face->num_charmaps; j++ ) + { + if ( j == face->num_charmaps - 1 ) + face->charmaps[j - 1] = last_charmap; + else + face->charmaps[j - 1] = face->charmaps[j]; + } + + face->num_charmaps--; + + if ( (FT_CMap)face->charmap == cmap ) + face->charmap = NULL; + + ft_cmap_done_internal( cmap ); + + break; + } + } + } + } + + + FT_BASE_DEF( FT_Error ) + FT_CMap_New( FT_CMap_Class clazz, + FT_Pointer init_data, + FT_CharMap charmap, + FT_CMap *acmap ) + { + FT_Error error; + FT_Face face; + FT_Memory memory; + FT_CMap cmap = NULL; + + + if ( !clazz || !charmap || !charmap->face ) + return FT_THROW( Invalid_Argument ); + + face = charmap->face; + memory = FT_FACE_MEMORY( face ); + + if ( !FT_ALLOC( cmap, clazz->size ) ) + { + cmap->charmap = *charmap; + cmap->clazz = clazz; + + if ( clazz->init ) + { + error = clazz->init( cmap, init_data ); + if ( error ) + goto Fail; + } + + /* add it to our list of charmaps */ + if ( FT_QRENEW_ARRAY( face->charmaps, + face->num_charmaps, + face->num_charmaps + 1 ) ) + goto Fail; + + face->charmaps[face->num_charmaps++] = (FT_CharMap)cmap; + } + + Exit: + if ( acmap ) + *acmap = cmap; + + return error; + + Fail: + ft_cmap_done_internal( cmap ); + cmap = NULL; + goto Exit; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_UInt ) + FT_Get_Char_Index( FT_Face face, + FT_ULong charcode ) + { + FT_UInt result = 0; + + + if ( face && face->charmap ) + { + FT_CMap cmap = FT_CMAP( face->charmap ); + + + if ( charcode > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "FT_Get_Char_Index: too large charcode" )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); + } + + result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode ); + if ( result >= (FT_UInt)face->num_glyphs ) + result = 0; + } + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_ULong ) + FT_Get_First_Char( FT_Face face, + FT_UInt *agindex ) + { + FT_ULong result = 0; + FT_UInt gindex = 0; + + + /* only do something if we have a charmap, and we have glyphs at all */ + if ( face && face->charmap && face->num_glyphs ) + { + gindex = FT_Get_Char_Index( face, 0 ); + if ( gindex == 0 ) + result = FT_Get_Next_Char( face, 0, &gindex ); + } + + if ( agindex ) + *agindex = gindex; + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_ULong ) + FT_Get_Next_Char( FT_Face face, + FT_ULong charcode, + FT_UInt *agindex ) + { + FT_ULong result = 0; + FT_UInt gindex = 0; + + + if ( face && face->charmap && face->num_glyphs ) + { + FT_UInt32 code = (FT_UInt32)charcode; + FT_CMap cmap = FT_CMAP( face->charmap ); + + + do + { + gindex = cmap->clazz->char_next( cmap, &code ); + + } while ( gindex >= (FT_UInt)face->num_glyphs ); + + result = ( gindex == 0 ) ? 0 : code; + } + + if ( agindex ) + *agindex = gindex; + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Face_Properties( FT_Face face, + FT_UInt num_properties, + FT_Parameter* properties ) + { + FT_Error error = FT_Err_Ok; + + + if ( num_properties > 0 && !properties ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + for ( ; num_properties > 0; num_properties-- ) + { + if ( properties->tag == FT_PARAM_TAG_STEM_DARKENING ) + { + if ( properties->data ) + { + if ( *( (FT_Bool*)properties->data ) == TRUE ) + face->internal->no_stem_darkening = FALSE; + else + face->internal->no_stem_darkening = TRUE; + } + else + { + /* use module default */ + face->internal->no_stem_darkening = -1; + } + } + else if ( properties->tag == FT_PARAM_TAG_LCD_FILTER_WEIGHTS ) + { +#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + if ( properties->data ) + { + ft_memcpy( face->internal->lcd_weights, + properties->data, + FT_LCD_FILTER_FIVE_TAPS ); + face->internal->lcd_filter_func = ft_lcd_filter_fir; + } +#else + error = FT_THROW( Unimplemented_Feature ); + goto Exit; +#endif + } + else if ( properties->tag == FT_PARAM_TAG_RANDOM_SEED ) + { + if ( properties->data ) + { + face->internal->random_seed = *( (FT_Int32*)properties->data ); + if ( face->internal->random_seed < 0 ) + face->internal->random_seed = 0; + } + else + { + /* use module default */ + face->internal->random_seed = -1; + } + } + else + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + if ( error ) + break; + + properties++; + } + + Exit: + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_UInt ) + FT_Face_GetCharVariantIndex( FT_Face face, + FT_ULong charcode, + FT_ULong variantSelector ) + { + FT_UInt result = 0; + + + if ( face && + face->charmap && + face->charmap->encoding == FT_ENCODING_UNICODE ) + { + FT_CharMap charmap = find_variant_selector_charmap( face ); + FT_CMap ucmap = FT_CMAP( face->charmap ); + + + if ( charmap ) + { + FT_CMap vcmap = FT_CMAP( charmap ); + + + if ( charcode > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "FT_Face_GetCharVariantIndex:" + " too large charcode" )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); + } + if ( variantSelector > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "FT_Face_GetCharVariantIndex:" + " too large variantSelector" )); + FT_TRACE1(( " 0x%lx is truncated\n", variantSelector )); + } + + result = vcmap->clazz->char_var_index( vcmap, ucmap, + (FT_UInt32)charcode, + (FT_UInt32)variantSelector ); + } + } + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Int ) + FT_Face_GetCharVariantIsDefault( FT_Face face, + FT_ULong charcode, + FT_ULong variantSelector ) + { + FT_Int result = -1; + + + if ( face ) + { + FT_CharMap charmap = find_variant_selector_charmap( face ); + + + if ( charmap ) + { + FT_CMap vcmap = FT_CMAP( charmap ); + + + if ( charcode > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:" + " too large charcode" )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); + } + if ( variantSelector > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:" + " too large variantSelector" )); + FT_TRACE1(( " 0x%lx is truncated\n", variantSelector )); + } + + result = vcmap->clazz->char_var_default( vcmap, + (FT_UInt32)charcode, + (FT_UInt32)variantSelector ); + } + } + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_UInt32* ) + FT_Face_GetVariantSelectors( FT_Face face ) + { + FT_UInt32 *result = NULL; + + + if ( face ) + { + FT_CharMap charmap = find_variant_selector_charmap( face ); + + + if ( charmap ) + { + FT_CMap vcmap = FT_CMAP( charmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + + + result = vcmap->clazz->variant_list( vcmap, memory ); + } + } + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_UInt32* ) + FT_Face_GetVariantsOfChar( FT_Face face, + FT_ULong charcode ) + { + FT_UInt32 *result = NULL; + + + if ( face ) + { + FT_CharMap charmap = find_variant_selector_charmap( face ); + + + if ( charmap ) + { + FT_CMap vcmap = FT_CMAP( charmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + + + if ( charcode > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "FT_Face_GetVariantsOfChar: too large charcode" )); + FT_TRACE1(( " 0x%lx is truncated\n", charcode )); + } + + result = vcmap->clazz->charvariant_list( vcmap, memory, + (FT_UInt32)charcode ); + } + } + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_UInt32* ) + FT_Face_GetCharsOfVariant( FT_Face face, + FT_ULong variantSelector ) + { + FT_UInt32 *result = NULL; + + + if ( face ) + { + FT_CharMap charmap = find_variant_selector_charmap( face ); + + + if ( charmap ) + { + FT_CMap vcmap = FT_CMAP( charmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + + + if ( variantSelector > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" )); + FT_TRACE1(( " 0x%lx is truncated\n", variantSelector )); + } + + result = vcmap->clazz->variantchar_list( vcmap, memory, + (FT_UInt32)variantSelector ); + } + } + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_UInt ) + FT_Get_Name_Index( FT_Face face, + const FT_String* glyph_name ) + { + FT_UInt result = 0; + + + if ( face && + FT_HAS_GLYPH_NAMES( face ) && + glyph_name ) + { + FT_Service_GlyphDict service; + + + FT_FACE_LOOKUP_SERVICE( face, + service, + GLYPH_DICT ); + + if ( service && service->name_index ) + result = service->name_index( face, glyph_name ); + } + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Glyph_Name( FT_Face face, + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ) + { + FT_Error error; + FT_Service_GlyphDict service; + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( !buffer || buffer_max == 0 ) + return FT_THROW( Invalid_Argument ); + + /* clean up buffer */ + ((FT_Byte*)buffer)[0] = '\0'; + + if ( (FT_Long)glyph_index >= face->num_glyphs ) + return FT_THROW( Invalid_Glyph_Index ); + + if ( !FT_HAS_GLYPH_NAMES( face ) ) + return FT_THROW( Invalid_Argument ); + + FT_FACE_LOOKUP_SERVICE( face, service, GLYPH_DICT ); + if ( service && service->get_name ) + error = service->get_name( face, glyph_index, buffer, buffer_max ); + else + error = FT_THROW( Invalid_Argument ); + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( const char* ) + FT_Get_Postscript_Name( FT_Face face ) + { + const char* result = NULL; + + + if ( !face ) + goto Exit; + + if ( !result ) + { + FT_Service_PsFontName service; + + + FT_FACE_LOOKUP_SERVICE( face, + service, + POSTSCRIPT_FONT_NAME ); + + if ( service && service->get_ps_font_name ) + result = service->get_ps_font_name( face ); + } + + Exit: + return result; + } + + + /* documentation is in tttables.h */ + + FT_EXPORT_DEF( void* ) + FT_Get_Sfnt_Table( FT_Face face, + FT_Sfnt_Tag tag ) + { + void* table = NULL; + FT_Service_SFNT_Table service; + + + if ( face && FT_IS_SFNT( face ) ) + { + FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE ); + if ( service ) + table = service->get_table( face, tag ); + } + + return table; + } + + + /* documentation is in tttables.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Load_Sfnt_Table( FT_Face face, + FT_ULong tag, + FT_Long offset, + FT_Byte* buffer, + FT_ULong* length ) + { + FT_Service_SFNT_Table service; + + + if ( !face || !FT_IS_SFNT( face ) ) + return FT_THROW( Invalid_Face_Handle ); + + FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE ); + if ( !service ) + return FT_THROW( Unimplemented_Feature ); + + return service->load_table( face, tag, offset, buffer, length ); + } + + + /* documentation is in tttables.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Sfnt_Table_Info( FT_Face face, + FT_UInt table_index, + FT_ULong *tag, + FT_ULong *length ) + { + FT_Service_SFNT_Table service; + FT_ULong offset; + + + /* test for valid `length' delayed to `service->table_info' */ + + if ( !face || !FT_IS_SFNT( face ) ) + return FT_THROW( Invalid_Face_Handle ); + + FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE ); + if ( !service ) + return FT_THROW( Unimplemented_Feature ); + + return service->table_info( face, table_index, tag, &offset, length ); + } + + + /* documentation is in tttables.h */ + + FT_EXPORT_DEF( FT_ULong ) + FT_Get_CMap_Language_ID( FT_CharMap charmap ) + { + FT_Service_TTCMaps service; + FT_Face face; + TT_CMapInfo cmap_info; + + + if ( !charmap || !charmap->face ) + return 0; + + face = charmap->face; + FT_FACE_FIND_SERVICE( face, service, TT_CMAP ); + if ( !service ) + return 0; + if ( service->get_cmap_info( charmap, &cmap_info )) + return 0; + + return cmap_info.language; + } + + + /* documentation is in tttables.h */ + + FT_EXPORT_DEF( FT_Long ) + FT_Get_CMap_Format( FT_CharMap charmap ) + { + FT_Service_TTCMaps service; + FT_Face face; + TT_CMapInfo cmap_info; + + + if ( !charmap || !charmap->face ) + return -1; + + face = charmap->face; + FT_FACE_FIND_SERVICE( face, service, TT_CMAP ); + if ( !service ) + return -1; + if ( service->get_cmap_info( charmap, &cmap_info )) + return -1; + + return cmap_info.format; + } + + + /* documentation is in ftsizes.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Activate_Size( FT_Size size ) + { + FT_Face face; + + + if ( !size ) + return FT_THROW( Invalid_Size_Handle ); + + face = size->face; + if ( !face || !face->driver ) + return FT_THROW( Invalid_Face_Handle ); + + /* we don't need anything more complex than that; all size objects */ + /* are already listed by the face */ + face->size = size; + + return FT_Err_Ok; + } + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** R E N D E R E R S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + /* lookup a renderer by glyph format in the library's list */ + FT_BASE_DEF( FT_Renderer ) + FT_Lookup_Renderer( FT_Library library, + FT_Glyph_Format format, + FT_ListNode* node ) + { + FT_ListNode cur; + FT_Renderer result = NULL; + + + if ( !library ) + goto Exit; + + cur = library->renderers.head; + + if ( node ) + { + if ( *node ) + cur = (*node)->next; + *node = NULL; + } + + while ( cur ) + { + FT_Renderer renderer = FT_RENDERER( cur->data ); + + + if ( renderer->glyph_format == format ) + { + if ( node ) + *node = cur; + + result = renderer; + break; + } + cur = cur->next; + } + + Exit: + return result; + } + + + static FT_Renderer + ft_lookup_glyph_renderer( FT_GlyphSlot slot ) + { + FT_Face face = slot->face; + FT_Library library = FT_FACE_LIBRARY( face ); + FT_Renderer result = library->cur_renderer; + + + if ( !result || result->glyph_format != slot->format ) + result = FT_Lookup_Renderer( library, slot->format, 0 ); + + return result; + } + + + static void + ft_set_current_renderer( FT_Library library ) + { + FT_Renderer renderer; + + + renderer = FT_Lookup_Renderer( library, FT_GLYPH_FORMAT_OUTLINE, 0 ); + library->cur_renderer = renderer; + } + + + static FT_Error + ft_add_renderer( FT_Module module ) + { + FT_Library library = module->library; + FT_Memory memory = library->memory; + FT_Error error; + FT_ListNode node = NULL; + + + if ( FT_QNEW( node ) ) + goto Exit; + + { + FT_Renderer render = FT_RENDERER( module ); + FT_Renderer_Class* clazz = (FT_Renderer_Class*)module->clazz; + + + render->clazz = clazz; + render->glyph_format = clazz->glyph_format; + + /* allocate raster object if needed */ + if ( clazz->raster_class && clazz->raster_class->raster_new ) + { + error = clazz->raster_class->raster_new( memory, &render->raster ); + if ( error ) + goto Fail; + + render->raster_render = clazz->raster_class->raster_render; + render->render = clazz->render_glyph; + } + +#ifdef FT_CONFIG_OPTION_SVG + if ( clazz->glyph_format == FT_GLYPH_FORMAT_SVG ) + render->render = clazz->render_glyph; +#endif + + /* add to list */ + node->data = module; + FT_List_Add( &library->renderers, node ); + + ft_set_current_renderer( library ); + } + + Fail: + if ( error ) + FT_FREE( node ); + + Exit: + return error; + } + + + static void + ft_remove_renderer( FT_Module module ) + { + FT_Library library; + FT_Memory memory; + FT_ListNode node; + + + library = module->library; + if ( !library ) + return; + + memory = library->memory; + + node = FT_List_Find( &library->renderers, module ); + if ( node ) + { + FT_Renderer render = FT_RENDERER( module ); + + + /* release raster object, if any */ + if ( render->raster ) + render->clazz->raster_class->raster_done( render->raster ); + + /* remove from list */ + FT_List_Remove( &library->renderers, node ); + FT_FREE( node ); + + ft_set_current_renderer( library ); + } + } + + + /* documentation is in ftrender.h */ + + FT_EXPORT_DEF( FT_Renderer ) + FT_Get_Renderer( FT_Library library, + FT_Glyph_Format format ) + { + /* test for valid `library' delayed to `FT_Lookup_Renderer' */ + + return FT_Lookup_Renderer( library, format, 0 ); + } + + + /* documentation is in ftrender.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Set_Renderer( FT_Library library, + FT_Renderer renderer, + FT_UInt num_params, + FT_Parameter* parameters ) + { + FT_ListNode node; + FT_Error error = FT_Err_Ok; + + FT_Renderer_SetModeFunc set_mode; + + + if ( !library ) + { + error = FT_THROW( Invalid_Library_Handle ); + goto Exit; + } + + if ( !renderer ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + if ( num_params > 0 && !parameters ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + node = FT_List_Find( &library->renderers, renderer ); + if ( !node ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + FT_List_Up( &library->renderers, node ); + + if ( renderer->glyph_format == FT_GLYPH_FORMAT_OUTLINE ) + library->cur_renderer = renderer; + + set_mode = renderer->clazz->set_mode; + + for ( ; num_params > 0; num_params-- ) + { + error = set_mode( renderer, parameters->tag, parameters->data ); + if ( error ) + break; + parameters++; + } + + Exit: + return error; + } + + + FT_BASE_DEF( FT_Error ) + FT_Render_Glyph_Internal( FT_Library library, + FT_GlyphSlot slot, + FT_Render_Mode render_mode ) + { + FT_Error error = FT_Err_Ok; + FT_Face face = slot->face; + FT_Renderer renderer; + + + switch ( slot->format ) + { + default: + if ( slot->internal->load_flags & FT_LOAD_COLOR ) + { + FT_LayerIterator iterator; + + FT_UInt base_glyph = slot->glyph_index; + + FT_Bool have_layers; + FT_UInt glyph_index; + FT_UInt color_index; + + + /* check whether we have colored glyph layers */ + iterator.p = NULL; + have_layers = FT_Get_Color_Glyph_Layer( face, + base_glyph, + &glyph_index, + &color_index, + &iterator ); + if ( have_layers ) + { + error = FT_New_GlyphSlot( face, NULL ); + if ( !error ) + { + TT_Face ttface = (TT_Face)face; + SFNT_Service sfnt = (SFNT_Service)ttface->sfnt; + + + do + { + FT_Int32 load_flags = slot->internal->load_flags; + + + /* disable the `FT_LOAD_COLOR' flag to avoid recursion */ + /* right here in this function */ + load_flags &= ~FT_LOAD_COLOR; + + /* render into the new `face->glyph' glyph slot */ + load_flags |= FT_LOAD_RENDER; + + error = FT_Load_Glyph( face, glyph_index, load_flags ); + if ( error ) + break; + + /* blend new `face->glyph' into old `slot'; */ + /* at the first call, `slot' is still empty */ + error = sfnt->colr_blend( ttface, + color_index, + slot, + face->glyph ); + if ( error ) + break; + + } while ( FT_Get_Color_Glyph_Layer( face, + base_glyph, + &glyph_index, + &color_index, + &iterator ) ); + + if ( !error ) + slot->format = FT_GLYPH_FORMAT_BITMAP; + + /* this call also restores `slot' as the glyph slot */ + FT_Done_GlyphSlot( face->glyph ); + } + + if ( !error ) + return error; + + /* Failed to do the colored layer. Draw outline instead. */ + slot->format = FT_GLYPH_FORMAT_OUTLINE; + } + } + + { + FT_ListNode node = NULL; + + + /* small shortcut for the very common case */ + if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ) + { + renderer = library->cur_renderer; + node = library->renderers.head; + } + else + renderer = FT_Lookup_Renderer( library, slot->format, &node ); + + error = FT_ERR( Cannot_Render_Glyph ); + while ( renderer ) + { + error = renderer->render( renderer, slot, render_mode, NULL ); + if ( !error || + FT_ERR_NEQ( error, Cannot_Render_Glyph ) ) + break; + + /* FT_Err_Cannot_Render_Glyph is returned if the render mode */ + /* is unsupported by the current renderer for this glyph image */ + /* format. */ + + /* now, look for another renderer that supports the same */ + /* format. */ + renderer = FT_Lookup_Renderer( library, slot->format, &node ); + } + + /* it is not an error if we cannot render a bitmap glyph */ + if ( FT_ERR_EQ( error, Cannot_Render_Glyph ) && + slot->format == FT_GLYPH_FORMAT_BITMAP ) + error = FT_Err_Ok; + } + } + +#ifdef FT_DEBUG_LEVEL_TRACE + +#undef FT_COMPONENT +#define FT_COMPONENT checksum + + /* + * Computing the MD5 checksum is expensive, unnecessarily distorting a + * possible profiling of FreeType if compiled with tracing support. For + * this reason, we execute the following code only if explicitly + * requested. + */ + + /* we use FT_TRACE3 in this block */ + if ( !error && + ft_trace_levels[trace_checksum] >= 3 && + slot->bitmap.buffer ) + { + FT_Bitmap bitmap; + FT_Error err; + + + FT_Bitmap_Init( &bitmap ); + + /* we convert to a single bitmap format for computing the checksum */ + /* this also converts the bitmap flow to `down' (i.e., pitch > 0) */ + err = FT_Bitmap_Convert( library, &slot->bitmap, &bitmap, 1 ); + if ( !err ) + { + MD5_CTX ctx; + unsigned char md5[16]; + unsigned long coverage = 0; + int i, j; + int rows = (int)bitmap.rows; + int pitch = bitmap.pitch; + + + FT_TRACE3(( "FT_Render_Glyph: bitmap %dx%d, %s (mode %d)\n", + pitch, + rows, + pixel_modes[slot->bitmap.pixel_mode], + slot->bitmap.pixel_mode )); + + for ( i = 0; i < rows; i++ ) + for ( j = 0; j < pitch; j++ ) + coverage += bitmap.buffer[i * pitch + j]; + + FT_TRACE3(( " Total coverage: %lu\n", coverage )); + + MD5_Init( &ctx ); + if ( bitmap.buffer ) + MD5_Update( &ctx, bitmap.buffer, + (unsigned long)rows * (unsigned long)pitch ); + MD5_Final( md5, &ctx ); + + FT_TRACE3(( " MD5 checksum: " )); + for ( i = 0; i < 16; i++ ) + FT_TRACE3(( "%02X", md5[i] )); + FT_TRACE3(( "\n" )); + } + + FT_Bitmap_Done( library, &bitmap ); + } + + /* + * Dump bitmap in Netpbm format (PBM or PGM). + */ + + /* we use FT_TRACE7 in this block */ + if ( !error && + ft_trace_levels[trace_checksum] >= 7 && + slot->bitmap.buffer ) + { + if ( slot->bitmap.rows < 128U && + slot->bitmap.width < 128U ) + { + int rows = (int)slot->bitmap.rows; + int width = (int)slot->bitmap.width; + int pitch = slot->bitmap.pitch; + int i, j, m; + + unsigned char* topleft = slot->bitmap.buffer; + + + if ( pitch < 0 ) + topleft -= pitch * ( rows - 1 ); + + FT_TRACE7(( "Netpbm image: start\n" )); + switch ( slot->bitmap.pixel_mode ) + { + case FT_PIXEL_MODE_MONO: + FT_TRACE7(( "P1 %d %d\n", width, rows )); + for ( i = 0; i < rows; i++ ) + { + for ( j = 0; j < width; ) + for ( m = 128; m > 0 && j < width; m >>= 1, j++ ) + FT_TRACE7(( " %d", + ( topleft[i * pitch + j / 8] & m ) != 0 )); + FT_TRACE7(( "\n" )); + } + break; + + default: + FT_TRACE7(( "P2 %d %d 255\n", width, rows )); + for ( i = 0; i < rows; i++ ) + { + for ( j = 0; j < width; j += 1 ) + FT_TRACE7(( " %3u", topleft[i * pitch + j] )); + FT_TRACE7(( "\n" )); + } + } + FT_TRACE7(( "Netpbm image: end\n" )); + } + else + FT_TRACE7(( "Netpbm image: too large, omitted\n" )); + } + +#undef FT_COMPONENT +#define FT_COMPONENT objs + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Render_Glyph( FT_GlyphSlot slot, + FT_Render_Mode render_mode ) + { + FT_Library library; + + + if ( !slot || !slot->face ) + return FT_THROW( Invalid_Argument ); + + library = FT_FACE_LIBRARY( slot->face ); + + return FT_Render_Glyph_Internal( library, slot, render_mode ); + } + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** M O D U L E S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @Function: + * Destroy_Module + * + * @Description: + * Destroys a given module object. For drivers, this also destroys + * all child faces. + * + * @InOut: + * module :: + * A handle to the target driver object. + * + * @Note: + * The driver _must_ be LOCKED! + */ + static void + Destroy_Module( FT_Module module ) + { + FT_Memory memory = module->memory; + FT_Module_Class* clazz = module->clazz; + FT_Library library = module->library; + + + if ( library && library->auto_hinter == module ) + library->auto_hinter = NULL; + + /* if the module is a renderer */ + if ( FT_MODULE_IS_RENDERER( module ) ) + ft_remove_renderer( module ); + + /* if the module is a font driver, add some steps */ + if ( FT_MODULE_IS_DRIVER( module ) ) + Destroy_Driver( FT_DRIVER( module ) ); + + /* finalize the module object */ + if ( clazz->module_done ) + clazz->module_done( module ); + + /* discard it */ + FT_FREE( module ); + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Add_Module( FT_Library library, + const FT_Module_Class* clazz ) + { + FT_Error error; + FT_Memory memory; + FT_Module module = NULL; + FT_UInt nn; + + +#define FREETYPE_VER_FIXED ( ( (FT_Long)FREETYPE_MAJOR << 16 ) | \ + FREETYPE_MINOR ) + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !clazz ) + return FT_THROW( Invalid_Argument ); + + /* check FreeType version */ + if ( clazz->module_requires > FREETYPE_VER_FIXED ) + return FT_THROW( Invalid_Version ); + + /* look for a module with the same name in the library's table */ + for ( nn = 0; nn < library->num_modules; nn++ ) + { + module = library->modules[nn]; + if ( ft_strcmp( module->clazz->module_name, clazz->module_name ) == 0 ) + { + /* this installed module has the same name, compare their versions */ + if ( clazz->module_version <= module->clazz->module_version ) + return FT_THROW( Lower_Module_Version ); + + /* remove the module from our list, then exit the loop to replace */ + /* it by our new version.. */ + FT_Remove_Module( library, module ); + break; + } + } + + memory = library->memory; + error = FT_Err_Ok; + + if ( library->num_modules >= FT_MAX_MODULES ) + { + error = FT_THROW( Too_Many_Drivers ); + goto Exit; + } + + /* allocate module object */ + if ( FT_ALLOC( module, clazz->module_size ) ) + goto Exit; + + /* base initialization */ + module->library = library; + module->memory = memory; + module->clazz = (FT_Module_Class*)clazz; + + /* check whether the module is a renderer - this must be performed */ + /* before the normal module initialization */ + if ( FT_MODULE_IS_RENDERER( module ) ) + { + /* add to the renderers list */ + error = ft_add_renderer( module ); + if ( error ) + goto Fail; + } + + /* is the module a auto-hinter? */ + if ( FT_MODULE_IS_HINTER( module ) ) + library->auto_hinter = module; + + /* if the module is a font driver */ + if ( FT_MODULE_IS_DRIVER( module ) ) + { + FT_Driver driver = FT_DRIVER( module ); + + + driver->clazz = (FT_Driver_Class)module->clazz; + } + + if ( clazz->module_init ) + { + error = clazz->module_init( module ); + if ( error ) + goto Fail; + } + + /* add module to the library's table */ + library->modules[library->num_modules++] = module; + + Exit: + return error; + + Fail: + if ( FT_MODULE_IS_RENDERER( module ) ) + { + FT_Renderer renderer = FT_RENDERER( module ); + + + if ( renderer->clazz && + renderer->clazz->glyph_format == FT_GLYPH_FORMAT_OUTLINE && + renderer->raster ) + renderer->clazz->raster_class->raster_done( renderer->raster ); + } + + FT_FREE( module ); + goto Exit; + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Module ) + FT_Get_Module( FT_Library library, + const char* module_name ) + { + FT_Module result = NULL; + FT_Module* cur; + FT_Module* limit; + + + if ( !library || !module_name ) + return result; + + cur = library->modules; + limit = cur + library->num_modules; + + for ( ; cur < limit; cur++ ) + if ( ft_strcmp( cur[0]->clazz->module_name, module_name ) == 0 ) + { + result = cur[0]; + break; + } + + return result; + } + + + /* documentation is in ftobjs.h */ + + FT_BASE_DEF( const void* ) + FT_Get_Module_Interface( FT_Library library, + const char* mod_name ) + { + FT_Module module; + + + /* test for valid `library' delayed to FT_Get_Module() */ + + module = FT_Get_Module( library, mod_name ); + + return module ? module->clazz->module_interface : 0; + } + + + FT_BASE_DEF( FT_Pointer ) + ft_module_get_service( FT_Module module, + const char* service_id, + FT_Bool global ) + { + FT_Pointer result = NULL; + + + if ( module ) + { + FT_ASSERT( module->clazz && module->clazz->get_interface ); + + /* first, look for the service in the module */ + if ( module->clazz->get_interface ) + result = module->clazz->get_interface( module, service_id ); + + if ( global && !result ) + { + /* we didn't find it, look in all other modules then */ + FT_Library library = module->library; + FT_Module* cur = library->modules; + FT_Module* limit = cur + library->num_modules; + + + for ( ; cur < limit; cur++ ) + { + if ( cur[0] != module ) + { + FT_ASSERT( cur[0]->clazz ); + + if ( cur[0]->clazz->get_interface ) + { + result = cur[0]->clazz->get_interface( cur[0], service_id ); + if ( result ) + break; + } + } + } + } + } + + return result; + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Remove_Module( FT_Library library, + FT_Module module ) + { + /* try to find the module from the table, then remove it from there */ + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( module ) + { + FT_Module* cur = library->modules; + FT_Module* limit = cur + library->num_modules; + + + for ( ; cur < limit; cur++ ) + { + if ( cur[0] == module ) + { + /* remove it from the table */ + library->num_modules--; + limit--; + while ( cur < limit ) + { + cur[0] = cur[1]; + cur++; + } + limit[0] = NULL; + + /* destroy the module */ + Destroy_Module( module ); + + return FT_Err_Ok; + } + } + } + return FT_THROW( Invalid_Driver_Handle ); + } + + + static FT_Error + ft_property_do( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + void* value, + FT_Bool set, + FT_Bool value_is_string ) + { + FT_Module* cur; + FT_Module* limit; + FT_Module_Interface interface; + + FT_Service_Properties service; + +#ifdef FT_DEBUG_LEVEL_ERROR + const FT_String* set_name = "FT_Property_Set"; + const FT_String* get_name = "FT_Property_Get"; + const FT_String* func_name = set ? set_name : get_name; +#endif + + FT_Bool missing_func; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !module_name || !property_name || !value ) + return FT_THROW( Invalid_Argument ); + + cur = library->modules; + limit = cur + library->num_modules; + + /* search module */ + for ( ; cur < limit; cur++ ) + if ( !ft_strcmp( cur[0]->clazz->module_name, module_name ) ) + break; + + if ( cur == limit ) + { + FT_TRACE2(( "%s: can't find module `%s'\n", + func_name, module_name )); + return FT_THROW( Missing_Module ); + } + + /* check whether we have a service interface */ + if ( !cur[0]->clazz->get_interface ) + { + FT_TRACE2(( "%s: module `%s' doesn't support properties\n", + func_name, module_name )); + return FT_THROW( Unimplemented_Feature ); + } + + /* search property service */ + interface = cur[0]->clazz->get_interface( cur[0], + FT_SERVICE_ID_PROPERTIES ); + if ( !interface ) + { + FT_TRACE2(( "%s: module `%s' doesn't support properties\n", + func_name, module_name )); + return FT_THROW( Unimplemented_Feature ); + } + + service = (FT_Service_Properties)interface; + + if ( set ) + missing_func = FT_BOOL( !service->set_property ); + else + missing_func = FT_BOOL( !service->get_property ); + + if ( missing_func ) + { + FT_TRACE2(( "%s: property service of module `%s' is broken\n", + func_name, module_name )); + return FT_THROW( Unimplemented_Feature ); + } + + return set ? service->set_property( cur[0], + property_name, + value, + value_is_string ) + : service->get_property( cur[0], + property_name, + value ); + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Property_Set( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + const void* value ) + { + return ft_property_do( library, + module_name, + property_name, + (void*)value, + TRUE, + FALSE ); + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Property_Get( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + void* value ) + { + return ft_property_do( library, + module_name, + property_name, + value, + FALSE, + FALSE ); + } + + +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + + /* this variant is used for handling the FREETYPE_PROPERTIES */ + /* environment variable */ + + FT_BASE_DEF( FT_Error ) + ft_property_string_set( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + FT_String* value ) + { + return ft_property_do( library, + module_name, + property_name, + (void*)value, + TRUE, + TRUE ); + } + +#endif + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** L I B R A R Y ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Reference_Library( FT_Library library ) + { + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + library->refcount++; + + return FT_Err_Ok; + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_New_Library( FT_Memory memory, + FT_Library *alibrary ) + { + FT_Library library = NULL; + FT_Error error; + + + if ( !memory || !alibrary ) + return FT_THROW( Invalid_Argument ); + +#ifndef FT_DEBUG_LOGGING +#ifdef FT_DEBUG_LEVEL_ERROR + /* init debugging support */ + ft_debug_init(); +#endif /* FT_DEBUG_LEVEL_ERROR */ +#endif /* !FT_DEBUG_LOGGING */ + + /* first of all, allocate the library object */ + if ( FT_NEW( library ) ) + return error; + + library->memory = memory; + + library->version_major = FREETYPE_MAJOR; + library->version_minor = FREETYPE_MINOR; + library->version_patch = FREETYPE_PATCH; + + library->refcount = 1; + + /* That's ok now */ + *alibrary = library; + + return FT_Err_Ok; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( void ) + FT_Library_Version( FT_Library library, + FT_Int *amajor, + FT_Int *aminor, + FT_Int *apatch ) + { + FT_Int major = 0; + FT_Int minor = 0; + FT_Int patch = 0; + + + if ( library ) + { + major = library->version_major; + minor = library->version_minor; + patch = library->version_patch; + } + + if ( amajor ) + *amajor = major; + + if ( aminor ) + *aminor = minor; + + if ( apatch ) + *apatch = patch; + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Done_Library( FT_Library library ) + { + FT_Memory memory; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + library->refcount--; + if ( library->refcount > 0 ) + goto Exit; + + memory = library->memory; + + /* + * Close all faces in the library. If we don't do this, we can have + * some subtle memory leaks. + * + * Example: + * + * - the cff font driver uses the pshinter module in cff_size_done + * - if the pshinter module is destroyed before the cff font driver, + * opened FT_Face objects managed by the driver are not properly + * destroyed, resulting in a memory leak + * + * Some faces are dependent on other faces, like Type42 faces that + * depend on TrueType faces synthesized internally. + * + * The order of drivers should be specified in driver_name[]. + */ + { + FT_UInt m, n; + const char* driver_name[] = { "type42", NULL }; + + + for ( m = 0; + m < sizeof ( driver_name ) / sizeof ( driver_name[0] ); + m++ ) + { + for ( n = 0; n < library->num_modules; n++ ) + { + FT_Module module = library->modules[n]; + const char* module_name = module->clazz->module_name; + FT_List faces; + + + if ( driver_name[m] && + ft_strcmp( module_name, driver_name[m] ) != 0 ) + continue; + + if ( ( module->clazz->module_flags & FT_MODULE_FONT_DRIVER ) == 0 ) + continue; + + FT_TRACE7(( "FT_Done_Library: close faces for %s\n", module_name )); + + faces = &FT_DRIVER( module )->faces_list; + while ( faces->head ) + { + FT_Done_Face( FT_FACE( faces->head->data ) ); + if ( faces->head ) + FT_TRACE0(( "FT_Done_Library: failed to free some faces\n" )); + } + } + } + } + + /* Close all other modules in the library */ +#if 1 + /* XXX Modules are removed in the reversed order so that */ + /* type42 module is removed before truetype module. This */ + /* avoids double free in some occasions. It is a hack. */ + while ( library->num_modules > 0 ) + FT_Remove_Module( library, + library->modules[library->num_modules - 1] ); +#else + { + FT_UInt n; + + + for ( n = 0; n < library->num_modules; n++ ) + { + FT_Module module = library->modules[n]; + + + if ( module ) + { + Destroy_Module( module ); + library->modules[n] = NULL; + } + } + } +#endif + + FT_FREE( library ); + + Exit: + return FT_Err_Ok; + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( void ) + FT_Set_Debug_Hook( FT_Library library, + FT_UInt hook_index, + FT_DebugHook_Func debug_hook ) + { + if ( library && debug_hook && + hook_index < + ( sizeof ( library->debug_hooks ) / sizeof ( void* ) ) ) + library->debug_hooks[hook_index] = debug_hook; + } + + + /* documentation is in ftmodapi.h */ + + FT_EXPORT_DEF( FT_TrueTypeEngineType ) + FT_Get_TrueType_Engine_Type( FT_Library library ) + { + FT_TrueTypeEngineType result = FT_TRUETYPE_ENGINE_TYPE_NONE; + + + if ( library ) + { + FT_Module module = FT_Get_Module( library, "truetype" ); + + + if ( module ) + { + FT_Service_TrueTypeEngine service; + + + service = (FT_Service_TrueTypeEngine) + ft_module_get_service( module, + FT_SERVICE_ID_TRUETYPE_ENGINE, + 0 ); + if ( service ) + result = service->engine_type; + } + } + + return result; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_SubGlyph_Info( FT_GlyphSlot glyph, + FT_UInt sub_index, + FT_Int *p_index, + FT_UInt *p_flags, + FT_Int *p_arg1, + FT_Int *p_arg2, + FT_Matrix *p_transform ) + { + FT_Error error = FT_ERR( Invalid_Argument ); + + + if ( glyph && + glyph->subglyphs && + glyph->format == FT_GLYPH_FORMAT_COMPOSITE && + sub_index < glyph->num_subglyphs ) + { + FT_SubGlyph subg = glyph->subglyphs + sub_index; + + + *p_index = subg->index; + *p_flags = subg->flags; + *p_arg1 = subg->arg1; + *p_arg2 = subg->arg2; + *p_transform = subg->transform; + + error = FT_Err_Ok; + } + + return error; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Bool ) + FT_Get_Color_Glyph_Layer( FT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator ) + { + TT_Face ttface; + SFNT_Service sfnt; + + + if ( !face || + !aglyph_index || + !acolor_index || + !iterator || + base_glyph >= (FT_UInt)face->num_glyphs ) + return 0; + + if ( !FT_IS_SFNT( face ) ) + return 0; + + ttface = (TT_Face)face; + sfnt = (SFNT_Service)ttface->sfnt; + + if ( sfnt->get_colr_layer ) + return sfnt->get_colr_layer( ttface, + base_glyph, + aglyph_index, + acolor_index, + iterator ); + else + return 0; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Bool ) + FT_Get_Color_Glyph_Paint( FT_Face face, + FT_UInt base_glyph, + FT_Color_Root_Transform root_transform, + FT_OpaquePaint* paint ) + { + TT_Face ttface; + SFNT_Service sfnt; + + + if ( !face || !paint ) + return 0; + + if ( !FT_IS_SFNT( face ) ) + return 0; + + ttface = (TT_Face)face; + sfnt = (SFNT_Service)ttface->sfnt; + + if ( sfnt->get_colr_glyph_paint ) + return sfnt->get_colr_glyph_paint( ttface, + base_glyph, + root_transform, + paint ); + else + return 0; + } + + + /* documentation is in ftcolor.h */ + + FT_EXPORT_DEF( FT_Bool ) + FT_Get_Color_Glyph_ClipBox( FT_Face face, + FT_UInt base_glyph, + FT_ClipBox* clip_box ) + { + TT_Face ttface; + SFNT_Service sfnt; + + + if ( !face || !clip_box ) + return 0; + + if ( !FT_IS_SFNT( face ) ) + return 0; + + ttface = (TT_Face)face; + sfnt = (SFNT_Service)ttface->sfnt; + + if ( sfnt->get_color_glyph_clipbox ) + return sfnt->get_color_glyph_clipbox( ttface, + base_glyph, + clip_box ); + else + return 0; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Bool ) + FT_Get_Paint_Layers( FT_Face face, + FT_LayerIterator* layer_iterator, + FT_OpaquePaint* paint ) + { + TT_Face ttface; + SFNT_Service sfnt; + + + if ( !face || !paint || !layer_iterator ) + return 0; + + if ( !FT_IS_SFNT( face ) ) + return 0; + + ttface = (TT_Face)face; + sfnt = (SFNT_Service)ttface->sfnt; + + if ( sfnt->get_paint_layers ) + return sfnt->get_paint_layers( ttface, layer_iterator, paint ); + else + return 0; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Bool ) + FT_Get_Paint( FT_Face face, + FT_OpaquePaint opaque_paint, + FT_COLR_Paint* paint ) + { + TT_Face ttface; + SFNT_Service sfnt; + + + if ( !face || !paint ) + return 0; + + if ( !FT_IS_SFNT( face ) ) + return 0; + + ttface = (TT_Face)face; + sfnt = (SFNT_Service)ttface->sfnt; + + if ( sfnt->get_paint ) + return sfnt->get_paint( ttface, opaque_paint, paint ); + else + return 0; + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( FT_Bool ) + FT_Get_Colorline_Stops ( FT_Face face, + FT_ColorStop * color_stop, + FT_ColorStopIterator *iterator ) + { + TT_Face ttface; + SFNT_Service sfnt; + + + if ( !face || !color_stop || !iterator ) + return 0; + + if ( !FT_IS_SFNT( face ) ) + return 0; + + ttface = (TT_Face)face; + sfnt = (SFNT_Service)ttface->sfnt; + + if ( sfnt->get_colorline_stops ) + return sfnt->get_colorline_stops ( ttface, color_stop, iterator ); + else + return 0; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftoutln.c b/non-source/foreign/freetype2/src/base/ftoutln.c new file mode 100644 index 000000000..ef699b3c7 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftoutln.c @@ -0,0 +1,1120 @@ +/**************************************************************************** + * + * ftoutln.c + * + * FreeType outline management (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/ftoutln.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/fttrigon.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 outline + + + static + const FT_Outline null_outline = { 0, 0, NULL, NULL, NULL, 0 }; + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_Decompose( FT_Outline* outline, + const FT_Outline_Funcs* func_interface, + void* user ) + { +#undef SCALED +#define SCALED( x ) ( (x) * ( 1L << shift ) - delta ) + + FT_Vector v_last; + FT_Vector v_control; + FT_Vector v_start; + + FT_Vector* point; + FT_Vector* limit; + FT_Byte* tags; + + FT_Error error; + + FT_Int n; /* index of contour in outline */ + FT_Int first; /* index of first point in contour */ + FT_Int last; /* index of last point in contour */ + + FT_Int tag; /* current point's state */ + + FT_Int shift; + FT_Pos delta; + + + if ( !outline ) + return FT_THROW( Invalid_Outline ); + + if ( !func_interface ) + return FT_THROW( Invalid_Argument ); + + shift = func_interface->shift; + delta = func_interface->delta; + + last = -1; + for ( n = 0; n < outline->n_contours; n++ ) + { + FT_TRACE5(( "FT_Outline_Decompose: Contour %d\n", n )); + + first = last + 1; + last = outline->contours[n]; + if ( last < first ) + goto Invalid_Outline; + + limit = outline->points + last; + + v_start = outline->points[first]; + v_start.x = SCALED( v_start.x ); + v_start.y = SCALED( v_start.y ); + + v_last = outline->points[last]; + v_last.x = SCALED( v_last.x ); + v_last.y = SCALED( v_last.y ); + + v_control = v_start; + + point = outline->points + first; + tags = outline->tags + first; + tag = FT_CURVE_TAG( tags[0] ); + + /* A contour cannot start with a cubic control point! */ + if ( tag == FT_CURVE_TAG_CUBIC ) + goto Invalid_Outline; + + /* check first point to determine origin */ + if ( tag == FT_CURVE_TAG_CONIC ) + { + /* first point is conic control. Yes, this happens. */ + if ( FT_CURVE_TAG( outline->tags[last] ) == FT_CURVE_TAG_ON ) + { + /* start at last point if it is on the curve */ + v_start = v_last; + limit--; + } + else + { + /* if both first and last points are conic, */ + /* start at their middle and record its position */ + /* for closure */ + v_start.x = ( v_start.x + v_last.x ) / 2; + v_start.y = ( v_start.y + v_last.y ) / 2; + + /* v_last = v_start; */ + } + point--; + tags--; + } + + FT_TRACE5(( " move to (%.2f, %.2f)\n", + (double)v_start.x / 64, (double)v_start.y / 64 )); + error = func_interface->move_to( &v_start, user ); + if ( error ) + goto Exit; + + while ( point < limit ) + { + point++; + tags++; + + tag = FT_CURVE_TAG( tags[0] ); + switch ( tag ) + { + case FT_CURVE_TAG_ON: /* emit a single line_to */ + { + FT_Vector vec; + + + vec.x = SCALED( point->x ); + vec.y = SCALED( point->y ); + + FT_TRACE5(( " line to (%.2f, %.2f)\n", + (double)vec.x / 64, (double)vec.y / 64 )); + error = func_interface->line_to( &vec, user ); + if ( error ) + goto Exit; + continue; + } + + case FT_CURVE_TAG_CONIC: /* consume conic arcs */ + v_control.x = SCALED( point->x ); + v_control.y = SCALED( point->y ); + + Do_Conic: + if ( point < limit ) + { + FT_Vector vec; + FT_Vector v_middle; + + + point++; + tags++; + tag = FT_CURVE_TAG( tags[0] ); + + vec.x = SCALED( point->x ); + vec.y = SCALED( point->y ); + + if ( tag == FT_CURVE_TAG_ON ) + { + FT_TRACE5(( " conic to (%.2f, %.2f)" + " with control (%.2f, %.2f)\n", + (double)vec.x / 64, + (double)vec.y / 64, + (double)v_control.x / 64, + (double)v_control.y / 64 )); + error = func_interface->conic_to( &v_control, &vec, user ); + if ( error ) + goto Exit; + continue; + } + + if ( tag != FT_CURVE_TAG_CONIC ) + goto Invalid_Outline; + + v_middle.x = ( v_control.x + vec.x ) / 2; + v_middle.y = ( v_control.y + vec.y ) / 2; + + FT_TRACE5(( " conic to (%.2f, %.2f)" + " with control (%.2f, %.2f)\n", + (double)v_middle.x / 64, + (double)v_middle.y / 64, + (double)v_control.x / 64, + (double)v_control.y / 64 )); + error = func_interface->conic_to( &v_control, &v_middle, user ); + if ( error ) + goto Exit; + + v_control = vec; + goto Do_Conic; + } + + FT_TRACE5(( " conic to (%.2f, %.2f)" + " with control (%.2f, %.2f)\n", + (double)v_start.x / 64, + (double)v_start.y / 64, + (double)v_control.x / 64, + (double)v_control.y / 64 )); + error = func_interface->conic_to( &v_control, &v_start, user ); + goto Close; + + default: /* FT_CURVE_TAG_CUBIC */ + { + FT_Vector vec1, vec2; + + + if ( point + 1 > limit || + FT_CURVE_TAG( tags[1] ) != FT_CURVE_TAG_CUBIC ) + goto Invalid_Outline; + + point += 2; + tags += 2; + + vec1.x = SCALED( point[-2].x ); + vec1.y = SCALED( point[-2].y ); + + vec2.x = SCALED( point[-1].x ); + vec2.y = SCALED( point[-1].y ); + + if ( point <= limit ) + { + FT_Vector vec; + + + vec.x = SCALED( point->x ); + vec.y = SCALED( point->y ); + + FT_TRACE5(( " cubic to (%.2f, %.2f)" + " with controls (%.2f, %.2f) and (%.2f, %.2f)\n", + (double)vec.x / 64, + (double)vec.y / 64, + (double)vec1.x / 64, + (double)vec1.y / 64, + (double)vec2.x / 64, + (double)vec2.y / 64 )); + error = func_interface->cubic_to( &vec1, &vec2, &vec, user ); + if ( error ) + goto Exit; + continue; + } + + FT_TRACE5(( " cubic to (%.2f, %.2f)" + " with controls (%.2f, %.2f) and (%.2f, %.2f)\n", + (double)v_start.x / 64, + (double)v_start.y / 64, + (double)vec1.x / 64, + (double)vec1.y / 64, + (double)vec2.x / 64, + (double)vec2.y / 64 )); + error = func_interface->cubic_to( &vec1, &vec2, &v_start, user ); + goto Close; + } + } + } + + /* close the contour with a line segment */ + FT_TRACE5(( " line to (%.2f, %.2f)\n", + (double)v_start.x / 64, (double)v_start.y / 64 )); + error = func_interface->line_to( &v_start, user ); + + Close: + if ( error ) + goto Exit; + } + + FT_TRACE5(( "FT_Outline_Decompose: Done\n" )); + return FT_Err_Ok; + + Invalid_Outline: + error = FT_THROW( Invalid_Outline ); + /* fall through */ + + Exit: + FT_TRACE5(( "FT_Outline_Decompose: Error 0x%x\n", error )); + return error; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_New( FT_Library library, + FT_UInt numPoints, + FT_Int numContours, + FT_Outline *anoutline ) + { + FT_Error error; + FT_Memory memory; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + memory = library->memory; + + if ( !anoutline || !memory ) + return FT_THROW( Invalid_Argument ); + + *anoutline = null_outline; + + if ( numContours < 0 || + (FT_UInt)numContours > numPoints ) + return FT_THROW( Invalid_Argument ); + + if ( numPoints > FT_OUTLINE_POINTS_MAX ) + return FT_THROW( Array_Too_Large ); + + if ( FT_NEW_ARRAY( anoutline->points, numPoints ) || + FT_NEW_ARRAY( anoutline->tags, numPoints ) || + FT_NEW_ARRAY( anoutline->contours, numContours ) ) + goto Fail; + + anoutline->n_points = (FT_UShort)numPoints; + anoutline->n_contours = (FT_UShort)numContours; + anoutline->flags |= FT_OUTLINE_OWNER; + + return FT_Err_Ok; + + Fail: + anoutline->flags |= FT_OUTLINE_OWNER; + FT_Outline_Done( library, anoutline ); + + return error; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_Check( FT_Outline* outline ) + { + if ( outline ) + { + FT_Int n_points = outline->n_points; + FT_Int n_contours = outline->n_contours; + FT_Int end0, end; + FT_Int n; + + + FT_TRACE5(( "FT_Outline_Check: contours = %d, points = %d\n", + n_contours, n_points )); + /* empty glyph? */ + if ( n_points == 0 && n_contours == 0 ) + return FT_Err_Ok; + + /* check point and contour counts */ + if ( n_points == 0 || n_contours == 0 ) + goto Bad; + + end0 = -1; + for ( n = 0; n < n_contours; n++ ) + { + end = outline->contours[n]; + + /* note that we don't accept empty contours */ + if ( end <= end0 || end >= n_points ) + goto Bad; + + end0 = end; + } + + if ( end0 != n_points - 1 ) + goto Bad; + + /* XXX: check the tags array */ + return FT_Err_Ok; + } + + Bad: + return FT_THROW( Invalid_Outline ); + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_Copy( const FT_Outline* source, + FT_Outline *target ) + { + FT_Int is_owner; + + + if ( !source || !target ) + return FT_THROW( Invalid_Outline ); + + if ( source->n_points != target->n_points || + source->n_contours != target->n_contours ) + return FT_THROW( Invalid_Argument ); + + if ( source == target ) + return FT_Err_Ok; + + if ( source->n_points ) + { + FT_ARRAY_COPY( target->points, source->points, source->n_points ); + FT_ARRAY_COPY( target->tags, source->tags, source->n_points ); + } + + if ( source->n_contours ) + FT_ARRAY_COPY( target->contours, source->contours, source->n_contours ); + + /* copy all flags, except the `FT_OUTLINE_OWNER' one */ + is_owner = target->flags & FT_OUTLINE_OWNER; + target->flags = source->flags; + + target->flags &= ~FT_OUTLINE_OWNER; + target->flags |= is_owner; + + return FT_Err_Ok; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_Done( FT_Library library, + FT_Outline* outline ) + { + FT_Memory memory; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !outline ) + return FT_THROW( Invalid_Outline ); + + memory = library->memory; + + if ( !memory ) + return FT_THROW( Invalid_Argument ); + + if ( outline->flags & FT_OUTLINE_OWNER ) + { + FT_FREE( outline->points ); + FT_FREE( outline->tags ); + FT_FREE( outline->contours ); + } + *outline = null_outline; + + return FT_Err_Ok; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( void ) + FT_Outline_Get_CBox( const FT_Outline* outline, + FT_BBox *acbox ) + { + FT_Pos xMin, yMin, xMax, yMax; + + + if ( outline && acbox ) + { + if ( outline->n_points == 0 ) + { + xMin = 0; + yMin = 0; + xMax = 0; + yMax = 0; + } + else + { + FT_Vector* vec = outline->points; + FT_Vector* limit = vec + outline->n_points; + + + xMin = xMax = vec->x; + yMin = yMax = vec->y; + vec++; + + for ( ; vec < limit; vec++ ) + { + FT_Pos x, y; + + + x = vec->x; + if ( x < xMin ) xMin = x; + if ( x > xMax ) xMax = x; + + y = vec->y; + if ( y < yMin ) yMin = y; + if ( y > yMax ) yMax = y; + } + } + acbox->xMin = xMin; + acbox->xMax = xMax; + acbox->yMin = yMin; + acbox->yMax = yMax; + } + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( void ) + FT_Outline_Translate( const FT_Outline* outline, + FT_Pos xOffset, + FT_Pos yOffset ) + { + FT_UShort n; + FT_Vector* vec; + + + if ( !outline ) + return; + + vec = outline->points; + + for ( n = 0; n < outline->n_points; n++ ) + { + vec->x = ADD_LONG( vec->x, xOffset ); + vec->y = ADD_LONG( vec->y, yOffset ); + vec++; + } + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( void ) + FT_Outline_Reverse( FT_Outline* outline ) + { + FT_UShort n; + FT_Int first, last; + + + if ( !outline ) + return; + + last = -1; + for ( n = 0; n < outline->n_contours; n++ ) + { + /* keep the first contour point as is and swap points around it */ + /* to guarantee that the cubic arches stay valid after reverse */ + first = last + 2; + last = outline->contours[n]; + + /* reverse point table */ + { + FT_Vector* p = outline->points + first; + FT_Vector* q = outline->points + last; + FT_Vector swap; + + + while ( p < q ) + { + swap = *p; + *p = *q; + *q = swap; + p++; + q--; + } + } + + /* reverse tags table */ + { + FT_Byte* p = outline->tags + first; + FT_Byte* q = outline->tags + last; + + + while ( p < q ) + { + FT_Byte swap; + + + swap = *p; + *p = *q; + *q = swap; + p++; + q--; + } + } + } + + outline->flags ^= FT_OUTLINE_REVERSE_FILL; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_Render( FT_Library library, + FT_Outline* outline, + FT_Raster_Params* params ) + { + FT_Error error; + FT_Renderer renderer; + FT_ListNode node; + FT_BBox cbox; + + + if ( !library ) + return FT_THROW( Invalid_Library_Handle ); + + if ( !outline ) + return FT_THROW( Invalid_Outline ); + + if ( !params ) + return FT_THROW( Invalid_Argument ); + + FT_Outline_Get_CBox( outline, &cbox ); + if ( cbox.xMin < -0x1000000L || cbox.yMin < -0x1000000L || + cbox.xMax > 0x1000000L || cbox.yMax > 0x1000000L ) + return FT_THROW( Invalid_Outline ); + + renderer = library->cur_renderer; + node = library->renderers.head; + + params->source = (void*)outline; + + /* preset clip_box for direct mode */ + if ( params->flags & FT_RASTER_FLAG_DIRECT && + !( params->flags & FT_RASTER_FLAG_CLIP ) ) + { + params->clip_box.xMin = cbox.xMin >> 6; + params->clip_box.yMin = cbox.yMin >> 6; + params->clip_box.xMax = ( cbox.xMax + 63 ) >> 6; + params->clip_box.yMax = ( cbox.yMax + 63 ) >> 6; + } + + error = FT_ERR( Cannot_Render_Glyph ); + while ( renderer ) + { + error = renderer->raster_render( renderer->raster, params ); + if ( !error || FT_ERR_NEQ( error, Cannot_Render_Glyph ) ) + break; + + /* FT_Err_Cannot_Render_Glyph is returned if the render mode */ + /* is unsupported by the current renderer for this glyph image */ + /* format */ + + /* now, look for another renderer that supports the same */ + /* format */ + renderer = FT_Lookup_Renderer( library, FT_GLYPH_FORMAT_OUTLINE, + &node ); + } + + return error; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_Get_Bitmap( FT_Library library, + FT_Outline* outline, + const FT_Bitmap *abitmap ) + { + FT_Raster_Params params; + + + if ( !abitmap ) + return FT_THROW( Invalid_Argument ); + + /* other checks are delayed to `FT_Outline_Render' */ + + params.target = abitmap; + params.flags = 0; + + if ( abitmap->pixel_mode == FT_PIXEL_MODE_GRAY || + abitmap->pixel_mode == FT_PIXEL_MODE_LCD || + abitmap->pixel_mode == FT_PIXEL_MODE_LCD_V ) + params.flags |= FT_RASTER_FLAG_AA; + + return FT_Outline_Render( library, outline, ¶ms ); + } + + + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( void ) + FT_Vector_Transform( FT_Vector* vector, + const FT_Matrix* matrix ) + { + FT_Pos xz, yz; + + + if ( !vector || !matrix ) + return; + + xz = FT_MulFix( vector->x, matrix->xx ) + + FT_MulFix( vector->y, matrix->xy ); + + yz = FT_MulFix( vector->x, matrix->yx ) + + FT_MulFix( vector->y, matrix->yy ); + + vector->x = xz; + vector->y = yz; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( void ) + FT_Outline_Transform( const FT_Outline* outline, + const FT_Matrix* matrix ) + { + FT_Vector* vec; + FT_Vector* limit; + + + if ( !outline || !matrix || !outline->points ) + return; + + vec = outline->points; + limit = vec + outline->n_points; + + for ( ; vec < limit; vec++ ) + FT_Vector_Transform( vec, matrix ); + } + + +#if 0 + +#define FT_OUTLINE_GET_CONTOUR( outline, c, first, last ) \ + do \ + { \ + (first) = ( c > 0 ) ? (outline)->points + \ + (outline)->contours[c - 1] + 1 \ + : (outline)->points; \ + (last) = (outline)->points + (outline)->contours[c]; \ + } while ( 0 ) + + + /* Is a point in some contour? */ + /* */ + /* We treat every point of the contour as if it */ + /* it were ON. That is, we allow false positives, */ + /* but disallow false negatives. (XXX really?) */ + static FT_Bool + ft_contour_has( FT_Outline* outline, + FT_Short c, + FT_Vector* point ) + { + FT_Vector* first; + FT_Vector* last; + FT_Vector* a; + FT_Vector* b; + FT_UInt n = 0; + + + FT_OUTLINE_GET_CONTOUR( outline, c, first, last ); + + for ( a = first; a <= last; a++ ) + { + FT_Pos x; + FT_Int intersect; + + + b = ( a == last ) ? first : a + 1; + + intersect = ( a->y - point->y ) ^ ( b->y - point->y ); + + /* a and b are on the same side */ + if ( intersect >= 0 ) + { + if ( intersect == 0 && a->y == point->y ) + { + if ( ( a->x <= point->x && b->x >= point->x ) || + ( a->x >= point->x && b->x <= point->x ) ) + return 1; + } + + continue; + } + + x = a->x + ( b->x - a->x ) * (point->y - a->y ) / ( b->y - a->y ); + + if ( x < point->x ) + n++; + else if ( x == point->x ) + return 1; + } + + return n & 1; + } + + + static FT_Bool + ft_contour_enclosed( FT_Outline* outline, + FT_UShort c ) + { + FT_Vector* first; + FT_Vector* last; + FT_Short i; + + + FT_OUTLINE_GET_CONTOUR( outline, c, first, last ); + + for ( i = 0; i < outline->n_contours; i++ ) + { + if ( i != c && ft_contour_has( outline, i, first ) ) + { + FT_Vector* pt; + + + for ( pt = first + 1; pt <= last; pt++ ) + if ( !ft_contour_has( outline, i, pt ) ) + return 0; + + return 1; + } + } + + return 0; + } + + + /* This version differs from the public one in that each */ + /* part (contour not enclosed in another contour) of the */ + /* outline is checked for orientation. This is */ + /* necessary for some buggy CJK fonts. */ + static FT_Orientation + ft_outline_get_orientation( FT_Outline* outline ) + { + FT_Short i; + FT_Vector* first; + FT_Vector* last; + FT_Orientation orient = FT_ORIENTATION_NONE; + + + first = outline->points; + for ( i = 0; i < outline->n_contours; i++, first = last + 1 ) + { + FT_Vector* point; + FT_Vector* xmin_point; + FT_Pos xmin; + + + last = outline->points + outline->contours[i]; + + /* skip degenerate contours */ + if ( last < first + 2 ) + continue; + + if ( ft_contour_enclosed( outline, i ) ) + continue; + + xmin = first->x; + xmin_point = first; + + for ( point = first + 1; point <= last; point++ ) + { + if ( point->x < xmin ) + { + xmin = point->x; + xmin_point = point; + } + } + + /* check the orientation of the contour */ + { + FT_Vector* prev; + FT_Vector* next; + FT_Orientation o; + + + prev = ( xmin_point == first ) ? last : xmin_point - 1; + next = ( xmin_point == last ) ? first : xmin_point + 1; + + if ( FT_Atan2( prev->x - xmin_point->x, prev->y - xmin_point->y ) > + FT_Atan2( next->x - xmin_point->x, next->y - xmin_point->y ) ) + o = FT_ORIENTATION_POSTSCRIPT; + else + o = FT_ORIENTATION_TRUETYPE; + + if ( orient == FT_ORIENTATION_NONE ) + orient = o; + else if ( orient != o ) + return FT_ORIENTATION_NONE; + } + } + + return orient; + } + +#endif /* 0 */ + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_Embolden( FT_Outline* outline, + FT_Pos strength ) + { + return FT_Outline_EmboldenXY( outline, strength, strength ); + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Outline_EmboldenXY( FT_Outline* outline, + FT_Pos xstrength, + FT_Pos ystrength ) + { + FT_Vector* points; + FT_Int c, first, last; + FT_Orientation orientation; + + + if ( !outline ) + return FT_THROW( Invalid_Outline ); + + xstrength /= 2; + ystrength /= 2; + if ( xstrength == 0 && ystrength == 0 ) + return FT_Err_Ok; + + orientation = FT_Outline_Get_Orientation( outline ); + if ( orientation == FT_ORIENTATION_NONE ) + { + if ( outline->n_contours ) + return FT_THROW( Invalid_Argument ); + else + return FT_Err_Ok; + } + + points = outline->points; + + last = -1; + for ( c = 0; c < outline->n_contours; c++ ) + { + FT_Vector in, out, anchor, shift; + FT_Fixed l_in, l_out, l_anchor = 0, l, q, d; + FT_Int i, j, k; + + + first = last + 1; + last = outline->contours[c]; + l_in = 0; + + /* pacify compiler */ + in.x = in.y = anchor.x = anchor.y = 0; + + /* Counter j cycles though the points; counter i advances only */ + /* when points are moved; anchor k marks the first moved point. */ + for ( i = last, j = first, k = -1; + j != i && i != k; + j = j < last ? j + 1 : first ) + { + if ( j != k ) + { + out.x = points[j].x - points[i].x; + out.y = points[j].y - points[i].y; + l_out = (FT_Fixed)FT_Vector_NormLen( &out ); + + if ( l_out == 0 ) + continue; + } + else + { + out = anchor; + l_out = l_anchor; + } + + if ( l_in != 0 ) + { + if ( k < 0 ) + { + k = i; + anchor = in; + l_anchor = l_in; + } + + d = FT_MulFix( in.x, out.x ) + FT_MulFix( in.y, out.y ); + + /* shift only if turn is less than ~160 degrees */ + if ( d > -0xF000L ) + { + d = d + 0x10000L; + + /* shift components along lateral bisector in proper orientation */ + shift.x = in.y + out.y; + shift.y = in.x + out.x; + + if ( orientation == FT_ORIENTATION_TRUETYPE ) + shift.x = -shift.x; + else + shift.y = -shift.y; + + /* restrict shift magnitude to better handle collapsing segments */ + q = FT_MulFix( out.x, in.y ) - FT_MulFix( out.y, in.x ); + if ( orientation == FT_ORIENTATION_TRUETYPE ) + q = -q; + + l = FT_MIN( l_in, l_out ); + + /* non-strict inequalities avoid divide-by-zero when q == l == 0 */ + if ( FT_MulFix( xstrength, q ) <= FT_MulFix( l, d ) ) + shift.x = FT_MulDiv( shift.x, xstrength, d ); + else + shift.x = FT_MulDiv( shift.x, l, q ); + + + if ( FT_MulFix( ystrength, q ) <= FT_MulFix( l, d ) ) + shift.y = FT_MulDiv( shift.y, ystrength, d ); + else + shift.y = FT_MulDiv( shift.y, l, q ); + } + else + shift.x = shift.y = 0; + + for ( ; + i != j; + i = i < last ? i + 1 : first ) + { + points[i].x += xstrength + shift.x; + points[i].y += ystrength + shift.y; + } + } + else + i = j; + + in = out; + l_in = l_out; + } + } + + return FT_Err_Ok; + } + + + /* documentation is in ftoutln.h */ + + FT_EXPORT_DEF( FT_Orientation ) + FT_Outline_Get_Orientation( FT_Outline* outline ) + { + FT_BBox cbox = { 0, 0, 0, 0 }; + FT_Int xshift, yshift; + FT_Vector* points; + FT_Vector v_prev, v_cur; + FT_Int c, n, first, last; + FT_Pos area = 0; + + + if ( !outline || outline->n_points <= 0 ) + return FT_ORIENTATION_TRUETYPE; + + /* We use the nonzero winding rule to find the orientation. */ + /* Since glyph outlines behave much more `regular' than arbitrary */ + /* cubic or quadratic curves, this test deals with the polygon */ + /* only that is spanned up by the control points. */ + + FT_Outline_Get_CBox( outline, &cbox ); + + /* Handle collapsed outlines to avoid undefined FT_MSB. */ + if ( cbox.xMin == cbox.xMax || cbox.yMin == cbox.yMax ) + return FT_ORIENTATION_NONE; + + /* 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 ); + + yshift = FT_MSB( (FT_UInt32)( cbox.yMax - cbox.yMin ) ) - 14; + yshift = FT_MAX( yshift, 0 ); + + points = outline->points; + + last = -1; + for ( c = 0; c < outline->n_contours; c++ ) + { + first = last + 1; + last = outline->contours[c]; + + v_prev.x = points[last].x >> xshift; + v_prev.y = points[last].y >> yshift; + + for ( n = first; n <= last; n++ ) + { + v_cur.x = points[n].x >> xshift; + v_cur.y = points[n].y >> yshift; + + area = ADD_LONG( area, + MUL_LONG( v_cur.y - v_prev.y, + v_cur.x + v_prev.x ) ); + + v_prev = v_cur; + } + } + + if ( area > 0 ) + return FT_ORIENTATION_POSTSCRIPT; + else if ( area < 0 ) + return FT_ORIENTATION_TRUETYPE; + else + return FT_ORIENTATION_NONE; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftpsprop.c b/non-source/foreign/freetype2/src/base/ftpsprop.c new file mode 100644 index 000000000..37a6cee6c --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftpsprop.c @@ -0,0 +1,284 @@ +/**************************************************************************** + * + * ftpsprop.c + * + * Get and set properties of PostScript drivers (body). + * See `ftdriver.h' for available properties. + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/ftdriver.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/psaux.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftpsprop.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 psprops + + + FT_BASE_CALLBACK_DEF( FT_Error ) + ps_property_set( FT_Module module, /* PS_Driver */ + const char* property_name, + const void* value, + FT_Bool value_is_string ) + { + FT_Error error = FT_Err_Ok; + PS_Driver driver = (PS_Driver)module; + +#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + FT_UNUSED( value_is_string ); +#endif + + + if ( !ft_strcmp( property_name, "darkening-parameters" ) ) + { + FT_Int* darken_params; + FT_Int x1, y1, x2, y2, x3, y3, x4, y4; + +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + FT_Int dp[8]; + + + if ( value_is_string ) + { + const char* s = (const char*)value; + char* ep; + int i; + + + /* eight comma-separated numbers */ + for ( i = 0; i < 7; i++ ) + { + dp[i] = (FT_Int)ft_strtol( s, &ep, 10 ); + if ( *ep != ',' || s == ep ) + return FT_THROW( Invalid_Argument ); + + s = ep + 1; + } + + dp[7] = (FT_Int)ft_strtol( s, &ep, 10 ); + if ( !( *ep == '\0' || *ep == ' ' ) || s == ep ) + return FT_THROW( Invalid_Argument ); + + darken_params = dp; + } + else +#endif + darken_params = (FT_Int*)value; + + x1 = darken_params[0]; + y1 = darken_params[1]; + x2 = darken_params[2]; + y2 = darken_params[3]; + x3 = darken_params[4]; + y3 = darken_params[5]; + x4 = darken_params[6]; + y4 = darken_params[7]; + + if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 || + y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 || + x1 > x2 || x2 > x3 || x3 > x4 || + y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 ) + return FT_THROW( Invalid_Argument ); + + driver->darken_params[0] = x1; + driver->darken_params[1] = y1; + driver->darken_params[2] = x2; + driver->darken_params[3] = y2; + driver->darken_params[4] = x3; + driver->darken_params[5] = y3; + driver->darken_params[6] = x4; + driver->darken_params[7] = y4; + + return error; + } + + else if ( !ft_strcmp( property_name, "hinting-engine" ) ) + { +#if defined( CFF_CONFIG_OPTION_OLD_ENGINE ) || \ + defined( T1_CONFIG_OPTION_OLD_ENGINE ) + const char* module_name = module->clazz->module_name; +#endif + + +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + if ( value_is_string ) + { + const char* s = (const char*)value; + + + if ( !ft_strcmp( s, "adobe" ) ) + driver->hinting_engine = FT_HINTING_ADOBE; + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + else if ( !ft_strcmp( module_name, "cff" ) && + !ft_strcmp( s, "freetype" ) ) + driver->hinting_engine = FT_HINTING_FREETYPE; +#endif + +#ifdef T1_CONFIG_OPTION_OLD_ENGINE + else if ( ( !ft_strcmp( module_name, "type1" ) || + !ft_strcmp( module_name, "t1cid" ) ) && + !ft_strcmp( s, "freetype" ) ) + driver->hinting_engine = FT_HINTING_FREETYPE; +#endif + + else + return FT_THROW( Invalid_Argument ); + } + else +#endif /* FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES */ + { + FT_UInt* hinting_engine = (FT_UInt*)value; + + + if ( *hinting_engine == FT_HINTING_ADOBE +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + || ( *hinting_engine == FT_HINTING_FREETYPE && + !ft_strcmp( module_name, "cff" ) ) +#endif +#ifdef T1_CONFIG_OPTION_OLD_ENGINE + || ( *hinting_engine == FT_HINTING_FREETYPE && + ( !ft_strcmp( module_name, "type1" ) || + !ft_strcmp( module_name, "t1cid" ) ) ) +#endif + ) + driver->hinting_engine = *hinting_engine; + else + error = FT_ERR( Unimplemented_Feature ); + } + + return error; + } + + else if ( !ft_strcmp( property_name, "no-stem-darkening" ) ) + { +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + if ( value_is_string ) + { + const char* s = (const char*)value; + long nsd = ft_strtol( s, NULL, 10 ); + + + if ( !nsd ) + driver->no_stem_darkening = FALSE; + else + driver->no_stem_darkening = TRUE; + } + else +#endif + { + FT_Bool* no_stem_darkening = (FT_Bool*)value; + + + driver->no_stem_darkening = *no_stem_darkening; + } + + return error; + } + + else if ( !ft_strcmp( property_name, "random-seed" ) ) + { + FT_Int32 random_seed; + + +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + if ( value_is_string ) + { + const char* s = (const char*)value; + + + random_seed = (FT_Int32)ft_strtol( s, NULL, 10 ); + } + else +#endif + random_seed = *(FT_Int32*)value; + + if ( random_seed < 0 ) + random_seed = 0; + + driver->random_seed = random_seed; + + return error; + } + + FT_TRACE2(( "ps_property_set: missing property `%s'\n", + property_name )); + return FT_THROW( Missing_Property ); + } + + + FT_BASE_CALLBACK_DEF( FT_Error ) + ps_property_get( FT_Module module, /* PS_Driver */ + const char* property_name, + void* value ) + { + FT_Error error = FT_Err_Ok; + PS_Driver driver = (PS_Driver)module; + + + if ( !ft_strcmp( property_name, "darkening-parameters" ) ) + { + FT_Int* darken_params = driver->darken_params; + FT_Int* val = (FT_Int*)value; + + + val[0] = darken_params[0]; + val[1] = darken_params[1]; + val[2] = darken_params[2]; + val[3] = darken_params[3]; + val[4] = darken_params[4]; + val[5] = darken_params[5]; + val[6] = darken_params[6]; + val[7] = darken_params[7]; + + return error; + } + + else if ( !ft_strcmp( property_name, "hinting-engine" ) ) + { + FT_UInt hinting_engine = driver->hinting_engine; + FT_UInt* val = (FT_UInt*)value; + + + *val = hinting_engine; + + return error; + } + + else if ( !ft_strcmp( property_name, "no-stem-darkening" ) ) + { + FT_Bool no_stem_darkening = driver->no_stem_darkening; + FT_Bool* val = (FT_Bool*)value; + + + *val = no_stem_darkening; + + return error; + } + + FT_TRACE2(( "ps_property_get: missing property `%s'\n", + property_name )); + return FT_THROW( Missing_Property ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftrfork.c b/non-source/foreign/freetype2/src/base/ftrfork.c new file mode 100644 index 000000000..dc9b043d8 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftrfork.c @@ -0,0 +1,934 @@ +/**************************************************************************** + * + * ftrfork.c + * + * Embedded resource forks accessor (body). + * + * Copyright (C) 2004-2024 by + * Masatake YAMATO and Redhat K.K. + * + * FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are + * derived from ftobjs.c. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +/**************************************************************************** + * Development of the code in this file is support of + * Information-technology Promotion Agency, Japan. + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/ftrfork.h> + +#include "ftbase.h" + +#undef FT_COMPONENT +#define FT_COMPONENT raccess + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** Resource fork directory access ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + FT_BASE_DEF( FT_Error ) + FT_Raccess_Get_HeaderInfo( FT_Library library, + FT_Stream stream, + FT_Long rfork_offset, + FT_Long *map_offset, + FT_Long *rdata_pos ) + { + FT_Error error; + unsigned char head[16], head2[16]; + FT_Long map_pos, map_len, rdata_len; + int allzeros, allmatch, i; + FT_Long type_list; + + FT_UNUSED( library ); + + + error = FT_Stream_Seek( stream, (FT_ULong)rfork_offset ); + if ( error ) + return error; + + error = FT_Stream_Read( stream, (FT_Byte*)head, 16 ); + if ( error ) + return error; + + /* ensure positive values */ + if ( head[0] >= 0x80 || + head[4] >= 0x80 || + head[8] >= 0x80 || + head[12] >= 0x80 ) + return FT_THROW( Unknown_File_Format ); + + *rdata_pos = ( head[ 0] << 24 ) | + ( head[ 1] << 16 ) | + ( head[ 2] << 8 ) | + head[ 3]; + map_pos = ( head[ 4] << 24 ) | + ( head[ 5] << 16 ) | + ( head[ 6] << 8 ) | + head[ 7]; + rdata_len = ( head[ 8] << 24 ) | + ( head[ 9] << 16 ) | + ( head[10] << 8 ) | + head[11]; + map_len = ( head[12] << 24 ) | + ( head[13] << 16 ) | + ( head[14] << 8 ) | + head[15]; + + /* the map must not be empty */ + if ( !map_pos ) + return FT_THROW( Unknown_File_Format ); + + /* check whether rdata and map overlap */ + if ( *rdata_pos < map_pos ) + { + if ( *rdata_pos > map_pos - rdata_len ) + return FT_THROW( Unknown_File_Format ); + } + else + { + if ( map_pos > *rdata_pos - map_len ) + return FT_THROW( Unknown_File_Format ); + } + + /* check whether end of rdata or map exceeds stream size */ + if ( FT_LONG_MAX - rdata_len < *rdata_pos || + FT_LONG_MAX - map_len < map_pos || + + FT_LONG_MAX - ( *rdata_pos + rdata_len ) < rfork_offset || + FT_LONG_MAX - ( map_pos + map_len ) < rfork_offset || + + (FT_ULong)( rfork_offset + *rdata_pos + rdata_len ) > stream->size || + (FT_ULong)( rfork_offset + map_pos + map_len ) > stream->size ) + return FT_THROW( Unknown_File_Format ); + + *rdata_pos += rfork_offset; + map_pos += rfork_offset; + + error = FT_Stream_Seek( stream, (FT_ULong)map_pos ); + if ( error ) + return error; + + head2[15] = (FT_Byte)( head[15] + 1 ); /* make it be different */ + + error = FT_Stream_Read( stream, (FT_Byte*)head2, 16 ); + if ( error ) + return error; + + allzeros = 1; + allmatch = 1; + for ( i = 0; i < 16; i++ ) + { + if ( head2[i] != 0 ) + allzeros = 0; + if ( head2[i] != head[i] ) + allmatch = 0; + } + if ( !allzeros && !allmatch ) + return FT_THROW( Unknown_File_Format ); + + /* If we have reached this point then it is probably a mac resource */ + /* file. Now, does it contain any interesting resources? */ + + (void)FT_STREAM_SKIP( 4 /* skip handle to next resource map */ + + 2 /* skip file resource number */ + + 2 ); /* skip attributes */ + + if ( FT_READ_SHORT( type_list ) ) + return error; + if ( type_list < 0 ) + return FT_THROW( Unknown_File_Format ); + + error = FT_Stream_Seek( stream, (FT_ULong)( map_pos + type_list ) ); + if ( error ) + return error; + + *map_offset = map_pos + type_list; + return FT_Err_Ok; + } + + + FT_COMPARE_DEF( int ) + ft_raccess_sort_ref_by_id( const void* a, + const void* b ) + { + return ( (FT_RFork_Ref*)a )->res_id - ( (FT_RFork_Ref*)b )->res_id; + } + + + FT_BASE_DEF( FT_Error ) + FT_Raccess_Get_DataOffsets( FT_Library library, + FT_Stream stream, + FT_Long map_offset, + FT_Long rdata_pos, + FT_Long tag, + FT_Bool sort_by_res_id, + FT_Long **offsets, + FT_Long *count ) + { + FT_Error error; + int i, j, cnt, subcnt; + FT_Long tag_internal, rpos; + FT_Memory memory = library->memory; + FT_Long temp; + FT_Long *offsets_internal = NULL; + FT_RFork_Ref *ref = NULL; + + + FT_TRACE3(( "\n" )); + error = FT_Stream_Seek( stream, (FT_ULong)map_offset ); + if ( error ) + return error; + + if ( FT_READ_SHORT( cnt ) ) + return error; + cnt++; + + /* `rpos' is a signed 16bit integer offset to resource records; the */ + /* size of a resource record is 12 bytes. The map header is 28 bytes, */ + /* and a type list needs 10 bytes or more. If we assume that the name */ + /* list is empty and we have only a single entry in the type list, */ + /* there can be at most */ + /* */ + /* (32768 - 28 - 10) / 12 = 2727 */ + /* */ + /* resources. */ + /* */ + /* A type list starts with a two-byte counter, followed by 10-byte */ + /* type records. Assuming that there are no resources, the number of */ + /* type records can be at most */ + /* */ + /* (32768 - 28 - 2) / 8 = 4079 */ + /* */ + if ( cnt > 4079 ) + return FT_THROW( Invalid_Table ); + + for ( i = 0; i < cnt; i++ ) + { + if ( FT_READ_LONG( tag_internal ) || + FT_READ_SHORT( subcnt ) || + FT_READ_SHORT( rpos ) ) + return error; + + FT_TRACE2(( "Resource tags: %c%c%c%c\n", + (char)( 0xFF & ( tag_internal >> 24 ) ), + (char)( 0xFF & ( tag_internal >> 16 ) ), + (char)( 0xFF & ( tag_internal >> 8 ) ), + (char)( 0xFF & ( tag_internal >> 0 ) ) )); + FT_TRACE3(( " : subcount=%d, suboffset=0x%04lx\n", + subcnt, rpos )); + + if ( tag_internal == tag ) + { + *count = subcnt + 1; + rpos += map_offset; + + /* a zero count might be valid in the resource specification, */ + /* however, it is completely useless to us */ + if ( *count < 1 || *count > 2727 ) + return FT_THROW( Invalid_Table ); + + error = FT_Stream_Seek( stream, (FT_ULong)rpos ); + if ( error ) + return error; + + if ( FT_QNEW_ARRAY( ref, *count ) ) + return error; + + for ( j = 0; j < *count; j++ ) + { + if ( FT_READ_SHORT( ref[j].res_id ) ) + goto Exit; + if ( FT_STREAM_SKIP( 2 ) ) /* resource name offset */ + goto Exit; + if ( FT_READ_LONG( temp ) ) /* attributes (8bit), offset (24bit) */ + goto Exit; + if ( FT_STREAM_SKIP( 4 ) ) /* mbz */ + goto Exit; + + /* + * According to Inside Macintosh: More Macintosh Toolbox, + * "Resource IDs" (1-46), there are some reserved IDs. + * However, FreeType2 is not a font synthesizer, no need + * to check the acceptable resource ID. + */ + if ( temp < 0 ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + ref[j].offset = temp & 0xFFFFFFL; + + FT_TRACE3(( " [%d]:" + " resource_id=0x%04x, offset=0x%08lx\n", + j, (FT_UShort)ref[j].res_id, ref[j].offset )); + } + + if ( sort_by_res_id ) + { + ft_qsort( ref, + (size_t)*count, + sizeof ( FT_RFork_Ref ), + ft_raccess_sort_ref_by_id ); + + FT_TRACE3(( " -- sort resources by their ids --\n" )); + + for ( j = 0; j < *count; j++ ) + FT_TRACE3(( " [%d]:" + " resource_id=0x%04x, offset=0x%08lx\n", + j, ref[j].res_id, ref[j].offset )); + } + + if ( FT_QNEW_ARRAY( offsets_internal, *count ) ) + goto Exit; + + /* XXX: duplicated reference ID, + * gap between reference IDs are acceptable? + * further investigation on Apple implementation is needed. + */ + for ( j = 0; j < *count; j++ ) + offsets_internal[j] = rdata_pos + ref[j].offset; + + *offsets = offsets_internal; + error = FT_Err_Ok; + + Exit: + FT_FREE( ref ); + return error; + } + } + + return FT_THROW( Cannot_Open_Resource ); + } + + +#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** Guessing functions ****/ + /**** ****/ + /**** When you add a new guessing function, ****/ + /**** update FT_RACCESS_N_RULES in ftrfork.h. ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + static FT_Error + raccess_guess_apple_double( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_apple_single( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_darwin_ufs_export( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_darwin_newvfs( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_darwin_hfsplus( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_vfat( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_linux_cap( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_linux_double( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_linux_netatalk( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ); + + + CONST_FT_RFORK_RULE_ARRAY_BEGIN( ft_raccess_guess_table, + ft_raccess_guess_rec ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( apple_double, apple_double ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( apple_single, apple_single ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( darwin_ufs_export, darwin_ufs_export ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( darwin_newvfs, darwin_newvfs ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( darwin_hfsplus, darwin_hfsplus ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( vfat, vfat ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( linux_cap, linux_cap ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( linux_double, linux_double ) + CONST_FT_RFORK_RULE_ARRAY_ENTRY( linux_netatalk, linux_netatalk ) + CONST_FT_RFORK_RULE_ARRAY_END + + + /*************************************************************************/ + /**** ****/ + /**** Helper functions ****/ + /**** ****/ + /*************************************************************************/ + + static FT_Error + raccess_guess_apple_generic( FT_Library library, + FT_Stream stream, + char *base_file_name, + FT_Int32 magic, + FT_Long *result_offset ); + + static FT_Error + raccess_guess_linux_double_from_file_name( FT_Library library, + char* file_name, + FT_Long *result_offset ); + + static char * + raccess_make_file_name( FT_Memory memory, + const char *original_name, + const char *insertion ); + + FT_BASE_DEF( void ) + FT_Raccess_Guess( FT_Library library, + FT_Stream stream, + char* base_name, + char **new_names, + FT_Long *offsets, + FT_Error *errors ) + { + FT_Int i; + + + for ( i = 0; i < FT_RACCESS_N_RULES; i++ ) + { + new_names[i] = NULL; + if ( NULL != stream ) + errors[i] = FT_Stream_Seek( stream, 0 ); + else + errors[i] = FT_Err_Ok; + + if ( errors[i] ) + continue; + + errors[i] = ft_raccess_guess_table[i].func( library, + stream, base_name, + &(new_names[i]), + &(offsets[i]) ); + } + + return; + } + + +#if defined( FT_CONFIG_OPTION_MAC_FONTS ) && !defined( FT_MACINTOSH ) + static FT_RFork_Rule + raccess_get_rule_type_from_rule_index( FT_Library library, + FT_UInt rule_index ) + { + FT_UNUSED( library ); + + if ( rule_index >= FT_RACCESS_N_RULES ) + return FT_RFork_Rule_invalid; + + return ft_raccess_guess_table[rule_index].type; + } + + + /* + * For this function, refer ftbase.h. + */ + FT_LOCAL_DEF( FT_Bool ) + ft_raccess_rule_by_darwin_vfs( FT_Library library, + FT_UInt rule_index ) + { + switch( raccess_get_rule_type_from_rule_index( library, rule_index ) ) + { + case FT_RFork_Rule_darwin_newvfs: + case FT_RFork_Rule_darwin_hfsplus: + return TRUE; + + default: + return FALSE; + } + } +#endif + + + static FT_Error + raccess_guess_apple_double( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + FT_Int32 magic = ( 0x00 << 24 ) | + ( 0x05 << 16 ) | + ( 0x16 << 8 ) | + 0x07; + + + *result_file_name = NULL; + if ( NULL == stream ) + return FT_THROW( Cannot_Open_Stream ); + + return raccess_guess_apple_generic( library, stream, base_file_name, + magic, result_offset ); + } + + + static FT_Error + raccess_guess_apple_single( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + FT_Int32 magic = ( 0x00 << 24 ) | + ( 0x05 << 16 ) | + ( 0x16 << 8 ) | + 0x00; + + + *result_file_name = NULL; + if ( NULL == stream ) + return FT_THROW( Cannot_Open_Stream ); + + return raccess_guess_apple_generic( library, stream, base_file_name, + magic, result_offset ); + } + + + static FT_Error + raccess_guess_darwin_ufs_export( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + char* newpath; + FT_Error error; + FT_Memory memory; + + FT_UNUSED( stream ); + + + memory = library->memory; + newpath = raccess_make_file_name( memory, base_file_name, "._" ); + if ( !newpath ) + return FT_THROW( Out_Of_Memory ); + + error = raccess_guess_linux_double_from_file_name( library, newpath, + result_offset ); + if ( !error ) + *result_file_name = newpath; + else + FT_FREE( newpath ); + + return error; + } + + + static FT_Error + raccess_guess_darwin_hfsplus( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + /* + Only meaningful on systems with hfs+ drivers (or Macs). + */ + FT_Error error; + char* newpath = NULL; + FT_Memory memory; + FT_Long base_file_len = (FT_Long)ft_strlen( base_file_name ); + + FT_UNUSED( stream ); + + + memory = library->memory; + + if ( base_file_len + 6 > FT_INT_MAX ) + return FT_THROW( Array_Too_Large ); + + if ( FT_QALLOC( newpath, base_file_len + 6 ) ) + return error; + + FT_MEM_COPY( newpath, base_file_name, base_file_len ); + FT_MEM_COPY( newpath + base_file_len, "/rsrc", 6 ); + + *result_file_name = newpath; + *result_offset = 0; + + return FT_Err_Ok; + } + + + static FT_Error + raccess_guess_darwin_newvfs( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + /* + Only meaningful on systems with Mac OS X (> 10.1). + */ + FT_Error error; + char* newpath = NULL; + FT_Memory memory; + FT_Long base_file_len = (FT_Long)ft_strlen( base_file_name ); + + FT_UNUSED( stream ); + + + memory = library->memory; + + if ( base_file_len + 18 > FT_INT_MAX ) + return FT_THROW( Array_Too_Large ); + + if ( FT_QALLOC( newpath, base_file_len + 18 ) ) + return error; + + FT_MEM_COPY( newpath, base_file_name, base_file_len ); + FT_MEM_COPY( newpath + base_file_len, "/..namedfork/rsrc", 18 ); + + *result_file_name = newpath; + *result_offset = 0; + + return FT_Err_Ok; + } + + + static FT_Error + raccess_guess_vfat( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + char* newpath; + FT_Memory memory; + + FT_UNUSED( stream ); + + + memory = library->memory; + + newpath = raccess_make_file_name( memory, base_file_name, + "resource.frk/" ); + if ( !newpath ) + return FT_THROW( Out_Of_Memory ); + + *result_file_name = newpath; + *result_offset = 0; + + return FT_Err_Ok; + } + + + static FT_Error + raccess_guess_linux_cap( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + char* newpath; + FT_Memory memory; + + FT_UNUSED( stream ); + + + memory = library->memory; + + newpath = raccess_make_file_name( memory, base_file_name, ".resource/" ); + if ( !newpath ) + return FT_THROW( Out_Of_Memory ); + + *result_file_name = newpath; + *result_offset = 0; + + return FT_Err_Ok; + } + + + static FT_Error + raccess_guess_linux_double( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + char* newpath; + FT_Error error; + FT_Memory memory; + + FT_UNUSED( stream ); + + + memory = library->memory; + + newpath = raccess_make_file_name( memory, base_file_name, "%" ); + if ( !newpath ) + return FT_THROW( Out_Of_Memory ); + + error = raccess_guess_linux_double_from_file_name( library, newpath, + result_offset ); + if ( !error ) + *result_file_name = newpath; + else + FT_FREE( newpath ); + + return error; + } + + + static FT_Error + raccess_guess_linux_netatalk( FT_Library library, + FT_Stream stream, + char *base_file_name, + char **result_file_name, + FT_Long *result_offset ) + { + char* newpath; + FT_Error error; + FT_Memory memory; + + FT_UNUSED( stream ); + + + memory = library->memory; + + newpath = raccess_make_file_name( memory, base_file_name, + ".AppleDouble/" ); + if ( !newpath ) + return FT_THROW( Out_Of_Memory ); + + error = raccess_guess_linux_double_from_file_name( library, newpath, + result_offset ); + if ( !error ) + *result_file_name = newpath; + else + FT_FREE( newpath ); + + return error; + } + + + static FT_Error + raccess_guess_apple_generic( FT_Library library, + FT_Stream stream, + char *base_file_name, + FT_Int32 magic, + FT_Long *result_offset ) + { + FT_Int32 magic_from_stream; + FT_Error error; + FT_Int32 version_number = 0; + FT_UShort n_of_entries; + + int i; + FT_Int32 entry_id, entry_offset, entry_length = 0; + + const FT_Int32 resource_fork_entry_id = 0x2; + + FT_UNUSED( library ); + FT_UNUSED( base_file_name ); + FT_UNUSED( version_number ); + FT_UNUSED( entry_length ); + + + if ( FT_READ_LONG( magic_from_stream ) ) + return error; + if ( magic_from_stream != magic ) + return FT_THROW( Unknown_File_Format ); + + if ( FT_READ_LONG( version_number ) ) + return error; + + /* filler */ + error = FT_Stream_Skip( stream, 16 ); + if ( error ) + return error; + + if ( FT_READ_USHORT( n_of_entries ) ) + return error; + if ( n_of_entries == 0 ) + return FT_THROW( Unknown_File_Format ); + + for ( i = 0; i < n_of_entries; i++ ) + { + if ( FT_READ_LONG( entry_id ) ) + return error; + if ( entry_id == resource_fork_entry_id ) + { + if ( FT_READ_LONG( entry_offset ) || + FT_READ_LONG( entry_length ) ) + continue; + *result_offset = entry_offset; + + return FT_Err_Ok; + } + else + { + error = FT_Stream_Skip( stream, 4 + 4 ); /* offset + length */ + if ( error ) + return error; + } + } + + return FT_THROW( Unknown_File_Format ); + } + + + static FT_Error + raccess_guess_linux_double_from_file_name( FT_Library library, + char *file_name, + FT_Long *result_offset ) + { + FT_Open_Args args2; + FT_Stream stream2; + char* nouse = NULL; + FT_Error error; + + + args2.flags = FT_OPEN_PATHNAME; + args2.pathname = file_name; + error = FT_Stream_New( library, &args2, &stream2 ); + if ( error ) + return error; + + error = raccess_guess_apple_double( library, stream2, file_name, + &nouse, result_offset ); + + FT_Stream_Free( stream2, 0 ); + + return error; + } + + + static char* + raccess_make_file_name( FT_Memory memory, + const char *original_name, + const char *insertion ) + { + char* new_name = NULL; + const char* tmp; + const char* slash; + size_t new_length; + FT_Error error; + + + new_length = ft_strlen( original_name ) + ft_strlen( insertion ); + if ( FT_QALLOC( new_name, new_length + 1 ) ) + return NULL; + + tmp = ft_strrchr( original_name, '/' ); + if ( tmp ) + { + ft_strncpy( new_name, + original_name, + (size_t)( tmp - original_name + 1 ) ); + new_name[tmp - original_name + 1] = '\0'; + slash = tmp + 1; + } + else + { + slash = original_name; + new_name[0] = '\0'; + } + + ft_strcat( new_name, insertion ); + ft_strcat( new_name, slash ); + + return new_name; + } + + +#else /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */ + + + /************************************************************************** + * Dummy function; just sets errors + */ + + FT_BASE_DEF( void ) + FT_Raccess_Guess( FT_Library library, + FT_Stream stream, + char *base_name, + char **new_names, + FT_Long *offsets, + FT_Error *errors ) + { + FT_Int i; + + FT_UNUSED( library ); + FT_UNUSED( stream ); + FT_UNUSED( base_name ); + + + for ( i = 0; i < FT_RACCESS_N_RULES; i++ ) + { + new_names[i] = NULL; + offsets[i] = 0; + errors[i] = FT_ERR( Unimplemented_Feature ); + } + } + + +#endif /* !FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftsnames.c b/non-source/foreign/freetype2/src/base/ftsnames.c new file mode 100644 index 000000000..f7231fd61 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftsnames.c @@ -0,0 +1,185 @@ +/**************************************************************************** + * + * ftsnames.c + * + * Simple interface to access SFNT name tables (which are used + * to hold font names, copyright info, notices, etc.) (body). + * + * This is _not_ used to retrieve glyph names! + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> + +#include <freetype/ftsnames.h> +#include <freetype/internal/tttypes.h> +#include <freetype/internal/ftstream.h> + + +#ifdef TT_CONFIG_OPTION_SFNT_NAMES + + + /* documentation is in ftsnames.h */ + + FT_EXPORT_DEF( FT_UInt ) + FT_Get_Sfnt_Name_Count( FT_Face face ) + { + return ( face && FT_IS_SFNT( face ) ) ? ((TT_Face)face)->num_names : 0; + } + + + /* documentation is in ftsnames.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Sfnt_Name( FT_Face face, + FT_UInt idx, + FT_SfntName *aname ) + { + FT_Error error = FT_ERR( Invalid_Argument ); + + + if ( aname && face && FT_IS_SFNT( face ) ) + { + TT_Face ttface = (TT_Face)face; + + + if ( idx < (FT_UInt)ttface->num_names ) + { + TT_Name entry = ttface->name_table.names + idx; + + + /* load name on demand */ + if ( entry->stringLength > 0 && !entry->string ) + { + FT_Memory memory = face->memory; + FT_Stream stream = face->stream; + + + if ( FT_QNEW_ARRAY ( entry->string, entry->stringLength ) || + FT_STREAM_SEEK( entry->stringOffset ) || + FT_STREAM_READ( entry->string, entry->stringLength ) ) + { + FT_FREE( entry->string ); + entry->stringLength = 0; + } + } + + aname->platform_id = entry->platformID; + aname->encoding_id = entry->encodingID; + aname->language_id = entry->languageID; + aname->name_id = entry->nameID; + aname->string = (FT_Byte*)entry->string; + aname->string_len = entry->stringLength; + + error = FT_Err_Ok; + } + } + + return error; + } + + + /* documentation is in ftsnames.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Sfnt_LangTag( FT_Face face, + FT_UInt langID, + FT_SfntLangTag *alangTag ) + { + FT_Error error = FT_ERR( Invalid_Argument ); + + + if ( alangTag && face && FT_IS_SFNT( face ) ) + { + TT_Face ttface = (TT_Face)face; + + + if ( ttface->name_table.format != 1 ) + return FT_THROW( Invalid_Table ); + + if ( langID > 0x8000U && + langID - 0x8000U < ttface->name_table.numLangTagRecords ) + { + TT_LangTag entry = ttface->name_table.langTags + + ( langID - 0x8000U ); + + + /* load name on demand */ + if ( entry->stringLength > 0 && !entry->string ) + { + FT_Memory memory = face->memory; + FT_Stream stream = face->stream; + + + if ( FT_QNEW_ARRAY ( entry->string, entry->stringLength ) || + FT_STREAM_SEEK( entry->stringOffset ) || + FT_STREAM_READ( entry->string, entry->stringLength ) ) + { + FT_FREE( entry->string ); + entry->stringLength = 0; + } + } + + alangTag->string = (FT_Byte*)entry->string; + alangTag->string_len = entry->stringLength; + + error = FT_Err_Ok; + } + } + + return error; + } + + +#else /* !TT_CONFIG_OPTION_SFNT_NAMES */ + + + FT_EXPORT_DEF( FT_UInt ) + FT_Get_Sfnt_Name_Count( FT_Face face ) + { + FT_UNUSED( face ); + + return 0; + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Sfnt_Name( FT_Face face, + FT_UInt idx, + FT_SfntName *aname ) + { + FT_UNUSED( face ); + FT_UNUSED( idx ); + FT_UNUSED( aname ); + + return FT_THROW( Unimplemented_Feature ); + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Get_Sfnt_LangTag( FT_Face face, + FT_UInt langID, + FT_SfntLangTag *alangTag ) + { + FT_UNUSED( face ); + FT_UNUSED( langID ); + FT_UNUSED( alangTag ); + + return FT_THROW( Unimplemented_Feature ); + } + + +#endif /* !TT_CONFIG_OPTION_SFNT_NAMES */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftstream.c b/non-source/foreign/freetype2/src/base/ftstream.c new file mode 100644 index 000000000..667222461 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftstream.c @@ -0,0 +1,872 @@ +/**************************************************************************** + * + * ftstream.c + * + * I/O stream support (body). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftstream.h> +#include <freetype/internal/ftdebug.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 stream + + + FT_BASE_DEF( void ) + FT_Stream_OpenMemory( FT_Stream stream, + const FT_Byte* base, + FT_ULong size ) + { + stream->base = (FT_Byte*) base; + stream->size = size; + stream->pos = 0; + stream->cursor = NULL; + stream->read = NULL; + stream->close = NULL; + } + + + FT_BASE_DEF( void ) + FT_Stream_Close( FT_Stream stream ) + { + if ( stream && stream->close ) + stream->close( stream ); + } + + + FT_BASE_DEF( FT_Error ) + FT_Stream_Seek( FT_Stream stream, + FT_ULong pos ) + { + FT_Error error = FT_Err_Ok; + + + if ( stream->read ) + { + if ( stream->read( stream, pos, NULL, 0 ) ) + { + FT_ERROR(( "FT_Stream_Seek:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + pos, stream->size )); + + error = FT_THROW( Invalid_Stream_Operation ); + } + } + /* note that seeking to the first position after the file is valid */ + else if ( pos > stream->size ) + { + FT_ERROR(( "FT_Stream_Seek:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + pos, stream->size )); + + error = FT_THROW( Invalid_Stream_Operation ); + } + + if ( !error ) + stream->pos = pos; + + return error; + } + + + FT_BASE_DEF( FT_Error ) + FT_Stream_Skip( FT_Stream stream, + FT_Long distance ) + { + if ( distance < 0 ) + return FT_THROW( Invalid_Stream_Operation ); + + return FT_Stream_Seek( stream, stream->pos + (FT_ULong)distance ); + } + + + FT_BASE_DEF( FT_ULong ) + FT_Stream_Pos( FT_Stream stream ) + { + return stream->pos; + } + + + FT_BASE_DEF( FT_Error ) + FT_Stream_Read( FT_Stream stream, + FT_Byte* buffer, + FT_ULong count ) + { + return FT_Stream_ReadAt( stream, stream->pos, buffer, count ); + } + + + FT_BASE_DEF( FT_Error ) + FT_Stream_ReadAt( FT_Stream stream, + FT_ULong pos, + FT_Byte* buffer, + FT_ULong count ) + { + FT_Error error = FT_Err_Ok; + FT_ULong read_bytes; + + + if ( pos >= stream->size ) + { + FT_ERROR(( "FT_Stream_ReadAt:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + pos, stream->size )); + + return FT_THROW( Invalid_Stream_Operation ); + } + + if ( stream->read ) + read_bytes = stream->read( stream, pos, buffer, count ); + else + { + read_bytes = stream->size - pos; + if ( read_bytes > count ) + read_bytes = count; + + /* Allow "reading" zero bytes without UB even if buffer is NULL */ + if ( count ) + FT_MEM_COPY( buffer, stream->base + pos, read_bytes ); + } + + stream->pos = pos + read_bytes; + + if ( read_bytes < count ) + { + FT_ERROR(( "FT_Stream_ReadAt:" + " invalid read; expected %lu bytes, got %lu\n", + count, read_bytes )); + + error = FT_THROW( Invalid_Stream_Operation ); + } + + return error; + } + + + FT_BASE_DEF( FT_ULong ) + FT_Stream_TryRead( FT_Stream stream, + FT_Byte* buffer, + FT_ULong count ) + { + FT_ULong read_bytes = 0; + + + if ( stream->pos >= stream->size ) + goto Exit; + + if ( stream->read ) + read_bytes = stream->read( stream, stream->pos, buffer, count ); + else + { + read_bytes = stream->size - stream->pos; + if ( read_bytes > count ) + read_bytes = count; + + /* Allow "reading" zero bytes without UB even if buffer is NULL */ + if ( count ) + FT_MEM_COPY( buffer, stream->base + stream->pos, read_bytes ); + } + + stream->pos += read_bytes; + + Exit: + return read_bytes; + } + + + FT_BASE_DEF( FT_Error ) + FT_Stream_ExtractFrame( FT_Stream stream, + FT_ULong count, + FT_Byte** pbytes ) + { + FT_Error error; + + + error = FT_Stream_EnterFrame( stream, count ); + if ( !error ) + { + *pbytes = (FT_Byte*)stream->cursor; + + /* equivalent to FT_Stream_ExitFrame(), with no memory block release */ + stream->cursor = NULL; + stream->limit = NULL; + } + + return error; + } + + + FT_BASE_DEF( void ) + FT_Stream_ReleaseFrame( FT_Stream stream, + FT_Byte** pbytes ) + { + if ( stream && stream->read ) + { + FT_Memory memory = stream->memory; + + +#ifdef FT_DEBUG_MEMORY + ft_mem_free( memory, *pbytes ); +#else + FT_FREE( *pbytes ); +#endif + } + + *pbytes = NULL; + } + + + FT_BASE_DEF( FT_Error ) + FT_Stream_EnterFrame( FT_Stream stream, + FT_ULong count ) + { + FT_Error error = FT_Err_Ok; + FT_ULong read_bytes; + + + FT_TRACE7(( "FT_Stream_EnterFrame: %ld bytes\n", count )); + + /* check for nested frame access */ + FT_ASSERT( stream && stream->cursor == 0 ); + + if ( stream->read ) + { + /* allocate the frame in memory */ + FT_Memory memory = stream->memory; + + + /* simple sanity check */ + if ( count > stream->size ) + { + FT_ERROR(( "FT_Stream_EnterFrame:" + " frame size (%lu) larger than stream size (%lu)\n", + count, stream->size )); + + error = FT_THROW( Invalid_Stream_Operation ); + goto Exit; + } + +#ifdef FT_DEBUG_MEMORY + /* assume `ft_debug_file_` and `ft_debug_lineno_` are already set */ + stream->base = (unsigned char*)ft_mem_qalloc( memory, + (FT_Long)count, + &error ); + if ( error ) + goto Exit; +#else + if ( FT_QALLOC( stream->base, count ) ) + goto Exit; +#endif + /* read it */ + read_bytes = stream->read( stream, stream->pos, + stream->base, count ); + if ( read_bytes < count ) + { + FT_ERROR(( "FT_Stream_EnterFrame:" + " invalid read; expected %lu bytes, got %lu\n", + count, read_bytes )); + + FT_FREE( stream->base ); + error = FT_THROW( Invalid_Stream_Operation ); + } + + stream->cursor = stream->base; + stream->limit = FT_OFFSET( stream->cursor, count ); + stream->pos += read_bytes; + } + else + { + /* check current and new position */ + if ( stream->pos >= stream->size || + stream->size - stream->pos < count ) + { + FT_ERROR(( "FT_Stream_EnterFrame:" + " invalid i/o; pos = 0x%lx, count = %lu, size = 0x%lx\n", + stream->pos, count, stream->size )); + + error = FT_THROW( Invalid_Stream_Operation ); + goto Exit; + } + + /* set cursor */ + stream->cursor = stream->base + stream->pos; + stream->limit = stream->cursor + count; + stream->pos += count; + } + + Exit: + return error; + } + + + FT_BASE_DEF( void ) + FT_Stream_ExitFrame( FT_Stream stream ) + { + /* IMPORTANT: The assertion stream->cursor != 0 was removed, given */ + /* that it is possible to access a frame of length 0 in */ + /* some weird fonts (usually, when accessing an array of */ + /* 0 records, like in some strange kern tables). */ + /* */ + /* In this case, the loader code handles the 0-length table */ + /* gracefully; however, stream.cursor is really set to 0 by the */ + /* FT_Stream_EnterFrame() call, and this is not an error. */ + + FT_TRACE7(( "FT_Stream_ExitFrame\n" )); + + FT_ASSERT( stream ); + + if ( stream->read ) + { + FT_Memory memory = stream->memory; + + +#ifdef FT_DEBUG_MEMORY + ft_mem_free( memory, stream->base ); + stream->base = NULL; +#else + FT_FREE( stream->base ); +#endif + } + + stream->cursor = NULL; + stream->limit = NULL; + } + + + FT_BASE_DEF( FT_Byte ) + FT_Stream_GetByte( FT_Stream stream ) + { + FT_Byte result; + + + FT_ASSERT( stream && stream->cursor ); + + result = 0; + if ( stream->cursor < stream->limit ) + result = *stream->cursor++; + + return result; + } + + + FT_BASE_DEF( FT_UInt16 ) + FT_Stream_GetUShort( FT_Stream stream ) + { + FT_Byte* p; + FT_UInt16 result; + + + FT_ASSERT( stream && stream->cursor ); + + result = 0; + p = stream->cursor; + if ( p + 1 < stream->limit ) + result = FT_NEXT_USHORT( p ); + stream->cursor = p; + + return result; + } + + + FT_BASE_DEF( FT_UInt16 ) + FT_Stream_GetUShortLE( FT_Stream stream ) + { + FT_Byte* p; + FT_UInt16 result; + + + FT_ASSERT( stream && stream->cursor ); + + result = 0; + p = stream->cursor; + if ( p + 1 < stream->limit ) + result = FT_NEXT_USHORT_LE( p ); + stream->cursor = p; + + return result; + } + + + FT_BASE_DEF( FT_UInt32 ) + FT_Stream_GetUOffset( FT_Stream stream ) + { + FT_Byte* p; + FT_UInt32 result; + + + FT_ASSERT( stream && stream->cursor ); + + result = 0; + p = stream->cursor; + if ( p + 2 < stream->limit ) + result = FT_NEXT_UOFF3( p ); + stream->cursor = p; + return result; + } + + + FT_BASE_DEF( FT_UInt32 ) + FT_Stream_GetULong( FT_Stream stream ) + { + FT_Byte* p; + FT_UInt32 result; + + + FT_ASSERT( stream && stream->cursor ); + + result = 0; + p = stream->cursor; + if ( p + 3 < stream->limit ) + result = FT_NEXT_ULONG( p ); + stream->cursor = p; + return result; + } + + + FT_BASE_DEF( FT_UInt32 ) + FT_Stream_GetULongLE( FT_Stream stream ) + { + FT_Byte* p; + FT_UInt32 result; + + + FT_ASSERT( stream && stream->cursor ); + + result = 0; + p = stream->cursor; + if ( p + 3 < stream->limit ) + result = FT_NEXT_ULONG_LE( p ); + stream->cursor = p; + return result; + } + + + FT_BASE_DEF( FT_Byte ) + FT_Stream_ReadByte( FT_Stream stream, + FT_Error* error ) + { + FT_Byte result = 0; + + + FT_ASSERT( stream ); + + if ( stream->pos < stream->size ) + { + if ( stream->read ) + { + if ( stream->read( stream, stream->pos, &result, 1L ) != 1L ) + goto Fail; + } + else + result = stream->base[stream->pos]; + } + else + goto Fail; + + stream->pos++; + + *error = FT_Err_Ok; + + return result; + + Fail: + *error = FT_THROW( Invalid_Stream_Operation ); + FT_ERROR(( "FT_Stream_ReadByte:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + stream->pos, stream->size )); + + return result; + } + + + FT_BASE_DEF( FT_UInt16 ) + FT_Stream_ReadUShort( FT_Stream stream, + FT_Error* error ) + { + FT_Byte reads[2]; + FT_Byte* p; + FT_UInt16 result = 0; + + + FT_ASSERT( stream ); + + if ( stream->pos + 1 < stream->size ) + { + if ( stream->read ) + { + if ( stream->read( stream, stream->pos, reads, 2L ) != 2L ) + goto Fail; + + p = reads; + } + else + p = stream->base + stream->pos; + + if ( p ) + result = FT_NEXT_USHORT( p ); + } + else + goto Fail; + + stream->pos += 2; + + *error = FT_Err_Ok; + + return result; + + Fail: + *error = FT_THROW( Invalid_Stream_Operation ); + FT_ERROR(( "FT_Stream_ReadUShort:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + stream->pos, stream->size )); + + return result; + } + + + FT_BASE_DEF( FT_UInt16 ) + FT_Stream_ReadUShortLE( FT_Stream stream, + FT_Error* error ) + { + FT_Byte reads[2]; + FT_Byte* p; + FT_UInt16 result = 0; + + + FT_ASSERT( stream ); + + if ( stream->pos + 1 < stream->size ) + { + if ( stream->read ) + { + if ( stream->read( stream, stream->pos, reads, 2L ) != 2L ) + goto Fail; + + p = reads; + } + else + p = stream->base + stream->pos; + + if ( p ) + result = FT_NEXT_USHORT_LE( p ); + } + else + goto Fail; + + stream->pos += 2; + + *error = FT_Err_Ok; + + return result; + + Fail: + *error = FT_THROW( Invalid_Stream_Operation ); + FT_ERROR(( "FT_Stream_ReadUShortLE:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + stream->pos, stream->size )); + + return result; + } + + + FT_BASE_DEF( FT_ULong ) + FT_Stream_ReadUOffset( FT_Stream stream, + FT_Error* error ) + { + FT_Byte reads[3]; + FT_Byte* p; + FT_ULong result = 0; + + + FT_ASSERT( stream ); + + if ( stream->pos + 2 < stream->size ) + { + if ( stream->read ) + { + if (stream->read( stream, stream->pos, reads, 3L ) != 3L ) + goto Fail; + + p = reads; + } + else + p = stream->base + stream->pos; + + if ( p ) + result = FT_NEXT_UOFF3( p ); + } + else + goto Fail; + + stream->pos += 3; + + *error = FT_Err_Ok; + + return result; + + Fail: + *error = FT_THROW( Invalid_Stream_Operation ); + FT_ERROR(( "FT_Stream_ReadUOffset:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + stream->pos, stream->size )); + + return result; + } + + + FT_BASE_DEF( FT_UInt32 ) + FT_Stream_ReadULong( FT_Stream stream, + FT_Error* error ) + { + FT_Byte reads[4]; + FT_Byte* p; + FT_UInt32 result = 0; + + + FT_ASSERT( stream ); + + if ( stream->pos + 3 < stream->size ) + { + if ( stream->read ) + { + if ( stream->read( stream, stream->pos, reads, 4L ) != 4L ) + goto Fail; + + p = reads; + } + else + p = stream->base + stream->pos; + + if ( p ) + result = FT_NEXT_ULONG( p ); + } + else + goto Fail; + + stream->pos += 4; + + *error = FT_Err_Ok; + + return result; + + Fail: + *error = FT_THROW( Invalid_Stream_Operation ); + FT_ERROR(( "FT_Stream_ReadULong:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + stream->pos, stream->size )); + + return result; + } + + + FT_BASE_DEF( FT_UInt32 ) + FT_Stream_ReadULongLE( FT_Stream stream, + FT_Error* error ) + { + FT_Byte reads[4]; + FT_Byte* p; + FT_UInt32 result = 0; + + + FT_ASSERT( stream ); + + if ( stream->pos + 3 < stream->size ) + { + if ( stream->read ) + { + if ( stream->read( stream, stream->pos, reads, 4L ) != 4L ) + goto Fail; + + p = reads; + } + else + p = stream->base + stream->pos; + + if ( p ) + result = FT_NEXT_ULONG_LE( p ); + } + else + goto Fail; + + stream->pos += 4; + + *error = FT_Err_Ok; + + return result; + + Fail: + *error = FT_THROW( Invalid_Stream_Operation ); + FT_ERROR(( "FT_Stream_ReadULongLE:" + " invalid i/o; pos = 0x%lx, size = 0x%lx\n", + stream->pos, stream->size )); + + return result; + } + + + FT_BASE_DEF( FT_Error ) + FT_Stream_ReadFields( FT_Stream stream, + const FT_Frame_Field* fields, + void* structure ) + { + FT_Error error; + FT_Bool frame_accessed = 0; + FT_Byte* cursor; + + + if ( !fields ) + return FT_THROW( Invalid_Argument ); + + if ( !stream ) + return FT_THROW( Invalid_Stream_Handle ); + + cursor = stream->cursor; + + error = FT_Err_Ok; + do + { + FT_ULong value; + FT_Int sign_shift; + FT_Byte* p; + + + switch ( fields->value ) + { + case ft_frame_start: /* access a new frame */ + error = FT_Stream_EnterFrame( stream, fields->offset ); + if ( error ) + goto Exit; + + frame_accessed = 1; + cursor = stream->cursor; + fields++; + continue; /* loop! */ + + case ft_frame_bytes: /* read a byte sequence */ + case ft_frame_skip: /* skip some bytes */ + { + FT_Offset len = fields->size; + + + if ( len > (FT_Offset)( stream->limit - cursor ) ) + { + error = FT_THROW( Invalid_Stream_Operation ); + goto Exit; + } + + if ( fields->value == ft_frame_bytes ) + { + p = (FT_Byte*)structure + fields->offset; + FT_MEM_COPY( p, cursor, len ); + } + cursor += len; + fields++; + continue; + } + + case ft_frame_byte: + case ft_frame_schar: /* read a single byte */ + value = FT_NEXT_BYTE( cursor ); + sign_shift = 24; + break; + + case ft_frame_short_be: + case ft_frame_ushort_be: /* read a 2-byte big-endian short */ + value = FT_NEXT_USHORT( cursor ); + sign_shift = 16; + break; + + case ft_frame_short_le: + case ft_frame_ushort_le: /* read a 2-byte little-endian short */ + value = FT_NEXT_USHORT_LE( cursor ); + sign_shift = 16; + break; + + case ft_frame_long_be: + case ft_frame_ulong_be: /* read a 4-byte big-endian long */ + value = FT_NEXT_ULONG( cursor ); + sign_shift = 0; + break; + + case ft_frame_long_le: + case ft_frame_ulong_le: /* read a 4-byte little-endian long */ + value = FT_NEXT_ULONG_LE( cursor ); + sign_shift = 0; + break; + + case ft_frame_off3_be: + case ft_frame_uoff3_be: /* read a 3-byte big-endian long */ + value = FT_NEXT_UOFF3( cursor ); + sign_shift = 8; + break; + + case ft_frame_off3_le: + case ft_frame_uoff3_le: /* read a 3-byte little-endian long */ + value = FT_NEXT_UOFF3_LE( cursor ); + sign_shift = 8; + break; + + default: + /* otherwise, exit the loop */ + stream->cursor = cursor; + goto Exit; + } + + /* now, compute the signed value if necessary */ + if ( fields->value & FT_FRAME_OP_SIGNED ) + value = (FT_ULong)( (FT_Int32)( value << sign_shift ) >> sign_shift ); + + /* finally, store the value in the object */ + + p = (FT_Byte*)structure + fields->offset; + switch ( fields->size ) + { + case ( 8 / FT_CHAR_BIT ): + *(FT_Byte*)p = (FT_Byte)value; + break; + + case ( 16 / FT_CHAR_BIT ): + *(FT_UShort*)p = (FT_UShort)value; + break; + + case ( 32 / FT_CHAR_BIT ): + *(FT_UInt32*)p = (FT_UInt32)value; + break; + + default: /* for 64-bit systems */ + *(FT_ULong*)p = (FT_ULong)value; + } + + /* go to next field */ + fields++; + } + while ( 1 ); + + Exit: + /* close the frame if it was opened by this read */ + if ( frame_accessed ) + FT_Stream_ExitFrame( stream ); + + return error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftsystem.c b/non-source/foreign/freetype2/src/base/ftsystem.c new file mode 100644 index 000000000..eee364233 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftsystem.c @@ -0,0 +1,338 @@ +/**************************************************************************** + * + * ftsystem.c + * + * ANSI-specific FreeType low-level system interface (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * This file contains the default interface used by FreeType to access + * low-level, i.e. memory management, i/o access as well as thread + * synchronisation. It can be replaced by user-specific routines if + * necessary. + * + */ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/ftsystem.h> +#include <freetype/fterrors.h> +#include <freetype/fttypes.h> + + + /************************************************************************** + * + * MEMORY MANAGEMENT INTERFACE + * + */ + + /************************************************************************** + * + * It is not necessary to do any error checking for the + * allocation-related functions. This will be done by the higher level + * routines like ft_mem_alloc() or ft_mem_realloc(). + * + */ + + + /************************************************************************** + * + * @Function: + * ft_alloc + * + * @Description: + * The memory allocation function. + * + * @Input: + * memory :: + * A pointer to the memory object. + * + * size :: + * The requested size in bytes. + * + * @Return: + * The address of newly allocated block. + */ + FT_CALLBACK_DEF( void* ) + ft_alloc( FT_Memory memory, + long size ) + { + FT_UNUSED( memory ); + + return ft_smalloc( (size_t)size ); + } + + + /************************************************************************** + * + * @Function: + * ft_realloc + * + * @Description: + * The memory reallocation function. + * + * @Input: + * memory :: + * A pointer to the memory object. + * + * cur_size :: + * The current size of the allocated memory block. + * + * new_size :: + * The newly requested size in bytes. + * + * block :: + * The current address of the block in memory. + * + * @Return: + * The address of the reallocated memory block. + */ + FT_CALLBACK_DEF( void* ) + ft_realloc( FT_Memory memory, + long cur_size, + long new_size, + void* block ) + { + FT_UNUSED( memory ); + FT_UNUSED( cur_size ); + + return ft_srealloc( block, (size_t)new_size ); + } + + + /************************************************************************** + * + * @Function: + * ft_free + * + * @Description: + * The memory release function. + * + * @Input: + * memory :: + * A pointer to the memory object. + * + * block :: + * The address of block in memory to be freed. + */ + FT_CALLBACK_DEF( void ) + ft_free( FT_Memory memory, + void* block ) + { + FT_UNUSED( memory ); + + ft_sfree( block ); + } + + + /************************************************************************** + * + * RESOURCE MANAGEMENT INTERFACE + * + */ + +#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT io + + /* We use the macro STREAM_FILE for convenience to extract the */ + /* system-specific stream handle from a given FreeType stream object */ +#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer ) + + + /************************************************************************** + * + * @Function: + * ft_ansi_stream_close + * + * @Description: + * The function to close a stream. + * + * @Input: + * stream :: + * A pointer to the stream object. + */ + FT_CALLBACK_DEF( void ) + ft_ansi_stream_close( FT_Stream stream ) + { + ft_fclose( STREAM_FILE( stream ) ); + + stream->descriptor.pointer = NULL; + stream->size = 0; + stream->base = NULL; + } + + + /************************************************************************** + * + * @Function: + * ft_ansi_stream_io + * + * @Description: + * The function to open a stream. + * + * @Input: + * stream :: + * A pointer to the stream object. + * + * offset :: + * The position in the data stream to start reading. + * + * buffer :: + * The address of buffer to store the read data. + * + * count :: + * The number of bytes to read from the stream. + * + * @Return: + * The number of bytes actually read. If `count' is zero (that is, + * the function is used for seeking), a non-zero return value + * indicates an error. + */ + FT_CALLBACK_DEF( unsigned long ) + ft_ansi_stream_io( FT_Stream stream, + unsigned long offset, + unsigned char* buffer, + unsigned long count ) + { + FT_FILE* file; + + + if ( offset > stream->size && !count ) + return 1; + + file = STREAM_FILE( stream ); + + if ( stream->pos != offset ) + ft_fseek( file, (long)offset, SEEK_SET ); + + /* Avoid calling `fread` with `buffer=NULL` and `count=0`, */ + /* which is undefined behaviour. */ + if ( !count ) + return 0; + + return (unsigned long)ft_fread( buffer, 1, count, file ); + } + + + /* documentation is in ftstream.h */ + + FT_BASE_DEF( FT_Error ) + FT_Stream_Open( FT_Stream stream, + const char* filepathname ) + { + FT_FILE* file; + + + if ( !stream ) + return FT_THROW( Invalid_Stream_Handle ); + + stream->descriptor.pointer = NULL; + stream->pathname.pointer = (char*)filepathname; + stream->base = NULL; + stream->pos = 0; + stream->read = NULL; + stream->close = NULL; + + file = ft_fopen( filepathname, "rb" ); + if ( !file ) + { + FT_ERROR(( "FT_Stream_Open:" + " could not open `%s'\n", filepathname )); + + return FT_THROW( Cannot_Open_Resource ); + } + + ft_fseek( file, 0, SEEK_END ); + stream->size = (unsigned long)ft_ftell( file ); + if ( !stream->size ) + { + FT_ERROR(( "FT_Stream_Open:" )); + FT_ERROR(( " opened `%s' but zero-sized\n", filepathname )); + ft_fclose( file ); + return FT_THROW( Cannot_Open_Stream ); + } + ft_fseek( file, 0, SEEK_SET ); + + stream->descriptor.pointer = file; + stream->read = ft_ansi_stream_io; + stream->close = ft_ansi_stream_close; + + FT_TRACE1(( "FT_Stream_Open:" )); + FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n", + filepathname, stream->size )); + + return FT_Err_Ok; + } + +#endif /* !FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ + +#ifdef FT_DEBUG_MEMORY + + extern FT_Int + ft_mem_debug_init( FT_Memory memory ); + + extern void + ft_mem_debug_done( FT_Memory memory ); + +#endif + + + /* documentation is in ftobjs.h */ + + FT_BASE_DEF( FT_Memory ) + FT_New_Memory( void ) + { + FT_Memory memory; + + + memory = (FT_Memory)ft_smalloc( sizeof ( *memory ) ); + if ( memory ) + { + memory->user = NULL; + memory->alloc = ft_alloc; + memory->realloc = ft_realloc; + memory->free = ft_free; +#ifdef FT_DEBUG_MEMORY + ft_mem_debug_init( memory ); +#endif + } + + return memory; + } + + + /* documentation is in ftobjs.h */ + + FT_BASE_DEF( void ) + FT_Done_Memory( FT_Memory memory ) + { +#ifdef FT_DEBUG_MEMORY + ft_mem_debug_done( memory ); +#endif + ft_sfree( memory ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/fttrigon.c b/non-source/foreign/freetype2/src/base/fttrigon.c new file mode 100644 index 000000000..4b1aced1c --- /dev/null +++ b/non-source/foreign/freetype2/src/base/fttrigon.c @@ -0,0 +1,517 @@ +/**************************************************************************** + * + * fttrigon.c + * + * FreeType trigonometric functions (body). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * This is a fixed-point CORDIC implementation of trigonometric + * functions as well as transformations between Cartesian and polar + * coordinates. The angles are represented as 16.16 fixed-point values + * in degrees, i.e., the angular resolution is 2^-16 degrees. Note that + * only vectors longer than 2^16*180/pi (or at least 22 bits) on a + * discrete Cartesian grid can have the same or better angular + * resolution. Therefore, to maintain this precision, some functions + * require an interim upscaling of the vectors, whereas others operate + * with 24-bit long vectors directly. + * + */ + +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/fttrigon.h> + + + /* the Cordic shrink factor 0.858785336480436 * 2^32 */ +#define FT_TRIG_SCALE 0xDBD95B16UL + + /* the highest bit in overflow-safe vector components, */ + /* MSB of 0.858785336480436 * sqrt(0.5) * 2^30 */ +#define FT_TRIG_SAFE_MSB 29 + + /* this table was generated for FT_PI = 180L << 16, i.e. degrees */ +#define FT_TRIG_MAX_ITERS 23 + + static const FT_Angle + ft_trig_arctan_table[] = + { + 1740967L, 919879L, 466945L, 234379L, 117304L, 58666L, 29335L, + 14668L, 7334L, 3667L, 1833L, 917L, 458L, 229L, 115L, + 57L, 29L, 14L, 7L, 4L, 2L, 1L + }; + + +#ifdef FT_INT64 + + /* multiply a given value by the CORDIC shrink factor */ + static FT_Fixed + ft_trig_downscale( FT_Fixed val ) + { + FT_Int s = 1; + + + if ( val < 0 ) + { + val = -val; + s = -1; + } + + /* 0x40000000 comes from regression analysis between true */ + /* and CORDIC hypotenuse, so it minimizes the error */ + val = (FT_Fixed)( + ( (FT_UInt64)val * FT_TRIG_SCALE + 0x40000000UL ) >> 32 ); + + return s < 0 ? -val : val; + } + +#else /* !FT_INT64 */ + + /* multiply a given value by the CORDIC shrink factor */ + static FT_Fixed + ft_trig_downscale( FT_Fixed val ) + { + FT_Int s = 1; + FT_UInt32 lo1, hi1, lo2, hi2, lo, hi, i1, i2; + + + if ( val < 0 ) + { + val = -val; + s = -1; + } + + lo1 = (FT_UInt32)val & 0x0000FFFFU; + hi1 = (FT_UInt32)val >> 16; + lo2 = FT_TRIG_SCALE & 0x0000FFFFU; + hi2 = FT_TRIG_SCALE >> 16; + + lo = lo1 * lo2; + i1 = lo1 * hi2; + i2 = lo2 * hi1; + hi = hi1 * hi2; + + /* Check carry overflow of i1 + i2 */ + i1 += i2; + hi += (FT_UInt32)( i1 < i2 ) << 16; + + hi += i1 >> 16; + i1 = i1 << 16; + + /* Check carry overflow of i1 + lo */ + lo += i1; + hi += ( lo < i1 ); + + /* 0x40000000 comes from regression analysis between true */ + /* and CORDIC hypotenuse, so it minimizes the error */ + + /* Check carry overflow of lo + 0x40000000 */ + lo += 0x40000000UL; + hi += ( lo < 0x40000000UL ); + + val = (FT_Fixed)hi; + + return s < 0 ? -val : val; + } + +#endif /* !FT_INT64 */ + + + /* undefined and never called for zero vector */ + static FT_Int + ft_trig_prenorm( FT_Vector* vec ) + { + FT_Pos x, y; + FT_Int shift; + + + x = vec->x; + y = vec->y; + + shift = FT_MSB( (FT_UInt32)( FT_ABS( x ) | FT_ABS( y ) ) ); + + if ( shift <= FT_TRIG_SAFE_MSB ) + { + shift = FT_TRIG_SAFE_MSB - shift; + vec->x = (FT_Pos)( (FT_ULong)x << shift ); + vec->y = (FT_Pos)( (FT_ULong)y << shift ); + } + else + { + shift -= FT_TRIG_SAFE_MSB; + vec->x = x >> shift; + vec->y = y >> shift; + shift = -shift; + } + + return shift; + } + + + static void + ft_trig_pseudo_rotate( FT_Vector* vec, + FT_Angle theta ) + { + FT_Int i; + FT_Fixed x, y, xtemp, b; + const FT_Angle *arctanptr; + + + x = vec->x; + y = vec->y; + + /* Rotate inside [-PI/4,PI/4] sector */ + while ( theta < -FT_ANGLE_PI4 ) + { + xtemp = y; + y = -x; + x = xtemp; + theta += FT_ANGLE_PI2; + } + + while ( theta > FT_ANGLE_PI4 ) + { + xtemp = -y; + y = x; + x = xtemp; + theta -= FT_ANGLE_PI2; + } + + arctanptr = ft_trig_arctan_table; + + /* Pseudorotations, with right shifts */ + for ( i = 1, b = 1; i < FT_TRIG_MAX_ITERS; b <<= 1, i++ ) + { + if ( theta < 0 ) + { + xtemp = x + ( ( y + b ) >> i ); + y = y - ( ( x + b ) >> i ); + x = xtemp; + theta += *arctanptr++; + } + else + { + xtemp = x - ( ( y + b ) >> i ); + y = y + ( ( x + b ) >> i ); + x = xtemp; + theta -= *arctanptr++; + } + } + + vec->x = x; + vec->y = y; + } + + + static void + ft_trig_pseudo_polarize( FT_Vector* vec ) + { + FT_Angle theta; + FT_Int i; + FT_Fixed x, y, xtemp, b; + const FT_Angle *arctanptr; + + + x = vec->x; + y = vec->y; + + /* Get the vector into [-PI/4,PI/4] sector */ + if ( y > x ) + { + if ( y > -x ) + { + theta = FT_ANGLE_PI2; + xtemp = y; + y = -x; + x = xtemp; + } + else + { + theta = y > 0 ? FT_ANGLE_PI : -FT_ANGLE_PI; + x = -x; + y = -y; + } + } + else + { + if ( y < -x ) + { + theta = -FT_ANGLE_PI2; + xtemp = -y; + y = x; + x = xtemp; + } + else + { + theta = 0; + } + } + + arctanptr = ft_trig_arctan_table; + + /* Pseudorotations, with right shifts */ + for ( i = 1, b = 1; i < FT_TRIG_MAX_ITERS; b <<= 1, i++ ) + { + if ( y > 0 ) + { + xtemp = x + ( ( y + b ) >> i ); + y = y - ( ( x + b ) >> i ); + x = xtemp; + theta += *arctanptr++; + } + else + { + xtemp = x - ( ( y + b ) >> i ); + y = y + ( ( x + b ) >> i ); + x = xtemp; + theta -= *arctanptr++; + } + } + + /* round theta to acknowledge its error that mostly comes */ + /* from accumulated rounding errors in the arctan table */ + if ( theta >= 0 ) + theta = FT_PAD_ROUND( theta, 16 ); + else + theta = -FT_PAD_ROUND( -theta, 16 ); + + vec->x = x; + vec->y = theta; + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( FT_Fixed ) + FT_Cos( FT_Angle angle ) + { + FT_Vector v; + + + FT_Vector_Unit( &v, angle ); + + return v.x; + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( FT_Fixed ) + FT_Sin( FT_Angle angle ) + { + FT_Vector v; + + + FT_Vector_Unit( &v, angle ); + + return v.y; + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( FT_Fixed ) + FT_Tan( FT_Angle angle ) + { + FT_Vector v = { 1 << 24, 0 }; + + + ft_trig_pseudo_rotate( &v, angle ); + + return FT_DivFix( v.y, v.x ); + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( FT_Angle ) + FT_Atan2( FT_Fixed dx, + FT_Fixed dy ) + { + FT_Vector v; + + + if ( dx == 0 && dy == 0 ) + return 0; + + v.x = dx; + v.y = dy; + ft_trig_prenorm( &v ); + ft_trig_pseudo_polarize( &v ); + + return v.y; + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( void ) + FT_Vector_Unit( FT_Vector* vec, + FT_Angle angle ) + { + if ( !vec ) + return; + + vec->x = FT_TRIG_SCALE >> 8; + vec->y = 0; + ft_trig_pseudo_rotate( vec, angle ); + vec->x = ( vec->x + 0x80L ) >> 8; + vec->y = ( vec->y + 0x80L ) >> 8; + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( void ) + FT_Vector_Rotate( FT_Vector* vec, + FT_Angle angle ) + { + FT_Int shift; + FT_Vector v; + + + if ( !vec || !angle ) + return; + + v = *vec; + + if ( v.x == 0 && v.y == 0 ) + return; + + shift = ft_trig_prenorm( &v ); + ft_trig_pseudo_rotate( &v, angle ); + v.x = ft_trig_downscale( v.x ); + v.y = ft_trig_downscale( v.y ); + + if ( shift > 0 ) + { + FT_Int32 half = (FT_Int32)1L << ( shift - 1 ); + + + vec->x = ( v.x + half - ( v.x < 0 ) ) >> shift; + vec->y = ( v.y + half - ( v.y < 0 ) ) >> shift; + } + else + { + shift = -shift; + vec->x = (FT_Pos)( (FT_ULong)v.x << shift ); + vec->y = (FT_Pos)( (FT_ULong)v.y << shift ); + } + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( FT_Fixed ) + FT_Vector_Length( FT_Vector* vec ) + { + FT_Int shift; + FT_Vector v; + + + if ( !vec ) + return 0; + + v = *vec; + + /* handle trivial cases */ + if ( v.x == 0 ) + { + return FT_ABS( v.y ); + } + else if ( v.y == 0 ) + { + return FT_ABS( v.x ); + } + + /* general case */ + shift = ft_trig_prenorm( &v ); + ft_trig_pseudo_polarize( &v ); + + v.x = ft_trig_downscale( v.x ); + + if ( shift > 0 ) + return ( v.x + ( 1L << ( shift - 1 ) ) ) >> shift; + + return (FT_Fixed)( (FT_UInt32)v.x << -shift ); + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( void ) + FT_Vector_Polarize( FT_Vector* vec, + FT_Fixed *length, + FT_Angle *angle ) + { + FT_Int shift; + FT_Vector v; + + + if ( !vec || !length || !angle ) + return; + + v = *vec; + + if ( v.x == 0 && v.y == 0 ) + return; + + shift = ft_trig_prenorm( &v ); + ft_trig_pseudo_polarize( &v ); + + v.x = ft_trig_downscale( v.x ); + + *length = shift >= 0 ? ( v.x >> shift ) + : (FT_Fixed)( (FT_UInt32)v.x << -shift ); + *angle = v.y; + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( void ) + FT_Vector_From_Polar( FT_Vector* vec, + FT_Fixed length, + FT_Angle angle ) + { + if ( !vec ) + return; + + vec->x = length; + vec->y = 0; + + FT_Vector_Rotate( vec, angle ); + } + + + /* documentation is in fttrigon.h */ + + FT_EXPORT_DEF( FT_Angle ) + FT_Angle_Diff( FT_Angle angle1, + FT_Angle angle2 ) + { + FT_Angle delta = angle2 - angle1; + + + while ( delta <= -FT_ANGLE_PI ) + delta += FT_ANGLE_2PI; + + while ( delta > FT_ANGLE_PI ) + delta -= FT_ANGLE_2PI; + + return delta; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/base/ftutil.c b/non-source/foreign/freetype2/src/base/ftutil.c new file mode 100644 index 000000000..b13512f87 --- /dev/null +++ b/non-source/foreign/freetype2/src/base/ftutil.c @@ -0,0 +1,442 @@ +/**************************************************************************** + * + * ftutil.c + * + * FreeType utility file for memory and list management (body). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftmemory.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/ftlist.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 memory + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** *****/ + /***** M E M O R Y M A N A G E M E N T *****/ + /***** *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + FT_BASE_DEF( FT_Pointer ) + ft_mem_alloc( FT_Memory memory, + FT_Long size, + FT_Error *p_error ) + { + FT_Error error; + FT_Pointer block = ft_mem_qalloc( memory, size, &error ); + + if ( !error && block && size > 0 ) + FT_MEM_ZERO( block, size ); + + *p_error = error; + return block; + } + + + FT_BASE_DEF( FT_Pointer ) + ft_mem_qalloc( FT_Memory memory, + FT_Long size, + FT_Error *p_error ) + { + FT_Error error = FT_Err_Ok; + FT_Pointer block = NULL; + + + if ( size > 0 ) + { + block = memory->alloc( memory, size ); + if ( !block ) + error = FT_THROW( Out_Of_Memory ); + } + else if ( size < 0 ) + { + /* may help catch/prevent security issues */ + error = FT_THROW( Invalid_Argument ); + } + + *p_error = error; + return block; + } + + + FT_BASE_DEF( FT_Pointer ) + ft_mem_realloc( FT_Memory memory, + FT_Long item_size, + FT_Long cur_count, + FT_Long new_count, + void* block, + FT_Error *p_error ) + { + FT_Error error = FT_Err_Ok; + + + block = ft_mem_qrealloc( memory, item_size, + cur_count, new_count, block, &error ); + if ( !error && block && new_count > cur_count ) + FT_MEM_ZERO( (char*)block + cur_count * item_size, + ( new_count - cur_count ) * item_size ); + + *p_error = error; + return block; + } + + + FT_BASE_DEF( FT_Pointer ) + ft_mem_qrealloc( FT_Memory memory, + FT_Long item_size, + FT_Long cur_count, + FT_Long new_count, + void* block, + FT_Error *p_error ) + { + FT_Error error = FT_Err_Ok; + + + /* Note that we now accept `item_size == 0' as a valid parameter, in + * order to cover very weird cases where an ALLOC_MULT macro would be + * called. + */ + if ( cur_count < 0 || new_count < 0 || item_size < 0 ) + { + /* may help catch/prevent nasty security issues */ + error = FT_THROW( Invalid_Argument ); + } + else if ( new_count == 0 || item_size == 0 ) + { + ft_mem_free( memory, block ); + block = NULL; + } + else if ( new_count > FT_INT_MAX / item_size ) + { + error = FT_THROW( Array_Too_Large ); + } + else if ( cur_count == 0 ) + { + FT_ASSERT( !block ); + + block = memory->alloc( memory, new_count * item_size ); + if ( block == NULL ) + error = FT_THROW( Out_Of_Memory ); + } + else + { + FT_Pointer block2; + FT_Long cur_size = cur_count * item_size; + FT_Long new_size = new_count * item_size; + + + block2 = memory->realloc( memory, cur_size, new_size, block ); + if ( !block2 ) + error = FT_THROW( Out_Of_Memory ); + else + block = block2; + } + + *p_error = error; + return block; + } + + + FT_BASE_DEF( void ) + ft_mem_free( FT_Memory memory, + const void *P ) + { + if ( P ) + memory->free( memory, (void*)P ); + } + + + FT_BASE_DEF( FT_Pointer ) + ft_mem_dup( FT_Memory memory, + const void* address, + FT_ULong size, + FT_Error *p_error ) + { + FT_Error error; + FT_Pointer p = ft_mem_qalloc( memory, (FT_Long)size, &error ); + + + if ( !error && address && size > 0 ) + ft_memcpy( p, address, size ); + + *p_error = error; + return p; + } + + + FT_BASE_DEF( FT_Pointer ) + ft_mem_strdup( FT_Memory memory, + const char* str, + FT_Error *p_error ) + { + FT_ULong len = str ? (FT_ULong)ft_strlen( str ) + 1 + : 0; + + + return ft_mem_dup( memory, str, len, p_error ); + } + + + FT_BASE_DEF( FT_Int ) + ft_mem_strcpyn( char* dst, + const char* src, + FT_ULong size ) + { + while ( size > 1 && *src != 0 ) + { + *dst++ = *src++; + size--; + } + + *dst = 0; /* always zero-terminate */ + + return *src != 0; + } + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** *****/ + /***** D O U B L Y L I N K E D L I S T S *****/ + /***** *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + +#undef FT_COMPONENT +#define FT_COMPONENT list + + /* documentation is in ftlist.h */ + + FT_EXPORT_DEF( FT_ListNode ) + FT_List_Find( FT_List list, + void* data ) + { + FT_ListNode cur; + + + if ( !list ) + return NULL; + + cur = list->head; + while ( cur ) + { + if ( cur->data == data ) + return cur; + + cur = cur->next; + } + + return NULL; + } + + + /* documentation is in ftlist.h */ + + FT_EXPORT_DEF( void ) + FT_List_Add( FT_List list, + FT_ListNode node ) + { + FT_ListNode before; + + + if ( !list || !node ) + return; + + before = list->tail; + + node->next = NULL; + node->prev = before; + + if ( before ) + before->next = node; + else + list->head = node; + + list->tail = node; + } + + + /* documentation is in ftlist.h */ + + FT_EXPORT_DEF( void ) + FT_List_Insert( FT_List list, + FT_ListNode node ) + { + FT_ListNode after; + + + if ( !list || !node ) + return; + + after = list->head; + + node->next = after; + node->prev = NULL; + + if ( !after ) + list->tail = node; + else + after->prev = node; + + list->head = node; + } + + + /* documentation is in ftlist.h */ + + FT_EXPORT_DEF( void ) + FT_List_Remove( FT_List list, + FT_ListNode node ) + { + FT_ListNode before, after; + + + if ( !list || !node ) + return; + + before = node->prev; + after = node->next; + + if ( before ) + before->next = after; + else + list->head = after; + + if ( after ) + after->prev = before; + else + list->tail = before; + } + + + /* documentation is in ftlist.h */ + + FT_EXPORT_DEF( void ) + FT_List_Up( FT_List list, + FT_ListNode node ) + { + FT_ListNode before, after; + + + if ( !list || !node ) + return; + + before = node->prev; + after = node->next; + + /* check whether we are already on top of the list */ + if ( !before ) + return; + + before->next = after; + + if ( after ) + after->prev = before; + else + list->tail = before; + + node->prev = NULL; + node->next = list->head; + list->head->prev = node; + list->head = node; + } + + + /* documentation is in ftlist.h */ + + FT_EXPORT_DEF( FT_Error ) + FT_List_Iterate( FT_List list, + FT_List_Iterator iterator, + void* user ) + { + FT_ListNode cur; + FT_Error error = FT_Err_Ok; + + + if ( !list || !iterator ) + return FT_THROW( Invalid_Argument ); + + cur = list->head; + + while ( cur ) + { + FT_ListNode next = cur->next; + + + error = iterator( cur, user ); + if ( error ) + break; + + cur = next; + } + + return error; + } + + + /* documentation is in ftlist.h */ + + FT_EXPORT_DEF( void ) + FT_List_Finalize( FT_List list, + FT_List_Destructor destroy, + FT_Memory memory, + void* user ) + { + FT_ListNode cur; + + + if ( !list || !memory ) + return; + + cur = list->head; + while ( cur ) + { + FT_ListNode next = cur->next; + void* data = cur->data; + + + if ( destroy ) + destroy( memory, data, user ); + + FT_FREE( cur ); + cur = next; + } + + list->head = NULL; + list->tail = NULL; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cff.c b/non-source/foreign/freetype2/src/cff/cff.c new file mode 100644 index 000000000..e3e009699 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cff.c @@ -0,0 +1,28 @@ +/**************************************************************************** + * + * cff.c + * + * FreeType OpenType driver component (body only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "cffcmap.c" +#include "cffdrivr.c" +#include "cffgload.c" +#include "cffparse.c" +#include "cffload.c" +#include "cffobjs.c" + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffcmap.c b/non-source/foreign/freetype2/src/cff/cffcmap.c new file mode 100644 index 000000000..ea5f8ed28 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffcmap.c @@ -0,0 +1,230 @@ +/**************************************************************************** + * + * cffcmap.c + * + * CFF character mapping table (cmap) support (body). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include "cffcmap.h" +#include "cffload.h" + +#include "cfferrs.h" + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CFF STANDARD (AND EXPERT) ENCODING CMAPS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_CALLBACK_DEF( FT_Error ) + cff_cmap_encoding_init( FT_CMap cmap, + FT_Pointer pointer ) + { + CFF_CMapStd cffcmap = (CFF_CMapStd)cmap; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + CFF_Font cff = (CFF_Font)face->extra.data; + CFF_Encoding encoding = &cff->encoding; + + FT_UNUSED( pointer ); + + + cffcmap->gids = encoding->codes; + + return 0; + } + + + FT_CALLBACK_DEF( void ) + cff_cmap_encoding_done( FT_CMap cmap ) + { + CFF_CMapStd cffcmap = (CFF_CMapStd)cmap; + + + cffcmap->gids = NULL; + } + + + FT_CALLBACK_DEF( FT_UInt ) + cff_cmap_encoding_char_index( FT_CMap cmap, + FT_UInt32 char_code ) + { + CFF_CMapStd cffcmap = (CFF_CMapStd)cmap; + FT_UInt result = 0; + + + if ( char_code < 256 ) + result = cffcmap->gids[char_code]; + + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + cff_cmap_encoding_char_next( FT_CMap cmap, + FT_UInt32 *pchar_code ) + { + CFF_CMapStd cffcmap = (CFF_CMapStd)cmap; + FT_UInt result = 0; + FT_UInt32 char_code = *pchar_code; + + + while ( char_code < 255 ) + { + result = cffcmap->gids[++char_code]; + if ( result ) + { + *pchar_code = char_code; + break; + } + } + + return result; + } + + + FT_DEFINE_CMAP_CLASS( + cff_cmap_encoding_class_rec, + + sizeof ( CFF_CMapStdRec ), + + (FT_CMap_InitFunc) cff_cmap_encoding_init, /* init */ + (FT_CMap_DoneFunc) cff_cmap_encoding_done, /* done */ + (FT_CMap_CharIndexFunc)cff_cmap_encoding_char_index, /* char_index */ + (FT_CMap_CharNextFunc) cff_cmap_encoding_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */ + ) + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_CALLBACK_DEF( const char* ) + cff_sid_to_glyph_name( void* face_, /* TT_Face */ + FT_UInt idx ) + { + TT_Face face = (TT_Face)face_; + CFF_Font cff = (CFF_Font)face->extra.data; + CFF_Charset charset = &cff->charset; + FT_UInt sid = charset->sids[idx]; + + + return cff_index_get_sid_string( cff, sid ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_cmap_unicode_init( FT_CMap cmap, /* PS_Unicodes */ + FT_Pointer pointer ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + CFF_Font cff = (CFF_Font)face->extra.data; + CFF_Charset charset = &cff->charset; + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames; + + FT_UNUSED( pointer ); + + + /* can't build Unicode map for CID-keyed font */ + /* because we don't know glyph names. */ + if ( !charset->sids ) + return FT_THROW( No_Unicode_Glyph_Name ); + + if ( !psnames->unicodes_init ) + return FT_THROW( Unimplemented_Feature ); + + return psnames->unicodes_init( memory, + unicodes, + cff->num_glyphs, + &cff_sid_to_glyph_name, + (PS_FreeGlyphNameFunc)NULL, + (FT_Pointer)face ); + } + + + FT_CALLBACK_DEF( void ) + cff_cmap_unicode_done( FT_CMap cmap ) /* PS_Unicodes */ + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + FT_Face face = FT_CMAP_FACE( cmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + + + FT_FREE( unicodes->maps ); + unicodes->num_maps = 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + cff_cmap_unicode_char_index( FT_CMap cmap, /* PS_Unicodes */ + FT_UInt32 char_code ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + CFF_Font cff = (CFF_Font)face->extra.data; + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames; + + + return psnames->unicodes_char_index( unicodes, char_code ); + } + + + FT_CALLBACK_DEF( FT_UInt ) + cff_cmap_unicode_char_next( FT_CMap cmap, /* PS_Unicodes */ + FT_UInt32 *pchar_code ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + CFF_Font cff = (CFF_Font)face->extra.data; + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames; + + + return psnames->unicodes_char_next( unicodes, pchar_code ); + } + + + FT_DEFINE_CMAP_CLASS( + cff_cmap_unicode_class_rec, + + sizeof ( PS_UnicodesRec ), + + (FT_CMap_InitFunc) cff_cmap_unicode_init, /* init */ + (FT_CMap_DoneFunc) cff_cmap_unicode_done, /* done */ + (FT_CMap_CharIndexFunc)cff_cmap_unicode_char_index, /* char_index */ + (FT_CMap_CharNextFunc) cff_cmap_unicode_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */ + ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffcmap.h b/non-source/foreign/freetype2/src/cff/cffcmap.h new file mode 100644 index 000000000..1dd8700cd --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffcmap.h @@ -0,0 +1,67 @@ +/**************************************************************************** + * + * cffcmap.h + * + * CFF character mapping table (cmap) support (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFCMAP_H_ +#define CFFCMAP_H_ + +#include <freetype/internal/cffotypes.h> + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* standard (and expert) encoding cmaps */ + typedef struct CFF_CMapStdRec_* CFF_CMapStd; + + typedef struct CFF_CMapStdRec_ + { + FT_CMapRec cmap; + FT_UShort* gids; /* up to 256 elements */ + + } CFF_CMapStdRec; + + + FT_DECLARE_CMAP_CLASS( cff_cmap_encoding_class_rec ) + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* unicode (synthetic) cmaps */ + + FT_DECLARE_CMAP_CLASS( cff_cmap_unicode_class_rec ) + + +FT_END_HEADER + +#endif /* CFFCMAP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffdrivr.c b/non-source/foreign/freetype2/src/cff/cffdrivr.c new file mode 100644 index 000000000..f6ebdb381 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffdrivr.c @@ -0,0 +1,1263 @@ +/**************************************************************************** + * + * cffdrivr.c + * + * OpenType font driver implementation (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and Dominik Röttsches. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/freetype.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/sfnt.h> +#include <freetype/internal/psaux.h> +#include <freetype/internal/ftpsprop.h> +#include <freetype/internal/services/svcid.h> +#include <freetype/internal/services/svpsinfo.h> +#include <freetype/internal/services/svpostnm.h> +#include <freetype/internal/services/svttcmap.h> +#include <freetype/internal/services/svcfftl.h> + +#include "cffdrivr.h" +#include "cffgload.h" +#include "cffload.h" +#include "cffcmap.h" +#include "cffparse.h" +#include "cffobjs.h" + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/internal/services/svmm.h> +#include <freetype/internal/services/svmetric.h> +#endif + +#include "cfferrs.h" + +#include <freetype/internal/services/svfntfmt.h> +#include <freetype/internal/services/svgldict.h> +#include <freetype/internal/services/svprop.h> +#include <freetype/ftdriver.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 cffdriver + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** F A C E S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @Function: + * cff_get_kerning + * + * @Description: + * A driver method used to return the kerning vector between two + * glyphs of the same face. + * + * @Input: + * face :: + * A handle to the source face object. + * + * left_glyph :: + * The index of the left glyph in the kern pair. + * + * right_glyph :: + * The index of the right glyph in the kern pair. + * + * @Output: + * kerning :: + * The kerning vector. This is in font units for + * scalable formats, and in pixels for fixed-sizes + * formats. + * + * @Return: + * FreeType error code. 0 means success. + * + * @Note: + * Only horizontal layouts (left-to-right & right-to-left) are + * supported by this function. Other layouts, or more sophisticated + * kernings, are out of scope of this method (the basic driver + * interface is meant to be simple). + * + * They can be implemented by format-specific interfaces. + */ + FT_CALLBACK_DEF( FT_Error ) + cff_get_kerning( FT_Face face, /* CFF_Face */ + FT_UInt left_glyph, + FT_UInt right_glyph, + FT_Vector* kerning ) + { + CFF_Face cffface = (CFF_Face)face; + SFNT_Service sfnt = (SFNT_Service)cffface->sfnt; + + + kerning->x = 0; + kerning->y = 0; + + if ( sfnt ) + kerning->x = sfnt->get_kerning( cffface, left_glyph, right_glyph ); + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * cff_glyph_load + * + * @Description: + * A driver method used to load a glyph within a given glyph slot. + * + * @Input: + * slot :: + * A handle to the target slot object where the glyph + * will be loaded. + * + * size :: + * A handle to the source face size at which the glyph + * must be scaled, loaded, etc. + * + * glyph_index :: + * The index of the glyph in the font file. + * + * load_flags :: + * A flag indicating what to load for this glyph. The + * FT_LOAD_??? constants can be used to control the + * glyph loading process (e.g., whether the outline + * should be scaled, whether to load bitmaps or not, + * whether to hint the outline, etc). + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_CALLBACK_DEF( FT_Error ) + cff_glyph_load( FT_GlyphSlot slot, /* CFF_GlyphSlot */ + FT_Size size, /* CFF_Size */ + FT_UInt glyph_index, + FT_Int32 load_flags ) + { + FT_Error error; + CFF_GlyphSlot cffslot = (CFF_GlyphSlot)slot; + CFF_Size cffsize = (CFF_Size)size; + + + if ( !cffslot ) + return FT_THROW( Invalid_Slot_Handle ); + + FT_TRACE1(( "cff_glyph_load: glyph index %d\n", glyph_index )); + + /* check whether we want a scaled outline or bitmap */ + if ( !cffsize ) + load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; + + /* reset the size object if necessary */ + if ( load_flags & FT_LOAD_NO_SCALE ) + size = NULL; + + if ( size ) + { + /* these two objects must have the same parent */ + if ( size->face != slot->face ) + return FT_THROW( Invalid_Face_Handle ); + } + + /* now load the glyph outline if necessary */ + error = cff_slot_load( cffslot, cffsize, glyph_index, load_flags ); + + /* force drop-out mode to 2 - irrelevant now */ + /* slot->outline.dropout_mode = 2; */ + + return error; + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_advances( FT_Face face, + FT_UInt start, + FT_UInt count, + FT_Int32 flags, + FT_Fixed* advances ) + { + FT_UInt nn; + FT_Error error = FT_Err_Ok; + FT_GlyphSlot slot = face->glyph; + + + if ( FT_IS_SFNT( face ) ) + { + /* OpenType 1.7 mandates that the data from `hmtx' table be used; */ + /* it is no longer necessary that those values are identical to */ + /* the values in the `CFF' table */ + + CFF_Face cffface = (CFF_Face)face; + FT_Short dummy; + + + if ( flags & FT_LOAD_VERTICAL_LAYOUT ) + { +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* no fast retrieval for blended MM fonts without VVAR table */ + if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) && + !( cffface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) ) + return FT_THROW( Unimplemented_Feature ); +#endif + + /* check whether we have data from the `vmtx' table at all; */ + /* otherwise we extract the info from the CFF glyphstrings */ + /* (instead of synthesizing a global value using the `OS/2' */ + /* table) */ + if ( !cffface->vertical_info ) + goto Missing_Table; + + for ( nn = 0; nn < count; nn++ ) + { + FT_UShort ah; + + + ( (SFNT_Service)cffface->sfnt )->get_metrics( cffface, + 1, + start + nn, + &dummy, + &ah ); + + FT_TRACE5(( " idx %d: advance height %d font unit%s\n", + start + nn, + ah, + ah == 1 ? "" : "s" )); + advances[nn] = ah; + } + } + else + { +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* no fast retrieval for blended MM fonts without HVAR table */ + if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) && + !( cffface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) ) + return FT_THROW( Unimplemented_Feature ); +#endif + + /* check whether we have data from the `hmtx' table at all */ + if ( !cffface->horizontal.number_Of_HMetrics ) + goto Missing_Table; + + for ( nn = 0; nn < count; nn++ ) + { + FT_UShort aw; + + + ( (SFNT_Service)cffface->sfnt )->get_metrics( cffface, + 0, + start + nn, + &dummy, + &aw ); + + FT_TRACE5(( " idx %d: advance width %d font unit%s\n", + start + nn, + aw, + aw == 1 ? "" : "s" )); + advances[nn] = aw; + } + } + + return error; + } + + Missing_Table: + flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY; + + for ( nn = 0; nn < count; nn++ ) + { + error = cff_glyph_load( slot, face->size, start + nn, flags ); + if ( error ) + break; + + advances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT ) + ? slot->linearVertAdvance + : slot->linearHoriAdvance; + } + + return error; + } + + + /* + * GLYPH DICT SERVICE + * + */ + + FT_CALLBACK_DEF( FT_Error ) + cff_get_glyph_name( FT_Face face, /* CFF_Face */ + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ) + { + CFF_Face cffface = (CFF_Face)face; + CFF_Font font = (CFF_Font)cffface->extra.data; + FT_String* gname; + FT_UShort sid; + FT_Error error; + + + /* CFF2 table does not have glyph names; */ + /* we need to use `post' table method */ + if ( font->version_major == 2 ) + { + FT_Library library = FT_FACE_LIBRARY( face ); + FT_Module sfnt_module = FT_Get_Module( library, "sfnt" ); + FT_Service_GlyphDict service = + (FT_Service_GlyphDict)ft_module_get_service( + sfnt_module, + FT_SERVICE_ID_GLYPH_DICT, + 0 ); + + + if ( service && service->get_name ) + return service->get_name( face, glyph_index, buffer, buffer_max ); + else + { + FT_ERROR(( "cff_get_glyph_name:" + " cannot get glyph name from a CFF2 font\n" )); + FT_ERROR(( " " + " without the `psnames' module\n" )); + error = FT_THROW( Missing_Module ); + goto Exit; + } + } + + if ( !font->psnames ) + { + FT_ERROR(( "cff_get_glyph_name:" + " cannot get glyph name from CFF & CEF fonts\n" )); + FT_ERROR(( " " + " without the `psnames' module\n" )); + error = FT_THROW( Missing_Module ); + goto Exit; + } + + /* first, locate the sid in the charset table */ + sid = font->charset.sids[glyph_index]; + + /* now, look up the name itself */ + gname = cff_index_get_sid_string( font, sid ); + + if ( gname ) + FT_STRCPYN( buffer, gname, buffer_max ); + + error = FT_Err_Ok; + + Exit: + return error; + } + + + FT_CALLBACK_DEF( FT_UInt ) + cff_get_name_index( FT_Face face, /* CFF_Face */ + const FT_String* glyph_name ) + { + CFF_Face cffface = (CFF_Face)face; + CFF_Font cff = (CFF_Font)cffface->extra.data; + CFF_Charset charset = &cff->charset; + FT_Service_PsCMaps psnames; + FT_String* name; + FT_UShort sid; + FT_UInt i; + + + /* CFF2 table does not have glyph names; */ + /* we need to use `post' table method */ + if ( cff->version_major == 2 ) + { + FT_Library library = FT_FACE_LIBRARY( face ); + FT_Module sfnt_module = FT_Get_Module( library, "sfnt" ); + FT_Service_GlyphDict service = + (FT_Service_GlyphDict)ft_module_get_service( + sfnt_module, + FT_SERVICE_ID_GLYPH_DICT, + 0 ); + + + if ( service && service->name_index ) + return service->name_index( face, glyph_name ); + else + { + FT_ERROR(( "cff_get_name_index:" + " cannot get glyph index from a CFF2 font\n" )); + FT_ERROR(( " " + " without the `psnames' module\n" )); + return 0; + } + } + + FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS ); + if ( !psnames ) + return 0; + + for ( i = 0; i < cff->num_glyphs; i++ ) + { + sid = charset->sids[i]; + + if ( sid > 390 ) + name = cff_index_get_string( cff, sid - 391 ); + else + name = (FT_String *)psnames->adobe_std_strings( sid ); + + if ( !name ) + continue; + + if ( !ft_strcmp( glyph_name, name ) ) + return i; + } + + return 0; + } + + + FT_DEFINE_SERVICE_GLYPHDICTREC( + cff_service_glyph_dict, + + cff_get_glyph_name, /* FT_GlyphDict_GetNameFunc get_name */ + cff_get_name_index /* FT_GlyphDict_NameIndexFunc name_index */ + ) + + + /* + * POSTSCRIPT INFO SERVICE + * + */ + + FT_CALLBACK_DEF( FT_Int ) + cff_ps_has_glyph_names( FT_Face face ) + { + return ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) > 0; + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_ps_get_font_info( FT_Face face, /* CFF_Face */ + PS_FontInfoRec* afont_info ) + { + CFF_Face cffface = (CFF_Face)face; + CFF_Font cff = (CFF_Font)cffface->extra.data; + FT_Error error = FT_Err_Ok; + + + if ( cffface->is_cff2 ) + { + error = FT_THROW( Invalid_Argument ); + goto Fail; + } + + if ( cff && !cff->font_info ) + { + CFF_FontRecDict dict = &cff->top_font.font_dict; + FT_Memory memory = FT_FACE_MEMORY( face ); + PS_FontInfoRec* font_info = NULL; + + + if ( FT_QNEW( font_info ) ) + goto Fail; + + font_info->version = cff_index_get_sid_string( cff, + dict->version ); + font_info->notice = cff_index_get_sid_string( cff, + dict->notice ); + font_info->full_name = cff_index_get_sid_string( cff, + dict->full_name ); + font_info->family_name = cff_index_get_sid_string( cff, + dict->family_name ); + font_info->weight = cff_index_get_sid_string( cff, + dict->weight ); + font_info->italic_angle = dict->italic_angle; + font_info->is_fixed_pitch = dict->is_fixed_pitch; + font_info->underline_position = (FT_Short)dict->underline_position; + font_info->underline_thickness = (FT_UShort)dict->underline_thickness; + + cff->font_info = font_info; + } + + if ( cff ) + *afont_info = *cff->font_info; + + Fail: + return error; + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_ps_get_font_extra( FT_Face face, /* CFF_Face */ + PS_FontExtraRec* afont_extra ) + { + CFF_Face cffface = (CFF_Face)face; + CFF_Font cff = (CFF_Font)cffface->extra.data; + FT_Error error = FT_Err_Ok; + + + if ( cff && !cff->font_extra ) + { + CFF_FontRecDict dict = &cff->top_font.font_dict; + FT_Memory memory = FT_FACE_MEMORY( face ); + PS_FontExtraRec* font_extra = NULL; + FT_String* embedded_postscript; + + + if ( FT_QNEW( font_extra ) ) + goto Fail; + + font_extra->fs_type = 0U; + + embedded_postscript = cff_index_get_sid_string( + cff, + dict->embedded_postscript ); + if ( embedded_postscript ) + { + FT_String* start_fstype; + FT_String* start_def; + + + /* Identify the XYZ integer in `/FSType XYZ def' substring. */ + if ( ( start_fstype = ft_strstr( embedded_postscript, + "/FSType" ) ) != NULL && + ( start_def = ft_strstr( start_fstype + + sizeof ( "/FSType" ) - 1, + "def" ) ) != NULL ) + { + FT_String* s; + + + for ( s = start_fstype + sizeof ( "/FSType" ) - 1; + s != start_def; + s++ ) + { + if ( *s >= '0' && *s <= '9' ) + { + if ( font_extra->fs_type >= ( FT_USHORT_MAX - 9 ) / 10 ) + { + /* Overflow - ignore the FSType value. */ + font_extra->fs_type = 0U; + break; + } + + font_extra->fs_type *= 10; + font_extra->fs_type += (FT_UShort)( *s - '0' ); + } + else if ( *s != ' ' && *s != '\n' && *s != '\r' ) + { + /* Non-whitespace character between `/FSType' and next `def' */ + /* - ignore the FSType value. */ + font_extra->fs_type = 0U; + break; + } + } + } + } + + cff->font_extra = font_extra; + } + + if ( cff ) + *afont_extra = *cff->font_extra; + + Fail: + return error; + } + + + FT_DEFINE_SERVICE_PSINFOREC( + cff_service_ps_info, + + cff_ps_get_font_info, /* PS_GetFontInfoFunc ps_get_font_info */ + cff_ps_get_font_extra, /* PS_GetFontExtraFunc ps_get_font_extra */ + cff_ps_has_glyph_names, /* PS_HasGlyphNamesFunc ps_has_glyph_names */ + /* unsupported with CFF fonts */ + NULL, /* PS_GetFontPrivateFunc ps_get_font_private */ + /* not implemented */ + NULL /* PS_GetFontValueFunc ps_get_font_value */ + ) + + + /* + * POSTSCRIPT NAME SERVICE + * + */ + + FT_CALLBACK_DEF( const char* ) + cff_get_ps_name( FT_Face face ) /* CFF_Face */ + { + CFF_Face cffface = (CFF_Face)face; + CFF_Font cff = (CFF_Font)cffface->extra.data; + SFNT_Service sfnt = (SFNT_Service)cffface->sfnt; + + + /* following the OpenType specification 1.7, we return the name stored */ + /* in the `name' table for a CFF wrapped into an SFNT container */ + + if ( FT_IS_SFNT( face ) && sfnt ) + { + FT_Library library = FT_FACE_LIBRARY( face ); + FT_Module sfnt_module = FT_Get_Module( library, "sfnt" ); + FT_Service_PsFontName service = + (FT_Service_PsFontName)ft_module_get_service( + sfnt_module, + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, + 0 ); + + + if ( service && service->get_ps_font_name ) + return service->get_ps_font_name( face ); + } + + return cff ? (const char*)cff->font_name : NULL; + } + + + FT_DEFINE_SERVICE_PSFONTNAMEREC( + cff_service_ps_name, + + cff_get_ps_name /* FT_PsName_GetFunc get_ps_font_name */ + ) + + + /* + * TT CMAP INFO + * + * If the charmap is a synthetic Unicode encoding cmap or + * a Type 1 standard (or expert) encoding cmap, hide TT CMAP INFO + * service defined in SFNT module. + * + * Otherwise call the service function in the sfnt module. + * + */ + FT_CALLBACK_DEF( FT_Error ) + cff_get_cmap_info( FT_CharMap charmap, + TT_CMapInfo *cmap_info ) + { + FT_CMap cmap = FT_CMAP( charmap ); + FT_Error error = FT_Err_Ok; + + FT_Face face = FT_CMAP_FACE( cmap ); + FT_Library library = FT_FACE_LIBRARY( face ); + + + if ( cmap->clazz != &cff_cmap_encoding_class_rec && + cmap->clazz != &cff_cmap_unicode_class_rec ) + { + FT_Module sfnt = FT_Get_Module( library, "sfnt" ); + FT_Service_TTCMaps service = + (FT_Service_TTCMaps)ft_module_get_service( sfnt, + FT_SERVICE_ID_TT_CMAP, + 0 ); + + + if ( service && service->get_cmap_info ) + error = service->get_cmap_info( charmap, cmap_info ); + } + else + error = FT_THROW( Invalid_CharMap_Format ); + + return error; + } + + + FT_DEFINE_SERVICE_TTCMAPSREC( + cff_service_get_cmap_info, + + cff_get_cmap_info /* TT_CMap_Info_GetFunc get_cmap_info */ + ) + + + /* + * CID INFO SERVICE + * + */ + FT_CALLBACK_DEF( FT_Error ) + cff_get_ros( FT_Face face, /* FT_Face */ + const char* *registry, + const char* *ordering, + FT_Int *supplement ) + { + FT_Error error = FT_Err_Ok; + CFF_Face cffface = (CFF_Face)face; + CFF_Font cff = (CFF_Font)cffface->extra.data; + + + if ( cff ) + { + CFF_FontRecDict dict = &cff->top_font.font_dict; + + + if ( dict->cid_registry == 0xFFFFU ) + { + error = FT_THROW( Invalid_Argument ); + goto Fail; + } + + if ( registry ) + { + if ( !cff->registry ) + cff->registry = cff_index_get_sid_string( cff, + dict->cid_registry ); + *registry = cff->registry; + } + + if ( ordering ) + { + if ( !cff->ordering ) + cff->ordering = cff_index_get_sid_string( cff, + dict->cid_ordering ); + *ordering = cff->ordering; + } + + /* + * XXX: According to Adobe TechNote #5176, the supplement in CFF + * can be a real number. We truncate it to fit public API + * since freetype-2.3.6. + */ + if ( supplement ) + { + if ( dict->cid_supplement < FT_INT_MIN || + dict->cid_supplement > FT_INT_MAX ) + FT_TRACE1(( "cff_get_ros: too large supplement %ld is truncated\n", + dict->cid_supplement )); + *supplement = (FT_Int)dict->cid_supplement; + } + } + + Fail: + return error; + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_is_cid( FT_Face face, /* CFF_Face */ + FT_Bool *is_cid ) + { + FT_Error error = FT_Err_Ok; + CFF_Face cffface = (CFF_Face)face; + CFF_Font cff = (CFF_Font)cffface->extra.data; + + + *is_cid = 0; + + if ( cff ) + { + CFF_FontRecDict dict = &cff->top_font.font_dict; + + + if ( dict->cid_registry != 0xFFFFU ) + *is_cid = 1; + } + + return error; + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_cid_from_glyph_index( FT_Face face, /* CFF_Face */ + FT_UInt glyph_index, + FT_UInt *cid ) + { + FT_Error error = FT_Err_Ok; + CFF_Face cffface = (CFF_Face)face; + CFF_Font cff = (CFF_Font)cffface->extra.data; + + + if ( cff ) + { + FT_UInt c; + CFF_FontRecDict dict = &cff->top_font.font_dict; + + + if ( dict->cid_registry == 0xFFFFU ) + { + error = FT_THROW( Invalid_Argument ); + goto Fail; + } + + if ( glyph_index >= cff->num_glyphs ) + { + error = FT_THROW( Invalid_Argument ); + goto Fail; + } + + c = cff->charset.sids[glyph_index]; + + if ( cid ) + *cid = c; + } + + Fail: + return error; + } + + + FT_DEFINE_SERVICE_CIDREC( + cff_service_cid_info, + + cff_get_ros, + /* FT_CID_GetRegistryOrderingSupplementFunc get_ros */ + cff_get_is_cid, + /* FT_CID_GetIsInternallyCIDKeyedFunc get_is_cid */ + cff_get_cid_from_glyph_index + /* FT_CID_GetCIDFromGlyphIndexFunc get_cid_from_glyph_index */ + ) + + + /* + * PROPERTY SERVICE + * + */ + + FT_DEFINE_SERVICE_PROPERTIESREC( + cff_service_properties, + + ps_property_set, /* FT_Properties_SetFunc set_property */ + ps_property_get /* FT_Properties_GetFunc get_property */ + ) + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + /* + * MULTIPLE MASTER SERVICE + * + */ + + FT_CALLBACK_DEF( FT_Error ) + cff_set_mm_blend( FT_Face face, /* CFF_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->set_mm_blend( face, num_coords, coords ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_mm_blend( FT_Face face, /* CFF_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->get_mm_blend( face, num_coords, coords ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_set_mm_weightvector( FT_Face face, /* CFF_Face */ + FT_UInt len, + FT_Fixed* weightvector ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->set_mm_weightvector( face, len, weightvector ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_mm_weightvector( FT_Face face, /* CFF_Face */ + FT_UInt* len, + FT_Fixed* weightvector ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->get_mm_weightvector( face, len, weightvector ); + } + + + FT_CALLBACK_DEF( void ) + cff_construct_ps_name( FT_Face face ) /* CFF_Face */ + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + mm->construct_ps_name( face ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_mm_var( FT_Face face, /* CFF_Face */ + FT_MM_Var* *master ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->get_mm_var( face, master ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_set_var_design( FT_Face face, /* CFF_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->set_var_design( face, num_coords, coords ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_var_design( FT_Face face, /* CFF_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->get_var_design( face, num_coords, coords ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_set_named_instance( FT_Face face, /* CFF_Face */ + FT_UInt instance_index ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->set_named_instance( face, instance_index ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_get_default_named_instance( FT_Face face, /* CFF_Face */ + FT_UInt *instance_index ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->get_default_named_instance( face, instance_index ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_load_item_variation_store( FT_Face face, /* CFF_Face */ + FT_ULong offset, + GX_ItemVarStore itemStore ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->load_item_var_store( face, offset, itemStore ); + } + + + FT_CALLBACK_DEF( FT_Error ) + cff_load_delta_set_index_mapping( FT_Face face, /* CFF_Face */ + FT_ULong offset, + GX_DeltaSetIdxMap map, + GX_ItemVarStore itemStore, + FT_ULong table_len ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->load_delta_set_idx_map( face, offset, map, + itemStore, table_len ); + } + + + FT_CALLBACK_DEF( FT_Int ) + cff_get_item_delta( FT_Face face, /* CFF_Face */ + GX_ItemVarStore itemStore, + FT_UInt outerIndex, + FT_UInt innerIndex ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->get_item_delta( face, itemStore, outerIndex, innerIndex ); + } + + + FT_CALLBACK_DEF( void ) + cff_done_item_variation_store( FT_Face face, /* CFF_Face */ + GX_ItemVarStore itemStore ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + mm->done_item_var_store( face, itemStore ); + } + + + FT_CALLBACK_DEF( void ) + cff_done_delta_set_index_map( FT_Face face, /* CFF_Face */ + GX_DeltaSetIdxMap deltaSetIdxMap ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + mm->done_delta_set_idx_map( face, deltaSetIdxMap ); + } + + + + FT_DEFINE_SERVICE_MULTIMASTERSREC( + cff_service_multi_masters, + + NULL, /* FT_Get_MM_Func get_mm */ + NULL, /* FT_Set_MM_Design_Func set_mm_design */ + cff_set_mm_blend, /* FT_Set_MM_Blend_Func set_mm_blend */ + cff_get_mm_blend, /* FT_Get_MM_Blend_Func get_mm_blend */ + cff_get_mm_var, /* FT_Get_MM_Var_Func get_mm_var */ + cff_set_var_design, /* FT_Set_Var_Design_Func set_var_design */ + cff_get_var_design, /* FT_Get_Var_Design_Func get_var_design */ + cff_set_named_instance, + /* FT_Set_Named_Instance_Func set_named_instance */ + cff_get_default_named_instance, + /* FT_Get_Default_Named_Instance_Func get_default_named_instance */ + cff_set_mm_weightvector, + /* FT_Set_MM_WeightVector_Func set_mm_weightvector */ + cff_get_mm_weightvector, + /* FT_Get_MM_WeightVector_Func get_mm_weightvector */ + cff_construct_ps_name, + /* FT_Construct_PS_Name_Func construct_ps_name */ + cff_load_delta_set_index_mapping, + /* FT_Var_Load_Delta_Set_Idx_Map_Func load_delta_set_idx_map */ + cff_load_item_variation_store, + /* FT_Var_Load_Item_Var_Store_Func load_item_variation_store */ + cff_get_item_delta, + /* FT_Var_Get_Item_Delta_Func get_item_delta */ + cff_done_item_variation_store, + /* FT_Var_Done_Item_Var_Store_Func done_item_variation_store */ + cff_done_delta_set_index_map, + /* FT_Var_Done_Delta_Set_Idx_Map_Func done_delta_set_index_map */ + cff_get_var_blend, /* FT_Get_Var_Blend_Func get_var_blend */ + cff_done_blend /* FT_Done_Blend_Func done_blend */ + ) + + + /* + * METRICS VARIATIONS SERVICE + * + */ + + FT_CALLBACK_DEF( FT_Error ) + cff_hadvance_adjust( FT_Face face, /* CFF_Face */ + FT_UInt gindex, + FT_Int *avalue ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MetricsVariations + var = (FT_Service_MetricsVariations)cffface->tt_var; + + + return var->hadvance_adjust( face, gindex, avalue ); + } + + + FT_CALLBACK_DEF( void ) + cff_metrics_adjust( FT_Face face ) /* CFF_Face */ + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MetricsVariations + var = (FT_Service_MetricsVariations)cffface->tt_var; + + + var->metrics_adjust( face ); + } + + + FT_DEFINE_SERVICE_METRICSVARIATIONSREC( + cff_service_metrics_variations, + + cff_hadvance_adjust, /* FT_HAdvance_Adjust_Func hadvance_adjust */ + NULL, /* FT_LSB_Adjust_Func lsb_adjust */ + NULL, /* FT_RSB_Adjust_Func rsb_adjust */ + + NULL, /* FT_VAdvance_Adjust_Func vadvance_adjust */ + NULL, /* FT_TSB_Adjust_Func tsb_adjust */ + NULL, /* FT_BSB_Adjust_Func bsb_adjust */ + NULL, /* FT_VOrg_Adjust_Func vorg_adjust */ + + cff_metrics_adjust, /* FT_Metrics_Adjust_Func metrics_adjust */ + NULL /* FT_Size_Reset_Func size_reset */ + ) +#endif + + + /* + * CFFLOAD SERVICE + * + */ + + FT_DEFINE_SERVICE_CFFLOADREC( + cff_service_cff_load, + + cff_get_standard_encoding, /* FT_Get_Standard_Encoding_Func get_standard_encoding */ + cff_load_private_dict, /* FT_Load_Private_Dict_Func load_private_dict */ + cff_fd_select_get, /* FT_FD_Select_Get_Func fd_select_get */ + cff_blend_check_vector, /* FT_Blend_Check_Vector_Func blend_check_vector */ + cff_blend_build_vector /* FT_Blend_Build_Vector_Func blend_build_vector */ + ) + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** D R I V E R I N T E R F A C E ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + +#if defined TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_DEFINE_SERVICEDESCREC10( + cff_services, + + FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF, + FT_SERVICE_ID_MULTI_MASTERS, &cff_service_multi_masters, + FT_SERVICE_ID_METRICS_VARIATIONS, &cff_service_metrics_variations, + FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info, + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name, + FT_SERVICE_ID_GLYPH_DICT, &cff_service_glyph_dict, + FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info, + FT_SERVICE_ID_CID, &cff_service_cid_info, + FT_SERVICE_ID_PROPERTIES, &cff_service_properties, + FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load + ) +#else + FT_DEFINE_SERVICEDESCREC8( + cff_services, + + FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF, + FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info, + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cff_service_ps_name, + FT_SERVICE_ID_GLYPH_DICT, &cff_service_glyph_dict, + FT_SERVICE_ID_TT_CMAP, &cff_service_get_cmap_info, + FT_SERVICE_ID_CID, &cff_service_cid_info, + FT_SERVICE_ID_PROPERTIES, &cff_service_properties, + FT_SERVICE_ID_CFF_LOAD, &cff_service_cff_load + ) +#endif + + + FT_CALLBACK_DEF( FT_Module_Interface ) + cff_get_interface( FT_Module driver, /* CFF_Driver */ + const char* module_interface ) + { + FT_Library library; + FT_Module sfnt; + FT_Module_Interface result; + + + result = ft_service_list_lookup( cff_services, module_interface ); + if ( result ) + return result; + + /* `driver' is not yet evaluated */ + if ( !driver ) + return NULL; + library = driver->library; + if ( !library ) + return NULL; + + /* we pass our request to the `sfnt' module */ + sfnt = FT_Get_Module( library, "sfnt" ); + + return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0; + } + + + /* The FT_DriverInterface structure is defined in ftdriver.h. */ + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS +#define CFF_SIZE_SELECT cff_size_select +#else +#define CFF_SIZE_SELECT 0 +#endif + + FT_DEFINE_DRIVER( + cff_driver_class, + + FT_MODULE_FONT_DRIVER | + FT_MODULE_DRIVER_SCALABLE | + FT_MODULE_DRIVER_HAS_HINTER | + FT_MODULE_DRIVER_HINTS_LIGHTLY, + + sizeof ( PS_DriverRec ), + "cff", + 0x10000L, + 0x20000L, + + NULL, /* module-specific interface */ + + cff_driver_init, /* FT_Module_Constructor module_init */ + cff_driver_done, /* FT_Module_Destructor module_done */ + cff_get_interface, /* FT_Module_Requester get_interface */ + + sizeof ( TT_FaceRec ), + sizeof ( CFF_SizeRec ), + sizeof ( CFF_GlyphSlotRec ), + + cff_face_init, /* FT_Face_InitFunc init_face */ + cff_face_done, /* FT_Face_DoneFunc done_face */ + cff_size_init, /* FT_Size_InitFunc init_size */ + cff_size_done, /* FT_Size_DoneFunc done_size */ + cff_slot_init, /* FT_Slot_InitFunc init_slot */ + cff_slot_done, /* FT_Slot_DoneFunc done_slot */ + + cff_glyph_load, /* FT_Slot_LoadFunc load_glyph */ + + cff_get_kerning, /* FT_Face_GetKerningFunc get_kerning */ + NULL, /* FT_Face_AttachFunc attach_file */ + cff_get_advances, /* FT_Face_GetAdvancesFunc get_advances */ + + cff_size_request, /* FT_Size_RequestFunc request_size */ + CFF_SIZE_SELECT /* FT_Size_SelectFunc select_size */ + ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffdrivr.h b/non-source/foreign/freetype2/src/cff/cffdrivr.h new file mode 100644 index 000000000..fd5bc37ec --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffdrivr.h @@ -0,0 +1,35 @@ +/**************************************************************************** + * + * cffdrivr.h + * + * High-level OpenType driver interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFDRIVER_H_ +#define CFFDRIVER_H_ + + +#include <freetype/internal/ftdrv.h> + + +FT_BEGIN_HEADER + + FT_DECLARE_DRIVER( cff_driver_class ) + +FT_END_HEADER + +#endif /* CFFDRIVER_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cfferrs.h b/non-source/foreign/freetype2/src/cff/cfferrs.h new file mode 100644 index 000000000..128adc3b7 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cfferrs.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * + * cfferrs.h + * + * CFF error codes (specification only). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the CFF error enumeration constants. + * + */ + +#ifndef CFFERRS_H_ +#define CFFERRS_H_ + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX CFF_Err_ +#define FT_ERR_BASE FT_Mod_Err_CFF + + +#include <freetype/fterrors.h> + +#endif /* CFFERRS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffgload.c b/non-source/foreign/freetype2/src/cff/cffgload.c new file mode 100644 index 000000000..cbb071abd --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffgload.c @@ -0,0 +1,762 @@ +/**************************************************************************** + * + * cffgload.c + * + * OpenType Glyph Loader (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/sfnt.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/psaux.h> +#include <freetype/ftoutln.h> +#include <freetype/ftdriver.h> + +#include "cffload.h" +#include "cffgload.h" + +#include "cfferrs.h" + +#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 + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cffgload + + + FT_LOCAL_DEF( FT_Error ) + cff_get_glyph_data( TT_Face face, + FT_UInt glyph_index, + FT_Byte** pointer, + FT_ULong* length ) + { +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* For incremental fonts get the character data using the */ + /* callback function. */ + if ( face->root.internal->incremental_interface ) + { + FT_Data data; + FT_Error error = + face->root.internal->incremental_interface->funcs->get_glyph_data( + face->root.internal->incremental_interface->object, + glyph_index, &data ); + + + *pointer = (FT_Byte*)data.pointer; + *length = data.length; + + return error; + } + else +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + + { + CFF_Font cff = (CFF_Font)( face->extra.data ); + + + return cff_index_access_element( &cff->charstrings_index, glyph_index, + pointer, length ); + } + } + + + FT_LOCAL_DEF( void ) + cff_free_glyph_data( TT_Face face, + FT_Byte** pointer, + FT_ULong length ) + { +#ifndef FT_CONFIG_OPTION_INCREMENTAL + FT_UNUSED( length ); +#endif + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* For incremental fonts get the character data using the */ + /* callback function. */ + if ( face->root.internal->incremental_interface ) + { + FT_Data data; + + + data.pointer = *pointer; + data.length = (FT_UInt)length; + + face->root.internal->incremental_interface->funcs->free_glyph_data( + face->root.internal->incremental_interface->object, &data ); + } + else +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + + { + CFF_Font cff = (CFF_Font)( face->extra.data ); + + + cff_index_forget_element( &cff->charstrings_index, pointer ); + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /********** *********/ + /********** *********/ + /********** COMPUTE THE MAXIMUM ADVANCE WIDTH *********/ + /********** *********/ + /********** The following code is in charge of computing *********/ + /********** the maximum advance width of the font. It *********/ + /********** quickly processes each glyph charstring to *********/ + /********** extract the value from either a `sbw' or `seac' *********/ + /********** operator. *********/ + /********** *********/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + +#if 0 /* unused until we support pure CFF fonts */ + + + FT_LOCAL_DEF( FT_Error ) + cff_compute_max_advance( TT_Face face, + FT_Int* max_advance ) + { + FT_Error error = FT_Err_Ok; + CFF_Decoder decoder; + FT_Int glyph_index; + CFF_Font cff = (CFF_Font)face->other; + + PSAux_Service psaux = (PSAux_Service)face->psaux; + const CFF_Decoder_Funcs decoder_funcs = psaux->cff_decoder_funcs; + + + *max_advance = 0; + + /* Initialize load decoder */ + decoder_funcs->init( &decoder, face, 0, 0, 0, 0, 0, 0 ); + + decoder.builder.metrics_only = 1; + decoder.builder.load_points = 0; + + /* For each glyph, parse the glyph charstring and extract */ + /* the advance width. */ + for ( glyph_index = 0; glyph_index < face->root.num_glyphs; + glyph_index++ ) + { + FT_Byte* charstring; + FT_ULong charstring_len; + + + /* now get load the unscaled outline */ + error = cff_get_glyph_data( face, glyph_index, + &charstring, &charstring_len ); + if ( !error ) + { + error = decoder_funcs->prepare( &decoder, size, glyph_index ); + if ( !error ) + error = decoder_funcs->parse_charstrings_old( &decoder, + charstring, + charstring_len, + 0 ); + + cff_free_glyph_data( face, &charstring, &charstring_len ); + } + + /* ignore the error if one has occurred -- skip to next glyph */ + error = FT_Err_Ok; + } + + *max_advance = decoder.builder.advance.x; + + return FT_Err_Ok; + } + + +#endif /* 0 */ + + + FT_LOCAL_DEF( FT_Error ) + cff_slot_load( CFF_GlyphSlot glyph, + CFF_Size size, + FT_UInt glyph_index, + FT_Int32 load_flags ) + { + FT_Error error; + CFF_Decoder decoder; + PS_Decoder psdecoder; + TT_Face face = (TT_Face)glyph->root.face; + FT_Bool hinting, scaled, force_scaling; + CFF_Font cff = (CFF_Font)face->extra.data; + + 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; + + + force_scaling = FALSE; + + /* in a CID-keyed font, consider `glyph_index' as a CID and map */ + /* it immediately to the real glyph_index -- if it isn't a */ + /* subsetted font, glyph_indices and CIDs are identical, though */ + if ( cff->top_font.font_dict.cid_registry != 0xFFFFU && + cff->charset.cids ) + { + /* don't handle CID 0 (.notdef) which is directly mapped to GID 0 */ + if ( glyph_index != 0 ) + { + glyph_index = cff_charset_cid_to_gindex( &cff->charset, + glyph_index ); + if ( glyph_index == 0 ) + return FT_THROW( Invalid_Argument ); + } + } + else if ( glyph_index >= cff->num_glyphs ) + return FT_THROW( Invalid_Argument ); + + if ( load_flags & FT_LOAD_NO_RECURSE ) + load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; + + glyph->x_scale = 0x10000L; + glyph->y_scale = 0x10000L; + if ( size ) + { + glyph->x_scale = size->root.metrics.x_scale; + glyph->y_scale = size->root.metrics.y_scale; + } + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + /* try to load embedded bitmap if any */ + /* */ + /* XXX: The convention should be emphasized in */ + /* the documents because it can be confusing. */ + if ( size ) + { + CFF_Face cff_face = (CFF_Face)size->root.face; + SFNT_Service sfnt = (SFNT_Service)cff_face->sfnt; + FT_Stream stream = cff_face->root.stream; + + + if ( size->strike_index != 0xFFFFFFFFUL && + ( load_flags & FT_LOAD_NO_BITMAP ) == 0 && + IS_DEFAULT_INSTANCE( size->root.face ) ) + { + TT_SBit_MetricsRec metrics; + + + error = sfnt->load_sbit_image( face, + size->strike_index, + glyph_index, + (FT_UInt)load_flags, + stream, + &glyph->root.bitmap, + &metrics ); + + if ( !error ) + { + FT_Bool has_vertical_info; + FT_UShort advance; + FT_Short dummy; + + + glyph->root.outline.n_points = 0; + glyph->root.outline.n_contours = 0; + + glyph->root.metrics.width = (FT_Pos)metrics.width * 64; + glyph->root.metrics.height = (FT_Pos)metrics.height * 64; + + glyph->root.metrics.horiBearingX = (FT_Pos)metrics.horiBearingX * 64; + glyph->root.metrics.horiBearingY = (FT_Pos)metrics.horiBearingY * 64; + glyph->root.metrics.horiAdvance = (FT_Pos)metrics.horiAdvance * 64; + + glyph->root.metrics.vertBearingX = (FT_Pos)metrics.vertBearingX * 64; + glyph->root.metrics.vertBearingY = (FT_Pos)metrics.vertBearingY * 64; + glyph->root.metrics.vertAdvance = (FT_Pos)metrics.vertAdvance * 64; + + glyph->root.format = FT_GLYPH_FORMAT_BITMAP; + + if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) + { + glyph->root.bitmap_left = metrics.vertBearingX; + glyph->root.bitmap_top = metrics.vertBearingY; + } + else + { + glyph->root.bitmap_left = metrics.horiBearingX; + glyph->root.bitmap_top = metrics.horiBearingY; + } + + /* compute linear advance widths */ + + (void)( (SFNT_Service)face->sfnt )->get_metrics( face, 0, + glyph_index, + &dummy, + &advance ); + glyph->root.linearHoriAdvance = advance; + + has_vertical_info = FT_BOOL( + face->vertical_info && + face->vertical.number_Of_VMetrics > 0 ); + + /* get the vertical metrics from the vmtx table if we have one */ + if ( has_vertical_info ) + { + (void)( (SFNT_Service)face->sfnt )->get_metrics( face, 1, + glyph_index, + &dummy, + &advance ); + glyph->root.linearVertAdvance = advance; + } + else + { + /* make up vertical ones */ + if ( face->os2.version != 0xFFFFU ) + glyph->root.linearVertAdvance = (FT_Pos) + ( face->os2.sTypoAscender - face->os2.sTypoDescender ); + else + glyph->root.linearVertAdvance = (FT_Pos) + ( face->horizontal.Ascender - face->horizontal.Descender ); + } + + return error; + } + } + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + /* return immediately if we only want the embedded bitmaps */ + if ( load_flags & FT_LOAD_SBITS_ONLY ) + return FT_THROW( Invalid_Argument ); + +#ifdef FT_CONFIG_OPTION_SVG + /* check for OT-SVG */ + if ( ( load_flags & FT_LOAD_NO_SVG ) == 0 && + ( load_flags & FT_LOAD_COLOR ) && + face->svg ) + { + /* + * We load the SVG document and try to grab the advances from the + * table. For the bearings we rely on the presetting hook to do that. + */ + + SFNT_Service sfnt = (SFNT_Service)face->sfnt; + + + if ( size && (size->root.metrics.x_ppem < 1 || + size->root.metrics.y_ppem < 1 ) ) + { + error = FT_THROW( Invalid_Size_Handle ); + return error; + } + + FT_TRACE3(( "Trying to load SVG glyph\n" )); + + error = sfnt->load_svg_doc( (FT_GlyphSlot)glyph, glyph_index ); + if ( !error ) + { + FT_Fixed x_scale = size->root.metrics.x_scale; + FT_Fixed y_scale = size->root.metrics.y_scale; + + FT_Short dummy; + FT_UShort advanceX; + FT_UShort advanceY; + + + FT_TRACE3(( "Successfully loaded SVG glyph\n" )); + + glyph->root.format = FT_GLYPH_FORMAT_SVG; + + /* + * If horizontal or vertical advances are not present in the table, + * this is a problem with the font since the standard requires them. + * However, we are graceful and calculate the values by ourselves + * for the vertical case. + */ + sfnt->get_metrics( face, + FALSE, + glyph_index, + &dummy, + &advanceX ); + sfnt->get_metrics( face, + TRUE, + glyph_index, + &dummy, + &advanceY ); + + glyph->root.linearHoriAdvance = advanceX; + glyph->root.linearVertAdvance = advanceY; + + glyph->root.metrics.horiAdvance = FT_MulFix( advanceX, x_scale ); + glyph->root.metrics.vertAdvance = FT_MulFix( advanceY, y_scale ); + + return error; + } + + FT_TRACE3(( "Failed to load SVG glyph\n" )); + } + +#endif /* FT_CONFIG_OPTION_SVG */ + + /* if we have a CID subfont, use its matrix (which has already */ + /* been multiplied with the root matrix) */ + + /* this scaling is only relevant if the PS hinter isn't active */ + if ( cff->num_subfonts ) + { + FT_Long top_upm, sub_upm; + FT_Byte fd_index = cff_fd_select_get( &cff->fd_select, + glyph_index ); + + + if ( fd_index >= cff->num_subfonts ) + fd_index = (FT_Byte)( cff->num_subfonts - 1 ); + + top_upm = (FT_Long)cff->top_font.font_dict.units_per_em; + sub_upm = (FT_Long)cff->subfonts[fd_index]->font_dict.units_per_em; + + font_matrix = cff->subfonts[fd_index]->font_dict.font_matrix; + font_offset = cff->subfonts[fd_index]->font_dict.font_offset; + + if ( top_upm != sub_upm ) + { + glyph->x_scale = FT_MulDiv( glyph->x_scale, top_upm, sub_upm ); + glyph->y_scale = FT_MulDiv( glyph->y_scale, top_upm, sub_upm ); + + force_scaling = TRUE; + } + } + else + { + font_matrix = cff->top_font.font_dict.font_matrix; + font_offset = cff->top_font.font_dict.font_offset; + } + + glyph->root.outline.n_points = 0; + glyph->root.outline.n_contours = 0; + + /* top-level code ensures that FT_LOAD_NO_HINTING is set */ + /* if FT_LOAD_NO_SCALE is active */ + hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_HINTING ) == 0 ); + scaled = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 ); + + glyph->hint = hinting; + glyph->scaled = scaled; + glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; /* by default */ + + { +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face ); +#endif + + FT_Byte* charstring; + FT_ULong charstring_len; + + + decoder_funcs->init( &decoder, face, size, glyph, hinting, + FT_LOAD_TARGET_MODE( load_flags ), + cff_get_glyph_data, + cff_free_glyph_data ); + + /* this is for pure CFFs */ + if ( load_flags & FT_LOAD_ADVANCE_ONLY ) + decoder.width_only = TRUE; + + decoder.builder.no_recurse = + FT_BOOL( load_flags & FT_LOAD_NO_RECURSE ); + + /* this function also checks for a valid subfont index */ + error = decoder_funcs->prepare( &decoder, size, glyph_index ); + if ( error ) + goto Glyph_Build_Finished; + + /* now load the unscaled outline */ + error = cff_get_glyph_data( face, glyph_index, + &charstring, &charstring_len ); + if ( error ) + goto Glyph_Build_Finished; + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + /* choose which CFF renderer to use */ + if ( driver->hinting_engine == FT_HINTING_FREETYPE ) + error = decoder_funcs->parse_charstrings_old( &decoder, + charstring, + charstring_len, + 0 ); + else +#endif + { + psaux->ps_decoder_init( &psdecoder, &decoder, FALSE ); + + error = decoder_funcs->parse_charstrings( &psdecoder, + charstring, + charstring_len ); + + /* Adobe's engine uses 16.16 numbers everywhere; */ + /* as a consequence, glyphs larger than 2000ppem get rejected */ + if ( FT_ERR_EQ( error, Glyph_Too_Big ) ) + { + /* this time, we retry unhinted and scale up the glyph later on */ + /* (the engine uses and sets the hardcoded value 0x10000 / 64 = */ + /* 0x400 for both `x_scale' and `y_scale' in this case) */ + hinting = FALSE; + force_scaling = TRUE; + glyph->hint = hinting; + + error = decoder_funcs->parse_charstrings( &psdecoder, + charstring, + charstring_len ); + } + } + + cff_free_glyph_data( face, &charstring, charstring_len ); + + if ( error ) + goto Glyph_Build_Finished; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* Control data and length may not be available for incremental */ + /* fonts. */ + if ( face->root.internal->incremental_interface ) + { + glyph->root.control_data = NULL; + glyph->root.control_len = 0; + } + else +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + + /* We set control_data and control_len if charstrings is loaded. */ + /* See how charstring loads at cff_index_access_element() in */ + /* cffload.c. */ + { + CFF_Index csindex = &cff->charstrings_index; + + + if ( csindex->offsets ) + { + glyph->root.control_data = csindex->bytes + + csindex->offsets[glyph_index] - 1; + glyph->root.control_len = (FT_Long)charstring_len; + } + } + + Glyph_Build_Finished: + /* save new glyph tables, if no error */ + if ( !error ) + decoder.builder.funcs.done( &decoder.builder ); + /* XXX: anything to do for broken glyph entry? */ + } + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + + /* Incremental fonts can optionally override the metrics. */ + if ( !error && + face->root.internal->incremental_interface && + face->root.internal->incremental_interface->funcs->get_glyph_metrics ) + { + FT_Incremental_MetricsRec metrics; + + + metrics.bearing_x = decoder.builder.left_bearing.x; + metrics.bearing_y = 0; + metrics.advance = decoder.builder.advance.x; + metrics.advance_v = decoder.builder.advance.y; + + error = face->root.internal->incremental_interface->funcs->get_glyph_metrics( + face->root.internal->incremental_interface->object, + glyph_index, FALSE, &metrics ); + + decoder.builder.left_bearing.x = metrics.bearing_x; + decoder.builder.advance.x = metrics.advance; + decoder.builder.advance.y = metrics.advance_v; + } + +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + + if ( !error ) + { + /* Now, set the metrics -- this is rather simple, as */ + /* the left side bearing is the xMin, and the top side */ + /* bearing the yMax. */ + + /* For composite glyphs, return only left side bearing and */ + /* advance width. */ + if ( load_flags & FT_LOAD_NO_RECURSE ) + { + FT_Slot_Internal internal = glyph->root.internal; + + + glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x; + glyph->root.metrics.horiAdvance = decoder.glyph_width; + internal->glyph_matrix = font_matrix; + internal->glyph_delta = font_offset; + internal->glyph_transformed = 1; + } + else + { + FT_BBox cbox; + FT_Glyph_Metrics* metrics = &glyph->root.metrics; + FT_Bool has_vertical_info; + + + if ( face->horizontal.number_Of_HMetrics ) + { + FT_Short horiBearingX = 0; + FT_UShort horiAdvance = 0; + + + ( (SFNT_Service)face->sfnt )->get_metrics( face, 0, + glyph_index, + &horiBearingX, + &horiAdvance ); + metrics->horiAdvance = horiAdvance; + metrics->horiBearingX = horiBearingX; + glyph->root.linearHoriAdvance = horiAdvance; + } + else + { + /* copy the _unscaled_ advance width */ + metrics->horiAdvance = decoder.glyph_width; + glyph->root.linearHoriAdvance = decoder.glyph_width; + } + + glyph->root.internal->glyph_transformed = 0; + + has_vertical_info = FT_BOOL( face->vertical_info && + face->vertical.number_Of_VMetrics > 0 ); + + /* get the vertical metrics from the vmtx table if we have one */ + if ( has_vertical_info ) + { + FT_Short vertBearingY = 0; + FT_UShort vertAdvance = 0; + + + ( (SFNT_Service)face->sfnt )->get_metrics( face, 1, + glyph_index, + &vertBearingY, + &vertAdvance ); + metrics->vertBearingY = vertBearingY; + metrics->vertAdvance = vertAdvance; + } + else + { + /* make up vertical ones */ + if ( face->os2.version != 0xFFFFU ) + metrics->vertAdvance = (FT_Pos)( face->os2.sTypoAscender - + face->os2.sTypoDescender ); + else + metrics->vertAdvance = (FT_Pos)( face->horizontal.Ascender - + face->horizontal.Descender ); + } + + glyph->root.linearVertAdvance = metrics->vertAdvance; + + glyph->root.format = FT_GLYPH_FORMAT_OUTLINE; + + glyph->root.outline.flags = 0; + if ( size && size->root.metrics.y_ppem < 24 ) + glyph->root.outline.flags |= FT_OUTLINE_HIGH_PRECISION; + + glyph->root.outline.flags |= FT_OUTLINE_REVERSE_FILL; + + /* apply the font matrix, if any */ + if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L || + font_matrix.xy != 0 || font_matrix.yx != 0 ) + { + FT_Outline_Transform( &glyph->root.outline, &font_matrix ); + + metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, + font_matrix.xx ); + metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, + font_matrix.yy ); + } + + if ( font_offset.x || font_offset.y ) + { + FT_Outline_Translate( &glyph->root.outline, + font_offset.x, + font_offset.y ); + + metrics->horiAdvance += font_offset.x; + metrics->vertAdvance += font_offset.y; + } + + if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 || force_scaling ) + { + /* scale the outline and the metrics */ + FT_Int n; + FT_Outline* cur = &glyph->root.outline; + FT_Vector* vec = cur->points; + FT_Fixed x_scale = glyph->x_scale; + FT_Fixed y_scale = glyph->y_scale; + + + /* First of all, scale the points */ + if ( !hinting || !decoder.builder.hints_funcs ) + for ( n = cur->n_points; n > 0; n--, vec++ ) + { + vec->x = FT_MulFix( vec->x, x_scale ); + vec->y = FT_MulFix( vec->y, y_scale ); + } + + /* Then scale the metrics */ + metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale ); + metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale ); + } + + /* compute the other metrics */ + FT_Outline_Get_CBox( &glyph->root.outline, &cbox ); + + metrics->width = cbox.xMax - cbox.xMin; + metrics->height = cbox.yMax - cbox.yMin; + + metrics->horiBearingX = cbox.xMin; + metrics->horiBearingY = cbox.yMax; + + if ( has_vertical_info ) + { + metrics->vertBearingX = metrics->horiBearingX - + metrics->horiAdvance / 2; + metrics->vertBearingY = FT_MulFix( metrics->vertBearingY, + glyph->y_scale ); + } + else + { + if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) + ft_synthesize_vertical_metrics( metrics, + metrics->vertAdvance ); + } + } + } + + return error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffgload.h b/non-source/foreign/freetype2/src/cff/cffgload.h new file mode 100644 index 000000000..346d4b11c --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffgload.h @@ -0,0 +1,62 @@ +/**************************************************************************** + * + * cffgload.h + * + * OpenType Glyph Loader (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFGLOAD_H_ +#define CFFGLOAD_H_ + + +#include <freetype/freetype.h> +#include <freetype/internal/cffotypes.h> + + +FT_BEGIN_HEADER + + FT_LOCAL( FT_Error ) + cff_get_glyph_data( TT_Face face, + FT_UInt glyph_index, + FT_Byte** pointer, + FT_ULong* length ); + FT_LOCAL( void ) + cff_free_glyph_data( TT_Face face, + FT_Byte** pointer, + FT_ULong length ); + + +#if 0 /* unused until we support pure CFF fonts */ + + /* Compute the maximum advance width of a font through quick parsing */ + FT_LOCAL( FT_Error ) + cff_compute_max_advance( TT_Face face, + FT_Int* max_advance ); + +#endif /* 0 */ + + + FT_LOCAL( FT_Error ) + cff_slot_load( CFF_GlyphSlot glyph, + CFF_Size size, + FT_UInt glyph_index, + FT_Int32 load_flags ); + + +FT_END_HEADER + +#endif /* CFFGLOAD_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffload.c b/non-source/foreign/freetype2/src/cff/cffload.c new file mode 100644 index 000000000..979fd45f6 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffload.c @@ -0,0 +1,2570 @@ +/**************************************************************************** + * + * cffload.c + * + * OpenType and CFF data/program tables loader (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include <freetype/t1tables.h> +#include <freetype/internal/psaux.h> + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/ftmm.h> +#include <freetype/internal/services/svmm.h> +#endif + +#include "cffload.h" +#include "cffparse.h" + +#include "cfferrs.h" + + +#define FT_FIXED_ONE ( (FT_Fixed)0x10000 ) + + +#if 1 + + static const FT_UShort cff_isoadobe_charset[229] = + { + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228 + }; + + static const FT_UShort cff_expert_charset[166] = + { + 0, 1, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 13, 14, 15, 99, + 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 27, 28, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 109, 110, + 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 158, 155, 163, 319, + 320, 321, 322, 323, 324, 325, 326, 150, + 164, 169, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378 + }; + + static const FT_UShort cff_expertsubset_charset[87] = + { + 0, 1, 231, 232, 235, 236, 237, 238, + 13, 14, 15, 99, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 27, 28, + 249, 250, 251, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, + 266, 109, 110, 267, 268, 269, 270, 272, + 300, 301, 302, 305, 314, 315, 158, 155, + 163, 320, 321, 322, 323, 324, 325, 326, + 150, 164, 169, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346 + }; + + static const FT_UShort cff_standard_encoding[256] = + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, + 0, 111, 112, 113, 114, 0, 115, 116, + 117, 118, 119, 120, 121, 122, 0, 123, + 0, 124, 125, 126, 127, 128, 129, 130, + 131, 0, 132, 133, 0, 134, 135, 136, + 137, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 138, 0, 139, 0, 0, 0, 0, + 140, 141, 142, 143, 0, 0, 0, 0, + 0, 144, 0, 0, 0, 145, 0, 0, + 146, 147, 148, 149, 0, 0, 0, 0 + }; + + static const FT_UShort cff_expert_encoding[256] = + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 229, 230, 0, 231, 232, 233, 234, + 235, 236, 237, 238, 13, 14, 15, 99, + 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 27, 28, 249, 250, 251, 252, + 0, 253, 254, 255, 256, 257, 0, 0, + 0, 258, 0, 0, 259, 260, 261, 262, + 0, 0, 263, 264, 265, 0, 266, 109, + 110, 267, 268, 269, 0, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 304, 305, 306, 0, 0, 307, 308, + 309, 310, 311, 0, 312, 0, 0, 312, + 0, 0, 314, 315, 0, 0, 316, 317, + 318, 0, 0, 0, 158, 155, 163, 319, + 320, 321, 322, 323, 324, 325, 0, 0, + 326, 150, 164, 169, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378 + }; + +#endif /* 1 */ + + + FT_LOCAL_DEF( FT_UShort ) + cff_get_standard_encoding( FT_UInt charcode ) + { + return (FT_UShort)( charcode < 256 ? cff_standard_encoding[charcode] + : 0 ); + } + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cffload + + + /* read an offset from the index's stream current position */ + static FT_ULong + cff_index_read_offset( CFF_Index idx, + FT_Error *errorp ) + { + FT_Error error; + FT_Stream stream = idx->stream; + FT_Byte tmp[4]; + FT_ULong result = 0; + + + if ( !FT_STREAM_READ( tmp, idx->off_size ) ) + { + FT_Int nn; + + + for ( nn = 0; nn < idx->off_size; nn++ ) + result = ( result << 8 ) | tmp[nn]; + } + + *errorp = error; + return result; + } + + + static FT_Error + cff_index_init( CFF_Index idx, + FT_Stream stream, + FT_Bool load, + FT_Bool cff2 ) + { + FT_Error error; + FT_Memory memory = stream->memory; + FT_UInt count; + + + FT_ZERO( idx ); + + idx->stream = stream; + idx->start = FT_STREAM_POS(); + + if ( cff2 ) + { + if ( FT_READ_ULONG( count ) ) + goto Exit; + idx->hdr_size = 5; + } + else + { + if ( FT_READ_USHORT( count ) ) + goto Exit; + idx->hdr_size = 3; + } + + if ( count > 0 ) + { + FT_Byte offsize; + FT_ULong size; + + + /* there is at least one element; read the offset size, */ + /* then access the offset table to compute the index's total size */ + if ( FT_READ_BYTE( offsize ) ) + goto Exit; + + if ( offsize < 1 || offsize > 4 ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + idx->count = count; + idx->off_size = offsize; + size = (FT_ULong)( count + 1 ) * offsize; + + idx->data_offset = idx->start + idx->hdr_size + size; + + if ( FT_STREAM_SKIP( size - offsize ) ) + goto Exit; + + size = cff_index_read_offset( idx, &error ); + if ( error ) + goto Exit; + + if ( size == 0 ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + idx->data_size = --size; + + if ( load ) + { + /* load the data */ + if ( FT_FRAME_EXTRACT( size, idx->bytes ) ) + goto Exit; + } + else + { + /* skip the data */ + if ( FT_STREAM_SKIP( size ) ) + goto Exit; + } + } + + Exit: + if ( error ) + FT_FREE( idx->offsets ); + + return error; + } + + + static void + cff_index_done( CFF_Index idx ) + { + if ( idx->stream ) + { + FT_Stream stream = idx->stream; + FT_Memory memory = stream->memory; + + + if ( idx->bytes ) + FT_FRAME_RELEASE( idx->bytes ); + + FT_FREE( idx->offsets ); + FT_ZERO( idx ); + } + } + + + static FT_Error + cff_index_load_offsets( CFF_Index idx ) + { + FT_Error error = FT_Err_Ok; + FT_Stream stream = idx->stream; + FT_Memory memory = stream->memory; + + + if ( idx->count > 0 && !idx->offsets ) + { + FT_Byte offsize = idx->off_size; + FT_ULong data_size; + FT_Byte* p; + FT_Byte* p_end; + FT_ULong* poff; + + + data_size = (FT_ULong)( idx->count + 1 ) * offsize; + + if ( FT_QNEW_ARRAY( idx->offsets, idx->count + 1 ) || + FT_STREAM_SEEK( idx->start + idx->hdr_size ) || + FT_FRAME_ENTER( data_size ) ) + goto Exit; + + poff = idx->offsets; + p = (FT_Byte*)stream->cursor; + p_end = p + data_size; + + switch ( offsize ) + { + case 1: + for ( ; p < p_end; p++, poff++ ) + poff[0] = p[0]; + break; + + case 2: + for ( ; p < p_end; p += 2, poff++ ) + poff[0] = FT_PEEK_USHORT( p ); + break; + + case 3: + for ( ; p < p_end; p += 3, poff++ ) + poff[0] = FT_PEEK_UOFF3( p ); + break; + + default: + for ( ; p < p_end; p += 4, poff++ ) + poff[0] = FT_PEEK_ULONG( p ); + } + + FT_FRAME_EXIT(); + } + + Exit: + if ( error ) + FT_FREE( idx->offsets ); + + return error; + } + + + /* Allocate a table containing pointers to an index's elements. */ + /* The `pool' argument makes this function convert the index */ + /* entries to C-style strings (that is, null-terminated). */ + static FT_Error + cff_index_get_pointers( CFF_Index idx, + FT_Byte*** table, + FT_Byte** pool, + FT_ULong* pool_size ) + { + FT_Error error = FT_Err_Ok; + FT_Memory memory = idx->stream->memory; + + FT_Byte** tbl = NULL; + FT_Byte* new_bytes = NULL; + FT_ULong new_size; + + + *table = NULL; + + if ( !idx->offsets ) + { + error = cff_index_load_offsets( idx ); + if ( error ) + goto Exit; + } + + new_size = idx->data_size + idx->count; + + if ( idx->count > 0 && + !FT_QNEW_ARRAY( tbl, idx->count + 1 ) && + ( !pool || !FT_ALLOC( new_bytes, new_size ) ) ) + { + FT_ULong n, cur_offset; + FT_ULong extra = 0; + FT_Byte* org_bytes = idx->bytes; + + + /* at this point, `idx->offsets' can't be NULL */ + cur_offset = idx->offsets[0] - 1; + + /* sanity check */ + if ( cur_offset != 0 ) + { + FT_TRACE0(( "cff_index_get_pointers:" + " invalid first offset value %ld set to zero\n", + cur_offset )); + cur_offset = 0; + } + + if ( !pool ) + tbl[0] = org_bytes + cur_offset; + else + tbl[0] = new_bytes + cur_offset; + + for ( n = 1; n <= idx->count; n++ ) + { + FT_ULong next_offset = idx->offsets[n] - 1; + + + /* two sanity checks for invalid offset tables */ + if ( next_offset < cur_offset ) + next_offset = cur_offset; + else if ( next_offset > idx->data_size ) + next_offset = idx->data_size; + + if ( !pool ) + tbl[n] = org_bytes + next_offset; + else + { + tbl[n] = new_bytes + next_offset + extra; + + if ( next_offset != cur_offset ) + { + 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 = tbl; + + if ( pool ) + *pool = new_bytes; + if ( pool_size ) + *pool_size = new_size; + } + + Exit: + if ( error && new_bytes ) + FT_FREE( new_bytes ); + if ( error && tbl ) + FT_FREE( tbl ); + + return error; + } + + + FT_LOCAL_DEF( FT_Error ) + cff_index_access_element( CFF_Index idx, + FT_UInt element, + FT_Byte** pbytes, + FT_ULong* pbyte_len ) + { + FT_Error error = FT_Err_Ok; + + + if ( idx && idx->count > element ) + { + /* compute start and end offsets */ + FT_Stream stream = idx->stream; + FT_ULong off1, off2 = 0; + + + /* load offsets from file or the offset table */ + if ( !idx->offsets ) + { + FT_ULong pos = element * idx->off_size; + + + if ( FT_STREAM_SEEK( idx->start + idx->hdr_size + pos ) ) + goto Exit; + + off1 = cff_index_read_offset( idx, &error ); + if ( error ) + goto Exit; + + if ( off1 != 0 ) + { + do + { + element++; + off2 = cff_index_read_offset( idx, &error ); + + } while ( off2 == 0 && element < idx->count ); + } + } + else /* use offsets table */ + { + off1 = idx->offsets[element]; + if ( off1 ) + { + do + { + element++; + off2 = idx->offsets[element]; + + } while ( off2 == 0 && element < idx->count ); + } + } + + /* XXX: should check off2 does not exceed the end of this entry; */ + /* at present, only truncate off2 at the end of this stream */ + if ( off2 > stream->size + 1 || + idx->data_offset > stream->size - off2 + 1 ) + { + FT_ERROR(( "cff_index_access_element:" + " offset to next entry (%ld)" + " exceeds the end of stream (%ld)\n", + off2, stream->size - idx->data_offset + 1 )); + off2 = stream->size - idx->data_offset + 1; + } + + /* access element */ + if ( off1 && off2 > off1 ) + { + *pbyte_len = off2 - off1; + + if ( idx->bytes ) + { + /* this index was completely loaded in memory, that's easy */ + *pbytes = idx->bytes + off1 - 1; + } + else + { + /* this index is still on disk/file, access it through a frame */ + if ( FT_STREAM_SEEK( idx->data_offset + off1 - 1 ) || + FT_FRAME_EXTRACT( off2 - off1, *pbytes ) ) + goto Exit; + } + } + else + { + /* empty index element */ + *pbytes = 0; + *pbyte_len = 0; + } + } + else + error = FT_THROW( Invalid_Argument ); + + Exit: + return error; + } + + + FT_LOCAL_DEF( void ) + cff_index_forget_element( CFF_Index idx, + FT_Byte** pbytes ) + { + if ( idx->bytes == 0 ) + { + FT_Stream stream = idx->stream; + + + FT_FRAME_RELEASE( *pbytes ); + } + } + + + /* get an entry from Name INDEX */ + FT_LOCAL_DEF( FT_String* ) + cff_index_get_name( CFF_Font font, + FT_UInt element ) + { + CFF_Index idx = &font->name_index; + FT_Memory memory; + FT_Byte* bytes; + FT_ULong byte_len; + FT_Error error; + FT_String* name = NULL; + + + if ( !idx->stream ) /* CFF2 does not include a name index */ + goto Exit; + + memory = idx->stream->memory; + + error = cff_index_access_element( idx, element, &bytes, &byte_len ); + if ( error ) + goto Exit; + + if ( !FT_QALLOC( name, byte_len + 1 ) ) + { + FT_MEM_COPY( name, bytes, byte_len ); + name[byte_len] = 0; + } + cff_index_forget_element( idx, &bytes ); + + Exit: + return name; + } + + + /* get an entry from String INDEX */ + FT_LOCAL_DEF( FT_String* ) + cff_index_get_string( CFF_Font font, + FT_UInt element ) + { + return ( element < font->num_strings ) + ? (FT_String*)font->strings[element] + : NULL; + } + + + FT_LOCAL_DEF( FT_String* ) + cff_index_get_sid_string( CFF_Font font, + FT_UInt sid ) + { + /* value 0xFFFFU indicates a missing dictionary entry */ + if ( sid == 0xFFFFU ) + return NULL; + + /* if it is not a standard string, return it */ + if ( sid > 390 ) + return cff_index_get_string( font, sid - 391 ); + + /* CID-keyed CFF fonts don't have glyph names */ + if ( !font->psnames ) + return NULL; + + /* this is a standard string */ + return (FT_String *)font->psnames->adobe_std_strings( sid ); + } + + + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** FD Select table support ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + + + static void + CFF_Done_FD_Select( CFF_FDSelect fdselect, + FT_Stream stream ) + { + if ( fdselect->data ) + FT_FRAME_RELEASE( fdselect->data ); + + fdselect->data_size = 0; + fdselect->format = 0; + fdselect->range_count = 0; + } + + + static FT_Error + CFF_Load_FD_Select( CFF_FDSelect fdselect, + FT_UInt num_glyphs, + FT_Stream stream, + FT_ULong offset ) + { + FT_Error error; + FT_Byte format; + FT_UInt num_ranges; + + + /* read format */ + if ( FT_STREAM_SEEK( offset ) || FT_READ_BYTE( format ) ) + goto Exit; + + fdselect->format = format; + fdselect->cache_count = 0; /* clear cache */ + + switch ( format ) + { + case 0: /* format 0, that's simple */ + fdselect->data_size = num_glyphs; + goto Load_Data; + + case 3: /* format 3, a tad more complex */ + if ( FT_READ_USHORT( num_ranges ) ) + goto Exit; + + if ( !num_ranges ) + { + FT_TRACE0(( "CFF_Load_FD_Select: empty FDSelect array\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + fdselect->data_size = num_ranges * 3 + 2; + + Load_Data: + if ( FT_FRAME_EXTRACT( fdselect->data_size, fdselect->data ) ) + goto Exit; + break; + + default: /* hmm... that's wrong */ + error = FT_THROW( Invalid_File_Format ); + } + + Exit: + return error; + } + + + FT_LOCAL_DEF( FT_Byte ) + cff_fd_select_get( CFF_FDSelect fdselect, + FT_UInt glyph_index ) + { + FT_Byte fd = 0; + + + /* if there is no FDSelect, return zero */ + /* Note: CFF2 with just one Font Dict has no FDSelect */ + if ( !fdselect->data ) + goto Exit; + + switch ( fdselect->format ) + { + case 0: + fd = fdselect->data[glyph_index]; + break; + + case 3: + /* first, compare to the cache */ + if ( glyph_index - fdselect->cache_first < fdselect->cache_count ) + { + fd = fdselect->cache_fd; + break; + } + + /* then, look up the ranges array */ + { + FT_Byte* p = fdselect->data; + FT_Byte* p_limit = p + fdselect->data_size; + FT_Byte fd2; + FT_UInt first, limit; + + + first = FT_NEXT_USHORT( p ); + do + { + if ( glyph_index < first ) + break; + + fd2 = *p++; + limit = FT_NEXT_USHORT( p ); + + if ( glyph_index < limit ) + { + fd = fd2; + + /* update cache */ + fdselect->cache_first = first; + fdselect->cache_count = limit - first; + fdselect->cache_fd = fd2; + break; + } + first = limit; + + } while ( p < p_limit ); + } + break; + + default: + ; + } + + Exit: + return fd; + } + + + /*************************************************************************/ + /*************************************************************************/ + /*** ***/ + /*** CFF font support ***/ + /*** ***/ + /*************************************************************************/ + /*************************************************************************/ + + static FT_Error + cff_charset_compute_cids( CFF_Charset charset, + FT_UInt num_glyphs, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + FT_UInt i; + FT_UShort max_cid = 0; + + + if ( charset->max_cid > 0 ) + goto Exit; + + for ( i = 0; i < num_glyphs; i++ ) + { + if ( charset->sids[i] > max_cid ) + max_cid = charset->sids[i]; + } + + if ( FT_NEW_ARRAY( charset->cids, (FT_ULong)max_cid + 1 ) ) + goto Exit; + + /* When multiple GIDs map to the same CID, we choose the lowest */ + /* GID. This is not described in any spec, but it matches the */ + /* behaviour of recent Acroread versions. The loop stops when */ + /* the unsigned index wraps around after reaching zero. */ + for ( i = num_glyphs - 1; i < num_glyphs; i-- ) + charset->cids[charset->sids[i]] = (FT_UShort)i; + + charset->max_cid = max_cid; + charset->num_glyphs = num_glyphs; + + Exit: + return error; + } + + + FT_LOCAL_DEF( FT_UInt ) + cff_charset_cid_to_gindex( CFF_Charset charset, + FT_UInt cid ) + { + FT_UInt result = 0; + + + if ( cid <= charset->max_cid ) + result = charset->cids[cid]; + + return result; + } + + + static void + cff_charset_free_cids( CFF_Charset charset, + FT_Memory memory ) + { + FT_FREE( charset->cids ); + charset->max_cid = 0; + } + + + static void + cff_charset_done( CFF_Charset charset, + FT_Stream stream ) + { + FT_Memory memory = stream->memory; + + + cff_charset_free_cids( charset, memory ); + + FT_FREE( charset->sids ); + charset->format = 0; + charset->offset = 0; + } + + + static FT_Error + cff_charset_load( CFF_Charset charset, + FT_UInt num_glyphs, + FT_Stream stream, + FT_ULong base_offset, + FT_ULong offset, + FT_Bool invert ) + { + FT_Memory memory = stream->memory; + FT_Error error = FT_Err_Ok; + FT_UShort glyph_sid; + + + /* If the offset is greater than 2, we have to parse the charset */ + /* table. */ + if ( offset > 2 ) + { + FT_UInt j; + + + charset->offset = base_offset + offset; + + /* Get the format of the table. */ + if ( FT_STREAM_SEEK( charset->offset ) || + FT_READ_BYTE( charset->format ) ) + goto Exit; + + /* Allocate memory for sids. */ + if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) ) + goto Exit; + + /* assign the .notdef glyph */ + charset->sids[0] = 0; + + switch ( charset->format ) + { + case 0: + if ( num_glyphs > 0 ) + { + if ( FT_FRAME_ENTER( ( num_glyphs - 1 ) * 2 ) ) + goto Exit; + + for ( j = 1; j < num_glyphs; j++ ) + charset->sids[j] = FT_GET_USHORT(); + + FT_FRAME_EXIT(); + } + break; + + case 1: + case 2: + { + FT_UInt nleft; + FT_UInt i; + + + j = 1; + + while ( j < num_glyphs ) + { + /* Read the first glyph sid of the range. */ + if ( FT_READ_USHORT( glyph_sid ) ) + goto Exit; + + /* Read the number of glyphs in the range. */ + if ( charset->format == 2 ) + { + if ( FT_READ_USHORT( nleft ) ) + goto Exit; + } + else + { + if ( FT_READ_BYTE( nleft ) ) + goto Exit; + } + + /* try to rescue some of the SIDs if `nleft' is too large */ + if ( glyph_sid > 0xFFFFL - nleft ) + { + FT_ERROR(( "cff_charset_load: invalid SID range trimmed" + " nleft=%d -> %ld\n", nleft, 0xFFFFL - glyph_sid )); + nleft = ( FT_UInt )( 0xFFFFL - glyph_sid ); + } + + /* Fill in the range of sids -- `nleft + 1' glyphs. */ + for ( i = 0; j < num_glyphs && i <= nleft; i++, j++, glyph_sid++ ) + charset->sids[j] = glyph_sid; + } + } + break; + + default: + FT_ERROR(( "cff_charset_load: invalid table format\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + } + else + { + /* Parse default tables corresponding to offset == 0, 1, or 2. */ + /* CFF specification intimates the following: */ + /* */ + /* In order to use a predefined charset, the following must be */ + /* true: The charset constructed for the glyphs in the font's */ + /* charstrings dictionary must match the predefined charset in */ + /* the first num_glyphs. */ + + charset->offset = offset; /* record charset type */ + + switch ( (FT_UInt)offset ) + { + case 0: + if ( num_glyphs > 229 ) + { + FT_ERROR(( "cff_charset_load: implicit charset larger than\n" )); + FT_ERROR(( "predefined charset (Adobe ISO-Latin)\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* Allocate memory for sids. */ + if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) ) + goto Exit; + + /* Copy the predefined charset into the allocated memory. */ + FT_ARRAY_COPY( charset->sids, cff_isoadobe_charset, num_glyphs ); + + break; + + case 1: + if ( num_glyphs > 166 ) + { + FT_ERROR(( "cff_charset_load: implicit charset larger than\n" )); + FT_ERROR(( "predefined charset (Adobe Expert)\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* Allocate memory for sids. */ + if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) ) + goto Exit; + + /* Copy the predefined charset into the allocated memory. */ + FT_ARRAY_COPY( charset->sids, cff_expert_charset, num_glyphs ); + + break; + + case 2: + if ( num_glyphs > 87 ) + { + FT_ERROR(( "cff_charset_load: implicit charset larger than\n" )); + FT_ERROR(( "predefined charset (Adobe Expert Subset)\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* Allocate memory for sids. */ + if ( FT_QNEW_ARRAY( charset->sids, num_glyphs ) ) + goto Exit; + + /* Copy the predefined charset into the allocated memory. */ + FT_ARRAY_COPY( charset->sids, cff_expertsubset_charset, num_glyphs ); + + break; + + default: + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + } + + /* we have to invert the `sids' array for subsetted CID-keyed fonts */ + if ( invert ) + error = cff_charset_compute_cids( charset, num_glyphs, memory ); + + Exit: + /* Clean up if there was an error. */ + if ( error ) + { + FT_FREE( charset->sids ); + FT_FREE( charset->cids ); + charset->format = 0; + charset->offset = 0; + } + + return error; + } + + + static void + cff_vstore_done( CFF_VStoreRec* vstore, + FT_Memory memory ) + { + FT_UInt i; + + + /* free regionList and axisLists */ + if ( vstore->varRegionList ) + { + for ( i = 0; i < vstore->regionCount; i++ ) + FT_FREE( vstore->varRegionList[i].axisList ); + } + FT_FREE( vstore->varRegionList ); + + /* free varData and indices */ + if ( vstore->varData ) + { + for ( i = 0; i < vstore->dataCount; i++ ) + FT_FREE( vstore->varData[i].regionIndices ); + } + FT_FREE( vstore->varData ); + } + + + /* convert 2.14 to Fixed */ + #define FT_fdot14ToFixed( x ) ( (FT_Fixed)( (FT_ULong)(x) << 2 ) ) + + + static FT_Error + cff_vstore_load( CFF_VStoreRec* vstore, + FT_Stream stream, + FT_ULong base_offset, + FT_ULong offset ) + { + FT_Memory memory = stream->memory; + FT_Error error = FT_ERR( Invalid_File_Format ); + + FT_ULong* dataOffsetArray = NULL; + FT_UInt i, j; + + + /* no offset means no vstore to parse */ + if ( offset ) + { + FT_UInt vsOffset; + FT_UInt format; + FT_UInt dataCount; + FT_UInt regionCount; + FT_ULong regionListOffset; + + + /* we need to parse the table to determine its size; */ + /* skip table length */ + if ( FT_STREAM_SEEK( base_offset + offset ) || + FT_STREAM_SKIP( 2 ) ) + goto Exit; + + /* actual variation store begins after the length */ + vsOffset = FT_STREAM_POS(); + + /* check the header */ + if ( FT_READ_USHORT( format ) ) + goto Exit; + if ( format != 1 ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* read top level fields */ + if ( FT_READ_ULONG( regionListOffset ) || + FT_READ_USHORT( dataCount ) ) + goto Exit; + + /* make temporary copy of item variation data offsets; */ + /* we'll parse region list first, then come back */ + if ( FT_QNEW_ARRAY( dataOffsetArray, dataCount ) ) + goto Exit; + + for ( i = 0; i < dataCount; i++ ) + { + if ( FT_READ_ULONG( dataOffsetArray[i] ) ) + goto Exit; + } + + /* parse regionList and axisLists */ + if ( FT_STREAM_SEEK( vsOffset + regionListOffset ) || + FT_READ_USHORT( vstore->axisCount ) || + FT_READ_USHORT( regionCount ) ) + goto Exit; + + vstore->regionCount = 0; + if ( FT_QNEW_ARRAY( vstore->varRegionList, regionCount ) ) + goto Exit; + + for ( i = 0; i < regionCount; i++ ) + { + CFF_VarRegion* region = &vstore->varRegionList[i]; + + + if ( FT_QNEW_ARRAY( region->axisList, vstore->axisCount ) ) + goto Exit; + + /* keep track of how many axisList to deallocate on error */ + vstore->regionCount++; + + for ( j = 0; j < vstore->axisCount; j++ ) + { + CFF_AxisCoords* axis = ®ion->axisList[j]; + + FT_Int start, peak, end; + + + if ( FT_READ_SHORT( start ) || + FT_READ_SHORT( peak ) || + FT_READ_SHORT( end ) ) + goto Exit; + + /* immediately tag invalid ranges with special peak = 0 */ + if ( ( start < 0 && end > 0 ) || start > peak || peak > end ) + peak = 0; + + axis->startCoord = FT_fdot14ToFixed( start ); + axis->peakCoord = FT_fdot14ToFixed( peak ); + axis->endCoord = FT_fdot14ToFixed( end ); + } + } + + /* use dataOffsetArray now to parse varData items */ + vstore->dataCount = 0; + if ( FT_QNEW_ARRAY( vstore->varData, dataCount ) ) + goto Exit; + + for ( i = 0; i < dataCount; i++ ) + { + CFF_VarData* data = &vstore->varData[i]; + + + if ( FT_STREAM_SEEK( vsOffset + dataOffsetArray[i] ) ) + goto Exit; + + /* ignore `itemCount' and `shortDeltaCount' */ + /* because CFF2 has no delta sets */ + if ( FT_STREAM_SKIP( 4 ) ) + goto Exit; + + /* Note: just record values; consistency is checked later */ + /* by cff_blend_build_vector when it consumes `vstore' */ + + if ( FT_READ_USHORT( data->regionIdxCount ) ) + goto Exit; + + if ( FT_QNEW_ARRAY( data->regionIndices, data->regionIdxCount ) ) + goto Exit; + + /* keep track of how many regionIndices to deallocate on error */ + vstore->dataCount++; + + for ( j = 0; j < data->regionIdxCount; j++ ) + { + if ( FT_READ_USHORT( data->regionIndices[j] ) ) + goto Exit; + } + } + } + + error = FT_Err_Ok; + + Exit: + FT_FREE( dataOffsetArray ); + if ( error ) + cff_vstore_done( vstore, memory ); + + return error; + } + + + /* Clear blend stack (after blend values are consumed). */ + /* */ + /* TODO: Should do this in cff_run_parse, but subFont */ + /* ref is not available there. */ + /* */ + /* Allocation is not changed when stack is cleared. */ + FT_LOCAL_DEF( void ) + cff_blend_clear( CFF_SubFont subFont ) + { + subFont->blend_top = subFont->blend_stack; + subFont->blend_used = 0; + } + + + /* Blend numOperands on the stack, */ + /* store results into the first numBlends values, */ + /* then pop remaining arguments. */ + /* */ + /* This is comparable to `cf2_doBlend' but */ + /* the cffparse stack is different and can't be written. */ + /* Blended values are written to a different buffer, */ + /* using reserved operator 255. */ + /* */ + /* Blend calculation is done in 16.16 fixed-point. */ + FT_LOCAL_DEF( FT_Error ) + cff_blend_doBlend( CFF_SubFont subFont, + CFF_Parser parser, + FT_UInt numBlends ) + { + FT_UInt delta; + FT_UInt base; + FT_UInt i, j; + FT_UInt size; + + CFF_Blend blend = &subFont->blend; + + FT_Memory memory = subFont->blend.font->memory; /* for FT_REALLOC */ + FT_Error error = FT_Err_Ok; /* for FT_REALLOC */ + + /* compute expected number of operands for this blend */ + FT_UInt numOperands = (FT_UInt)( numBlends * blend->lenBV ); + FT_UInt count = (FT_UInt)( parser->top - 1 - parser->stack ); + + + if ( numOperands > count ) + { + FT_TRACE4(( " cff_blend_doBlend: Stack underflow %d argument%s\n", + count, + count == 1 ? "" : "s" )); + + error = FT_THROW( Stack_Underflow ); + goto Exit; + } + + /* check whether we have room for `numBlends' values at `blend_top' */ + size = 5 * numBlends; /* add 5 bytes per entry */ + if ( subFont->blend_used + size > subFont->blend_alloc ) + { + FT_Byte* blend_stack_old = subFont->blend_stack; + FT_Byte* blend_top_old = subFont->blend_top; + + + /* increase or allocate `blend_stack' and reset `blend_top'; */ + /* prepare to append `numBlends' values to the buffer */ + if ( FT_QREALLOC( subFont->blend_stack, + subFont->blend_alloc, + subFont->blend_alloc + size ) ) + goto Exit; + + subFont->blend_top = subFont->blend_stack + subFont->blend_used; + subFont->blend_alloc += size; + + /* iterate over the parser stack and adjust pointers */ + /* if the reallocated buffer has a different address */ + if ( blend_stack_old && + subFont->blend_stack != blend_stack_old ) + { + FT_PtrDist offset = subFont->blend_stack - blend_stack_old; + FT_Byte** p; + + + for ( p = parser->stack; p < parser->top; p++ ) + { + if ( *p >= blend_stack_old && *p < blend_top_old ) + *p += offset; + } + } + } + subFont->blend_used += size; + + base = count - numOperands; /* index of first blend arg */ + delta = base + numBlends; /* index of first delta arg */ + + for ( i = 0; i < numBlends; i++ ) + { + const FT_Int32* weight = &blend->BV[1]; + FT_Fixed sum; + + + /* convert inputs to 16.16 fixed point */ + sum = cff_parse_fixed( parser, &parser->stack[i + base] ); + + for ( j = 1; j < blend->lenBV; j++ ) + sum += FT_MulFix( cff_parse_fixed( parser, &parser->stack[delta++] ), + *weight++ ); + + /* point parser stack to new value on blend_stack */ + parser->stack[i + base] = subFont->blend_top; + + /* Push blended result as Type 2 5-byte fixed-point number. This */ + /* will not conflict with actual DICTs because 255 is a reserved */ + /* opcode in both CFF and CFF2 DICTs. See `cff_parse_num' for */ + /* decode of this, which rounds to an integer. */ + *subFont->blend_top++ = 255; + *subFont->blend_top++ = (FT_Byte)( (FT_UInt32)sum >> 24 ); + *subFont->blend_top++ = (FT_Byte)( (FT_UInt32)sum >> 16 ); + *subFont->blend_top++ = (FT_Byte)( (FT_UInt32)sum >> 8 ); + *subFont->blend_top++ = (FT_Byte)( (FT_UInt32)sum ); + } + + /* leave only numBlends results on parser stack */ + parser->top = &parser->stack[base + numBlends]; + + Exit: + return error; + } + + + /* Compute a blend vector from variation store index and normalized */ + /* vector based on pseudo-code in OpenType Font Variations Overview. */ + /* */ + /* Note: lenNDV == 0 produces a default blend vector, (1,0,0,...). */ + FT_LOCAL_DEF( FT_Error ) + cff_blend_build_vector( CFF_Blend blend, + FT_UInt vsindex, + FT_UInt lenNDV, + FT_Fixed* NDV ) + { + FT_Error error = FT_Err_Ok; /* for FT_REALLOC */ + FT_Memory memory = blend->font->memory; /* for FT_REALLOC */ + + FT_UInt len; + CFF_VStore vs; + CFF_VarData* varData; + FT_UInt master; + + + /* protect against malformed fonts */ + if ( !( lenNDV == 0 || NDV ) ) + { + FT_TRACE4(( " cff_blend_build_vector:" + " Malformed Normalize Design Vector data\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + blend->builtBV = FALSE; + + vs = &blend->font->vstore; + + /* VStore and fvar must be consistent */ + if ( lenNDV != 0 && lenNDV != vs->axisCount ) + { + FT_TRACE4(( " cff_blend_build_vector: Axis count mismatch\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + if ( vsindex >= vs->dataCount ) + { + FT_TRACE4(( " cff_blend_build_vector: vsindex out of range\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* select the item variation data structure */ + varData = &vs->varData[vsindex]; + + /* prepare buffer for the blend vector */ + len = varData->regionIdxCount + 1; /* add 1 for default component */ + if ( FT_QRENEW_ARRAY( blend->BV, blend->lenBV, len ) ) + goto Exit; + + blend->lenBV = len; + + /* outer loop steps through master designs to be blended */ + for ( master = 0; master < len; master++ ) + { + FT_UInt j; + FT_UInt idx; + CFF_VarRegion* varRegion; + + + /* default factor is always one */ + if ( master == 0 ) + { + blend->BV[master] = FT_FIXED_ONE; + FT_TRACE4(( " build blend vector len %d\n", len )); + FT_TRACE4(( " [ %f ", blend->BV[master] / 65536.0 )); + continue; + } + + /* VStore array does not include default master, so subtract one */ + idx = varData->regionIndices[master - 1]; + varRegion = &vs->varRegionList[idx]; + + if ( idx >= vs->regionCount ) + { + FT_TRACE4(( " cff_blend_build_vector:" + " region index out of range\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* Note: `lenNDV' could be zero. */ + /* In that case, build default blend vector (1,0,0...). */ + if ( !lenNDV ) + { + blend->BV[master] = 0; + continue; + } + + /* In the normal case, initialize each component to 1 */ + /* before inner loop. */ + blend->BV[master] = FT_FIXED_ONE; /* default */ + + /* inner loop steps through axes in this region */ + for ( j = 0; j < lenNDV; j++ ) + { + CFF_AxisCoords* axis = &varRegion->axisList[j]; + + + /* compute the scalar contribution of this axis */ + /* with peak of 0 used for invalid axes */ + if ( axis->peakCoord == NDV[j] || + axis->peakCoord == 0 ) + continue; + + /* ignore this region if coords are out of range */ + else if ( NDV[j] <= axis->startCoord || + NDV[j] >= axis->endCoord ) + { + blend->BV[master] = 0; + break; + } + + /* adjust proportionally */ + else if ( NDV[j] < axis->peakCoord ) + blend->BV[master] = FT_MulDiv( blend->BV[master], + NDV[j] - axis->startCoord, + axis->peakCoord - axis->startCoord ); + else /* NDV[j] > axis->peakCoord ) */ + blend->BV[master] = FT_MulDiv( blend->BV[master], + axis->endCoord - NDV[j], + axis->endCoord - axis->peakCoord ); + } + + FT_TRACE4(( ", %f ", + blend->BV[master] / 65536.0 )); + } + + FT_TRACE4(( "]\n" )); + + /* record the parameters used to build the blend vector */ + blend->lastVsindex = vsindex; + + if ( lenNDV != 0 ) + { + /* user has set a normalized vector */ + if ( FT_QRENEW_ARRAY( blend->lastNDV, blend->lenNDV, lenNDV ) ) + goto Exit; + + FT_MEM_COPY( blend->lastNDV, + NDV, + lenNDV * sizeof ( *NDV ) ); + } + + blend->lenNDV = lenNDV; + blend->builtBV = TRUE; + + Exit: + return error; + } + + + /* `lenNDV' is zero for default vector; */ + /* return TRUE if blend vector needs to be built. */ + FT_LOCAL_DEF( FT_Bool ) + cff_blend_check_vector( CFF_Blend blend, + FT_UInt vsindex, + FT_UInt lenNDV, + FT_Fixed* NDV ) + { + if ( !blend->builtBV || + blend->lastVsindex != vsindex || + blend->lenNDV != lenNDV || + ( lenNDV && + ft_memcmp( NDV, + blend->lastNDV, + lenNDV * sizeof ( *NDV ) ) != 0 ) ) + { + /* need to build blend vector */ + return TRUE; + } + + return FALSE; + } + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + FT_LOCAL_DEF( FT_Error ) + cff_get_var_blend( FT_Face face, /* CFF_Face */ + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_Fixed* *normalizedcoords, + FT_MM_Var* *mm_var ) + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + return mm->get_var_blend( face, + num_coords, + coords, + normalizedcoords, + mm_var ); + } + + + FT_LOCAL_DEF( void ) + cff_done_blend( FT_Face face ) /* CFF_Face */ + { + CFF_Face cffface = (CFF_Face)face; + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm; + + + if ( mm ) + mm->done_blend( face ); + } + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + + static void + cff_encoding_done( CFF_Encoding encoding ) + { + encoding->format = 0; + encoding->offset = 0; + encoding->count = 0; + } + + + static FT_Error + cff_encoding_load( CFF_Encoding encoding, + CFF_Charset charset, + FT_UInt num_glyphs, + FT_Stream stream, + FT_ULong base_offset, + FT_ULong offset ) + { + FT_Error error = FT_Err_Ok; + FT_UInt count; + FT_UInt j; + FT_UShort glyph_sid; + FT_UInt glyph_code; + + + /* Check for charset->sids. If we do not have this, we fail. */ + if ( !charset->sids ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* Note: The encoding table in a CFF font is indexed by glyph index; */ + /* the first encoded glyph index is 1. Hence, we read the character */ + /* code (`glyph_code') at index j and make the assignment: */ + /* */ + /* encoding->codes[glyph_code] = j + 1 */ + /* */ + /* We also make the assignment: */ + /* */ + /* encoding->sids[glyph_code] = charset->sids[j + 1] */ + /* */ + /* This gives us both a code to GID and a code to SID mapping. */ + + if ( offset > 1 ) + { + /* Zero out the code to gid/sid mappings. */ + FT_ARRAY_ZERO( encoding->sids, 256 ); + FT_ARRAY_ZERO( encoding->codes, 256 ); + + encoding->offset = base_offset + offset; + + /* we need to parse the table to determine its size */ + if ( FT_STREAM_SEEK( encoding->offset ) || + FT_READ_BYTE( encoding->format ) || + FT_READ_BYTE( count ) ) + goto Exit; + + switch ( encoding->format & 0x7F ) + { + case 0: + { + FT_Byte* p; + + + /* By convention, GID 0 is always ".notdef" and is never */ + /* coded in the font. Hence, the number of codes found */ + /* in the table is `count+1'. */ + /* */ + encoding->count = count + 1; + + if ( FT_FRAME_ENTER( count ) ) + goto Exit; + + p = (FT_Byte*)stream->cursor; + + for ( j = 1; j <= count; j++ ) + { + glyph_code = *p++; + + /* Make sure j is not too big. */ + if ( j < num_glyphs ) + { + /* Assign code to GID mapping. */ + encoding->codes[glyph_code] = (FT_UShort)j; + + /* Assign code to SID mapping. */ + encoding->sids[glyph_code] = charset->sids[j]; + } + } + + FT_FRAME_EXIT(); + } + break; + + case 1: + { + FT_UInt nleft; + FT_UInt i = 1; + FT_UInt k; + + + encoding->count = 0; + + /* Parse the Format1 ranges. */ + for ( j = 0; j < count; j++, i += nleft ) + { + /* Read the first glyph code of the range. */ + if ( FT_READ_BYTE( glyph_code ) ) + goto Exit; + + /* Read the number of codes in the range. */ + if ( FT_READ_BYTE( nleft ) ) + goto Exit; + + /* Increment nleft, so we read `nleft + 1' codes/sids. */ + nleft++; + + /* compute max number of character codes */ + if ( (FT_UInt)nleft > encoding->count ) + encoding->count = nleft; + + /* Fill in the range of codes/sids. */ + for ( k = i; k < nleft + i; k++, glyph_code++ ) + { + /* Make sure k is not too big. */ + if ( k < num_glyphs && glyph_code < 256 ) + { + /* Assign code to GID mapping. */ + encoding->codes[glyph_code] = (FT_UShort)k; + + /* Assign code to SID mapping. */ + encoding->sids[glyph_code] = charset->sids[k]; + } + } + } + + /* simple check; one never knows what can be found in a font */ + if ( encoding->count > 256 ) + encoding->count = 256; + } + break; + + default: + FT_ERROR(( "cff_encoding_load: invalid table format\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* Parse supplemental encodings, if any. */ + if ( encoding->format & 0x80 ) + { + FT_UInt gindex; + + + /* count supplements */ + if ( FT_READ_BYTE( count ) ) + goto Exit; + + for ( j = 0; j < count; j++ ) + { + /* Read supplemental glyph code. */ + if ( FT_READ_BYTE( glyph_code ) ) + goto Exit; + + /* Read the SID associated with this glyph code. */ + if ( FT_READ_USHORT( glyph_sid ) ) + goto Exit; + + /* Assign code to SID mapping. */ + encoding->sids[glyph_code] = glyph_sid; + + /* First, look up GID which has been assigned to */ + /* SID glyph_sid. */ + for ( gindex = 0; gindex < num_glyphs; gindex++ ) + { + if ( charset->sids[gindex] == glyph_sid ) + { + encoding->codes[glyph_code] = (FT_UShort)gindex; + break; + } + } + } + } + } + else + { + /* We take into account the fact a CFF font can use a predefined */ + /* encoding without containing all of the glyphs encoded by this */ + /* encoding (see the note at the end of section 12 in the CFF */ + /* specification). */ + + switch ( (FT_UInt)offset ) + { + case 0: + /* First, copy the code to SID mapping. */ + FT_ARRAY_COPY( encoding->sids, cff_standard_encoding, 256 ); + goto Populate; + + case 1: + /* First, copy the code to SID mapping. */ + FT_ARRAY_COPY( encoding->sids, cff_expert_encoding, 256 ); + + Populate: + /* Construct code to GID mapping from code to SID mapping */ + /* and charset. */ + + encoding->offset = offset; /* used in cff_face_init */ + encoding->count = 0; + + error = cff_charset_compute_cids( charset, num_glyphs, + stream->memory ); + if ( error ) + goto Exit; + + for ( j = 0; j < 256; j++ ) + { + FT_UInt sid = encoding->sids[j]; + FT_UInt gid = 0; + + + if ( sid ) + gid = cff_charset_cid_to_gindex( charset, sid ); + + if ( gid != 0 ) + { + encoding->codes[j] = (FT_UShort)gid; + encoding->count = j + 1; + } + else + { + encoding->codes[j] = 0; + encoding->sids [j] = 0; + } + } + break; + + default: + FT_ERROR(( "cff_encoding_load: invalid table format\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + } + + Exit: + + /* Clean up if there was an error. */ + return error; + } + + + /* Parse private dictionary; first call is always from `cff_face_init', */ + /* so NDV has not been set for CFF2 variation. */ + /* */ + /* `cff_slot_load' must call this function each time NDV changes. */ + FT_LOCAL_DEF( FT_Error ) + cff_load_private_dict( CFF_Font font, + CFF_SubFont subfont, + FT_UInt lenNDV, + FT_Fixed* NDV ) + { + FT_Error error = FT_Err_Ok; + CFF_ParserRec parser; + CFF_FontRecDict top = &subfont->font_dict; + CFF_Private priv = &subfont->private_dict; + FT_Stream stream = font->stream; + FT_UInt stackSize; + + + /* store handle needed to access memory, vstore for blend; */ + /* we need this for clean-up even if there is no private DICT */ + subfont->blend.font = font; + subfont->blend.usedBV = FALSE; /* clear state */ + + if ( !top->private_offset || !top->private_size ) + goto Exit2; /* no private DICT, do nothing */ + + /* set defaults */ + FT_ZERO( priv ); + + priv->blue_shift = 7; + priv->blue_fuzz = 1; + priv->lenIV = -1; + priv->expansion_factor = (FT_Fixed)( 0.06 * 0x10000L ); + priv->blue_scale = (FT_Fixed)( 0.039625 * 0x10000L * 1000 ); + + /* provide inputs for blend calculations */ + priv->subfont = subfont; + subfont->lenNDV = lenNDV; + subfont->NDV = NDV; + + /* add 1 for the operator */ + stackSize = font->cff2 ? font->top_font.font_dict.maxstack + 1 + : CFF_MAX_STACK_DEPTH + 1; + + if ( cff_parser_init( &parser, + font->cff2 ? CFF2_CODE_PRIVATE : CFF_CODE_PRIVATE, + priv, + font->library, + stackSize, + top->num_designs, + top->num_axes ) ) + goto Exit; + + if ( FT_STREAM_SEEK( font->base_offset + top->private_offset ) || + FT_FRAME_ENTER( top->private_size ) ) + goto Exit; + + FT_TRACE4(( " private dictionary:\n" )); + error = cff_parser_run( &parser, + (FT_Byte*)stream->cursor, + (FT_Byte*)stream->limit ); + FT_FRAME_EXIT(); + + if ( error ) + goto Exit; + + /* ensure that `num_blue_values' is even */ + priv->num_blue_values &= ~1; + + /* sanitize `initialRandomSeed' to be a positive value, if necessary; */ + /* this is not mandated by the specification but by our implementation */ + if ( priv->initial_random_seed < 0 ) + priv->initial_random_seed = -priv->initial_random_seed; + else if ( priv->initial_random_seed == 0 ) + priv->initial_random_seed = 987654321; + + /* some sanitizing to avoid overflows later on; */ + /* the upper limits are ad-hoc values */ + if ( priv->blue_shift > 1000 || priv->blue_shift < 0 ) + { + FT_TRACE2(( "cff_load_private_dict:" + " setting unlikely BlueShift value %ld to default (7)\n", + priv->blue_shift )); + priv->blue_shift = 7; + } + + if ( priv->blue_fuzz > 1000 || priv->blue_fuzz < 0 ) + { + FT_TRACE2(( "cff_load_private_dict:" + " setting unlikely BlueFuzz value %ld to default (1)\n", + priv->blue_fuzz )); + priv->blue_fuzz = 1; + } + + Exit: + /* clean up */ + cff_blend_clear( subfont ); /* clear blend stack */ + cff_parser_done( &parser ); /* free parser stack */ + + Exit2: + /* no clean up (parser not initialized) */ + return error; + } + + + /* There are 3 ways to call this function, distinguished by code. */ + /* */ + /* . CFF_CODE_TOPDICT for either a CFF Top DICT or a CFF Font DICT */ + /* . CFF2_CODE_TOPDICT for CFF2 Top DICT */ + /* . CFF2_CODE_FONTDICT for CFF2 Font DICT */ + + static FT_Error + cff_subfont_load( CFF_SubFont subfont, + CFF_Index idx, + FT_UInt font_index, + FT_Stream stream, + FT_ULong base_offset, + FT_UInt code, + CFF_Font font, + CFF_Face face ) + { + FT_Error error; + CFF_ParserRec parser; + FT_Byte* dict = NULL; + FT_ULong dict_len; + CFF_FontRecDict top = &subfont->font_dict; + CFF_Private priv = &subfont->private_dict; + + PSAux_Service psaux = (PSAux_Service)face->psaux; + + FT_Bool cff2 = FT_BOOL( code == CFF2_CODE_TOPDICT || + code == CFF2_CODE_FONTDICT ); + FT_UInt stackSize = cff2 ? CFF2_DEFAULT_STACK + : CFF_MAX_STACK_DEPTH; + + + /* Note: We use default stack size for CFF2 Font DICT because */ + /* Top and Font DICTs are not allowed to have blend operators. */ + error = cff_parser_init( &parser, + code, + top, + font->library, + stackSize, + 0, + 0 ); + if ( error ) + goto Exit; + + /* set defaults */ + FT_ZERO( top ); + + top->underline_position = -( 100L << 16 ); + top->underline_thickness = 50L << 16; + top->charstring_type = 2; + top->font_matrix.xx = 0x10000L; + top->font_matrix.yy = 0x10000L; + top->cid_count = 8720; + + /* we use the implementation specific SID value 0xFFFF to indicate */ + /* missing entries */ + top->version = 0xFFFFU; + top->notice = 0xFFFFU; + top->copyright = 0xFFFFU; + top->full_name = 0xFFFFU; + top->family_name = 0xFFFFU; + top->weight = 0xFFFFU; + top->embedded_postscript = 0xFFFFU; + + top->cid_registry = 0xFFFFU; + top->cid_ordering = 0xFFFFU; + top->cid_font_name = 0xFFFFU; + + /* set default stack size */ + top->maxstack = cff2 ? CFF2_DEFAULT_STACK : 48; + + if ( idx->count ) /* count is nonzero for a real index */ + error = cff_index_access_element( idx, font_index, &dict, &dict_len ); + else + { + /* CFF2 has a fake top dict index; */ + /* simulate `cff_index_access_element' */ + + /* Note: macros implicitly use `stream' and set `error' */ + if ( FT_STREAM_SEEK( idx->data_offset ) || + FT_FRAME_EXTRACT( idx->data_size, dict ) ) + goto Exit; + + dict_len = idx->data_size; + } + + if ( !error ) + { + FT_TRACE4(( " top dictionary:\n" )); + error = cff_parser_run( &parser, dict, FT_OFFSET( dict, dict_len ) ); + } + + /* clean up regardless of error */ + if ( idx->count ) + cff_index_forget_element( idx, &dict ); + else + FT_FRAME_RELEASE( dict ); + + if ( error ) + goto Exit; + + /* if it is a CID font, we stop there */ + if ( top->cid_registry != 0xFFFFU ) + goto Exit; + + /* Parse the private dictionary, if any. */ + /* */ + /* CFF2 does not have a private dictionary in the Top DICT */ + /* but may have one in a Font DICT. We need to parse */ + /* the latter here in order to load any local subrs. */ + error = cff_load_private_dict( font, subfont, 0, 0 ); + if ( error ) + goto Exit; + + if ( !cff2 ) + { + /* + * Initialize the random number generator. + * + * - If we have a face-specific seed, use it. + * If non-zero, update it to a positive value. + * + * - Otherwise, use the seed from the CFF driver. + * If non-zero, update it to a positive value. + * + * - If the random value is zero, use the seed given by the subfont's + * `initialRandomSeed' value. + * + */ + if ( face->root.internal->random_seed == -1 ) + { + PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face ); + + + subfont->random = (FT_UInt32)driver->random_seed; + if ( driver->random_seed ) + { + do + { + driver->random_seed = + (FT_Int32)psaux->cff_random( (FT_UInt32)driver->random_seed ); + + } while ( driver->random_seed < 0 ); + } + } + else + { + subfont->random = (FT_UInt32)face->root.internal->random_seed; + if ( face->root.internal->random_seed ) + { + do + { + face->root.internal->random_seed = + (FT_Int32)psaux->cff_random( + (FT_UInt32)face->root.internal->random_seed ); + + } while ( face->root.internal->random_seed < 0 ); + } + } + + if ( !subfont->random ) + subfont->random = (FT_UInt32)priv->initial_random_seed; + } + + /* read the local subrs, if any */ + if ( priv->local_subrs_offset ) + { + if ( FT_STREAM_SEEK( base_offset + top->private_offset + + priv->local_subrs_offset ) ) + goto Exit; + + error = cff_index_init( &subfont->local_subrs_index, stream, 1, cff2 ); + if ( error ) + goto Exit; + + error = cff_index_get_pointers( &subfont->local_subrs_index, + &subfont->local_subrs, NULL, NULL ); + if ( error ) + goto Exit; + } + + Exit: + cff_parser_done( &parser ); /* free parser stack */ + + return error; + } + + + static void + cff_subfont_done( FT_Memory memory, + CFF_SubFont subfont ) + { + if ( subfont ) + { + cff_index_done( &subfont->local_subrs_index ); + FT_FREE( subfont->local_subrs ); + + FT_FREE( subfont->blend.lastNDV ); + FT_FREE( subfont->blend.BV ); + FT_FREE( subfont->blend_stack ); + } + } + + + FT_LOCAL_DEF( FT_Error ) + cff_font_load( FT_Library library, + FT_Stream stream, + FT_Int face_index, + CFF_Font font, + CFF_Face face, + FT_Bool pure_cff, + FT_Bool cff2 ) + { + static const FT_Frame_Field cff_header_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE CFF_FontRec + + FT_FRAME_START( 3 ), + FT_FRAME_BYTE( version_major ), + FT_FRAME_BYTE( version_minor ), + FT_FRAME_BYTE( header_size ), + FT_FRAME_END + }; + + FT_Error error; + FT_Memory memory = stream->memory; + FT_ULong base_offset; + CFF_FontRecDict dict; + CFF_IndexRec string_index; + FT_UInt subfont_index; + + + FT_ZERO( font ); + FT_ZERO( &string_index ); + + dict = &font->top_font.font_dict; + base_offset = FT_STREAM_POS(); + + font->library = library; + font->stream = stream; + font->memory = memory; + font->cff2 = cff2; + font->base_offset = base_offset; + + /* read CFF font header */ + if ( FT_STREAM_READ_FIELDS( cff_header_fields, font ) ) + goto Exit; + + if ( cff2 ) + { + if ( font->version_major != 2 || + font->header_size < 5 ) + { + FT_TRACE2(( " not a CFF2 font header\n" )); + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + + if ( FT_READ_USHORT( font->top_dict_length ) ) + goto Exit; + } + else + { + FT_Byte absolute_offset; + + + if ( FT_READ_BYTE( absolute_offset ) ) + goto Exit; + + if ( font->version_major != 1 || + font->header_size < 4 || + absolute_offset > 4 ) + { + FT_TRACE2(( " not a CFF font header\n" )); + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + } + + /* skip the rest of the header */ + if ( FT_STREAM_SEEK( base_offset + font->header_size ) ) + { + /* For pure CFFs we have read only four bytes so far. Contrary to */ + /* other formats like SFNT those bytes doesn't define a signature; */ + /* it is thus possible that the font isn't a CFF at all. */ + if ( pure_cff ) + { + FT_TRACE2(( " not a CFF file\n" )); + error = FT_THROW( Unknown_File_Format ); + } + goto Exit; + } + + if ( cff2 ) + { + /* For CFF2, the top dict data immediately follow the header */ + /* and the length is stored in the header `offSize' field; */ + /* there is no index for it. */ + /* */ + /* Use the `font_dict_index' to save the current position */ + /* and length of data, but leave count at zero as an indicator. */ + FT_ZERO( &font->font_dict_index ); + + font->font_dict_index.data_offset = FT_STREAM_POS(); + font->font_dict_index.data_size = font->top_dict_length; + + /* skip the top dict data for now, we will parse it later */ + if ( FT_STREAM_SKIP( font->top_dict_length ) ) + goto Exit; + + /* next, read the global subrs index */ + if ( FT_SET_ERROR( cff_index_init( &font->global_subrs_index, + stream, 1, cff2 ) ) ) + goto Exit; + } + else + { + /* for CFF, read the name, top dict, string and global subrs index */ + if ( FT_SET_ERROR( cff_index_init( &font->name_index, + stream, 0, cff2 ) ) ) + { + if ( pure_cff ) + { + FT_TRACE2(( " not a CFF file\n" )); + error = FT_THROW( Unknown_File_Format ); + } + goto Exit; + } + + /* if we have an empty font name, */ + /* it must be the only font in the CFF */ + if ( font->name_index.count > 1 && + font->name_index.data_size < font->name_index.count ) + { + /* for pure CFFs, we still haven't checked enough bytes */ + /* to be sure that it is a CFF at all */ + error = pure_cff ? FT_THROW( Unknown_File_Format ) + : FT_THROW( Invalid_File_Format ); + goto Exit; + } + + if ( FT_SET_ERROR( cff_index_init( &font->font_dict_index, + stream, 0, cff2 ) ) || + FT_SET_ERROR( cff_index_init( &string_index, + stream, 1, cff2 ) ) || + FT_SET_ERROR( cff_index_init( &font->global_subrs_index, + stream, 1, cff2 ) ) || + FT_SET_ERROR( cff_index_get_pointers( &string_index, + &font->strings, + &font->string_pool, + &font->string_pool_size ) ) ) + goto Exit; + + /* there must be a Top DICT index entry for each name index entry */ + if ( font->name_index.count > font->font_dict_index.count ) + { + FT_ERROR(( "cff_font_load:" + " not enough entries in Top DICT index\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + } + + font->num_strings = string_index.count; + + if ( pure_cff ) + { + /* well, we don't really forget the `disabled' fonts... */ + subfont_index = (FT_UInt)( face_index & 0xFFFF ); + + if ( face_index > 0 && subfont_index >= font->name_index.count ) + { + FT_ERROR(( "cff_font_load:" + " invalid subfont index for pure CFF font (%d)\n", + subfont_index )); + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + font->num_faces = font->name_index.count; + } + else + { + subfont_index = 0; + + if ( font->name_index.count > 1 ) + { + FT_ERROR(( "cff_font_load:" + " invalid CFF font with multiple subfonts\n" )); + FT_ERROR(( " " + " in SFNT wrapper\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + } + + /* in case of a font format check, simply exit now */ + if ( face_index < 0 ) + goto Exit; + + /* now, parse the top-level font dictionary */ + FT_TRACE4(( "parsing top-level\n" )); + error = cff_subfont_load( &font->top_font, + &font->font_dict_index, + subfont_index, + stream, + base_offset, + cff2 ? CFF2_CODE_TOPDICT : CFF_CODE_TOPDICT, + font, + face ); + if ( error ) + goto Exit; + + if ( FT_STREAM_SEEK( base_offset + dict->charstrings_offset ) ) + goto Exit; + + error = cff_index_init( &font->charstrings_index, stream, 0, cff2 ); + if ( error ) + goto Exit; + + /* now, check for a CID or CFF2 font */ + if ( dict->cid_registry != 0xFFFFU || + cff2 ) + { + CFF_IndexRec fd_index; + CFF_SubFont sub = NULL; + FT_UInt idx; + + + /* for CFF2, read the Variation Store if available; */ + /* this must follow the Top DICT parse and precede any Private DICT */ + error = cff_vstore_load( &font->vstore, + stream, + base_offset, + dict->vstore_offset ); + if ( error ) + goto Exit; + + /* this is a CID-keyed font, we must now allocate a table of */ + /* sub-fonts, then load each of them separately */ + if ( FT_STREAM_SEEK( base_offset + dict->cid_fd_array_offset ) ) + goto Exit; + + error = cff_index_init( &fd_index, stream, 0, cff2 ); + if ( error ) + goto Exit; + + /* Font Dicts are not limited to 256 for CFF2. */ + /* TODO: support this for CFF2 */ + if ( fd_index.count > CFF_MAX_CID_FONTS ) + { + FT_TRACE0(( "cff_font_load: FD array too large in CID font\n" )); + goto Fail_CID; + } + + /* allocate & read each font dict independently */ + font->num_subfonts = fd_index.count; + if ( FT_NEW_ARRAY( sub, fd_index.count ) ) + goto Fail_CID; + + /* set up pointer table */ + for ( idx = 0; idx < fd_index.count; idx++ ) + font->subfonts[idx] = sub + idx; + + /* now load each subfont independently */ + for ( idx = 0; idx < fd_index.count; idx++ ) + { + sub = font->subfonts[idx]; + FT_TRACE4(( "parsing subfont %u\n", idx )); + error = cff_subfont_load( sub, + &fd_index, + idx, + stream, + base_offset, + cff2 ? CFF2_CODE_FONTDICT + : CFF_CODE_TOPDICT, + font, + face ); + if ( error ) + goto Fail_CID; + } + + /* now load the FD Select array; */ + /* CFF2 omits FDSelect if there is only one FD */ + if ( !cff2 || fd_index.count > 1 ) + error = CFF_Load_FD_Select( &font->fd_select, + font->charstrings_index.count, + stream, + base_offset + dict->cid_fd_select_offset ); + + Fail_CID: + cff_index_done( &fd_index ); + + if ( error ) + goto Exit; + } + else + font->num_subfonts = 0; + + /* read the charstrings index now */ + if ( dict->charstrings_offset == 0 ) + { + FT_ERROR(( "cff_font_load: no charstrings offset\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + font->num_glyphs = font->charstrings_index.count; + + error = cff_index_get_pointers( &font->global_subrs_index, + &font->global_subrs, NULL, NULL ); + + if ( error ) + goto Exit; + + /* read the Charset and Encoding tables if available */ + if ( !cff2 && font->num_glyphs > 0 ) + { + FT_Bool invert = FT_BOOL( dict->cid_registry != 0xFFFFU && pure_cff ); + + + error = cff_charset_load( &font->charset, font->num_glyphs, stream, + base_offset, dict->charset_offset, invert ); + if ( error ) + goto Exit; + + /* CID-keyed CFFs don't have an encoding */ + if ( dict->cid_registry == 0xFFFFU ) + { + error = cff_encoding_load( &font->encoding, + &font->charset, + font->num_glyphs, + stream, + base_offset, + dict->encoding_offset ); + if ( error ) + goto Exit; + } + } + + /* get the font name (/CIDFontName for CID-keyed fonts, */ + /* /FontName otherwise) */ + font->font_name = cff_index_get_name( font, subfont_index ); + + Exit: + cff_index_done( &string_index ); + + return error; + } + + + FT_LOCAL_DEF( void ) + cff_font_done( CFF_Font font ) + { + FT_Memory memory = font->memory; + FT_UInt idx; + + + cff_index_done( &font->global_subrs_index ); + cff_index_done( &font->font_dict_index ); + cff_index_done( &font->name_index ); + cff_index_done( &font->charstrings_index ); + + /* release font dictionaries, but only if working with */ + /* a CID keyed CFF font or a CFF2 font */ + if ( font->num_subfonts > 0 ) + { + for ( idx = 0; idx < font->num_subfonts; idx++ ) + cff_subfont_done( memory, font->subfonts[idx] ); + + /* the subfonts array has been allocated as a single block */ + FT_FREE( font->subfonts[0] ); + } + + cff_encoding_done( &font->encoding ); + cff_charset_done( &font->charset, font->stream ); + cff_vstore_done( &font->vstore, memory ); + + cff_subfont_done( memory, &font->top_font ); + + CFF_Done_FD_Select( &font->fd_select, font->stream ); + + FT_FREE( font->font_info ); + + FT_FREE( font->font_name ); + FT_FREE( font->global_subrs ); + FT_FREE( font->strings ); + FT_FREE( font->string_pool ); + + if ( font->cf2_instance.finalizer ) + { + font->cf2_instance.finalizer( font->cf2_instance.data ); + FT_FREE( font->cf2_instance.data ); + } + + FT_FREE( font->font_extra ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffload.h b/non-source/foreign/freetype2/src/cff/cffload.h new file mode 100644 index 000000000..022092454 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffload.h @@ -0,0 +1,124 @@ +/**************************************************************************** + * + * cffload.h + * + * OpenType & CFF data/program tables loader (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFLOAD_H_ +#define CFFLOAD_H_ + + +#include <freetype/internal/cfftypes.h> +#include "cffparse.h" +#include <freetype/internal/cffotypes.h> /* for CFF_Face */ + + +FT_BEGIN_HEADER + + FT_LOCAL( FT_UShort ) + cff_get_standard_encoding( FT_UInt charcode ); + + + FT_LOCAL( FT_String* ) + cff_index_get_string( CFF_Font font, + FT_UInt element ); + + FT_LOCAL( FT_String* ) + cff_index_get_sid_string( CFF_Font font, + FT_UInt sid ); + + + FT_LOCAL( FT_Error ) + cff_index_access_element( CFF_Index idx, + FT_UInt element, + FT_Byte** pbytes, + FT_ULong* pbyte_len ); + + FT_LOCAL( void ) + cff_index_forget_element( CFF_Index idx, + FT_Byte** pbytes ); + + FT_LOCAL( FT_String* ) + cff_index_get_name( CFF_Font font, + FT_UInt element ); + + + FT_LOCAL( FT_UInt ) + cff_charset_cid_to_gindex( CFF_Charset charset, + FT_UInt cid ); + + + FT_LOCAL( FT_Error ) + cff_font_load( FT_Library library, + FT_Stream stream, + FT_Int face_index, + CFF_Font font, + CFF_Face face, + FT_Bool pure_cff, + FT_Bool cff2 ); + + FT_LOCAL( void ) + cff_font_done( CFF_Font font ); + + + FT_LOCAL( FT_Error ) + cff_load_private_dict( CFF_Font font, + CFF_SubFont subfont, + FT_UInt lenNDV, + FT_Fixed* NDV ); + + FT_LOCAL( FT_Byte ) + cff_fd_select_get( CFF_FDSelect fdselect, + FT_UInt glyph_index ); + + FT_LOCAL( FT_Bool ) + cff_blend_check_vector( CFF_Blend blend, + FT_UInt vsindex, + FT_UInt lenNDV, + FT_Fixed* NDV ); + + FT_LOCAL( FT_Error ) + cff_blend_build_vector( CFF_Blend blend, + FT_UInt vsindex, + FT_UInt lenNDV, + FT_Fixed* NDV ); + + FT_LOCAL( void ) + cff_blend_clear( CFF_SubFont subFont ); + + FT_LOCAL( FT_Error ) + cff_blend_doBlend( CFF_SubFont subfont, + CFF_Parser parser, + FT_UInt numBlends ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_LOCAL( FT_Error ) + cff_get_var_blend( FT_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_Fixed* *normalizedcoords, + FT_MM_Var* *mm_var ); + + FT_LOCAL( void ) + cff_done_blend( FT_Face face ); +#endif + + +FT_END_HEADER + +#endif /* CFFLOAD_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffobjs.c b/non-source/foreign/freetype2/src/cff/cffobjs.c new file mode 100644 index 000000000..7c6713739 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffobjs.c @@ -0,0 +1,1175 @@ +/**************************************************************************** + * + * cffobjs.c + * + * OpenType objects manager (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftstream.h> +#include <freetype/fterrors.h> +#include <freetype/ttnameid.h> +#include <freetype/tttags.h> +#include <freetype/internal/sfnt.h> +#include <freetype/ftdriver.h> + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/ftmm.h> +#include <freetype/internal/services/svmm.h> +#include <freetype/internal/services/svmetric.h> +#endif + +#include <freetype/internal/cffotypes.h> +#include "cffobjs.h" +#include "cffload.h" +#include "cffcmap.h" + +#include "cfferrs.h" + +#include <freetype/internal/psaux.h> +#include <freetype/internal/services/svcfftl.h> + +#define CFF_fixedToInt( x ) \ + ( (FT_Short)( ( (x) + 0x8000U ) >> 16 ) ) + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cffobjs + + + /************************************************************************** + * + * SIZE FUNCTIONS + * + */ + + + static PSH_Globals_Funcs + cff_size_get_globals_funcs( CFF_Size size ) + { + CFF_Face face = (CFF_Face)size->root.face; + CFF_Font font = (CFF_Font)face->extra.data; + PSHinter_Service pshinter = font->pshinter; + FT_Module module; + + + module = FT_Get_Module( font->library, "pshinter" ); + + return ( module && pshinter && pshinter->get_globals_funcs ) + ? pshinter->get_globals_funcs( module ) + : 0; + } + + + FT_LOCAL_DEF( void ) + cff_size_done( FT_Size cffsize ) /* CFF_Size */ + { + FT_Memory memory = cffsize->face->memory; + CFF_Size size = (CFF_Size)cffsize; + CFF_Face face = (CFF_Face)size->root.face; + CFF_Font font = (CFF_Font)face->extra.data; + CFF_Internal internal = (CFF_Internal)cffsize->internal->module_data; + + + if ( internal ) + { + PSH_Globals_Funcs funcs; + + + funcs = cff_size_get_globals_funcs( size ); + if ( funcs ) + { + FT_UInt i; + + + funcs->destroy( internal->topfont ); + + for ( i = font->num_subfonts; i > 0; i-- ) + funcs->destroy( internal->subfonts[i - 1] ); + } + + FT_FREE( internal ); + } + } + + + /* CFF and Type 1 private dictionaries have slightly different */ + /* structures; we need to synthesize a Type 1 dictionary on the fly */ + + static void + cff_make_private_dict( CFF_SubFont subfont, + PS_Private priv ) + { + CFF_Private cpriv = &subfont->private_dict; + FT_UInt n, count; + + + FT_ZERO( priv ); + + count = priv->num_blue_values = cpriv->num_blue_values; + for ( n = 0; n < count; n++ ) + priv->blue_values[n] = CFF_fixedToInt( cpriv->blue_values[n] ); + + count = priv->num_other_blues = cpriv->num_other_blues; + for ( n = 0; n < count; n++ ) + priv->other_blues[n] = CFF_fixedToInt( cpriv->other_blues[n] ); + + count = priv->num_family_blues = cpriv->num_family_blues; + for ( n = 0; n < count; n++ ) + priv->family_blues[n] = CFF_fixedToInt( cpriv->family_blues[n] ); + + count = priv->num_family_other_blues = cpriv->num_family_other_blues; + for ( n = 0; n < count; n++ ) + priv->family_other_blues[n] = + CFF_fixedToInt( cpriv->family_other_blues[n] ); + + priv->blue_scale = cpriv->blue_scale; + priv->blue_shift = (FT_Int)cpriv->blue_shift; + priv->blue_fuzz = (FT_Int)cpriv->blue_fuzz; + + priv->standard_width[0] = (FT_UShort)cpriv->standard_width; + priv->standard_height[0] = (FT_UShort)cpriv->standard_height; + + count = priv->num_snap_widths = cpriv->num_snap_widths; + for ( n = 0; n < count; n++ ) + priv->snap_widths[n] = (FT_Short)cpriv->snap_widths[n]; + + count = priv->num_snap_heights = cpriv->num_snap_heights; + for ( n = 0; n < count; n++ ) + priv->snap_heights[n] = (FT_Short)cpriv->snap_heights[n]; + + priv->force_bold = cpriv->force_bold; + priv->language_group = cpriv->language_group; + priv->lenIV = cpriv->lenIV; + } + + + FT_LOCAL_DEF( FT_Error ) + cff_size_init( FT_Size cffsize ) /* CFF_Size */ + { + CFF_Size size = (CFF_Size)cffsize; + FT_Error error = FT_Err_Ok; + PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size ); + + 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; + + PS_PrivateRec priv; + + FT_UInt i; + + if ( !funcs ) + goto Exit; + + if ( FT_NEW( internal ) ) + goto Exit; + + cff_make_private_dict( &font->top_font, &priv ); + error = funcs->create( 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( memory, &priv, &internal->subfonts[i - 1] ); + if ( error ) + goto Exit; + } + + 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; + } + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + FT_LOCAL_DEF( FT_Error ) + cff_size_select( FT_Size size, + FT_ULong strike_index ) + { + CFF_Size cffsize = (CFF_Size)size; + PSH_Globals_Funcs funcs; + + + cffsize->strike_index = strike_index; + + FT_Select_Metrics( size->face, strike_index ); + + funcs = cff_size_get_globals_funcs( cffsize ); + + if ( funcs ) + { + CFF_Face face = (CFF_Face)size->face; + CFF_Font font = (CFF_Font)face->extra.data; + CFF_Internal internal = (CFF_Internal)size->internal->module_data; + + FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em; + FT_UInt i; + + + funcs->set_scale( internal->topfont, + size->metrics.x_scale, size->metrics.y_scale, + 0, 0 ); + + for ( i = font->num_subfonts; i > 0; i-- ) + { + CFF_SubFont sub = font->subfonts[i - 1]; + FT_Long sub_upm = (FT_Long)sub->font_dict.units_per_em; + FT_Pos x_scale, y_scale; + + + if ( top_upm != sub_upm ) + { + x_scale = FT_MulDiv( size->metrics.x_scale, top_upm, sub_upm ); + y_scale = FT_MulDiv( size->metrics.y_scale, top_upm, sub_upm ); + } + else + { + x_scale = size->metrics.x_scale; + y_scale = size->metrics.y_scale; + } + + funcs->set_scale( internal->subfonts[i - 1], + x_scale, y_scale, 0, 0 ); + } + } + + return FT_Err_Ok; + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + + FT_LOCAL_DEF( FT_Error ) + cff_size_request( FT_Size size, + FT_Size_Request req ) + { + FT_Error error; + + CFF_Size cffsize = (CFF_Size)size; + PSH_Globals_Funcs funcs; + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + if ( FT_HAS_FIXED_SIZES( size->face ) ) + { + CFF_Face cffface = (CFF_Face)size->face; + SFNT_Service sfnt = (SFNT_Service)cffface->sfnt; + FT_ULong strike_index; + + + if ( sfnt->set_sbit_strike( cffface, req, &strike_index ) ) + cffsize->strike_index = 0xFFFFFFFFUL; + else + return cff_size_select( size, strike_index ); + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + error = FT_Request_Metrics( size->face, req ); + if ( error ) + goto Exit; + + funcs = cff_size_get_globals_funcs( cffsize ); + + if ( funcs ) + { + CFF_Face cffface = (CFF_Face)size->face; + CFF_Font font = (CFF_Font)cffface->extra.data; + CFF_Internal internal = (CFF_Internal)size->internal->module_data; + + FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em; + FT_UInt i; + + + funcs->set_scale( internal->topfont, + size->metrics.x_scale, size->metrics.y_scale, + 0, 0 ); + + for ( i = font->num_subfonts; i > 0; i-- ) + { + CFF_SubFont sub = font->subfonts[i - 1]; + FT_Long sub_upm = (FT_Long)sub->font_dict.units_per_em; + FT_Pos x_scale, y_scale; + + + if ( top_upm != sub_upm ) + { + x_scale = FT_MulDiv( size->metrics.x_scale, top_upm, sub_upm ); + y_scale = FT_MulDiv( size->metrics.y_scale, top_upm, sub_upm ); + } + else + { + x_scale = size->metrics.x_scale; + y_scale = size->metrics.y_scale; + } + + funcs->set_scale( internal->subfonts[i - 1], + x_scale, y_scale, 0, 0 ); + } + } + + Exit: + return error; + } + + + /************************************************************************** + * + * SLOT FUNCTIONS + * + */ + + FT_LOCAL_DEF( void ) + cff_slot_done( FT_GlyphSlot slot ) + { + if ( slot->internal ) + slot->internal->glyph_hints = NULL; + } + + + FT_LOCAL_DEF( FT_Error ) + cff_slot_init( FT_GlyphSlot slot ) + { + CFF_Face face = (CFF_Face)slot->face; + CFF_Font font = (CFF_Font)face->extra.data; + PSHinter_Service pshinter = font->pshinter; + + + if ( pshinter ) + { + FT_Module module; + + + module = FT_Get_Module( slot->library, "pshinter" ); + if ( module ) + { + T2_Hints_Funcs funcs; + + + funcs = pshinter->get_t2_funcs( module ); + slot->internal->glyph_hints = (void*)funcs; + } + } + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * FACE FUNCTIONS + * + */ + + static FT_String* + cff_strcpy( FT_Memory memory, + const FT_String* source ) + { + FT_Error error; + FT_String* result; + + + FT_MEM_STRDUP( result, source ); + + return result; + } + + + /* Strip all subset prefixes of the form `ABCDEF+'. Usually, there */ + /* is only one, but font names like `APCOOG+JFABTD+FuturaBQ-Bold' */ + /* have been seen in the wild. */ + + static void + remove_subset_prefix( FT_String* name ) + { + FT_UInt32 i = 0, idx = 0; + + + /* six ASCII uppercase letters followed by a plus sign */ + while ( 'A' <= name[i] && name[i++] <= 'Z' && + 'A' <= name[i] && name[i++] <= 'Z' && + 'A' <= name[i] && name[i++] <= 'Z' && + 'A' <= name[i] && name[i++] <= 'Z' && + 'A' <= name[i] && name[i++] <= 'Z' && + 'A' <= name[i] && name[i++] <= 'Z' && + name[i++] == '+' ) + { + idx = i; + } + + if ( idx ) + FT_MEM_MOVE( name, name + idx, ft_strlen( name + idx ) + 1 ); + } + + + /* Remove the style part from the family name (if present). */ + + static void + remove_style( FT_String* family_name, + const FT_String* style_name ) + { + FT_String* f = family_name + ft_strlen( family_name ); + const FT_String* s = style_name + ft_strlen( style_name ); + + + /* compare strings moving backwards */ + while ( s > style_name ) + if ( f == family_name || *--s != *--f ) + return; + + /* terminate and remove special characters */ + do + *f = '\0'; + while ( f-- > family_name && + ( *f == '-' || *f == ' ' || *f == '_' || *f == '+' ) ); + } + + + FT_LOCAL_DEF( FT_Error ) + cff_face_init( FT_Stream stream, + FT_Face cffface, /* CFF_Face */ + FT_Int face_index, + FT_Int num_params, + FT_Parameter* params ) + { + CFF_Face face = (CFF_Face)cffface; + FT_Error error; + SFNT_Service sfnt; + FT_Service_PsCMaps psnames; + PSHinter_Service pshinter; + PSAux_Service psaux; + FT_Service_CFFLoad cffload; + FT_Bool pure_cff = 1; + FT_Bool cff2 = 0; + FT_Bool sfnt_format = 0; + FT_Library library = cffface->driver->root.library; + + + sfnt = (SFNT_Service)FT_Get_Module_Interface( library, + "sfnt" ); + if ( !sfnt ) + { + FT_ERROR(( "cff_face_init: cannot access `sfnt' module\n" )); + error = FT_THROW( Missing_Module ); + goto Exit; + } + + FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS ); + + pshinter = (PSHinter_Service)FT_Get_Module_Interface( library, + "pshinter" ); + + psaux = (PSAux_Service)FT_Get_Module_Interface( library, + "psaux" ); + if ( !psaux ) + { + FT_ERROR(( "cff_face_init: cannot access `psaux' module\n" )); + error = FT_THROW( Missing_Module ); + goto Exit; + } + face->psaux = psaux; + + FT_FACE_FIND_GLOBAL_SERVICE( face, cffload, CFF_LOAD ); + + FT_TRACE2(( "CFF driver\n" )); + + /* create input stream from resource */ + if ( FT_STREAM_SEEK( 0 ) ) + goto Exit; + + /* check whether we have a valid OpenType file */ + FT_TRACE2(( " " )); + error = sfnt->init_face( stream, face, face_index, num_params, params ); + if ( !error ) + { + if ( face->format_tag != TTAG_OTTO ) /* `OTTO'; OpenType/CFF font */ + { + FT_TRACE2(( " not an OpenType/CFF font\n" )); + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + + /* if we are performing a simple font format check, exit immediately */ + if ( face_index < 0 ) + return FT_Err_Ok; + + sfnt_format = 1; + + /* now, the font can be either an OpenType/CFF font, or an SVG CEF */ + /* font; in the latter case it doesn't have a `head' table */ + error = face->goto_table( face, TTAG_head, stream, 0 ); + if ( !error ) + { + pure_cff = 0; + + /* load font directory */ + error = sfnt->load_face( stream, face, face_index, + num_params, params ); + if ( error ) + goto Exit; + } + else + { + /* load the `cmap' table explicitly */ + error = sfnt->load_cmap( face, stream ); + if ( error ) + goto Exit; + } + + /* now load the CFF part of the file; */ + /* give priority to CFF2 */ + error = face->goto_table( face, TTAG_CFF2, stream, 0 ); + if ( !error ) + { + cff2 = 1; + face->is_cff2 = cff2; + } + + if ( FT_ERR_EQ( error, Table_Missing ) ) + error = face->goto_table( face, TTAG_CFF, stream, 0 ); + + if ( error ) + goto Exit; + } + else + { + /* rewind to start of file; we are going to load a pure-CFF font */ + if ( FT_STREAM_SEEK( 0 ) ) + goto Exit; + error = FT_Err_Ok; + } + + /* now load and parse the CFF table in the file */ + { + CFF_Font cff = NULL; + CFF_FontRecDict dict; + FT_Memory memory = cffface->memory; + FT_Int32 flags; + FT_UInt i; + + + if ( FT_NEW( cff ) ) + goto Exit; + + face->extra.data = cff; + error = cff_font_load( library, + stream, + face_index, + cff, + face, + pure_cff, + cff2 ); + if ( error ) + goto Exit; + + /* if we are performing a simple font format check, exit immediately */ + /* (this is here for pure CFF) */ + if ( face_index < 0 ) + { + cffface->num_faces = (FT_Long)cff->num_faces; + return FT_Err_Ok; + } + + cff->pshinter = pshinter; + cff->psnames = psnames; + cff->cffload = cffload; + + cffface->face_index = face_index & 0xFFFF; + + /* Complement the root flags with some interesting information. */ + /* Note that this is only necessary for pure CFF and CEF fonts; */ + /* SFNT based fonts use the `name' table instead. */ + + cffface->num_glyphs = (FT_Long)cff->num_glyphs; + + dict = &cff->top_font.font_dict; + + /* we need the `psnames' module for CFF and CEF formats */ + /* which aren't CID-keyed */ + if ( dict->cid_registry == 0xFFFFU && !psnames ) + { + FT_ERROR(( "cff_face_init:" + " cannot open CFF & CEF fonts\n" )); + FT_ERROR(( " " + " without the `psnames' module\n" )); + error = FT_THROW( Missing_Module ); + goto Exit; + } + +#ifdef FT_DEBUG_LEVEL_TRACE + { + FT_UInt idx; + FT_String* s; + + + FT_TRACE4(( "SIDs\n" )); + + /* dump string index, including default strings for convenience */ + for ( idx = 0; idx <= 390; idx++ ) + { + s = cff_index_get_sid_string( cff, idx ); + if ( s ) + FT_TRACE4(( " %5d %s\n", idx, s )); + } + + /* In Multiple Master CFFs, two SIDs hold the Normalize Design */ + /* Vector (NDV) and Convert Design Vector (CDV) charstrings, */ + /* which may contain null bytes in the middle of the data, too. */ + /* We thus access `cff->strings' directly. */ + for ( idx = 1; idx < cff->num_strings; idx++ ) + { + FT_Byte* s1 = cff->strings[idx - 1]; + FT_Byte* s2 = cff->strings[idx]; + FT_PtrDist s1len = s2 - s1 - 1; /* without the final null byte */ + FT_PtrDist l; + + + FT_TRACE4(( " %5d ", idx + 390 )); + for ( l = 0; l < s1len; l++ ) + FT_TRACE4(( "%c", s1[l] )); + FT_TRACE4(( "\n" )); + } + + /* print last element */ + if ( cff->num_strings ) + { + FT_Byte* s1 = cff->strings[cff->num_strings - 1]; + FT_Byte* s2 = cff->string_pool + cff->string_pool_size; + FT_PtrDist s1len = s2 - s1 - 1; + FT_PtrDist l; + + + FT_TRACE4(( " %5d ", cff->num_strings + 390 )); + for ( l = 0; l < s1len; l++ ) + FT_TRACE4(( "%c", s1[l] )); + FT_TRACE4(( "\n" )); + } + } +#endif /* FT_DEBUG_LEVEL_TRACE */ + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + { + FT_UInt instance_index = (FT_UInt)face_index >> 16; + + + if ( FT_HAS_MULTIPLE_MASTERS( cffface ) ) + { + error = FT_Set_Named_Instance( cffface, instance_index ); + if ( error ) + goto Exit; + } + } +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + if ( !dict->has_font_matrix ) + dict->units_per_em = pure_cff ? 1000 : face->root.units_per_EM; + + /* Normalize the font matrix so that `matrix->yy' is 1; if */ + /* it is zero, we use `matrix->yx' instead. The scaling is */ + /* done with `units_per_em' then (at this point, it already */ + /* contains the scaling factor, but without normalization */ + /* of the matrix). */ + /* */ + /* Note that the offsets must be expressed in integer font */ + /* units. */ + + { + FT_Matrix* matrix = &dict->font_matrix; + FT_Vector* offset = &dict->font_offset; + FT_ULong* upm = &dict->units_per_em; + FT_Fixed temp; + + + temp = matrix->yy ? FT_ABS( matrix->yy ) + : FT_ABS( matrix->yx ); + + if ( temp != 0x10000L ) + { + *upm = (FT_ULong)FT_DivFix( (FT_Long)*upm, temp ); + + matrix->xx = FT_DivFix( matrix->xx, temp ); + matrix->yx = FT_DivFix( matrix->yx, temp ); + matrix->xy = FT_DivFix( matrix->xy, temp ); + matrix->yy = FT_DivFix( matrix->yy, temp ); + offset->x = FT_DivFix( offset->x, temp ); + offset->y = FT_DivFix( offset->y, temp ); + } + + offset->x >>= 16; + offset->y >>= 16; + } + + for ( i = cff->num_subfonts; i > 0; i-- ) + { + CFF_FontRecDict sub = &cff->subfonts[i - 1]->font_dict; + CFF_FontRecDict top = &cff->top_font.font_dict; + + FT_Matrix* matrix; + FT_Vector* offset; + FT_ULong* upm; + FT_Fixed temp; + + + if ( sub->has_font_matrix ) + { + FT_Long scaling; + + + /* if we have a top-level matrix, */ + /* concatenate the subfont matrix */ + + if ( top->has_font_matrix ) + { + if ( top->units_per_em > 1 && sub->units_per_em > 1 ) + scaling = (FT_Long)FT_MIN( top->units_per_em, + sub->units_per_em ); + else + scaling = 1; + + FT_Matrix_Multiply_Scaled( &top->font_matrix, + &sub->font_matrix, + scaling ); + FT_Vector_Transform_Scaled( &sub->font_offset, + &top->font_matrix, + scaling ); + + sub->units_per_em = (FT_ULong) + FT_MulDiv( (FT_Long)sub->units_per_em, + (FT_Long)top->units_per_em, + scaling ); + } + } + else + { + sub->font_matrix = top->font_matrix; + sub->font_offset = top->font_offset; + + sub->units_per_em = top->units_per_em; + } + + matrix = &sub->font_matrix; + offset = &sub->font_offset; + upm = &sub->units_per_em; + + temp = matrix->yy ? FT_ABS( matrix->yy ) + : FT_ABS( matrix->yx ); + + + if ( temp != 0x10000L ) + { + *upm = (FT_ULong)FT_DivFix( (FT_Long)*upm, temp ); + + matrix->xx = FT_DivFix( matrix->xx, temp ); + matrix->yx = FT_DivFix( matrix->yx, temp ); + matrix->xy = FT_DivFix( matrix->xy, temp ); + matrix->yy = FT_DivFix( matrix->yy, temp ); + offset->x = FT_DivFix( offset->x, temp ); + offset->y = FT_DivFix( offset->y, temp ); + } + + offset->x >>= 16; + offset->y >>= 16; + } + + if ( pure_cff ) + { + char* style_name = NULL; + + + /* set up num_faces */ + cffface->num_faces = (FT_Long)cff->num_faces; + + /* compute number of glyphs */ + if ( dict->cid_registry != 0xFFFFU ) + cffface->num_glyphs = (FT_Long)( cff->charset.max_cid + 1 ); + else + cffface->num_glyphs = (FT_Long)cff->charstrings_index.count; + + /* set global bbox, as well as EM size */ + cffface->bbox.xMin = dict->font_bbox.xMin >> 16; + cffface->bbox.yMin = dict->font_bbox.yMin >> 16; + /* no `U' suffix here to 0xFFFF! */ + cffface->bbox.xMax = ( dict->font_bbox.xMax + 0xFFFF ) >> 16; + cffface->bbox.yMax = ( dict->font_bbox.yMax + 0xFFFF ) >> 16; + + cffface->units_per_EM = (FT_UShort)( dict->units_per_em ); + + cffface->ascender = (FT_Short)( cffface->bbox.yMax ); + cffface->descender = (FT_Short)( cffface->bbox.yMin ); + + cffface->height = (FT_Short)( ( cffface->units_per_EM * 12 ) / 10 ); + if ( cffface->height < cffface->ascender - cffface->descender ) + cffface->height = (FT_Short)( cffface->ascender - + cffface->descender ); + + cffface->underline_position = + (FT_Short)( dict->underline_position >> 16 ); + cffface->underline_thickness = + (FT_Short)( dict->underline_thickness >> 16 ); + + /* retrieve font family & style name */ + if ( dict->family_name ) + { + char* family_name; + + + family_name = cff_index_get_sid_string( cff, dict->family_name ); + if ( family_name ) + cffface->family_name = cff_strcpy( memory, family_name ); + } + + if ( !cffface->family_name ) + { + cffface->family_name = cff_index_get_name( + cff, + (FT_UInt)( face_index & 0xFFFF ) ); + if ( cffface->family_name ) + remove_subset_prefix( cffface->family_name ); + } + + if ( cffface->family_name ) + { + char* full = cff_index_get_sid_string( cff, + dict->full_name ); + char* fullp = full; + char* family = cffface->family_name; + + + /* We try to extract the style name from the full name. */ + /* We need to ignore spaces and dashes during the search. */ + if ( full && family ) + { + while ( *fullp ) + { + /* skip common characters at the start of both strings */ + if ( *fullp == *family ) + { + family++; + fullp++; + continue; + } + + /* ignore spaces and dashes in full name during comparison */ + if ( *fullp == ' ' || *fullp == '-' ) + { + fullp++; + continue; + } + + /* ignore spaces and dashes in family name during comparison */ + if ( *family == ' ' || *family == '-' ) + { + family++; + continue; + } + + if ( !*family && *fullp ) + { + /* The full name begins with the same characters as the */ + /* family name, with spaces and dashes removed. In this */ + /* case, the remaining string in `fullp' will be used as */ + /* the style name. */ + style_name = cff_strcpy( memory, fullp ); + + /* remove the style part from the family name (if present) */ + if ( style_name ) + remove_style( cffface->family_name, style_name ); + } + break; + } + } + } + else + { + char *cid_font_name = + cff_index_get_sid_string( cff, + dict->cid_font_name ); + + + /* do we have a `/FontName' for a CID-keyed font? */ + if ( cid_font_name ) + cffface->family_name = cff_strcpy( memory, cid_font_name ); + } + + if ( style_name ) + cffface->style_name = style_name; + else + /* assume "Regular" style if we don't know better */ + cffface->style_name = cff_strcpy( memory, "Regular" ); + + /******************************************************************** + * + * Compute face flags. + */ + flags = FT_FACE_FLAG_SCALABLE | /* scalable outlines */ + FT_FACE_FLAG_HORIZONTAL | /* horizontal data */ + FT_FACE_FLAG_HINTER; /* has native hinter */ + + if ( sfnt_format ) + flags |= FT_FACE_FLAG_SFNT; + + /* fixed width font? */ + if ( dict->is_fixed_pitch ) + flags |= FT_FACE_FLAG_FIXED_WIDTH; + + /* XXX: WE DO NOT SUPPORT KERNING METRICS IN THE GPOS TABLE FOR NOW */ +#if 0 + /* kerning available? */ + if ( face->kern_pairs ) + flags |= FT_FACE_FLAG_KERNING; +#endif + + cffface->face_flags |= flags; + + /******************************************************************** + * + * Compute style flags. + */ + flags = 0; + + if ( dict->italic_angle ) + flags |= FT_STYLE_FLAG_ITALIC; + + { + char *weight = cff_index_get_sid_string( cff, + dict->weight ); + + + if ( weight ) + if ( !ft_strcmp( weight, "Bold" ) || + !ft_strcmp( weight, "Black" ) ) + flags |= FT_STYLE_FLAG_BOLD; + } + + /* double check */ + if ( !(flags & FT_STYLE_FLAG_BOLD) && cffface->style_name ) + if ( !ft_strncmp( cffface->style_name, "Bold", 4 ) || + !ft_strncmp( cffface->style_name, "Black", 5 ) ) + flags |= FT_STYLE_FLAG_BOLD; + + cffface->style_flags = flags; + } + + /* 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; + + if ( dict->cid_registry != 0xFFFFU && pure_cff ) + cffface->face_flags |= FT_FACE_FLAG_CID_KEYED; + + /******************************************************************** + * + * Compute char maps. + */ + + /* Try to synthesize a Unicode charmap if there is none available */ + /* already. If an OpenType font contains a Unicode "cmap", we */ + /* will use it, whatever be in the CFF part of the file. */ + { + FT_CharMapRec cmaprec; + FT_CharMap cmap; + FT_Int nn; + CFF_Encoding encoding = &cff->encoding; + + + for ( nn = 0; nn < cffface->num_charmaps; nn++ ) + { + cmap = cffface->charmaps[nn]; + + /* Windows Unicode? */ + if ( cmap->platform_id == TT_PLATFORM_MICROSOFT && + cmap->encoding_id == TT_MS_ID_UNICODE_CS ) + goto Skip_Unicode; + + /* Apple Unicode platform id? */ + if ( cmap->platform_id == TT_PLATFORM_APPLE_UNICODE ) + goto Skip_Unicode; /* Apple Unicode */ + } + + /* since CID-keyed fonts don't contain glyph names, we can't */ + /* construct a cmap */ + if ( pure_cff && cff->top_font.font_dict.cid_registry != 0xFFFFU ) + goto Exit; + + /* we didn't find a Unicode charmap -- synthesize one */ + cmaprec.face = cffface; + cmaprec.platform_id = TT_PLATFORM_MICROSOFT; + cmaprec.encoding_id = TT_MS_ID_UNICODE_CS; + cmaprec.encoding = FT_ENCODING_UNICODE; + + nn = cffface->num_charmaps; + + error = FT_CMap_New( &cff_cmap_unicode_class_rec, NULL, + &cmaprec, NULL ); + if ( error && + FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) && + FT_ERR_NEQ( error, Unimplemented_Feature ) ) + goto Exit; + error = FT_Err_Ok; + + /* if no Unicode charmap was previously selected, select this one */ + if ( !cffface->charmap && nn != cffface->num_charmaps ) + cffface->charmap = cffface->charmaps[nn]; + + Skip_Unicode: + if ( encoding->count > 0 ) + { + FT_CMap_Class clazz; + + + cmaprec.face = cffface; + cmaprec.platform_id = TT_PLATFORM_ADOBE; /* Adobe platform id */ + + if ( encoding->offset == 0 ) + { + cmaprec.encoding_id = TT_ADOBE_ID_STANDARD; + cmaprec.encoding = FT_ENCODING_ADOBE_STANDARD; + clazz = &cff_cmap_encoding_class_rec; + } + else if ( encoding->offset == 1 ) + { + cmaprec.encoding_id = TT_ADOBE_ID_EXPERT; + cmaprec.encoding = FT_ENCODING_ADOBE_EXPERT; + clazz = &cff_cmap_encoding_class_rec; + } + else + { + cmaprec.encoding_id = TT_ADOBE_ID_CUSTOM; + cmaprec.encoding = FT_ENCODING_ADOBE_CUSTOM; + clazz = &cff_cmap_encoding_class_rec; + } + + error = FT_CMap_New( clazz, NULL, &cmaprec, NULL ); + } + } + } + + Exit: + return error; + } + + + FT_LOCAL_DEF( void ) + cff_face_done( FT_Face cffface ) /* CFF_Face */ + { + CFF_Face face = (CFF_Face)cffface; + FT_Memory memory; + SFNT_Service sfnt; + + + if ( !face ) + return; + + memory = cffface->memory; + sfnt = (SFNT_Service)face->sfnt; + + if ( sfnt ) + sfnt->done_face( face ); + + { + CFF_Font cff = (CFF_Font)face->extra.data; + + + if ( cff ) + { + cff_font_done( cff ); + FT_FREE( face->extra.data ); + } + } + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + cff_done_blend( cffface ); + face->blend = NULL; +#endif + } + + + FT_LOCAL_DEF( FT_Error ) + cff_driver_init( FT_Module module ) /* CFF_Driver */ + { + PS_Driver driver = (PS_Driver)module; + + FT_UInt32 seed; + + + /* set default property values, cf. `ftcffdrv.h' */ + driver->hinting_engine = FT_HINTING_ADOBE; + + driver->no_stem_darkening = TRUE; + + driver->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1; + driver->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1; + driver->darken_params[2] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2; + driver->darken_params[3] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2; + driver->darken_params[4] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3; + driver->darken_params[5] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3; + driver->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4; + driver->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4; + + /* compute random seed from some memory addresses */ + seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^ + (FT_Offset)(char*)&module ^ + (FT_Offset)(char*)module->memory ); + seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 ); + + driver->random_seed = (FT_Int32)seed; + if ( driver->random_seed < 0 ) + driver->random_seed = -driver->random_seed; + else if ( driver->random_seed == 0 ) + driver->random_seed = 123456789; + + return FT_Err_Ok; + } + + + FT_LOCAL_DEF( void ) + cff_driver_done( FT_Module module ) /* CFF_Driver */ + { + FT_UNUSED( module ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffobjs.h b/non-source/foreign/freetype2/src/cff/cffobjs.h new file mode 100644 index 000000000..91ad83b1c --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffobjs.h @@ -0,0 +1,84 @@ +/**************************************************************************** + * + * cffobjs.h + * + * OpenType objects manager (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFOBJS_H_ +#define CFFOBJS_H_ + + + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + cff_size_init( FT_Size size ); /* CFF_Size */ + + FT_LOCAL( void ) + cff_size_done( FT_Size size ); /* CFF_Size */ + + FT_LOCAL( FT_Error ) + cff_size_request( FT_Size size, + FT_Size_Request req ); + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + FT_LOCAL( FT_Error ) + cff_size_select( FT_Size size, + FT_ULong strike_index ); + +#endif + + FT_LOCAL( void ) + cff_slot_done( FT_GlyphSlot slot ); + + FT_LOCAL( FT_Error ) + cff_slot_init( FT_GlyphSlot slot ); + + + /************************************************************************** + * + * Face functions + */ + FT_LOCAL( FT_Error ) + cff_face_init( FT_Stream stream, + FT_Face face, /* CFF_Face */ + FT_Int face_index, + FT_Int num_params, + FT_Parameter* params ); + + FT_LOCAL( void ) + cff_face_done( FT_Face face ); /* CFF_Face */ + + + /************************************************************************** + * + * Driver functions + */ + FT_LOCAL( FT_Error ) + cff_driver_init( FT_Module module ); /* PS_Driver */ + + FT_LOCAL( void ) + cff_driver_done( FT_Module module ); /* PS_Driver */ + + +FT_END_HEADER + +#endif /* CFFOBJS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffparse.c b/non-source/foreign/freetype2/src/cff/cffparse.c new file mode 100644 index 000000000..92a69c3b5 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffparse.c @@ -0,0 +1,1550 @@ +/**************************************************************************** + * + * cffparse.c + * + * CFF token stream parser (body) + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include "cffparse.h" +#include <freetype/internal/ftstream.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/psaux.h> +#include <freetype/ftlist.h> + +#include "cfferrs.h" +#include "cffload.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cffparse + + + FT_LOCAL_DEF( FT_Error ) + cff_parser_init( CFF_Parser parser, + FT_UInt code, + void* object, + FT_Library library, + FT_UInt stackSize, + FT_UShort num_designs, + FT_UShort num_axes ) + { + FT_Memory memory = library->memory; /* for FT_NEW_ARRAY */ + FT_Error error; /* for FT_NEW_ARRAY */ + + + FT_ZERO( parser ); + +#if 0 + parser->top = parser->stack; +#endif + parser->object_code = code; + parser->object = object; + parser->library = library; + parser->num_designs = num_designs; + parser->num_axes = num_axes; + + /* allocate the stack buffer */ + if ( FT_QNEW_ARRAY( parser->stack, stackSize ) ) + goto Exit; + + parser->stackSize = stackSize; + parser->top = parser->stack; /* empty stack */ + + Exit: + return error; + } + + + FT_LOCAL_DEF( void ) + cff_parser_done( CFF_Parser parser ) + { + FT_Memory memory = parser->library->memory; /* for FT_FREE */ + + + FT_FREE( parser->stack ); + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + FT_List_Finalize( &parser->t2_strings, NULL, memory, NULL ); +#endif + } + + + /* The parser limit checks in the next two functions are supposed */ + /* to detect the immediate crossing of the stream boundary. They */ + /* shall not be triggered from the distant t2_strings buffers. */ + + /* read an integer */ + static FT_Long + cff_parse_integer( FT_Byte* start, + FT_Byte* limit ) + { + FT_Byte* p = start; + FT_Int v = *p++; + FT_Long val = 0; + + + if ( v == 28 ) + { + if ( p + 2 > limit && limit >= p ) + goto Bad; + + val = (FT_Short)( ( (FT_UShort)p[0] << 8 ) | p[1] ); + } + else if ( v == 29 ) + { + if ( p + 4 > limit && limit >= p ) + goto Bad; + + val = (FT_Long)( ( (FT_ULong)p[0] << 24 ) | + ( (FT_ULong)p[1] << 16 ) | + ( (FT_ULong)p[2] << 8 ) | + (FT_ULong)p[3] ); + } + else if ( v < 247 ) + { + val = v - 139; + } + else if ( v < 251 ) + { + if ( p + 1 > limit && limit >= p ) + goto Bad; + + val = ( v - 247 ) * 256 + p[0] + 108; + } + else + { + if ( p + 1 > limit && limit >= p ) + goto Bad; + + val = -( v - 251 ) * 256 - p[0] - 108; + } + + Exit: + return val; + + Bad: + val = 0; + FT_TRACE4(( "!!!END OF DATA:!!!" )); + goto Exit; + } + + + static const FT_Long power_tens[] = + { + 1L, + 10L, + 100L, + 1000L, + 10000L, + 100000L, + 1000000L, + 10000000L, + 100000000L, + 1000000000L + }; + + /* maximum values allowed for multiplying */ + /* with the corresponding `power_tens' element */ + static const FT_Long power_ten_limits[] = + { + FT_LONG_MAX / 1L, + FT_LONG_MAX / 10L, + FT_LONG_MAX / 100L, + FT_LONG_MAX / 1000L, + FT_LONG_MAX / 10000L, + FT_LONG_MAX / 100000L, + FT_LONG_MAX / 1000000L, + FT_LONG_MAX / 10000000L, + FT_LONG_MAX / 100000000L, + FT_LONG_MAX / 1000000000L, + }; + + + /* read a real */ + static FT_Fixed + cff_parse_real( FT_Byte* start, + FT_Byte* limit, + FT_Long power_ten, + FT_Long* scaling ) + { + FT_Byte* p = start; + FT_Int nib; + FT_UInt phase; + + FT_Long result, number, exponent; + FT_Int sign = 0, exponent_sign = 0, have_overflow = 0; + FT_Long exponent_add, integer_length, fraction_length; + + + if ( scaling ) + *scaling = 0; + + result = 0; + + number = 0; + exponent = 0; + + exponent_add = 0; + integer_length = 0; + fraction_length = 0; + + /* First of all, read the integer part. */ + phase = 4; + + for (;;) + { + /* If we entered this iteration with phase == 4, we need to */ + /* read a new byte. This also skips past the initial 0x1E. */ + if ( phase ) + { + p++; + + /* Make sure we don't read past the end. */ + if ( p + 1 > limit && limit >= p ) + goto Bad; + } + + /* Get the nibble. */ + nib = (FT_Int)( p[0] >> phase ) & 0xF; + phase = 4 - phase; + + if ( nib == 0xE ) + sign = 1; + else if ( nib > 9 ) + break; + else + { + /* Increase exponent if we can't add the digit. */ + if ( number >= 0xCCCCCCCL ) + exponent_add++; + /* Skip leading zeros. */ + else if ( nib || number ) + { + integer_length++; + number = number * 10 + nib; + } + } + } + + /* Read fraction part, if any. */ + if ( nib == 0xA ) + for (;;) + { + /* If we entered this iteration with phase == 4, we need */ + /* to read a new byte. */ + if ( phase ) + { + p++; + + /* Make sure we don't read past the end. */ + if ( p + 1 > limit && limit >= p ) + goto Bad; + } + + /* Get the nibble. */ + nib = ( p[0] >> phase ) & 0xF; + phase = 4 - phase; + if ( nib >= 10 ) + break; + + /* Skip leading zeros if possible. */ + if ( !nib && !number ) + exponent_add--; + /* Only add digit if we don't overflow. */ + else if ( number < 0xCCCCCCCL && fraction_length < 9 ) + { + fraction_length++; + number = number * 10 + nib; + } + } + + /* Read exponent, if any. */ + if ( nib == 12 ) + { + exponent_sign = 1; + nib = 11; + } + + if ( nib == 11 ) + { + for (;;) + { + /* If we entered this iteration with phase == 4, */ + /* we need to read a new byte. */ + if ( phase ) + { + p++; + + /* Make sure we don't read past the end. */ + if ( p + 1 > limit && limit >= p ) + goto Bad; + } + + /* Get the nibble. */ + nib = ( p[0] >> phase ) & 0xF; + phase = 4 - phase; + if ( nib >= 10 ) + break; + + /* Arbitrarily limit exponent. */ + if ( exponent > 1000 ) + have_overflow = 1; + else + exponent = exponent * 10 + nib; + } + + if ( exponent_sign ) + exponent = -exponent; + } + + if ( !number ) + goto Exit; + + if ( have_overflow ) + { + if ( exponent_sign ) + goto Underflow; + else + goto Overflow; + } + + /* We don't check `power_ten' and `exponent_add'. */ + exponent += power_ten + exponent_add; + + if ( scaling ) + { + /* Only use `fraction_length'. */ + fraction_length += integer_length; + exponent += integer_length; + + if ( fraction_length <= 5 ) + { + if ( number > 0x7FFFL ) + { + result = FT_DivFix( number, 10 ); + *scaling = exponent - fraction_length + 1; + } + else + { + if ( exponent > 0 ) + { + FT_Long new_fraction_length, shift; + + + /* Make `scaling' as small as possible. */ + new_fraction_length = FT_MIN( exponent, 5 ); + shift = new_fraction_length - fraction_length; + + if ( shift > 0 ) + { + exponent -= new_fraction_length; + number *= power_tens[shift]; + if ( number > 0x7FFFL ) + { + number /= 10; + exponent += 1; + } + } + else + exponent -= fraction_length; + } + else + exponent -= fraction_length; + + result = (FT_Long)( (FT_ULong)number << 16 ); + *scaling = exponent; + } + } + else + { + if ( ( number / power_tens[fraction_length - 5] ) > 0x7FFFL ) + { + result = FT_DivFix( number, power_tens[fraction_length - 4] ); + *scaling = exponent - 4; + } + else + { + result = FT_DivFix( number, power_tens[fraction_length - 5] ); + *scaling = exponent - 5; + } + } + } + else + { + integer_length += exponent; + fraction_length -= exponent; + + if ( integer_length > 5 ) + goto Overflow; + if ( integer_length < -5 ) + goto Underflow; + + /* Remove non-significant digits. */ + if ( integer_length < 0 ) + { + number /= power_tens[-integer_length]; + fraction_length += integer_length; + } + + /* this can only happen if exponent was non-zero */ + if ( fraction_length == 10 ) + { + number /= 10; + fraction_length -= 1; + } + + /* Convert into 16.16 format. */ + if ( fraction_length > 0 ) + { + if ( ( number / power_tens[fraction_length] ) > 0x7FFFL ) + goto Exit; + + result = FT_DivFix( number, power_tens[fraction_length] ); + } + else + { + number *= power_tens[-fraction_length]; + + if ( number > 0x7FFFL ) + goto Overflow; + + result = (FT_Long)( (FT_ULong)number << 16 ); + } + } + + Exit: + if ( sign ) + result = -result; + + return result; + + Overflow: + result = 0x7FFFFFFFL; + FT_TRACE4(( "!!!OVERFLOW:!!!" )); + goto Exit; + + Underflow: + result = 0; + FT_TRACE4(( "!!!UNDERFLOW:!!!" )); + goto Exit; + + Bad: + result = 0; + FT_TRACE4(( "!!!END OF DATA:!!!" )); + goto Exit; + } + + + /* read a number, either integer or real */ + FT_LOCAL_DEF( FT_Long ) + cff_parse_num( CFF_Parser parser, + FT_Byte** d ) + { + if ( **d == 30 ) + { + /* binary-coded decimal is truncated to integer */ + return cff_parse_real( *d, parser->limit, 0, NULL ) >> 16; + } + + else if ( **d == 255 ) + { + /* 16.16 fixed-point is used internally for CFF2 blend results. */ + /* Since these are trusted values, a limit check is not needed. */ + + /* After the 255, 4 bytes give the number. */ + /* The blend value is converted to integer, with rounding; */ + /* due to the right-shift we don't need the lowest byte. */ +#if 0 + return (FT_Short)( + ( ( ( (FT_UInt32)*( d[0] + 1 ) << 24 ) | + ( (FT_UInt32)*( d[0] + 2 ) << 16 ) | + ( (FT_UInt32)*( d[0] + 3 ) << 8 ) | + (FT_UInt32)*( d[0] + 4 ) ) + 0x8000U ) >> 16 ); +#else + return (FT_Short)( + ( ( ( (FT_UInt32)*( d[0] + 1 ) << 16 ) | + ( (FT_UInt32)*( d[0] + 2 ) << 8 ) | + (FT_UInt32)*( d[0] + 3 ) ) + 0x80U ) >> 8 ); +#endif + } + + else + return cff_parse_integer( *d, parser->limit ); + } + + + /* read a floating point number, either integer or real */ + static FT_Fixed + do_fixed( CFF_Parser parser, + FT_Byte** d, + FT_Long scaling ) + { + if ( **d == 30 ) + return cff_parse_real( *d, parser->limit, scaling, NULL ); + else if ( **d == 255 ) + { + FT_Fixed val = (FT_Int32)( ( ( (FT_UInt32)*( d[0] + 1 ) << 24 ) | + ( (FT_UInt32)*( d[0] + 2 ) << 16 ) | + ( (FT_UInt32)*( d[0] + 3 ) << 8 ) | + (FT_UInt32)*( d[0] + 4 ) ) ); + + if ( scaling ) + { + if ( FT_ABS( val ) > power_ten_limits[scaling] ) + { + FT_TRACE4(( "!!!OVERFLOW:!!!" )); + return val > 0 ? 0x7FFFFFFFL : -0x7FFFFFFFL; + } + val *= power_tens[scaling]; + } + return val; + } + else + { + FT_Long val = cff_parse_integer( *d, parser->limit ); + + + if ( scaling ) + { + if ( ( FT_ABS( val ) << 16 ) > power_ten_limits[scaling] ) + { + val = val > 0 ? 0x7FFFFFFFL : -0x7FFFFFFFL; + goto Overflow; + } + + val *= power_tens[scaling]; + } + + if ( val > 0x7FFF ) + { + val = 0x7FFFFFFFL; + goto Overflow; + } + else if ( val < -0x7FFF ) + { + val = -0x7FFFFFFFL; + goto Overflow; + } + + return (FT_Long)( (FT_ULong)val << 16 ); + + Overflow: + FT_TRACE4(( "!!!OVERFLOW:!!!" )); + return val; + } + } + + + /* read a floating point number, either integer or real */ + FT_LOCAL_DEF( FT_Fixed ) + cff_parse_fixed( CFF_Parser parser, + FT_Byte** d ) + { + return do_fixed( parser, d, 0 ); + } + + + /* read a floating point number, either integer or real, */ + /* but return `10^scaling' times the number read in */ + static FT_Fixed + cff_parse_fixed_scaled( CFF_Parser parser, + FT_Byte** d, + FT_Long scaling ) + { + return do_fixed( parser, d, scaling ); + } + + + /* read a floating point number, either integer or real, */ + /* and return it as precise as possible -- `scaling' returns */ + /* the scaling factor (as a power of 10) */ + static FT_Fixed + cff_parse_fixed_dynamic( CFF_Parser parser, + FT_Byte** d, + FT_Long* scaling ) + { + FT_ASSERT( scaling ); + + if ( **d == 30 ) + return cff_parse_real( *d, parser->limit, 0, scaling ); + else + { + FT_Long number; + FT_Int integer_length; + + + number = cff_parse_integer( *d, parser->limit ); + + if ( number > 0x7FFFL ) + { + for ( integer_length = 5; integer_length < 10; integer_length++ ) + if ( number < power_tens[integer_length] ) + break; + + if ( ( number / power_tens[integer_length - 5] ) > 0x7FFFL ) + { + *scaling = integer_length - 4; + return FT_DivFix( number, power_tens[integer_length - 4] ); + } + else + { + *scaling = integer_length - 5; + return FT_DivFix( number, power_tens[integer_length - 5] ); + } + } + else + { + *scaling = 0; + return (FT_Long)( (FT_ULong)number << 16 ); + } + } + } + + + static FT_Error + cff_parse_font_matrix( CFF_Parser parser ) + { + CFF_FontRecDict dict = (CFF_FontRecDict)parser->object; + FT_Matrix* matrix = &dict->font_matrix; + FT_Vector* offset = &dict->font_offset; + FT_ULong* upm = &dict->units_per_em; + FT_Byte** data = parser->stack; + + + if ( parser->top >= parser->stack + 6 ) + { + FT_Fixed values[6]; + FT_Long scalings[6]; + + FT_Long min_scaling, max_scaling; + int i; + + + dict->has_font_matrix = TRUE; + + /* We expect a well-formed font matrix, that is, the matrix elements */ + /* `xx' and `yy' are of approximately the same magnitude. To avoid */ + /* loss of precision, we use the magnitude of the largest matrix */ + /* element to scale all other elements. The scaling factor is then */ + /* contained in the `units_per_em' value. */ + + max_scaling = FT_LONG_MIN; + min_scaling = FT_LONG_MAX; + + for ( i = 0; i < 6; i++ ) + { + values[i] = cff_parse_fixed_dynamic( parser, data++, &scalings[i] ); + if ( values[i] ) + { + if ( scalings[i] > max_scaling ) + max_scaling = scalings[i]; + if ( scalings[i] < min_scaling ) + min_scaling = scalings[i]; + } + } + + if ( max_scaling < -9 || + max_scaling > 0 || + ( max_scaling - min_scaling ) < 0 || + ( max_scaling - min_scaling ) > 9 ) + { + FT_TRACE1(( "cff_parse_font_matrix:" + " strange scaling values (minimum %ld, maximum %ld),\n", + min_scaling, max_scaling )); + FT_TRACE1(( " " + " using default matrix\n" )); + goto Unlikely; + } + + for ( i = 0; i < 6; i++ ) + { + FT_Fixed value = values[i]; + FT_Long divisor, half_divisor; + + + if ( !value ) + continue; + + divisor = power_tens[max_scaling - scalings[i]]; + half_divisor = divisor >> 1; + + if ( value < 0 ) + { + if ( FT_LONG_MIN + half_divisor < value ) + values[i] = ( value - half_divisor ) / divisor; + else + values[i] = FT_LONG_MIN / divisor; + } + else + { + if ( FT_LONG_MAX - half_divisor > value ) + values[i] = ( value + half_divisor ) / divisor; + else + values[i] = FT_LONG_MAX / divisor; + } + } + + matrix->xx = values[0]; + matrix->yx = values[1]; + matrix->xy = values[2]; + matrix->yy = values[3]; + offset->x = values[4]; + offset->y = values[5]; + + *upm = (FT_ULong)power_tens[-max_scaling]; + + FT_TRACE4(( " [%f %f %f %f %f %f]\n", + (double)matrix->xx / (double)*upm / 65536, + (double)matrix->xy / (double)*upm / 65536, + (double)matrix->yx / (double)*upm / 65536, + (double)matrix->yy / (double)*upm / 65536, + (double)offset->x / (double)*upm / 65536, + (double)offset->y / (double)*upm / 65536 )); + + if ( !FT_Matrix_Check( matrix ) ) + { + FT_TRACE1(( "cff_parse_font_matrix:" + " degenerate values, using default matrix\n" )); + goto Unlikely; + } + + return FT_Err_Ok; + } + else + return FT_THROW( Stack_Underflow ); + + Unlikely: + /* Return default matrix in case of unlikely values. */ + + matrix->xx = 0x10000L; + matrix->yx = 0; + matrix->xy = 0; + matrix->yy = 0x10000L; + offset->x = 0; + offset->y = 0; + *upm = 1; + + return FT_Err_Ok; + } + + + static FT_Error + cff_parse_font_bbox( CFF_Parser parser ) + { + CFF_FontRecDict dict = (CFF_FontRecDict)parser->object; + FT_BBox* bbox = &dict->font_bbox; + FT_Byte** data = parser->stack; + FT_Error error; + + + error = FT_ERR( Stack_Underflow ); + + if ( parser->top >= parser->stack + 4 ) + { + bbox->xMin = FT_RoundFix( cff_parse_fixed( parser, data++ ) ); + bbox->yMin = FT_RoundFix( cff_parse_fixed( parser, data++ ) ); + bbox->xMax = FT_RoundFix( cff_parse_fixed( parser, data++ ) ); + bbox->yMax = FT_RoundFix( cff_parse_fixed( parser, data ) ); + error = FT_Err_Ok; + + FT_TRACE4(( " [%ld %ld %ld %ld]\n", + bbox->xMin / 65536, + bbox->yMin / 65536, + bbox->xMax / 65536, + bbox->yMax / 65536 )); + } + + return error; + } + + + static FT_Error + cff_parse_private_dict( CFF_Parser parser ) + { + CFF_FontRecDict dict = (CFF_FontRecDict)parser->object; + FT_Byte** data = parser->stack; + FT_Error error; + + + error = FT_ERR( Stack_Underflow ); + + if ( parser->top >= parser->stack + 2 ) + { + FT_Long tmp; + + + tmp = cff_parse_num( parser, data++ ); + if ( tmp < 0 ) + { + FT_ERROR(( "cff_parse_private_dict: Invalid dictionary size\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Fail; + } + dict->private_size = (FT_ULong)tmp; + + tmp = cff_parse_num( parser, data ); + if ( tmp < 0 ) + { + FT_ERROR(( "cff_parse_private_dict: Invalid dictionary offset\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Fail; + } + dict->private_offset = (FT_ULong)tmp; + + FT_TRACE4(( " %lu %lu\n", + dict->private_size, dict->private_offset )); + + error = FT_Err_Ok; + } + + Fail: + return error; + } + + + /* The `MultipleMaster' operator comes before any */ + /* top DICT operators that contain T2 charstrings. */ + + static FT_Error + cff_parse_multiple_master( CFF_Parser parser ) + { + CFF_FontRecDict dict = (CFF_FontRecDict)parser->object; + FT_Error error; + + +#ifdef FT_DEBUG_LEVEL_TRACE + /* beautify tracing message */ + if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] < 4 ) + FT_TRACE1(( "Multiple Master CFFs not supported yet," + " handling first master design only\n" )); + else + FT_TRACE1(( " (not supported yet," + " handling first master design only)\n" )); +#endif + + error = FT_ERR( Stack_Underflow ); + + /* currently, we handle only the first argument */ + if ( parser->top >= parser->stack + 5 ) + { + FT_Long num_designs = cff_parse_num( parser, parser->stack ); + + + if ( num_designs > 16 || num_designs < 2 ) + { + FT_ERROR(( "cff_parse_multiple_master:" + " Invalid number of designs\n" )); + error = FT_THROW( Invalid_File_Format ); + } + else + { + dict->num_designs = (FT_UShort)num_designs; + dict->num_axes = (FT_UShort)( parser->top - parser->stack - 4 ); + + parser->num_designs = dict->num_designs; + parser->num_axes = dict->num_axes; + + error = FT_Err_Ok; + } + } + + return error; + } + + + static FT_Error + cff_parse_cid_ros( CFF_Parser parser ) + { + CFF_FontRecDict dict = (CFF_FontRecDict)parser->object; + FT_Byte** data = parser->stack; + FT_Error error; + + + error = FT_ERR( Stack_Underflow ); + + if ( parser->top >= parser->stack + 3 ) + { + dict->cid_registry = (FT_UInt)cff_parse_num( parser, data++ ); + dict->cid_ordering = (FT_UInt)cff_parse_num( parser, data++ ); + if ( **data == 30 ) + FT_TRACE1(( "cff_parse_cid_ros: real supplement is rounded\n" )); + dict->cid_supplement = cff_parse_num( parser, data ); + if ( dict->cid_supplement < 0 ) + FT_TRACE1(( "cff_parse_cid_ros: negative supplement %ld is found\n", + dict->cid_supplement )); + error = FT_Err_Ok; + + FT_TRACE4(( " %d %d %ld\n", + dict->cid_registry, + dict->cid_ordering, + dict->cid_supplement )); + } + + return error; + } + + + static FT_Error + cff_parse_vsindex( CFF_Parser parser ) + { + /* vsindex operator can only be used in a Private DICT */ + CFF_Private priv = (CFF_Private)parser->object; + FT_Byte** data = parser->stack; + CFF_Blend blend; + FT_Error error; + + + if ( !priv || !priv->subfont ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + blend = &priv->subfont->blend; + + if ( blend->usedBV ) + { + FT_ERROR(( " cff_parse_vsindex: vsindex not allowed after blend\n" )); + error = FT_THROW( Syntax_Error ); + goto Exit; + } + + priv->vsindex = (FT_UInt)cff_parse_num( parser, data++ ); + + FT_TRACE4(( " %d\n", priv->vsindex )); + + error = FT_Err_Ok; + + Exit: + return error; + } + + + static FT_Error + cff_parse_blend( CFF_Parser parser ) + { + /* blend operator can only be used in a Private DICT */ + CFF_Private priv = (CFF_Private)parser->object; + CFF_SubFont subFont; + CFF_Blend blend; + FT_UInt numBlends; + FT_Error error; + + + if ( !priv || !priv->subfont ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + subFont = priv->subfont; + blend = &subFont->blend; + + if ( cff_blend_check_vector( blend, + priv->vsindex, + subFont->lenNDV, + subFont->NDV ) ) + { + error = cff_blend_build_vector( blend, + priv->vsindex, + subFont->lenNDV, + subFont->NDV ); + if ( error ) + goto Exit; + } + + numBlends = (FT_UInt)cff_parse_num( parser, parser->top - 1 ); + if ( numBlends > parser->stackSize ) + { + FT_ERROR(( "cff_parse_blend: Invalid number of blends\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + FT_TRACE4(( " %d value%s blended\n", + numBlends, + numBlends == 1 ? "" : "s" )); + + error = cff_blend_doBlend( subFont, parser, numBlends ); + + blend->usedBV = TRUE; + + Exit: + return error; + } + + + /* maxstack operator increases parser and operand stacks for CFF2 */ + static FT_Error + cff_parse_maxstack( CFF_Parser parser ) + { + /* maxstack operator can only be used in a Top DICT */ + CFF_FontRecDict dict = (CFF_FontRecDict)parser->object; + FT_Byte** data = parser->stack; + FT_Error error = FT_Err_Ok; + + + if ( !dict ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + dict->maxstack = (FT_UInt)cff_parse_num( parser, data++ ); + if ( dict->maxstack > CFF2_MAX_STACK ) + dict->maxstack = CFF2_MAX_STACK; + if ( dict->maxstack < CFF2_DEFAULT_STACK ) + dict->maxstack = CFF2_DEFAULT_STACK; + + FT_TRACE4(( " %d\n", dict->maxstack )); + + Exit: + return error; + } + + +#define CFF_FIELD_NUM( code, name, id ) \ + CFF_FIELD( code, name, id, cff_kind_num ) +#define CFF_FIELD_FIXED( code, name, id ) \ + CFF_FIELD( code, name, id, cff_kind_fixed ) +#define CFF_FIELD_FIXED_1000( code, name, id ) \ + CFF_FIELD( code, name, id, cff_kind_fixed_thousand ) +#define CFF_FIELD_STRING( code, name, id ) \ + CFF_FIELD( code, name, id, cff_kind_string ) +#define CFF_FIELD_BOOL( code, name, id ) \ + CFF_FIELD( code, name, id, cff_kind_bool ) +#define CFF_FIELD_DELTA( code, name, max, id ) \ + CFF_FIELD_DELTA_KIND( code, name, max, id, cff_kind_delta ) +#define CFF_FIELD_DELTA_FIXED( code, name, max, id ) \ + CFF_FIELD_DELTA_KIND( code, name, max, id, cff_kind_delta_fixed ) + + +#undef CFF_FIELD +#undef CFF_FIELD_DELTA_KIND + + +#ifndef FT_DEBUG_LEVEL_TRACE + + +#define CFF_FIELD_CALLBACK( code, name, id ) \ + { \ + cff_kind_callback, \ + code | CFFCODE, \ + 0, 0, \ + cff_parse_ ## name, \ + 0, 0 \ + }, + +#define CFF_FIELD_BLEND( code, id ) \ + { \ + cff_kind_blend, \ + code | CFFCODE, \ + 0, 0, \ + cff_parse_blend, \ + 0, 0 \ + }, + +#define CFF_FIELD( code, name, id, kind ) \ + { \ + kind, \ + code | CFFCODE, \ + FT_FIELD_OFFSET( name ), \ + FT_FIELD_SIZE( name ), \ + NULL, 0, 0 \ + }, + +#define CFF_FIELD_DELTA_KIND( code, name, max, id, kind ) \ + { \ + kind, \ + code | CFFCODE, \ + FT_FIELD_OFFSET( name ), \ + FT_FIELD_SIZE_DELTA( name ), \ + NULL, \ + max, \ + FT_FIELD_OFFSET( num_ ## name ) \ + }, + + static const CFF_Field_Handler cff_field_handlers[] = + { + +#include "cfftoken.h" + + { 0, 0, 0, 0, NULL, 0, 0 } + }; + + +#else /* FT_DEBUG_LEVEL_TRACE */ + + + +#define CFF_FIELD_CALLBACK( code, name, id ) \ + { \ + cff_kind_callback, \ + code | CFFCODE, \ + 0, 0, \ + cff_parse_ ## name, \ + 0, 0, \ + id \ + }, + +#define CFF_FIELD_BLEND( code, id ) \ + { \ + cff_kind_blend, \ + code | CFFCODE, \ + 0, 0, \ + cff_parse_blend, \ + 0, 0, \ + id \ + }, + +#define CFF_FIELD( code, name, id, kind ) \ + { \ + kind, \ + code | CFFCODE, \ + FT_FIELD_OFFSET( name ), \ + FT_FIELD_SIZE( name ), \ + NULL, 0, 0, \ + id \ + }, + +#define CFF_FIELD_DELTA_KIND( code, name, max, id, kind ) \ + { \ + kind, \ + code | CFFCODE, \ + FT_FIELD_OFFSET( name ), \ + FT_FIELD_SIZE_DELTA( name ), \ + NULL, \ + max, \ + FT_FIELD_OFFSET( num_ ## name ), \ + id \ + }, + + static const CFF_Field_Handler cff_field_handlers[] = + { + +#include "cfftoken.h" + + { 0, 0, 0, 0, NULL, 0, 0, NULL } + }; + + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + + FT_LOCAL_DEF( FT_Error ) + cff_parser_run( CFF_Parser parser, + FT_Byte* start, + FT_Byte* limit ) + { + FT_Byte* p = start; + FT_Error error = FT_Err_Ok; + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + PSAux_Service psaux; + + FT_Library library = parser->library; + FT_Memory memory = library->memory; +#endif + + parser->top = parser->stack; + parser->start = start; + parser->limit = limit; + parser->cursor = start; + + while ( p < limit ) + { + FT_UInt v = *p; + + + /* Opcode 31 is legacy MM T2 operator, not a number. */ + /* Opcode 255 is reserved and should not appear in fonts; */ + /* it is used internally for CFF2 blends. */ + if ( v >= 27 && v != 31 && v != 255 ) + { + /* it's a number; we will push its position on the stack */ + if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize ) + goto Stack_Overflow; + + *parser->top++ = p; + + /* now, skip it */ + if ( v == 30 ) + { + /* skip real number */ + p++; + for (;;) + { + /* An unterminated floating point number at the */ + /* end of a dictionary is invalid but harmless. */ + if ( p >= limit ) + goto Exit; + v = p[0] >> 4; + if ( v == 15 ) + break; + v = p[0] & 0xF; + if ( v == 15 ) + break; + p++; + } + } + else if ( v == 28 ) + p += 2; + else if ( v == 29 ) + p += 4; + else if ( v > 246 ) + p += 1; + } +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + else if ( v == 31 ) + { + /* a Type 2 charstring */ + + CFF_Decoder decoder; + CFF_FontRec cff_rec; + FT_Byte* charstring_base; + FT_ULong charstring_len; + + FT_Fixed* stack; + FT_Byte* q = NULL; + + + charstring_base = ++p; + + /* search `endchar' operator */ + for (;;) + { + if ( p >= limit ) + goto Exit; + if ( *p == 14 ) + break; + p++; + } + + charstring_len = (FT_ULong)( p - charstring_base ) + 1; + + /* construct CFF_Decoder object */ + FT_ZERO( &decoder ); + FT_ZERO( &cff_rec ); + + cff_rec.top_font.font_dict.num_designs = parser->num_designs; + cff_rec.top_font.font_dict.num_axes = parser->num_axes; + decoder.cff = &cff_rec; + + psaux = (PSAux_Service)FT_Get_Module_Interface( library, "psaux" ); + if ( !psaux ) + { + FT_ERROR(( "cff_parser_run: cannot access `psaux' module\n" )); + error = FT_THROW( Missing_Module ); + goto Exit; + } + + error = psaux->cff_decoder_funcs->parse_charstrings_old( + &decoder, charstring_base, charstring_len, 1 ); + if ( error ) + goto Exit; + + /* Now copy the stack data in the temporary decoder object, */ + /* converting it back to charstring number representations */ + /* (this is ugly, I know). */ + /* The maximum required size is 5 bytes per stack element. */ + if ( FT_QALLOC( q, (FT_Long)( 2 * sizeof ( FT_ListNode ) ) + + 5 * ( decoder.top - decoder.stack ) ) ) + goto Exit; + + FT_List_Add( &parser->t2_strings, (FT_ListNode)q ); + + q += 2 * sizeof ( FT_ListNode ); + + for ( stack = decoder.stack; stack < decoder.top; stack++ ) + { + FT_Long num = *stack; + + + if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize ) + goto Stack_Overflow; + + *parser->top++ = q; + + if ( num & 0xFFFFU ) + { + *q++ = 255; + *q++ = (FT_Byte)( ( num >> 24 ) & 0xFF ); + *q++ = (FT_Byte)( ( num >> 16 ) & 0xFF ); + *q++ = (FT_Byte)( ( num >> 8 ) & 0xFF ); + *q++ = (FT_Byte)( ( num ) & 0xFF ); + } + else + { + num >>= 16; + + if ( -107 <= num && num <= 107 ) + *q++ = (FT_Byte)( num + 139 ); + else if ( 108 <= num && num <= 1131 ) + { + *q++ = (FT_Byte)( ( ( num - 108 ) >> 8 ) + 247 ); + *q++ = (FT_Byte)( ( num - 108 ) & 0xFF ); + } + else if ( -1131 <= num && num <= -108 ) + { + *q++ = (FT_Byte)( ( ( -num - 108 ) >> 8 ) + 251 ); + *q++ = (FT_Byte)( ( -num - 108) & 0xFF ); + } + else + { + *q++ = 28; + *q++ = (FT_Byte)( num >> 8 ); + *q++ = (FT_Byte)( num & 0xFF ); + } + } + } + } +#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */ + else + { + /* This is not a number, hence it's an operator. Compute its code */ + /* and look for it in our current list. */ + + FT_UInt code; + FT_UInt num_args; + const CFF_Field_Handler* field; + + + if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize ) + goto Stack_Overflow; + + num_args = (FT_UInt)( parser->top - parser->stack ); + *parser->top = p; + code = v; + + if ( v == 12 ) + { + /* two byte operator */ + p++; + if ( p >= limit ) + goto Syntax_Error; + + code = 0x100 | p[0]; + } + code = code | parser->object_code; + + for ( field = cff_field_handlers; field->kind; field++ ) + { + if ( field->code == (FT_Int)code ) + { + /* we found our field's handler; read it */ + FT_Long val; + FT_Byte* q = (FT_Byte*)parser->object + field->offset; + + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE4(( " %s", field->id )); +#endif + + /* check that we have enough arguments -- except for */ + /* delta encoded arrays, which can be empty */ + if ( field->kind != cff_kind_delta && + field->kind != cff_kind_delta_fixed && num_args < 1 ) + goto Stack_Underflow; + + switch ( field->kind ) + { + case cff_kind_bool: + case cff_kind_string: + case cff_kind_num: + val = cff_parse_num( parser, parser->stack ); + goto Store_Number; + + case cff_kind_fixed: + val = cff_parse_fixed( parser, parser->stack ); + goto Store_Number; + + case cff_kind_fixed_thousand: + val = cff_parse_fixed_scaled( parser, parser->stack, 3 ); + + Store_Number: + switch ( field->size ) + { + case (8 / FT_CHAR_BIT): + *(FT_Byte*)q = (FT_Byte)val; + break; + + case (16 / FT_CHAR_BIT): + *(FT_Short*)q = (FT_Short)val; + break; + + case (32 / FT_CHAR_BIT): + *(FT_Int32*)q = (FT_Int)val; + break; + + default: /* for 64-bit systems */ + *(FT_Long*)q = val; + } + +#ifdef FT_DEBUG_LEVEL_TRACE + switch ( field->kind ) + { + case cff_kind_bool: + FT_TRACE4(( " %s\n", val ? "true" : "false" )); + break; + + case cff_kind_string: + FT_TRACE4(( " %ld (SID)\n", val )); + break; + + case cff_kind_num: + FT_TRACE4(( " %ld\n", val )); + break; + + case cff_kind_fixed: + FT_TRACE4(( " %f\n", (double)val / 65536 )); + break; + + case cff_kind_fixed_thousand: + FT_TRACE4(( " %f\n", (double)val / 65536 / 1000 )); + break; + + default: + ; /* never reached */ + } +#endif + + break; + + case cff_kind_delta: + { + FT_Byte* qcount = (FT_Byte*)parser->object + + field->count_offset; + + FT_Byte** data = parser->stack; + + + if ( num_args > field->array_max ) + num_args = field->array_max; + + FT_TRACE4(( " [" )); + + /* store count */ + *qcount = (FT_Byte)num_args; + + val = 0; + while ( num_args > 0 ) + { + val = ADD_LONG( val, cff_parse_num( parser, data++ ) ); + switch ( field->size ) + { + case (8 / FT_CHAR_BIT): + *(FT_Byte*)q = (FT_Byte)val; + break; + + case (16 / FT_CHAR_BIT): + *(FT_Short*)q = (FT_Short)val; + break; + + case (32 / FT_CHAR_BIT): + *(FT_Int32*)q = (FT_Int)val; + break; + + default: /* for 64-bit systems */ + *(FT_Long*)q = val; + } + + FT_TRACE4(( " %ld", val )); + + q += field->size; + num_args--; + } + + FT_TRACE4(( "]\n" )); + } + break; + + case cff_kind_delta_fixed: + { + FT_Byte* qcount = (FT_Byte*)parser->object + + field->count_offset; + + FT_Byte** data = parser->stack; + + + if ( num_args > field->array_max ) + num_args = field->array_max; + + FT_TRACE4(( " [" )); + + /* store count */ + *qcount = (FT_Byte)num_args; + + val = 0; + while ( num_args > 0 ) + { + val = ADD_LONG( val, cff_parse_fixed( parser, data++ ) ); + *(FT_Long*)q = val; + + FT_TRACE4(( " %f\n", (double)val / 65536 )); + + q += field->size; + num_args--; + } + + FT_TRACE4(( "]\n" )); + } + break; + + default: /* callback or blend */ + error = field->reader( parser ); + if ( error ) + goto Exit; + } + goto Found; + } + } + + /* this is an unknown operator, or it is unsupported; */ + /* we will ignore it for now. */ + + Found: + /* clear stack */ + /* TODO: could clear blend stack here, */ + /* but we don't have access to subFont */ + if ( field->kind != cff_kind_blend ) + parser->top = parser->stack; + } + p++; + } /* while ( p < limit ) */ + + Exit: + return error; + + Stack_Overflow: + error = FT_THROW( Invalid_Argument ); + goto Exit; + + Stack_Underflow: + error = FT_THROW( Invalid_Argument ); + goto Exit; + + Syntax_Error: + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cffparse.h b/non-source/foreign/freetype2/src/cff/cffparse.h new file mode 100644 index 000000000..ca6b18af6 --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cffparse.h @@ -0,0 +1,144 @@ +/**************************************************************************** + * + * cffparse.h + * + * CFF token stream parser (specification) + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFPARSE_H_ +#define CFFPARSE_H_ + + +#include <freetype/internal/cfftypes.h> +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + + + /* CFF uses constant parser stack size; */ + /* CFF2 can increase from default 193 */ +#define CFF_MAX_STACK_DEPTH 96 + + /* + * There are plans to remove the `maxstack' operator in a forthcoming + * revision of the CFF2 specification, increasing the (then static) stack + * size to 513. By making the default stack size equal to the maximum + * stack size, the operator is essentially disabled, which has the + * desired effect in FreeType. + */ +#define CFF2_MAX_STACK 513 +#define CFF2_DEFAULT_STACK 513 + +#define CFF_CODE_TOPDICT 0x1000 +#define CFF_CODE_PRIVATE 0x2000 +#define CFF2_CODE_TOPDICT 0x3000 +#define CFF2_CODE_FONTDICT 0x4000 +#define CFF2_CODE_PRIVATE 0x5000 + + + typedef struct CFF_ParserRec_ + { + FT_Library library; + FT_Byte* start; + FT_Byte* limit; + FT_Byte* cursor; + + FT_Byte** stack; + FT_Byte** top; + FT_UInt stackSize; /* allocated size */ + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + FT_ListRec t2_strings; +#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */ + + FT_UInt object_code; + void* object; + + FT_UShort num_designs; /* a copy of `CFF_FontRecDict->num_designs' */ + FT_UShort num_axes; /* a copy of `CFF_FontRecDict->num_axes' */ + + } CFF_ParserRec, *CFF_Parser; + + + FT_LOCAL( FT_Long ) + cff_parse_num( CFF_Parser parser, + FT_Byte** d ); + + FT_LOCAL( FT_Fixed ) + cff_parse_fixed( CFF_Parser parser, + FT_Byte** d ); + + FT_LOCAL( FT_Error ) + cff_parser_init( CFF_Parser parser, + FT_UInt code, + void* object, + FT_Library library, + FT_UInt stackSize, + FT_UShort num_designs, + FT_UShort num_axes ); + + FT_LOCAL( void ) + cff_parser_done( CFF_Parser parser ); + + FT_LOCAL( FT_Error ) + cff_parser_run( CFF_Parser parser, + FT_Byte* start, + FT_Byte* limit ); + + + enum + { + cff_kind_none = 0, + cff_kind_num, + cff_kind_fixed, + cff_kind_fixed_thousand, + cff_kind_string, + cff_kind_bool, + cff_kind_delta, + cff_kind_delta_fixed, + cff_kind_callback, + cff_kind_blend, + + cff_kind_max /* do not remove */ + }; + + + /* now generate handlers for the most simple fields */ + typedef FT_Error (*CFF_Field_Reader)( CFF_Parser parser ); + + typedef struct CFF_Field_Handler_ + { + int kind; + int code; + FT_UInt offset; + FT_Byte size; + CFF_Field_Reader reader; + FT_UInt array_max; + FT_UInt count_offset; + +#ifdef FT_DEBUG_LEVEL_TRACE + const char* id; +#endif + + } CFF_Field_Handler; + + +FT_END_HEADER + + +#endif /* CFFPARSE_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/cff/cfftoken.h b/non-source/foreign/freetype2/src/cff/cfftoken.h new file mode 100644 index 000000000..da45faa7f --- /dev/null +++ b/non-source/foreign/freetype2/src/cff/cfftoken.h @@ -0,0 +1,150 @@ +/**************************************************************************** + * + * cfftoken.h + * + * CFF token definitions (specification only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#undef FT_STRUCTURE +#define FT_STRUCTURE CFF_FontRecDictRec + +#undef CFFCODE +#define CFFCODE CFF_CODE_TOPDICT + + CFF_FIELD_STRING ( 0, version, "Version" ) + CFF_FIELD_STRING ( 1, notice, "Notice" ) + CFF_FIELD_STRING ( 0x100, copyright, "Copyright" ) + CFF_FIELD_STRING ( 2, full_name, "FullName" ) + CFF_FIELD_STRING ( 3, family_name, "FamilyName" ) + CFF_FIELD_STRING ( 4, weight, "Weight" ) + CFF_FIELD_BOOL ( 0x101, is_fixed_pitch, "isFixedPitch" ) + CFF_FIELD_FIXED ( 0x102, italic_angle, "ItalicAngle" ) + CFF_FIELD_FIXED ( 0x103, underline_position, "UnderlinePosition" ) + CFF_FIELD_FIXED ( 0x104, underline_thickness, "UnderlineThickness" ) + CFF_FIELD_NUM ( 0x105, paint_type, "PaintType" ) + CFF_FIELD_NUM ( 0x106, charstring_type, "CharstringType" ) + CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" ) + CFF_FIELD_NUM ( 13, unique_id, "UniqueID" ) + CFF_FIELD_CALLBACK( 5, font_bbox, "FontBBox" ) + CFF_FIELD_NUM ( 0x108, stroke_width, "StrokeWidth" ) +#if 0 + CFF_FIELD_DELTA ( 14, xuid, 16, "XUID" ) +#endif + CFF_FIELD_NUM ( 15, charset_offset, "charset" ) + CFF_FIELD_NUM ( 16, encoding_offset, "Encoding" ) + CFF_FIELD_NUM ( 17, charstrings_offset, "CharStrings" ) + CFF_FIELD_CALLBACK( 18, private_dict, "Private" ) + CFF_FIELD_NUM ( 0x114, synthetic_base, "SyntheticBase" ) + CFF_FIELD_STRING ( 0x115, embedded_postscript, "PostScript" ) + +#if 0 + CFF_FIELD_STRING ( 0x116, base_font_name, "BaseFontName" ) + CFF_FIELD_DELTA ( 0x117, base_font_blend, 16, "BaseFontBlend" ) +#endif + + /* the next two operators were removed from the Type2 specification */ + /* in version 16-March-2000 */ + CFF_FIELD_CALLBACK( 0x118, multiple_master, "MultipleMaster" ) +#if 0 + CFF_FIELD_CALLBACK( 0x11A, blend_axis_types, "BlendAxisTypes" ) +#endif + + CFF_FIELD_CALLBACK( 0x11E, cid_ros, "ROS" ) + CFF_FIELD_NUM ( 0x11F, cid_font_version, "CIDFontVersion" ) + CFF_FIELD_NUM ( 0x120, cid_font_revision, "CIDFontRevision" ) + CFF_FIELD_NUM ( 0x121, cid_font_type, "CIDFontType" ) + CFF_FIELD_NUM ( 0x122, cid_count, "CIDCount" ) + CFF_FIELD_NUM ( 0x123, cid_uid_base, "UIDBase" ) + CFF_FIELD_NUM ( 0x124, cid_fd_array_offset, "FDArray" ) + CFF_FIELD_NUM ( 0x125, cid_fd_select_offset, "FDSelect" ) + CFF_FIELD_STRING ( 0x126, cid_font_name, "FontName" ) + +#if 0 + CFF_FIELD_NUM ( 0x127, chameleon, "Chameleon" ) +#endif + + +#undef FT_STRUCTURE +#define FT_STRUCTURE CFF_PrivateRec +#undef CFFCODE +#define CFFCODE CFF_CODE_PRIVATE + + CFF_FIELD_DELTA_FIXED( 6, blue_values, 14, "BlueValues" ) + CFF_FIELD_DELTA_FIXED( 7, other_blues, 10, "OtherBlues" ) + CFF_FIELD_DELTA_FIXED( 8, family_blues, 14, "FamilyBlues" ) + CFF_FIELD_DELTA_FIXED( 9, family_other_blues, 10, "FamilyOtherBlues" ) + CFF_FIELD_FIXED_1000 ( 0x109, blue_scale, "BlueScale" ) + CFF_FIELD_NUM ( 0x10A, blue_shift, "BlueShift" ) + CFF_FIELD_NUM ( 0x10B, blue_fuzz, "BlueFuzz" ) + CFF_FIELD_NUM ( 10, standard_width, "StdHW" ) + CFF_FIELD_NUM ( 11, standard_height, "StdVW" ) + CFF_FIELD_DELTA ( 0x10C, snap_widths, 13, "StemSnapH" ) + CFF_FIELD_DELTA ( 0x10D, snap_heights, 13, "StemSnapV" ) + CFF_FIELD_BOOL ( 0x10E, force_bold, "ForceBold" ) + CFF_FIELD_FIXED ( 0x10F, force_bold_threshold, "ForceBoldThreshold" ) + CFF_FIELD_NUM ( 0x110, lenIV, "lenIV" ) + CFF_FIELD_NUM ( 0x111, language_group, "LanguageGroup" ) + CFF_FIELD_FIXED ( 0x112, expansion_factor, "ExpansionFactor" ) + CFF_FIELD_NUM ( 0x113, initial_random_seed, "initialRandomSeed" ) + CFF_FIELD_NUM ( 19, local_subrs_offset, "Subrs" ) + CFF_FIELD_NUM ( 20, default_width, "defaultWidthX" ) + CFF_FIELD_NUM ( 21, nominal_width, "nominalWidthX" ) + + +#undef FT_STRUCTURE +#define FT_STRUCTURE CFF_FontRecDictRec +#undef CFFCODE +#define CFFCODE CFF2_CODE_TOPDICT + + CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" ) + CFF_FIELD_NUM ( 17, charstrings_offset, "CharStrings" ) + CFF_FIELD_NUM ( 0x124, cid_fd_array_offset, "FDArray" ) + CFF_FIELD_NUM ( 0x125, cid_fd_select_offset, "FDSelect" ) + CFF_FIELD_NUM ( 24, vstore_offset, "vstore" ) + CFF_FIELD_CALLBACK( 25, maxstack, "maxstack" ) + + +#undef FT_STRUCTURE +#define FT_STRUCTURE CFF_FontRecDictRec +#undef CFFCODE +#define CFFCODE CFF2_CODE_FONTDICT + + CFF_FIELD_CALLBACK( 18, private_dict, "Private" ) + CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" ) + + +#undef FT_STRUCTURE +#define FT_STRUCTURE CFF_PrivateRec +#undef CFFCODE +#define CFFCODE CFF2_CODE_PRIVATE + + CFF_FIELD_DELTA_FIXED( 6, blue_values, 14, "BlueValues" ) + CFF_FIELD_DELTA_FIXED( 7, other_blues, 10, "OtherBlues" ) + CFF_FIELD_DELTA_FIXED( 8, family_blues, 14, "FamilyBlues" ) + CFF_FIELD_DELTA_FIXED( 9, family_other_blues, 10, "FamilyOtherBlues" ) + CFF_FIELD_FIXED_1000 ( 0x109, blue_scale, "BlueScale" ) + CFF_FIELD_NUM ( 0x10A, blue_shift, "BlueShift" ) + CFF_FIELD_NUM ( 0x10B, blue_fuzz, "BlueFuzz" ) + CFF_FIELD_NUM ( 10, standard_width, "StdHW" ) + CFF_FIELD_NUM ( 11, standard_height, "StdVW" ) + CFF_FIELD_DELTA ( 0x10C, snap_widths, 13, "StemSnapH" ) + CFF_FIELD_DELTA ( 0x10D, snap_heights, 13, "StemSnapV" ) + CFF_FIELD_NUM ( 0x111, language_group, "LanguageGroup" ) + CFF_FIELD_FIXED ( 0x112, expansion_factor, "ExpansionFactor" ) + CFF_FIELD_CALLBACK ( 22, vsindex, "vsindex" ) + CFF_FIELD_BLEND ( 23, "blend" ) + CFF_FIELD_NUM ( 19, local_subrs_offset, "Subrs" ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/afmparse.c b/non-source/foreign/freetype2/src/psaux/afmparse.c new file mode 100644 index 000000000..e2f6a8e5a --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/afmparse.c @@ -0,0 +1,1094 @@ +/**************************************************************************** + * + * afmparse.c + * + * AFM parser (body). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +#include <freetype/freetype.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/psaux.h> + +#ifndef T1_CONFIG_OPTION_NO_AFM + +#include "afmparse.h" +#include "psconv.h" + +#include "psauxerr.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT afmparse + + + /************************************************************************** + * + * AFM_Stream + * + * The use of AFM_Stream is largely inspired by parseAFM.[ch] from t1lib. + * + */ + + enum + { + AFM_STREAM_STATUS_NORMAL, + AFM_STREAM_STATUS_EOC, + AFM_STREAM_STATUS_EOL, + AFM_STREAM_STATUS_EOF + }; + + + typedef struct AFM_StreamRec_ + { + FT_Byte* cursor; + FT_Byte* base; + FT_Byte* limit; + + FT_Int status; + + } AFM_StreamRec; + + +#ifndef EOF +#define EOF -1 +#endif + + + /* this works because empty lines are ignored */ +#define AFM_IS_NEWLINE( ch ) ( (ch) == '\r' || (ch) == '\n' ) + +#define AFM_IS_EOF( ch ) ( (ch) == EOF || (ch) == '\x1a' ) +#define AFM_IS_SPACE( ch ) ( (ch) == ' ' || (ch) == '\t' ) + + /* column separator; there is no `column' in the spec actually */ +#define AFM_IS_SEP( ch ) ( (ch) == ';' ) + +#define AFM_GETC() \ + ( ( (stream)->cursor < (stream)->limit ) ? *(stream)->cursor++ \ + : EOF ) + +#define AFM_STREAM_KEY_BEGIN( stream ) \ + (char*)( (stream)->cursor - 1 ) + +#define AFM_STREAM_KEY_LEN( stream, key ) \ + (FT_Offset)( (char*)(stream)->cursor - key - 1 ) + +#define AFM_STATUS_EOC( stream ) \ + ( (stream)->status >= AFM_STREAM_STATUS_EOC ) + +#define AFM_STATUS_EOL( stream ) \ + ( (stream)->status >= AFM_STREAM_STATUS_EOL ) + +#define AFM_STATUS_EOF( stream ) \ + ( (stream)->status >= AFM_STREAM_STATUS_EOF ) + + + static int + afm_stream_skip_spaces( AFM_Stream stream ) + { + int ch = 0; /* make stupid compiler happy */ + + + if ( AFM_STATUS_EOC( stream ) ) + return ';'; + + while ( 1 ) + { + ch = AFM_GETC(); + if ( !AFM_IS_SPACE( ch ) ) + break; + } + + if ( AFM_IS_NEWLINE( ch ) ) + stream->status = AFM_STREAM_STATUS_EOL; + else if ( AFM_IS_SEP( ch ) ) + stream->status = AFM_STREAM_STATUS_EOC; + else if ( AFM_IS_EOF( ch ) ) + stream->status = AFM_STREAM_STATUS_EOF; + + return ch; + } + + + /* read a key or value in current column */ + static char* + afm_stream_read_one( AFM_Stream stream ) + { + char* str; + + + afm_stream_skip_spaces( stream ); + if ( AFM_STATUS_EOC( stream ) ) + return NULL; + + str = AFM_STREAM_KEY_BEGIN( stream ); + + while ( 1 ) + { + int ch = AFM_GETC(); + + + if ( AFM_IS_SPACE( ch ) ) + break; + else if ( AFM_IS_NEWLINE( ch ) ) + { + stream->status = AFM_STREAM_STATUS_EOL; + break; + } + else if ( AFM_IS_SEP( ch ) ) + { + stream->status = AFM_STREAM_STATUS_EOC; + break; + } + else if ( AFM_IS_EOF( ch ) ) + { + stream->status = AFM_STREAM_STATUS_EOF; + break; + } + } + + return str; + } + + + /* read a string (i.e., read to EOL) */ + static char* + afm_stream_read_string( AFM_Stream stream ) + { + char* str; + + + afm_stream_skip_spaces( stream ); + if ( AFM_STATUS_EOL( stream ) ) + return NULL; + + str = AFM_STREAM_KEY_BEGIN( stream ); + + /* scan to eol */ + while ( 1 ) + { + int ch = AFM_GETC(); + + + if ( AFM_IS_NEWLINE( ch ) ) + { + stream->status = AFM_STREAM_STATUS_EOL; + break; + } + else if ( AFM_IS_EOF( ch ) ) + { + stream->status = AFM_STREAM_STATUS_EOF; + break; + } + } + + return str; + } + + + /************************************************************************** + * + * AFM_Parser + * + */ + + /* all keys defined in Ch. 7-10 of 5004.AFM_Spec.pdf */ + typedef enum AFM_Token_ + { + AFM_TOKEN_ASCENDER, + AFM_TOKEN_AXISLABEL, + AFM_TOKEN_AXISTYPE, + AFM_TOKEN_B, + AFM_TOKEN_BLENDAXISTYPES, + AFM_TOKEN_BLENDDESIGNMAP, + AFM_TOKEN_BLENDDESIGNPOSITIONS, + AFM_TOKEN_C, + AFM_TOKEN_CC, + AFM_TOKEN_CH, + AFM_TOKEN_CAPHEIGHT, + AFM_TOKEN_CHARWIDTH, + AFM_TOKEN_CHARACTERSET, + AFM_TOKEN_CHARACTERS, + AFM_TOKEN_DESCENDER, + AFM_TOKEN_ENCODINGSCHEME, + AFM_TOKEN_ENDAXIS, + AFM_TOKEN_ENDCHARMETRICS, + AFM_TOKEN_ENDCOMPOSITES, + AFM_TOKEN_ENDDIRECTION, + AFM_TOKEN_ENDFONTMETRICS, + AFM_TOKEN_ENDKERNDATA, + AFM_TOKEN_ENDKERNPAIRS, + AFM_TOKEN_ENDTRACKKERN, + AFM_TOKEN_ESCCHAR, + AFM_TOKEN_FAMILYNAME, + AFM_TOKEN_FONTBBOX, + AFM_TOKEN_FONTNAME, + AFM_TOKEN_FULLNAME, + AFM_TOKEN_ISBASEFONT, + AFM_TOKEN_ISCIDFONT, + AFM_TOKEN_ISFIXEDPITCH, + AFM_TOKEN_ISFIXEDV, + AFM_TOKEN_ITALICANGLE, + AFM_TOKEN_KP, + AFM_TOKEN_KPH, + AFM_TOKEN_KPX, + AFM_TOKEN_KPY, + AFM_TOKEN_L, + AFM_TOKEN_MAPPINGSCHEME, + AFM_TOKEN_METRICSSETS, + AFM_TOKEN_N, + AFM_TOKEN_NOTICE, + AFM_TOKEN_PCC, + AFM_TOKEN_STARTAXIS, + AFM_TOKEN_STARTCHARMETRICS, + AFM_TOKEN_STARTCOMPOSITES, + AFM_TOKEN_STARTDIRECTION, + AFM_TOKEN_STARTFONTMETRICS, + AFM_TOKEN_STARTKERNDATA, + AFM_TOKEN_STARTKERNPAIRS, + AFM_TOKEN_STARTKERNPAIRS0, + AFM_TOKEN_STARTKERNPAIRS1, + AFM_TOKEN_STARTTRACKKERN, + AFM_TOKEN_STDHW, + AFM_TOKEN_STDVW, + AFM_TOKEN_TRACKKERN, + AFM_TOKEN_UNDERLINEPOSITION, + AFM_TOKEN_UNDERLINETHICKNESS, + AFM_TOKEN_VV, + AFM_TOKEN_VVECTOR, + AFM_TOKEN_VERSION, + AFM_TOKEN_W, + AFM_TOKEN_W0, + AFM_TOKEN_W0X, + AFM_TOKEN_W0Y, + AFM_TOKEN_W1, + AFM_TOKEN_W1X, + AFM_TOKEN_W1Y, + AFM_TOKEN_WX, + AFM_TOKEN_WY, + AFM_TOKEN_WEIGHT, + AFM_TOKEN_WEIGHTVECTOR, + AFM_TOKEN_XHEIGHT, + N_AFM_TOKENS, + AFM_TOKEN_UNKNOWN + + } AFM_Token; + + + static const char* const afm_key_table[N_AFM_TOKENS] = + { + "Ascender", + "AxisLabel", + "AxisType", + "B", + "BlendAxisTypes", + "BlendDesignMap", + "BlendDesignPositions", + "C", + "CC", + "CH", + "CapHeight", + "CharWidth", + "CharacterSet", + "Characters", + "Descender", + "EncodingScheme", + "EndAxis", + "EndCharMetrics", + "EndComposites", + "EndDirection", + "EndFontMetrics", + "EndKernData", + "EndKernPairs", + "EndTrackKern", + "EscChar", + "FamilyName", + "FontBBox", + "FontName", + "FullName", + "IsBaseFont", + "IsCIDFont", + "IsFixedPitch", + "IsFixedV", + "ItalicAngle", + "KP", + "KPH", + "KPX", + "KPY", + "L", + "MappingScheme", + "MetricsSets", + "N", + "Notice", + "PCC", + "StartAxis", + "StartCharMetrics", + "StartComposites", + "StartDirection", + "StartFontMetrics", + "StartKernData", + "StartKernPairs", + "StartKernPairs0", + "StartKernPairs1", + "StartTrackKern", + "StdHW", + "StdVW", + "TrackKern", + "UnderlinePosition", + "UnderlineThickness", + "VV", + "VVector", + "Version", + "W", + "W0", + "W0X", + "W0Y", + "W1", + "W1X", + "W1Y", + "WX", + "WY", + "Weight", + "WeightVector", + "XHeight" + }; + + + /* + * `afm_parser_read_vals' and `afm_parser_next_key' provide + * high-level operations to an AFM_Stream. The rest of the + * parser functions should use them without accessing the + * AFM_Stream directly. + */ + + FT_LOCAL_DEF( FT_Int ) + afm_parser_read_vals( AFM_Parser parser, + AFM_Value vals, + FT_Int n ) + { + AFM_Stream stream = parser->stream; + char* str; + FT_Int i; + + + if ( n > AFM_MAX_ARGUMENTS ) + return 0; + + for ( i = 0; i < n; i++ ) + { + FT_Offset len; + AFM_Value val = vals + i; + + + if ( val->type == AFM_VALUE_TYPE_STRING ) + str = afm_stream_read_string( stream ); + else + str = afm_stream_read_one( stream ); + + if ( !str ) + break; + + len = AFM_STREAM_KEY_LEN( stream, str ); + + switch ( val->type ) + { + case AFM_VALUE_TYPE_STRING: + case AFM_VALUE_TYPE_NAME: + { + FT_Memory memory = parser->memory; + FT_Error error; + + + if ( !FT_QALLOC( val->u.s, len + 1 ) ) + { + ft_memcpy( val->u.s, str, len ); + val->u.s[len] = '\0'; + } + } + break; + + case AFM_VALUE_TYPE_FIXED: + val->u.f = PS_Conv_ToFixed( (FT_Byte**)(void*)&str, + (FT_Byte*)str + len, 0 ); + break; + + case AFM_VALUE_TYPE_INTEGER: + val->u.i = PS_Conv_ToInt( (FT_Byte**)(void*)&str, + (FT_Byte*)str + len ); + break; + + case AFM_VALUE_TYPE_BOOL: + val->u.b = FT_BOOL( len == 4 && + !ft_strncmp( str, "true", 4 ) ); + break; + + case AFM_VALUE_TYPE_INDEX: + if ( parser->get_index ) + val->u.i = parser->get_index( str, len, parser->user_data ); + else + val->u.i = 0; + break; + } + } + + return i; + } + + + FT_LOCAL_DEF( char* ) + afm_parser_next_key( AFM_Parser parser, + FT_Bool line, + FT_Offset* len ) + { + AFM_Stream stream = parser->stream; + char* key = NULL; /* make stupid compiler happy */ + + + if ( line ) + { + while ( 1 ) + { + /* skip current line */ + if ( !AFM_STATUS_EOL( stream ) ) + afm_stream_read_string( stream ); + + stream->status = AFM_STREAM_STATUS_NORMAL; + key = afm_stream_read_one( stream ); + + /* skip empty line */ + if ( !key && + !AFM_STATUS_EOF( stream ) && + AFM_STATUS_EOL( stream ) ) + continue; + + break; + } + } + else + { + while ( 1 ) + { + /* skip current column */ + while ( !AFM_STATUS_EOC( stream ) ) + afm_stream_read_one( stream ); + + stream->status = AFM_STREAM_STATUS_NORMAL; + key = afm_stream_read_one( stream ); + + /* skip empty column */ + if ( !key && + !AFM_STATUS_EOF( stream ) && + AFM_STATUS_EOC( stream ) ) + continue; + + break; + } + } + + if ( len ) + *len = ( key ) ? (FT_Offset)AFM_STREAM_KEY_LEN( stream, key ) + : 0; + + return key; + } + + + static AFM_Token + afm_tokenize( const char* key, + FT_Offset len ) + { + int n; + + + for ( n = 0; n < N_AFM_TOKENS; n++ ) + { + if ( *( afm_key_table[n] ) == *key ) + { + for ( ; n < N_AFM_TOKENS; n++ ) + { + if ( *( afm_key_table[n] ) != *key ) + return AFM_TOKEN_UNKNOWN; + + if ( ft_strncmp( afm_key_table[n], key, len ) == 0 ) + return (AFM_Token) n; + } + } + } + + return AFM_TOKEN_UNKNOWN; + } + + + FT_LOCAL_DEF( FT_Error ) + afm_parser_init( AFM_Parser parser, + FT_Memory memory, + FT_Byte* base, + FT_Byte* limit ) + { + AFM_Stream stream = NULL; + FT_Error error; + + + if ( FT_NEW( stream ) ) + return error; + + stream->cursor = stream->base = base; + stream->limit = limit; + + /* don't skip the first line during the first call */ + stream->status = AFM_STREAM_STATUS_EOL; + + parser->memory = memory; + parser->stream = stream; + parser->FontInfo = NULL; + parser->get_index = NULL; + + return FT_Err_Ok; + } + + + FT_LOCAL_DEF( void ) + afm_parser_done( AFM_Parser parser ) + { + FT_Memory memory = parser->memory; + + + FT_FREE( parser->stream ); + } + + + static FT_Error + afm_parser_read_int( AFM_Parser parser, + FT_Int* aint ) + { + AFM_ValueRec val; + + + val.type = AFM_VALUE_TYPE_INTEGER; + + if ( afm_parser_read_vals( parser, &val, 1 ) == 1 ) + { + *aint = val.u.i; + + return FT_Err_Ok; + } + else + return FT_THROW( Syntax_Error ); + } + + + static FT_Error + afm_parse_track_kern( AFM_Parser parser ) + { + AFM_FontInfo fi = parser->FontInfo; + AFM_Stream stream = parser->stream; + AFM_TrackKern tk; + + char* key; + FT_Offset len; + int n = -1; + FT_Int tmp; + + + if ( afm_parser_read_int( parser, &tmp ) ) + goto Fail; + + if ( tmp < 0 ) + { + FT_ERROR(( "afm_parse_track_kern: invalid number of track kerns\n" )); + goto Fail; + } + + fi->NumTrackKern = (FT_UInt)tmp; + FT_TRACE3(( "afm_parse_track_kern: %u track kern%s expected\n", + fi->NumTrackKern, + fi->NumTrackKern == 1 ? "" : "s" )); + + /* Rough sanity check: The minimum line length of the `TrackKern` */ + /* command is 20 characters (including the EOL character). */ + if ( (FT_ULong)( stream->limit - stream->cursor ) / 20 < + fi->NumTrackKern ) + { + FT_ERROR(( "afm_parse_track_kern:" + " number of track kern entries exceeds stream size\n" )); + goto Fail; + } + + if ( fi->NumTrackKern ) + { + FT_Memory memory = parser->memory; + FT_Error error; + + + if ( FT_QNEW_ARRAY( fi->TrackKerns, fi->NumTrackKern ) ) + return error; + } + + while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) + { + AFM_ValueRec shared_vals[5]; + + + switch ( afm_tokenize( key, len ) ) + { + case AFM_TOKEN_TRACKKERN: + n++; + + if ( n >= (int)fi->NumTrackKern ) + { + FT_ERROR(( "afm_parse_track_kern: too many track kern data\n" )); + goto Fail; + } + + tk = fi->TrackKerns + n; + + shared_vals[0].type = AFM_VALUE_TYPE_INTEGER; + shared_vals[1].type = AFM_VALUE_TYPE_FIXED; + shared_vals[2].type = AFM_VALUE_TYPE_FIXED; + shared_vals[3].type = AFM_VALUE_TYPE_FIXED; + shared_vals[4].type = AFM_VALUE_TYPE_FIXED; + if ( afm_parser_read_vals( parser, shared_vals, 5 ) != 5 ) + { + FT_ERROR(( "afm_parse_track_kern:" + " insufficient number of parameters for entry %d\n", + n )); + goto Fail; + } + + tk->degree = shared_vals[0].u.i; + tk->min_ptsize = shared_vals[1].u.f; + tk->min_kern = shared_vals[2].u.f; + tk->max_ptsize = shared_vals[3].u.f; + tk->max_kern = shared_vals[4].u.f; + + break; + + case AFM_TOKEN_ENDTRACKKERN: + case AFM_TOKEN_ENDKERNDATA: + case AFM_TOKEN_ENDFONTMETRICS: + tmp = n + 1; + if ( (FT_UInt)tmp != fi->NumTrackKern ) + { + FT_TRACE1(( "afm_parse_track_kern: %s%d track kern entr%s seen\n", + tmp == 0 ? "" : "only ", + tmp, + tmp == 1 ? "y" : "ies" )); + fi->NumTrackKern = (FT_UInt)tmp; + } + else + FT_TRACE3(( "afm_parse_track_kern: %d track kern entr%s seen\n", + tmp, + tmp == 1 ? "y" : "ies" )); + return FT_Err_Ok; + + case AFM_TOKEN_UNKNOWN: + break; + + default: + goto Fail; + } + } + + Fail: + return FT_THROW( Syntax_Error ); + } + + +#undef KERN_INDEX +#define KERN_INDEX( g1, g2 ) ( ( (FT_ULong)g1 << 16 ) | g2 ) + + + /* compare two kerning pairs */ + FT_COMPARE_DEF( int ) + afm_compare_kern_pairs( const void* a, + const void* b ) + { + AFM_KernPair kp1 = (AFM_KernPair)a; + AFM_KernPair kp2 = (AFM_KernPair)b; + + FT_ULong index1 = KERN_INDEX( kp1->index1, kp1->index2 ); + FT_ULong index2 = KERN_INDEX( kp2->index1, kp2->index2 ); + + + if ( index1 > index2 ) + return 1; + else if ( index1 < index2 ) + return -1; + else + return 0; + } + + + static FT_Error + afm_parse_kern_pairs( AFM_Parser parser ) + { + AFM_FontInfo fi = parser->FontInfo; + AFM_Stream stream = parser->stream; + AFM_KernPair kp; + char* key; + FT_Offset len; + int n = -1; + FT_Int tmp; + + + if ( afm_parser_read_int( parser, &tmp ) ) + goto Fail; + + if ( tmp < 0 ) + { + FT_ERROR(( "afm_parse_kern_pairs: invalid number of kern pairs\n" )); + goto Fail; + } + + fi->NumKernPair = (FT_UInt)tmp; + FT_TRACE3(( "afm_parse_kern_pairs: %u kern pair%s expected\n", + fi->NumKernPair, + fi->NumKernPair == 1 ? "" : "s" )); + + /* Rough sanity check: The minimum line length of the `KP`, */ + /* `KPH`,`KPX`, and `KPY` commands is 10 characters (including */ + /* the EOL character). */ + if ( (FT_ULong)( stream->limit - stream->cursor ) / 10 < + fi->NumKernPair ) + { + FT_ERROR(( "afm_parse_kern_pairs:" + " number of kern pairs exceeds stream size\n" )); + goto Fail; + } + + if ( fi->NumKernPair ) + { + FT_Memory memory = parser->memory; + FT_Error error; + + + if ( FT_QNEW_ARRAY( fi->KernPairs, fi->NumKernPair ) ) + return error; + } + + while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) + { + AFM_Token token = afm_tokenize( key, len ); + + + switch ( token ) + { + case AFM_TOKEN_KP: + case AFM_TOKEN_KPX: + case AFM_TOKEN_KPY: + { + FT_Int r; + AFM_ValueRec shared_vals[4]; + + + n++; + + if ( n >= (int)fi->NumKernPair ) + { + FT_ERROR(( "afm_parse_kern_pairs: too many kern pairs\n" )); + goto Fail; + } + + kp = fi->KernPairs + n; + + shared_vals[0].type = AFM_VALUE_TYPE_INDEX; + shared_vals[1].type = AFM_VALUE_TYPE_INDEX; + shared_vals[2].type = AFM_VALUE_TYPE_INTEGER; + shared_vals[3].type = AFM_VALUE_TYPE_INTEGER; + r = afm_parser_read_vals( parser, shared_vals, 4 ); + if ( r < 3 ) + { + FT_ERROR(( "afm_parse_kern_pairs:" + " insufficient number of parameters for entry %d\n", + n )); + goto Fail; + } + + /* index values can't be negative */ + kp->index1 = shared_vals[0].u.u; + kp->index2 = shared_vals[1].u.u; + if ( token == AFM_TOKEN_KPY ) + { + kp->x = 0; + kp->y = shared_vals[2].u.i; + } + else + { + kp->x = shared_vals[2].u.i; + kp->y = ( token == AFM_TOKEN_KP && r == 4 ) + ? shared_vals[3].u.i : 0; + } + } + break; + + case AFM_TOKEN_ENDKERNPAIRS: + case AFM_TOKEN_ENDKERNDATA: + case AFM_TOKEN_ENDFONTMETRICS: + tmp = n + 1; + if ( (FT_UInt)tmp != fi->NumKernPair ) + { + FT_TRACE1(( "afm_parse_kern_pairs: %s%d kern pair%s seen\n", + tmp == 0 ? "" : "only ", + tmp, + tmp == 1 ? "" : "s" )); + fi->NumKernPair = (FT_UInt)tmp; + } + else + FT_TRACE3(( "afm_parse_kern_pairs: %d kern pair%s seen\n", + tmp, + tmp == 1 ? "" : "s" )); + + ft_qsort( fi->KernPairs, fi->NumKernPair, + sizeof ( AFM_KernPairRec ), + afm_compare_kern_pairs ); + return FT_Err_Ok; + + case AFM_TOKEN_UNKNOWN: + break; + + default: + goto Fail; + } + } + + Fail: + return FT_THROW( Syntax_Error ); + } + + + static FT_Error + afm_parse_kern_data( AFM_Parser parser ) + { + FT_Error error; + char* key; + FT_Offset len; + + int have_trackkern = 0; + int have_kernpairs = 0; + + + while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) + { + switch ( afm_tokenize( key, len ) ) + { + case AFM_TOKEN_STARTTRACKKERN: + if ( have_trackkern ) + { + FT_ERROR(( "afm_parse_kern_data:" + " invalid second horizontal track kern section\n" )); + goto Fail; + } + + error = afm_parse_track_kern( parser ); + if ( error ) + return error; + + have_trackkern = 1; + break; + + case AFM_TOKEN_STARTKERNPAIRS: + case AFM_TOKEN_STARTKERNPAIRS0: + if ( have_kernpairs ) + { + FT_ERROR(( "afm_parse_kern_data:" + " invalid second horizontal kern pair section\n" )); + goto Fail; + } + + error = afm_parse_kern_pairs( parser ); + if ( error ) + return error; + + have_kernpairs = 1; + break; + + case AFM_TOKEN_ENDKERNDATA: + case AFM_TOKEN_ENDFONTMETRICS: + return FT_Err_Ok; + + case AFM_TOKEN_UNKNOWN: + break; + + default: + goto Fail; + } + } + + Fail: + return FT_THROW( Syntax_Error ); + } + + + static FT_Error + afm_parser_skip_section( AFM_Parser parser, + FT_Int n, + AFM_Token end_section ) + { + char* key; + FT_Offset len; + + + while ( n-- > 0 ) + { + key = afm_parser_next_key( parser, 1, NULL ); + if ( !key ) + goto Fail; + } + + while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) + { + AFM_Token token = afm_tokenize( key, len ); + + + if ( token == end_section || token == AFM_TOKEN_ENDFONTMETRICS ) + return FT_Err_Ok; + } + + Fail: + return FT_THROW( Syntax_Error ); + } + + + FT_LOCAL_DEF( FT_Error ) + afm_parser_parse( AFM_Parser parser ) + { + FT_Memory memory = parser->memory; + AFM_FontInfo fi = parser->FontInfo; + FT_Error error = FT_ERR( Syntax_Error ); + char* key; + FT_Offset len; + FT_Int metrics_sets = 0; + + + if ( !fi ) + return FT_THROW( Invalid_Argument ); + + key = afm_parser_next_key( parser, 1, &len ); + if ( !key || len != 16 || + ft_strncmp( key, "StartFontMetrics", 16 ) != 0 ) + return FT_THROW( Unknown_File_Format ); + + while ( ( key = afm_parser_next_key( parser, 1, &len ) ) != 0 ) + { + AFM_ValueRec shared_vals[4]; + + + switch ( afm_tokenize( key, len ) ) + { + case AFM_TOKEN_METRICSSETS: + if ( afm_parser_read_int( parser, &metrics_sets ) ) + goto Fail; + + if ( metrics_sets != 0 && metrics_sets != 2 ) + { + error = FT_THROW( Unimplemented_Feature ); + + goto Fail; + } + break; + + case AFM_TOKEN_ISCIDFONT: + shared_vals[0].type = AFM_VALUE_TYPE_BOOL; + if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 ) + goto Fail; + + fi->IsCIDFont = shared_vals[0].u.b; + break; + + case AFM_TOKEN_FONTBBOX: + shared_vals[0].type = AFM_VALUE_TYPE_FIXED; + shared_vals[1].type = AFM_VALUE_TYPE_FIXED; + shared_vals[2].type = AFM_VALUE_TYPE_FIXED; + shared_vals[3].type = AFM_VALUE_TYPE_FIXED; + if ( afm_parser_read_vals( parser, shared_vals, 4 ) != 4 ) + goto Fail; + + fi->FontBBox.xMin = shared_vals[0].u.f; + fi->FontBBox.yMin = shared_vals[1].u.f; + fi->FontBBox.xMax = shared_vals[2].u.f; + fi->FontBBox.yMax = shared_vals[3].u.f; + break; + + case AFM_TOKEN_ASCENDER: + shared_vals[0].type = AFM_VALUE_TYPE_FIXED; + if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 ) + goto Fail; + + fi->Ascender = shared_vals[0].u.f; + break; + + case AFM_TOKEN_DESCENDER: + shared_vals[0].type = AFM_VALUE_TYPE_FIXED; + if ( afm_parser_read_vals( parser, shared_vals, 1 ) != 1 ) + goto Fail; + + fi->Descender = shared_vals[0].u.f; + break; + + case AFM_TOKEN_STARTCHARMETRICS: + { + FT_Int n = 0; + + + if ( afm_parser_read_int( parser, &n ) ) + goto Fail; + + error = afm_parser_skip_section( parser, n, + AFM_TOKEN_ENDCHARMETRICS ); + if ( error ) + return error; + } + break; + + case AFM_TOKEN_STARTKERNDATA: + error = afm_parse_kern_data( parser ); + if ( error ) + goto Fail; + /* we only support kern data, so ... */ + FALL_THROUGH; + + case AFM_TOKEN_ENDFONTMETRICS: + return FT_Err_Ok; + + default: + break; + } + } + + Fail: + FT_FREE( fi->TrackKerns ); + fi->NumTrackKern = 0; + + FT_FREE( fi->KernPairs ); + fi->NumKernPair = 0; + + fi->IsCIDFont = 0; + + return error; + } + +#else /* T1_CONFIG_OPTION_NO_AFM */ + + /* ANSI C doesn't like empty source files */ + typedef int afm_parse_dummy_; + +#endif /* T1_CONFIG_OPTION_NO_AFM */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/afmparse.h b/non-source/foreign/freetype2/src/psaux/afmparse.h new file mode 100644 index 000000000..b77663728 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/afmparse.h @@ -0,0 +1,88 @@ +/**************************************************************************** + * + * afmparse.h + * + * AFM parser (specification). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef AFMPARSE_H_ +#define AFMPARSE_H_ + + +#include <freetype/internal/psaux.h> + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + afm_parser_init( AFM_Parser parser, + FT_Memory memory, + FT_Byte* base, + FT_Byte* limit ); + + + FT_LOCAL( void ) + afm_parser_done( AFM_Parser parser ); + + + FT_LOCAL( FT_Error ) + afm_parser_parse( AFM_Parser parser ); + + + enum AFM_ValueType_ + { + AFM_VALUE_TYPE_STRING, + AFM_VALUE_TYPE_NAME, + AFM_VALUE_TYPE_FIXED, /* real number */ + AFM_VALUE_TYPE_INTEGER, + AFM_VALUE_TYPE_BOOL, + AFM_VALUE_TYPE_INDEX /* glyph index */ + }; + + + typedef struct AFM_ValueRec_ + { + enum AFM_ValueType_ type; + union + { + char* s; + FT_Fixed f; + FT_Int i; + FT_UInt u; + FT_Bool b; + + } u; + + } AFM_ValueRec, *AFM_Value; + +#define AFM_MAX_ARGUMENTS 5 + + FT_LOCAL( FT_Int ) + afm_parser_read_vals( AFM_Parser parser, + AFM_Value vals, + FT_Int n ); + + /* read the next key from the next line or column */ + FT_LOCAL( char* ) + afm_parser_next_key( AFM_Parser parser, + FT_Bool line, + FT_Offset* len ); + +FT_END_HEADER + +#endif /* AFMPARSE_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/cffdecode.c b/non-source/foreign/freetype2/src/psaux/cffdecode.c new file mode 100644 index 000000000..9556e11a5 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/cffdecode.c @@ -0,0 +1,2411 @@ +/**************************************************************************** + * + * cffdecode.c + * + * PostScript CFF (Type 2) decoding routines (body). + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/freetype.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftserv.h> +#include <freetype/internal/services/svcfftl.h> + +#include "cffdecode.h" +#include "psobjs.h" + +#include "psauxerr.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cffdecode + + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + + typedef enum CFF_Operator_ + { + cff_op_unknown = 0, + + cff_op_rmoveto, + cff_op_hmoveto, + cff_op_vmoveto, + + cff_op_rlineto, + cff_op_hlineto, + cff_op_vlineto, + + cff_op_rrcurveto, + cff_op_hhcurveto, + cff_op_hvcurveto, + cff_op_rcurveline, + cff_op_rlinecurve, + cff_op_vhcurveto, + cff_op_vvcurveto, + + cff_op_flex, + cff_op_hflex, + cff_op_hflex1, + cff_op_flex1, + + cff_op_endchar, + + cff_op_hstem, + cff_op_vstem, + cff_op_hstemhm, + cff_op_vstemhm, + + cff_op_hintmask, + cff_op_cntrmask, + cff_op_dotsection, /* deprecated, acts as no-op */ + + cff_op_abs, + cff_op_add, + cff_op_sub, + cff_op_div, + cff_op_neg, + cff_op_random, + cff_op_mul, + cff_op_sqrt, + + cff_op_blend, + + cff_op_drop, + cff_op_exch, + cff_op_index, + cff_op_roll, + cff_op_dup, + + cff_op_put, + cff_op_get, + cff_op_store, + cff_op_load, + + cff_op_and, + cff_op_or, + cff_op_not, + cff_op_eq, + cff_op_ifelse, + + cff_op_callsubr, + cff_op_callgsubr, + cff_op_return, + + /* Type 1 opcodes: invalid but seen in real life */ + cff_op_hsbw, + cff_op_closepath, + cff_op_callothersubr, + cff_op_pop, + cff_op_seac, + cff_op_sbw, + cff_op_setcurrentpoint, + + /* do not remove */ + cff_op_max + + } CFF_Operator; + + +#define CFF_COUNT_CHECK_WIDTH 0x80 +#define CFF_COUNT_EXACT 0x40 +#define CFF_COUNT_CLEAR_STACK 0x20 + + /* count values which have the `CFF_COUNT_CHECK_WIDTH' flag set are */ + /* used for checking the width and requested numbers of arguments */ + /* only; they are set to zero afterwards */ + + /* the other two flags are informative only and unused currently */ + + static const FT_Byte cff_argument_counts[] = + { + 0, /* unknown */ + + 2 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT, /* rmoveto */ + 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT, + 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT, + + 0 | CFF_COUNT_CLEAR_STACK, /* rlineto */ + 0 | CFF_COUNT_CLEAR_STACK, + 0 | CFF_COUNT_CLEAR_STACK, + + 0 | CFF_COUNT_CLEAR_STACK, /* rrcurveto */ + 0 | CFF_COUNT_CLEAR_STACK, + 0 | CFF_COUNT_CLEAR_STACK, + 0 | CFF_COUNT_CLEAR_STACK, + 0 | CFF_COUNT_CLEAR_STACK, + 0 | CFF_COUNT_CLEAR_STACK, + 0 | CFF_COUNT_CLEAR_STACK, + + 13, /* flex */ + 7, + 9, + 11, + + 0 | CFF_COUNT_CHECK_WIDTH, /* endchar */ + + 2 | CFF_COUNT_CHECK_WIDTH, /* hstem */ + 2 | CFF_COUNT_CHECK_WIDTH, + 2 | CFF_COUNT_CHECK_WIDTH, + 2 | CFF_COUNT_CHECK_WIDTH, + + 0 | CFF_COUNT_CHECK_WIDTH, /* hintmask */ + 0 | CFF_COUNT_CHECK_WIDTH, /* cntrmask */ + 0, /* dotsection */ + + 1, /* abs */ + 2, + 2, + 2, + 1, + 0, + 2, + 1, + + 1, /* blend */ + + 1, /* drop */ + 2, + 1, + 2, + 1, + + 2, /* put */ + 1, + 4, + 3, + + 2, /* and */ + 2, + 1, + 2, + 4, + + 1, /* callsubr */ + 1, + 0, + + 2, /* hsbw */ + 0, + 0, + 0, + 5, /* seac */ + 4, /* sbw */ + 2 /* setcurrentpoint */ + }; + + + static FT_Error + cff_operator_seac( CFF_Decoder* decoder, + FT_Pos asb, + FT_Pos adx, + FT_Pos ady, + FT_Int bchar, + FT_Int achar ) + { + FT_Error error; + CFF_Builder* builder = &decoder->builder; + FT_Int bchar_index, achar_index; + TT_Face face = decoder->builder.face; + FT_Vector left_bearing, advance; + FT_Byte* charstring; + FT_ULong charstring_len; + FT_Pos glyph_width; + + + if ( decoder->seac ) + { + FT_ERROR(( "cff_operator_seac: invalid nested seac\n" )); + return FT_THROW( Syntax_Error ); + } + + adx = ADD_LONG( adx, decoder->builder.left_bearing.x ); + ady = ADD_LONG( ady, decoder->builder.left_bearing.y ); + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* Incremental fonts don't necessarily have valid charsets. */ + /* They use the character code, not the glyph index, in this case. */ + if ( face->root.internal->incremental_interface ) + { + bchar_index = bchar; + achar_index = achar; + } + else +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + { + CFF_Font cff = (CFF_Font)( face->extra.data ); + + + bchar_index = cff_lookup_glyph_by_stdcharcode( cff, bchar ); + achar_index = cff_lookup_glyph_by_stdcharcode( cff, achar ); + } + + if ( bchar_index < 0 || achar_index < 0 ) + { + FT_ERROR(( "cff_operator_seac:" + " invalid seac character code arguments\n" )); + return FT_THROW( Syntax_Error ); + } + + /* If we are trying to load a composite glyph, do not load the */ + /* accent character and return the array of subglyphs. */ + if ( builder->no_recurse ) + { + FT_GlyphSlot glyph = (FT_GlyphSlot)builder->glyph; + FT_GlyphLoader loader = glyph->internal->loader; + FT_SubGlyph subg; + + + /* reallocate subglyph array if necessary */ + error = FT_GlyphLoader_CheckSubGlyphs( loader, 2 ); + if ( error ) + goto Exit; + + subg = loader->current.subglyphs; + + /* subglyph 0 = base character */ + subg->index = bchar_index; + subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES | + FT_SUBGLYPH_FLAG_USE_MY_METRICS; + subg->arg1 = 0; + subg->arg2 = 0; + subg++; + + /* subglyph 1 = accent character */ + subg->index = achar_index; + subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES; + subg->arg1 = (FT_Int)( adx >> 16 ); + subg->arg2 = (FT_Int)( ady >> 16 ); + + /* set up remaining glyph fields */ + glyph->num_subglyphs = 2; + glyph->subglyphs = loader->base.subglyphs; + glyph->format = FT_GLYPH_FORMAT_COMPOSITE; + + loader->current.num_subglyphs = 2; + } + + FT_GlyphLoader_Prepare( builder->loader ); + + /* First load `bchar' in builder */ + error = decoder->get_glyph_callback( face, (FT_UInt)bchar_index, + &charstring, &charstring_len ); + if ( !error ) + { + /* the seac operator must not be nested */ + decoder->seac = TRUE; + error = cff_decoder_parse_charstrings( decoder, charstring, + charstring_len, 0 ); + decoder->seac = FALSE; + + decoder->free_glyph_callback( face, &charstring, charstring_len ); + + if ( error ) + goto Exit; + } + + /* Save the left bearing, advance and glyph width of the base */ + /* character as they will be erased by the next load. */ + + left_bearing = builder->left_bearing; + advance = builder->advance; + glyph_width = decoder->glyph_width; + + builder->left_bearing.x = 0; + builder->left_bearing.y = 0; + + builder->pos_x = SUB_LONG( adx, asb ); + builder->pos_y = ady; + + /* Now load `achar' on top of the base outline. */ + error = decoder->get_glyph_callback( face, (FT_UInt)achar_index, + &charstring, &charstring_len ); + if ( !error ) + { + /* the seac operator must not be nested */ + decoder->seac = TRUE; + error = cff_decoder_parse_charstrings( decoder, charstring, + charstring_len, 0 ); + decoder->seac = FALSE; + + decoder->free_glyph_callback( face, &charstring, charstring_len ); + + if ( error ) + goto Exit; + } + + /* Restore the left side bearing, advance and glyph width */ + /* of the base character. */ + builder->left_bearing = left_bearing; + builder->advance = advance; + decoder->glyph_width = glyph_width; + + builder->pos_x = 0; + builder->pos_y = 0; + + Exit: + return error; + } + +#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */ + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /********** *********/ + /********** *********/ + /********** GENERIC CHARSTRING PARSING *********/ + /********** *********/ + /********** *********/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @Function: + * cff_compute_bias + * + * @Description: + * Computes the bias value in dependence of the number of glyph + * subroutines. + * + * @Input: + * in_charstring_type :: + * The `CharstringType' value of the top DICT + * dictionary. + * + * num_subrs :: + * The number of glyph subroutines. + * + * @Return: + * The bias value. + */ + static FT_Int + cff_compute_bias( FT_Int in_charstring_type, + FT_UInt num_subrs ) + { + FT_Int result; + + + if ( in_charstring_type == 1 ) + result = 0; + else if ( num_subrs < 1240 ) + result = 107; + else if ( num_subrs < 33900U ) + result = 1131; + else + result = 32768U; + + return result; + } + + + FT_LOCAL_DEF( FT_Int ) + cff_lookup_glyph_by_stdcharcode( CFF_Font cff, + FT_Int charcode ) + { + FT_UInt n; + FT_UShort glyph_sid; + + FT_Service_CFFLoad cffload; + + + /* CID-keyed fonts don't have glyph names */ + if ( !cff->charset.sids ) + return -1; + + /* check range of standard char code */ + if ( charcode < 0 || charcode > 255 ) + return -1; + +#if 0 + /* retrieve cffload from list of current modules */ + FT_Service_CFFLoad cffload; + + + FT_FACE_FIND_GLOBAL_SERVICE( face, cffload, CFF_LOAD ); + if ( !cffload ) + { + FT_ERROR(( "cff_lookup_glyph_by_stdcharcode:" + " the `cffload' module is not available\n" )); + return FT_THROW( Unimplemented_Feature ); + } +#endif + + cffload = (FT_Service_CFFLoad)cff->cffload; + + /* Get code to SID mapping from `cff_standard_encoding'. */ + glyph_sid = cffload->get_standard_encoding( (FT_UInt)charcode ); + + for ( n = 0; n < cff->num_glyphs; n++ ) + { + if ( cff->charset.sids[n] == glyph_sid ) + return (FT_Int)n; + } + + return -1; + } + + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + + /************************************************************************** + * + * @Function: + * cff_decoder_parse_charstrings + * + * @Description: + * Parses a given Type 2 charstrings program. + * + * @InOut: + * decoder :: + * The current Type 1 decoder. + * + * @Input: + * charstring_base :: + * The base of the charstring stream. + * + * charstring_len :: + * The length in bytes of the charstring stream. + * + * in_dict :: + * Set to 1 if function is called from top or + * private DICT (needed for Multiple Master CFFs). + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + cff_decoder_parse_charstrings( CFF_Decoder* decoder, + FT_Byte* charstring_base, + FT_ULong charstring_len, + FT_Bool in_dict ) + { + FT_Error error; + CFF_Decoder_Zone* zone; + FT_Byte* ip; + FT_Byte* limit; + CFF_Builder* builder = &decoder->builder; + FT_Pos x, y; + FT_Fixed* stack; + FT_Int charstring_type = + decoder->cff->top_font.font_dict.charstring_type; + FT_UShort num_designs = + decoder->cff->top_font.font_dict.num_designs; + FT_UShort num_axes = + decoder->cff->top_font.font_dict.num_axes; + + T2_Hints_Funcs hinter; + + + /* set default width */ + decoder->num_hints = 0; + decoder->read_width = 1; + + /* initialize the decoder */ + decoder->top = decoder->stack; + decoder->zone = decoder->zones; + zone = decoder->zones; + stack = decoder->top; + + hinter = (T2_Hints_Funcs)builder->hints_funcs; + + builder->path_begun = 0; + + if ( !charstring_base ) + return FT_Err_Ok; + + zone->base = charstring_base; + limit = zone->limit = charstring_base + charstring_len; + ip = zone->cursor = zone->base; + + error = FT_Err_Ok; + + x = builder->pos_x; + y = builder->pos_y; + + /* begin hints recording session, if any */ + if ( hinter ) + hinter->open( hinter->hints ); + + /* now execute loop */ + while ( ip < limit ) + { + CFF_Operator op; + FT_Byte v; + + + /********************************************************************* + * + * Decode operator or operand + */ + v = *ip++; + if ( v >= 32 || v == 28 ) + { + FT_Int shift = 16; + FT_Int32 val; + + + /* this is an operand, push it on the stack */ + + /* if we use shifts, all computations are done with unsigned */ + /* values; the conversion to a signed value is the last step */ + if ( v == 28 ) + { + if ( ip + 1 >= limit ) + goto Syntax_Error; + val = (FT_Short)( ( (FT_UShort)ip[0] << 8 ) | ip[1] ); + ip += 2; + } + else if ( v < 247 ) + val = (FT_Int32)v - 139; + else if ( v < 251 ) + { + if ( ip >= limit ) + goto Syntax_Error; + val = ( (FT_Int32)v - 247 ) * 256 + *ip++ + 108; + } + else if ( v < 255 ) + { + if ( ip >= limit ) + goto Syntax_Error; + val = -( (FT_Int32)v - 251 ) * 256 - *ip++ - 108; + } + else + { + if ( ip + 3 >= limit ) + goto Syntax_Error; + val = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) | + ( (FT_UInt32)ip[1] << 16 ) | + ( (FT_UInt32)ip[2] << 8 ) | + (FT_UInt32)ip[3] ); + ip += 4; + if ( charstring_type == 2 ) + shift = 0; + } + if ( decoder->top - stack >= CFF_MAX_OPERANDS ) + goto Stack_Overflow; + + val = (FT_Int32)( (FT_UInt32)val << shift ); + *decoder->top++ = val; + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !( val & 0xFFFFL ) ) + FT_TRACE4(( " %hd", (FT_Short)( (FT_UInt32)val >> 16 ) )); + else + FT_TRACE4(( " %.5f", val / 65536.0 )); +#endif + + } + else + { + /* The specification says that normally arguments are to be taken */ + /* from the bottom of the stack. However, this seems not to be */ + /* correct, at least for Acroread 7.0.8 on GNU/Linux: It pops the */ + /* arguments similar to a PS interpreter. */ + + FT_Fixed* args = decoder->top; + FT_Int num_args = (FT_Int)( args - decoder->stack ); + FT_Int req_args; + + + /* find operator */ + op = cff_op_unknown; + + switch ( v ) + { + case 1: + op = cff_op_hstem; + break; + case 3: + op = cff_op_vstem; + break; + case 4: + op = cff_op_vmoveto; + break; + case 5: + op = cff_op_rlineto; + break; + case 6: + op = cff_op_hlineto; + break; + case 7: + op = cff_op_vlineto; + break; + case 8: + op = cff_op_rrcurveto; + break; + case 9: + op = cff_op_closepath; + break; + case 10: + op = cff_op_callsubr; + break; + case 11: + op = cff_op_return; + break; + case 12: + if ( ip >= limit ) + goto Syntax_Error; + v = *ip++; + + switch ( v ) + { + case 0: + op = cff_op_dotsection; + break; + case 1: /* this is actually the Type1 vstem3 operator */ + op = cff_op_vstem; + break; + case 2: /* this is actually the Type1 hstem3 operator */ + op = cff_op_hstem; + break; + case 3: + op = cff_op_and; + break; + case 4: + op = cff_op_or; + break; + case 5: + op = cff_op_not; + break; + case 6: + op = cff_op_seac; + break; + case 7: + op = cff_op_sbw; + break; + case 8: + op = cff_op_store; + break; + case 9: + op = cff_op_abs; + break; + case 10: + op = cff_op_add; + break; + case 11: + op = cff_op_sub; + break; + case 12: + op = cff_op_div; + break; + case 13: + op = cff_op_load; + break; + case 14: + op = cff_op_neg; + break; + case 15: + op = cff_op_eq; + break; + case 16: + op = cff_op_callothersubr; + break; + case 17: + op = cff_op_pop; + break; + case 18: + op = cff_op_drop; + break; + case 20: + op = cff_op_put; + break; + case 21: + op = cff_op_get; + break; + case 22: + op = cff_op_ifelse; + break; + case 23: + op = cff_op_random; + break; + case 24: + op = cff_op_mul; + break; + case 26: + op = cff_op_sqrt; + break; + case 27: + op = cff_op_dup; + break; + case 28: + op = cff_op_exch; + break; + case 29: + op = cff_op_index; + break; + case 30: + op = cff_op_roll; + break; + case 33: + op = cff_op_setcurrentpoint; + break; + case 34: + op = cff_op_hflex; + break; + case 35: + op = cff_op_flex; + break; + case 36: + op = cff_op_hflex1; + break; + case 37: + op = cff_op_flex1; + break; + default: + FT_TRACE4(( " unknown op (12, %d)\n", v )); + break; + } + break; + case 13: + op = cff_op_hsbw; + break; + case 14: + op = cff_op_endchar; + break; + case 16: + op = cff_op_blend; + break; + case 18: + op = cff_op_hstemhm; + break; + case 19: + op = cff_op_hintmask; + break; + case 20: + op = cff_op_cntrmask; + break; + case 21: + op = cff_op_rmoveto; + break; + case 22: + op = cff_op_hmoveto; + break; + case 23: + op = cff_op_vstemhm; + break; + case 24: + op = cff_op_rcurveline; + break; + case 25: + op = cff_op_rlinecurve; + break; + case 26: + op = cff_op_vvcurveto; + break; + case 27: + op = cff_op_hhcurveto; + break; + case 29: + op = cff_op_callgsubr; + break; + case 30: + op = cff_op_vhcurveto; + break; + case 31: + op = cff_op_hvcurveto; + break; + default: + FT_TRACE4(( " unknown op (%d)\n", v )); + break; + } + + if ( op == cff_op_unknown ) + continue; + + /* in Multiple Master CFFs, T2 charstrings can appear in */ + /* dictionaries, but some operators are prohibited */ + if ( in_dict ) + { + switch ( op ) + { + case cff_op_hstem: + case cff_op_vstem: + case cff_op_vmoveto: + case cff_op_rlineto: + case cff_op_hlineto: + case cff_op_vlineto: + case cff_op_rrcurveto: + case cff_op_hstemhm: + case cff_op_hintmask: + case cff_op_cntrmask: + case cff_op_rmoveto: + case cff_op_hmoveto: + case cff_op_vstemhm: + case cff_op_rcurveline: + case cff_op_rlinecurve: + case cff_op_vvcurveto: + case cff_op_hhcurveto: + case cff_op_vhcurveto: + case cff_op_hvcurveto: + case cff_op_hflex: + case cff_op_flex: + case cff_op_hflex1: + case cff_op_flex1: + case cff_op_callsubr: + case cff_op_callgsubr: + /* deprecated opcodes */ + case cff_op_dotsection: + /* invalid Type 1 opcodes */ + case cff_op_hsbw: + case cff_op_closepath: + case cff_op_callothersubr: + case cff_op_seac: + case cff_op_sbw: + case cff_op_setcurrentpoint: + goto MM_Error; + + default: + break; + } + } + + /* check arguments */ + req_args = cff_argument_counts[op]; + if ( req_args & CFF_COUNT_CHECK_WIDTH ) + { + if ( num_args > 0 && decoder->read_width ) + { + /* If `nominal_width' is non-zero, the number is really a */ + /* difference against `nominal_width'. Else, the number here */ + /* is truly a width, not a difference against `nominal_width'. */ + /* If the font does not set `nominal_width', then */ + /* `nominal_width' defaults to zero, and so we can set */ + /* `glyph_width' to `nominal_width' plus number on the stack */ + /* -- for either case. */ + + FT_Int set_width_ok; + + + switch ( op ) + { + case cff_op_hmoveto: + case cff_op_vmoveto: + set_width_ok = num_args & 2; + break; + + case cff_op_hstem: + case cff_op_vstem: + case cff_op_hstemhm: + case cff_op_vstemhm: + case cff_op_rmoveto: + case cff_op_hintmask: + case cff_op_cntrmask: + set_width_ok = num_args & 1; + break; + + case cff_op_endchar: + /* If there is a width specified for endchar, we either have */ + /* 1 argument or 5 arguments. We like to argue. */ + set_width_ok = in_dict + ? 0 + : ( ( num_args == 5 ) || ( num_args == 1 ) ); + break; + + default: + set_width_ok = 0; + break; + } + + if ( set_width_ok ) + { + decoder->glyph_width = decoder->nominal_width + + ( stack[0] >> 16 ); + + if ( decoder->width_only ) + { + /* we only want the advance width; stop here */ + break; + } + + /* Consumed an argument. */ + num_args--; + } + } + + decoder->read_width = 0; + req_args = 0; + } + + req_args &= 0x000F; + if ( num_args < req_args ) + goto Stack_Underflow; + args -= req_args; + num_args -= req_args; + + /* At this point, `args' points to the first argument of the */ + /* operand in case `req_args' isn't zero. Otherwise, we have */ + /* to adjust `args' manually. */ + + /* Note that we only pop arguments from the stack which we */ + /* really need and can digest so that we can continue in case */ + /* of superfluous stack elements. */ + + switch ( op ) + { + case cff_op_hstem: + case cff_op_vstem: + case cff_op_hstemhm: + case cff_op_vstemhm: + /* the number of arguments is always even here */ + FT_TRACE4(( "%s\n", + op == cff_op_hstem ? " hstem" : + ( op == cff_op_vstem ? " vstem" : + ( op == cff_op_hstemhm ? " hstemhm" : " vstemhm" ) ) )); + + if ( hinter ) + hinter->stems( hinter->hints, + ( op == cff_op_hstem || op == cff_op_hstemhm ), + num_args / 2, + args - ( num_args & ~1 ) ); + + decoder->num_hints += num_args / 2; + args = stack; + break; + + case cff_op_hintmask: + case cff_op_cntrmask: + FT_TRACE4(( "%s", op == cff_op_hintmask ? " hintmask" + : " cntrmask" )); + + /* implement vstem when needed -- */ + /* the specification doesn't say it, but this also works */ + /* with the 'cntrmask' operator */ + /* */ + if ( num_args > 0 ) + { + if ( hinter ) + hinter->stems( hinter->hints, + 0, + num_args / 2, + args - ( num_args & ~1 ) ); + + decoder->num_hints += num_args / 2; + } + + /* In a valid charstring there must be at least one byte */ + /* after `hintmask' or `cntrmask' (e.g., for a `return' */ + /* instruction). Additionally, there must be space for */ + /* `num_hints' bits. */ + + if ( ( ip + ( ( decoder->num_hints + 7 ) >> 3 ) ) >= limit ) + goto Syntax_Error; + + if ( hinter ) + { + if ( op == cff_op_hintmask ) + hinter->hintmask( hinter->hints, + (FT_UInt)builder->current->n_points, + (FT_UInt)decoder->num_hints, + ip ); + else + hinter->counter( hinter->hints, + (FT_UInt)decoder->num_hints, + ip ); + } + +#ifdef FT_DEBUG_LEVEL_TRACE + { + FT_UInt maskbyte; + + + FT_TRACE4(( " (maskbytes:" )); + + for ( maskbyte = 0; + maskbyte < (FT_UInt)( ( decoder->num_hints + 7 ) >> 3 ); + maskbyte++, ip++ ) + FT_TRACE4(( " 0x%02X", *ip )); + + FT_TRACE4(( ")\n" )); + } +#else + ip += ( decoder->num_hints + 7 ) >> 3; +#endif + args = stack; + break; + + case cff_op_rmoveto: + FT_TRACE4(( " rmoveto\n" )); + + cff_builder_close_contour( builder ); + builder->path_begun = 0; + x = ADD_LONG( x, args[-2] ); + y = ADD_LONG( y, args[-1] ); + args = stack; + break; + + case cff_op_vmoveto: + FT_TRACE4(( " vmoveto\n" )); + + cff_builder_close_contour( builder ); + builder->path_begun = 0; + y = ADD_LONG( y, args[-1] ); + args = stack; + break; + + case cff_op_hmoveto: + FT_TRACE4(( " hmoveto\n" )); + + cff_builder_close_contour( builder ); + builder->path_begun = 0; + x = ADD_LONG( x, args[-1] ); + args = stack; + break; + + case cff_op_rlineto: + FT_TRACE4(( " rlineto\n" )); + + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, num_args / 2 ) ) + goto Fail; + + if ( num_args < 2 ) + goto Stack_Underflow; + + args -= num_args & ~1; + while ( args < decoder->top ) + { + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, 1 ); + args += 2; + } + args = stack; + break; + + case cff_op_hlineto: + case cff_op_vlineto: + { + FT_Int phase = ( op == cff_op_hlineto ); + + + FT_TRACE4(( "%s\n", op == cff_op_hlineto ? " hlineto" + : " vlineto" )); + + if ( num_args < 0 ) + goto Stack_Underflow; + + /* there exist subsetted fonts (found in PDFs) */ + /* which call `hlineto' without arguments */ + if ( num_args == 0 ) + break; + + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, num_args ) ) + goto Fail; + + args = stack; + while ( args < decoder->top ) + { + if ( phase ) + x = ADD_LONG( x, args[0] ); + else + y = ADD_LONG( y, args[0] ); + + if ( cff_builder_add_point1( builder, x, y ) ) + goto Fail; + + args++; + phase ^= 1; + } + args = stack; + } + break; + + case cff_op_rrcurveto: + { + FT_Int nargs; + + + FT_TRACE4(( " rrcurveto\n" )); + + if ( num_args < 6 ) + goto Stack_Underflow; + + nargs = num_args - num_args % 6; + + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, nargs / 2 ) ) + goto Fail; + + args -= nargs; + while ( args < decoder->top ) + { + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[4] ); + y = ADD_LONG( y, args[5] ); + cff_builder_add_point( builder, x, y, 1 ); + + args += 6; + } + args = stack; + } + break; + + case cff_op_vvcurveto: + { + FT_Int nargs; + + + FT_TRACE4(( " vvcurveto\n" )); + + if ( num_args < 4 ) + goto Stack_Underflow; + + /* if num_args isn't of the form 4n or 4n+1, */ + /* we enforce it by clearing the second bit */ + + nargs = num_args & ~2; + + if ( cff_builder_start_point( builder, x, y ) ) + goto Fail; + + args -= nargs; + + if ( nargs & 1 ) + { + x = ADD_LONG( x, args[0] ); + args++; + nargs--; + } + + if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) ) + goto Fail; + + while ( args < decoder->top ) + { + y = ADD_LONG( y, args[0] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); + cff_builder_add_point( builder, x, y, 0 ); + + y = ADD_LONG( y, args[3] ); + cff_builder_add_point( builder, x, y, 1 ); + + args += 4; + } + args = stack; + } + break; + + case cff_op_hhcurveto: + { + FT_Int nargs; + + + FT_TRACE4(( " hhcurveto\n" )); + + if ( num_args < 4 ) + goto Stack_Underflow; + + /* if num_args isn't of the form 4n or 4n+1, */ + /* we enforce it by clearing the second bit */ + + nargs = num_args & ~2; + + if ( cff_builder_start_point( builder, x, y ) ) + goto Fail; + + args -= nargs; + if ( nargs & 1 ) + { + y = ADD_LONG( y, args[0] ); + args++; + nargs--; + } + + if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) ) + goto Fail; + + while ( args < decoder->top ) + { + x = ADD_LONG( x, args[0] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[3] ); + cff_builder_add_point( builder, x, y, 1 ); + + args += 4; + } + args = stack; + } + break; + + case cff_op_vhcurveto: + case cff_op_hvcurveto: + { + FT_Int phase; + FT_Int nargs; + + + FT_TRACE4(( "%s\n", op == cff_op_vhcurveto ? " vhcurveto" + : " hvcurveto" )); + + if ( cff_builder_start_point( builder, x, y ) ) + goto Fail; + + if ( num_args < 4 ) + goto Stack_Underflow; + + /* if num_args isn't of the form 8n, 8n+1, 8n+4, or 8n+5, */ + /* we enforce it by clearing the second bit */ + + nargs = num_args & ~2; + + args -= nargs; + if ( cff_check_points( builder, ( nargs / 4 ) * 3 ) ) + goto Stack_Underflow; + + phase = ( op == cff_op_hvcurveto ); + + while ( nargs >= 4 ) + { + nargs -= 4; + if ( phase ) + { + x = ADD_LONG( x, args[0] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); + cff_builder_add_point( builder, x, y, 0 ); + + y = ADD_LONG( y, args[3] ); + if ( nargs == 1 ) + x = ADD_LONG( x, args[4] ); + cff_builder_add_point( builder, x, y, 1 ); + } + else + { + y = ADD_LONG( y, args[0] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[3] ); + if ( nargs == 1 ) + y = ADD_LONG( y, args[4] ); + cff_builder_add_point( builder, x, y, 1 ); + } + args += 4; + phase ^= 1; + } + args = stack; + } + break; + + case cff_op_rlinecurve: + { + FT_Int num_lines; + FT_Int nargs; + + + FT_TRACE4(( " rlinecurve\n" )); + + if ( num_args < 8 ) + goto Stack_Underflow; + + nargs = num_args & ~1; + num_lines = ( nargs - 6 ) / 2; + + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, num_lines + 3 ) ) + goto Fail; + + args -= nargs; + + /* first, add the line segments */ + while ( num_lines > 0 ) + { + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, 1 ); + + args += 2; + num_lines--; + } + + /* then the curve */ + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[4] ); + y = ADD_LONG( y, args[5] ); + cff_builder_add_point( builder, x, y, 1 ); + + args = stack; + } + break; + + case cff_op_rcurveline: + { + FT_Int num_curves; + FT_Int nargs; + + + FT_TRACE4(( " rcurveline\n" )); + + if ( num_args < 8 ) + goto Stack_Underflow; + + nargs = num_args - 2; + nargs = nargs - nargs % 6 + 2; + num_curves = ( nargs - 2 ) / 6; + + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, num_curves * 3 + 2 ) ) + goto Fail; + + args -= nargs; + + /* first, add the curves */ + while ( num_curves > 0 ) + { + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); + cff_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, args[4] ); + y = ADD_LONG( y, args[5] ); + cff_builder_add_point( builder, x, y, 1 ); + + args += 6; + num_curves--; + } + + /* then the final line */ + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, 1 ); + + args = stack; + } + break; + + case cff_op_hflex1: + { + FT_Pos start_y; + + + FT_TRACE4(( " hflex1\n" )); + + /* adding five more points: 4 control points, 1 on-curve point */ + /* -- make sure we have enough space for the start point if it */ + /* needs to be added */ + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, 6 ) ) + goto Fail; + + /* record the starting point's y position for later use */ + start_y = y; + + /* first control point */ + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, 0 ); + + /* second control point */ + x = ADD_LONG( x, args[2] ); + y = ADD_LONG( y, args[3] ); + cff_builder_add_point( builder, x, y, 0 ); + + /* join point; on curve, with y-value the same as the last */ + /* control point's y-value */ + x = ADD_LONG( x, args[4] ); + cff_builder_add_point( builder, x, y, 1 ); + + /* third control point, with y-value the same as the join */ + /* point's y-value */ + x = ADD_LONG( x, args[5] ); + cff_builder_add_point( builder, x, y, 0 ); + + /* fourth control point */ + x = ADD_LONG( x, args[6] ); + y = ADD_LONG( y, args[7] ); + cff_builder_add_point( builder, x, y, 0 ); + + /* ending point, with y-value the same as the start */ + x = ADD_LONG( x, args[8] ); + y = start_y; + cff_builder_add_point( builder, x, y, 1 ); + + args = stack; + break; + } + + case cff_op_hflex: + { + FT_Pos start_y; + + + FT_TRACE4(( " hflex\n" )); + + /* adding six more points; 4 control points, 2 on-curve points */ + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, 6 ) ) + goto Fail; + + /* record the starting point's y-position for later use */ + start_y = y; + + /* first control point */ + x = ADD_LONG( x, args[0] ); + cff_builder_add_point( builder, x, y, 0 ); + + /* second control point */ + x = ADD_LONG( x, args[1] ); + y = ADD_LONG( y, args[2] ); + cff_builder_add_point( builder, x, y, 0 ); + + /* join point; on curve, with y-value the same as the last */ + /* control point's y-value */ + x = ADD_LONG( x, args[3] ); + cff_builder_add_point( builder, x, y, 1 ); + + /* third control point, with y-value the same as the join */ + /* point's y-value */ + x = ADD_LONG( x, args[4] ); + cff_builder_add_point( builder, x, y, 0 ); + + /* fourth control point */ + x = ADD_LONG( x, args[5] ); + y = start_y; + cff_builder_add_point( builder, x, y, 0 ); + + /* ending point, with y-value the same as the start point's */ + /* y-value -- we don't add this point, though */ + x = ADD_LONG( x, args[6] ); + cff_builder_add_point( builder, x, y, 1 ); + + args = stack; + break; + } + + case cff_op_flex1: + { + FT_Pos start_x, start_y; /* record start x, y values for */ + /* alter use */ + FT_Fixed dx = 0, dy = 0; /* used in horizontal/vertical */ + /* algorithm below */ + FT_Int horizontal, count; + FT_Fixed* temp; + + + FT_TRACE4(( " flex1\n" )); + + /* adding six more points; 4 control points, 2 on-curve points */ + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, 6 ) ) + goto Fail; + + /* record the starting point's x, y position for later use */ + start_x = x; + start_y = y; + + /* XXX: figure out whether this is supposed to be a horizontal */ + /* or vertical flex; the Type 2 specification is vague... */ + + temp = args; + + /* grab up to the last argument */ + for ( count = 5; count > 0; count-- ) + { + dx = ADD_LONG( dx, temp[0] ); + dy = ADD_LONG( dy, temp[1] ); + temp += 2; + } + + if ( dx < 0 ) + dx = NEG_LONG( dx ); + if ( dy < 0 ) + dy = NEG_LONG( dy ); + + /* strange test, but here it is... */ + horizontal = ( dx > dy ); + + for ( count = 5; count > 0; count-- ) + { + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, + FT_BOOL( count == 3 ) ); + args += 2; + } + + /* is last operand an x- or y-delta? */ + if ( horizontal ) + { + x = ADD_LONG( x, args[0] ); + y = start_y; + } + else + { + x = start_x; + y = ADD_LONG( y, args[0] ); + } + + cff_builder_add_point( builder, x, y, 1 ); + + args = stack; + break; + } + + case cff_op_flex: + { + FT_UInt count; + + + FT_TRACE4(( " flex\n" )); + + if ( cff_builder_start_point( builder, x, y ) || + cff_check_points( builder, 6 ) ) + goto Fail; + + for ( count = 6; count > 0; count-- ) + { + x = ADD_LONG( x, args[0] ); + y = ADD_LONG( y, args[1] ); + cff_builder_add_point( builder, x, y, + FT_BOOL( count == 4 || count == 1 ) ); + args += 2; + } + + args = stack; + } + break; + + case cff_op_seac: + FT_TRACE4(( " seac\n" )); + + error = cff_operator_seac( decoder, + args[0], args[1], args[2], + (FT_Int)( args[3] >> 16 ), + (FT_Int)( args[4] >> 16 ) ); + + /* add current outline to the glyph slot */ + FT_GlyphLoader_Add( builder->loader ); + + /* return now! */ + FT_TRACE4(( "\n" )); + return error; + + case cff_op_endchar: + /* in dictionaries, `endchar' simply indicates end of data */ + if ( in_dict ) + return error; + + FT_TRACE4(( " endchar\n" )); + + /* We are going to emulate the seac operator. */ + if ( num_args >= 4 ) + { + /* Save glyph width so that the subglyphs don't overwrite it. */ + FT_Pos glyph_width = decoder->glyph_width; + + + error = cff_operator_seac( decoder, + 0L, args[-4], args[-3], + (FT_Int)( args[-2] >> 16 ), + (FT_Int)( args[-1] >> 16 ) ); + + decoder->glyph_width = glyph_width; + } + else + { + cff_builder_close_contour( builder ); + + /* close hints recording session */ + if ( hinter ) + { + if ( hinter->close( hinter->hints, + (FT_UInt)builder->current->n_points ) ) + goto Syntax_Error; + + /* apply hints to the loaded glyph outline now */ + error = hinter->apply( hinter->hints, + builder->current, + (PSH_Globals)builder->hints_globals, + decoder->hint_mode ); + if ( error ) + goto Fail; + } + + /* add current outline to the glyph slot */ + FT_GlyphLoader_Add( builder->loader ); + } + + /* return now! */ + FT_TRACE4(( "\n" )); + return error; + + case cff_op_abs: + FT_TRACE4(( " abs\n" )); + + if ( args[0] < 0 ) + { + if ( args[0] == FT_LONG_MIN ) + args[0] = FT_LONG_MAX; + else + args[0] = -args[0]; + } + args++; + break; + + case cff_op_add: + FT_TRACE4(( " add\n" )); + + args[0] = ADD_LONG( args[0], args[1] ); + args++; + break; + + case cff_op_sub: + FT_TRACE4(( " sub\n" )); + + args[0] = SUB_LONG( args[0], args[1] ); + args++; + break; + + case cff_op_div: + FT_TRACE4(( " div\n" )); + + args[0] = FT_DivFix( args[0], args[1] ); + args++; + break; + + case cff_op_neg: + FT_TRACE4(( " neg\n" )); + + if ( args[0] == FT_LONG_MIN ) + args[0] = FT_LONG_MAX; + args[0] = -args[0]; + args++; + break; + + case cff_op_random: + { + FT_UInt32* randval = in_dict ? &decoder->cff->top_font.random + : &decoder->current_subfont->random; + + + FT_TRACE4(( " random\n" )); + + /* only use the lower 16 bits of `random' */ + /* to generate a number in the range (0;1] */ + args[0] = (FT_Fixed)( ( *randval & 0xFFFF ) + 1 ); + args++; + + *randval = cff_random( *randval ); + } + break; + + case cff_op_mul: + FT_TRACE4(( " mul\n" )); + + args[0] = FT_MulFix( args[0], args[1] ); + args++; + break; + + case cff_op_sqrt: + FT_TRACE4(( " sqrt\n" )); + + /* without upper limit the loop below might not finish */ + if ( args[0] > 0x7FFFFFFFL ) + args[0] = 0xB504F4L; /* sqrt( 32768.0044 ) */ + else if ( args[0] > 0 ) + args[0] = (FT_Fixed)FT_SqrtFixed( args[0] ); + else + args[0] = 0; + args++; + break; + + case cff_op_drop: + /* nothing */ + FT_TRACE4(( " drop\n" )); + + break; + + case cff_op_exch: + { + FT_Fixed tmp; + + + FT_TRACE4(( " exch\n" )); + + tmp = args[0]; + args[0] = args[1]; + args[1] = tmp; + args += 2; + } + break; + + case cff_op_index: + { + FT_Int idx = (FT_Int)( args[0] >> 16 ); + + + FT_TRACE4(( " index\n" )); + + if ( idx < 0 ) + idx = 0; + else if ( idx > num_args - 2 ) + idx = num_args - 2; + args[0] = args[-( idx + 1 )]; + args++; + } + break; + + case cff_op_roll: + { + FT_Int count = (FT_Int)( args[0] >> 16 ); + FT_Int idx = (FT_Int)( args[1] >> 16 ); + + + FT_TRACE4(( " roll\n" )); + + if ( count <= 0 ) + count = 1; + + args -= count; + if ( args < stack ) + goto Stack_Underflow; + + if ( idx >= 0 ) + { + idx = idx % count; + while ( idx > 0 ) + { + FT_Fixed tmp = args[count - 1]; + FT_Int i; + + + for ( i = count - 2; i >= 0; i-- ) + args[i + 1] = args[i]; + args[0] = tmp; + idx--; + } + } + else + { + /* before C99 it is implementation-defined whether */ + /* the result of `%' is negative if the first operand */ + /* is negative */ + idx = -( NEG_INT( idx ) % count ); + while ( idx < 0 ) + { + FT_Fixed tmp = args[0]; + FT_Int i; + + + for ( i = 0; i < count - 1; i++ ) + args[i] = args[i + 1]; + args[count - 1] = tmp; + idx++; + } + } + args += count; + } + break; + + case cff_op_dup: + FT_TRACE4(( " dup\n" )); + + args[1] = args[0]; + args += 2; + break; + + case cff_op_put: + { + FT_Fixed val = args[0]; + FT_UInt idx = (FT_UInt)( args[1] >> 16 ); + + + FT_TRACE4(( " put\n" )); + + /* the Type2 specification before version 16-March-2000 */ + /* didn't give a hard-coded size limit of the temporary */ + /* storage array; instead, an argument of the */ + /* `MultipleMaster' operator set the size */ + if ( idx < CFF_MAX_TRANS_ELEMENTS ) + decoder->buildchar[idx] = val; + } + break; + + case cff_op_get: + { + FT_UInt idx = (FT_UInt)( args[0] >> 16 ); + FT_Fixed val = 0; + + + FT_TRACE4(( " get\n" )); + + if ( idx < CFF_MAX_TRANS_ELEMENTS ) + val = decoder->buildchar[idx]; + + args[0] = val; + args++; + } + break; + + case cff_op_store: + /* this operator was removed from the Type2 specification */ + /* in version 16-March-2000 */ + + /* since we currently don't handle interpolation of multiple */ + /* master fonts, this is a no-op */ + FT_TRACE4(( " store\n" )); + break; + + case cff_op_load: + /* this operator was removed from the Type2 specification */ + /* in version 16-March-2000 */ + { + FT_UInt reg_idx = (FT_UInt)args[0]; + FT_UInt idx = (FT_UInt)args[1]; + FT_UInt count = (FT_UInt)args[2]; + + + FT_TRACE4(( " load\n" )); + + /* since we currently don't handle interpolation of multiple */ + /* master fonts, we store a vector [1 0 0 ...] in the */ + /* temporary storage array regardless of the Registry index */ + if ( reg_idx <= 2 && + idx < CFF_MAX_TRANS_ELEMENTS && + count <= num_axes ) + { + FT_UInt end, i; + + + end = FT_MIN( idx + count, CFF_MAX_TRANS_ELEMENTS ); + + if ( idx < end ) + decoder->buildchar[idx] = 1 << 16; + + for ( i = idx + 1; i < end; i++ ) + decoder->buildchar[i] = 0; + } + } + break; + + case cff_op_blend: + /* this operator was removed from the Type2 specification */ + /* in version 16-March-2000 */ + if ( num_designs ) + { + FT_Int num_results = (FT_Int)( args[0] >> 16 ); + + + FT_TRACE4(( " blend\n" )); + + if ( num_results < 0 ) + goto Syntax_Error; + + if ( num_results > num_args || + num_results * (FT_Int)num_designs > num_args ) + goto Stack_Underflow; + + /* since we currently don't handle interpolation of multiple */ + /* master fonts, return the `num_results' values of the */ + /* first master */ + args -= num_results * ( num_designs - 1 ); + num_args -= num_results * ( num_designs - 1 ); + } + else + goto Syntax_Error; + break; + + case cff_op_dotsection: + /* this operator is deprecated and ignored by the parser */ + FT_TRACE4(( " dotsection\n" )); + break; + + case cff_op_closepath: + /* this is an invalid Type 2 operator; however, there */ + /* exist fonts which are incorrectly converted from probably */ + /* Type 1 to CFF, and some parsers seem to accept it */ + + FT_TRACE4(( " closepath (invalid op)\n" )); + + args = stack; + break; + + case cff_op_hsbw: + /* this is an invalid Type 2 operator; however, there */ + /* exist fonts which are incorrectly converted from probably */ + /* Type 1 to CFF, and some parsers seem to accept it */ + + FT_TRACE4(( " hsbw (invalid op)\n" )); + + decoder->glyph_width = + ADD_LONG( decoder->nominal_width, ( args[1] >> 16 ) ); + + decoder->builder.left_bearing.x = args[0]; + decoder->builder.left_bearing.y = 0; + + x = ADD_LONG( decoder->builder.pos_x, args[0] ); + y = decoder->builder.pos_y; + args = stack; + break; + + case cff_op_sbw: + /* this is an invalid Type 2 operator; however, there */ + /* exist fonts which are incorrectly converted from probably */ + /* Type 1 to CFF, and some parsers seem to accept it */ + + FT_TRACE4(( " sbw (invalid op)\n" )); + + decoder->glyph_width = + ADD_LONG( decoder->nominal_width, ( args[2] >> 16 ) ); + + decoder->builder.left_bearing.x = args[0]; + decoder->builder.left_bearing.y = args[1]; + + x = ADD_LONG( decoder->builder.pos_x, args[0] ); + y = ADD_LONG( decoder->builder.pos_y, args[1] ); + args = stack; + break; + + case cff_op_setcurrentpoint: + /* this is an invalid Type 2 operator; however, there */ + /* exist fonts which are incorrectly converted from probably */ + /* Type 1 to CFF, and some parsers seem to accept it */ + + FT_TRACE4(( " setcurrentpoint (invalid op)\n" )); + + x = ADD_LONG( decoder->builder.pos_x, args[0] ); + y = ADD_LONG( decoder->builder.pos_y, args[1] ); + args = stack; + break; + + case cff_op_callothersubr: + { + FT_Fixed arg; + + + /* this is an invalid Type 2 operator; however, there */ + /* exist fonts which are incorrectly converted from */ + /* probably Type 1 to CFF, and some parsers seem to accept */ + /* it */ + + FT_TRACE4(( " callothersubr (invalid op)\n" )); + + /* subsequent `pop' operands should add the arguments, */ + /* this is the implementation described for `unknown' */ + /* other subroutines in the Type1 spec. */ + /* */ + /* XXX Fix return arguments (see discussion below). */ + + arg = 2 + ( args[-2] >> 16 ); + if ( arg >= CFF_MAX_OPERANDS ) + goto Stack_Underflow; + + args -= arg; + if ( args < stack ) + goto Stack_Underflow; + } + break; + + case cff_op_pop: + /* this is an invalid Type 2 operator; however, there */ + /* exist fonts which are incorrectly converted from probably */ + /* Type 1 to CFF, and some parsers seem to accept it */ + + FT_TRACE4(( " pop (invalid op)\n" )); + + /* XXX Increasing `args' is wrong: After a certain number of */ + /* `pop's we get a stack overflow. Reason for doing it is */ + /* code like this (actually found in a CFF font): */ + /* */ + /* 17 1 3 callothersubr */ + /* pop */ + /* callsubr */ + /* */ + /* Since we handle `callothersubr' as a no-op, and */ + /* `callsubr' needs at least one argument, `pop' can't be a */ + /* no-op too as it basically should be. */ + /* */ + /* The right solution would be to provide real support for */ + /* `callothersubr' as done in `t1decode.c', however, given */ + /* the fact that CFF fonts with `pop' are invalid, it is */ + /* questionable whether it is worth the time. */ + args++; + break; + + case cff_op_and: + { + FT_Fixed cond = ( args[0] && args[1] ); + + + FT_TRACE4(( " and\n" )); + + args[0] = cond ? 0x10000L : 0; + args++; + } + break; + + case cff_op_or: + { + FT_Fixed cond = ( args[0] || args[1] ); + + + FT_TRACE4(( " or\n" )); + + args[0] = cond ? 0x10000L : 0; + args++; + } + break; + + case cff_op_not: + { + FT_Fixed cond = !args[0]; + + + FT_TRACE4(( " not\n" )); + + args[0] = cond ? 0x10000L : 0; + args++; + } + break; + + case cff_op_eq: + { + FT_Fixed cond = ( args[0] == args[1] ); + + + FT_TRACE4(( " eq\n" )); + + args[0] = cond ? 0x10000L : 0; + args++; + } + break; + + case cff_op_ifelse: + { + FT_Fixed cond = ( args[2] <= args[3] ); + + + FT_TRACE4(( " ifelse\n" )); + + if ( !cond ) + args[0] = args[1]; + args++; + } + break; + + case cff_op_callsubr: + { + FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) + + decoder->locals_bias ); + + + FT_TRACE4(( " callsubr (idx %d, entering level %td)\n", + idx, + zone - decoder->zones + 1 )); + + if ( idx >= decoder->num_locals ) + { + FT_ERROR(( "cff_decoder_parse_charstrings:" + " invalid local subr index\n" )); + goto Syntax_Error; + } + + if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS ) + { + FT_ERROR(( "cff_decoder_parse_charstrings:" + " too many nested subrs\n" )); + goto Syntax_Error; + } + + zone->cursor = ip; /* save current instruction pointer */ + + zone++; + zone->base = decoder->locals[idx]; + zone->limit = decoder->locals[idx + 1]; + zone->cursor = zone->base; + + if ( !zone->base || zone->limit == zone->base ) + { + FT_ERROR(( "cff_decoder_parse_charstrings:" + " invoking empty subrs\n" )); + goto Syntax_Error; + } + + decoder->zone = zone; + ip = zone->base; + limit = zone->limit; + } + break; + + case cff_op_callgsubr: + { + FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) + + decoder->globals_bias ); + + + FT_TRACE4(( " callgsubr (idx %d, entering level %td)\n", + idx, + zone - decoder->zones + 1 )); + + if ( idx >= decoder->num_globals ) + { + FT_ERROR(( "cff_decoder_parse_charstrings:" + " invalid global subr index\n" )); + goto Syntax_Error; + } + + if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS ) + { + FT_ERROR(( "cff_decoder_parse_charstrings:" + " too many nested subrs\n" )); + goto Syntax_Error; + } + + zone->cursor = ip; /* save current instruction pointer */ + + zone++; + zone->base = decoder->globals[idx]; + zone->limit = decoder->globals[idx + 1]; + zone->cursor = zone->base; + + if ( !zone->base || zone->limit == zone->base ) + { + FT_ERROR(( "cff_decoder_parse_charstrings:" + " invoking empty subrs\n" )); + goto Syntax_Error; + } + + decoder->zone = zone; + ip = zone->base; + limit = zone->limit; + } + break; + + case cff_op_return: + FT_TRACE4(( " return (leaving level %td)\n", + decoder->zone - decoder->zones )); + + if ( decoder->zone <= decoder->zones ) + { + FT_ERROR(( "cff_decoder_parse_charstrings:" + " unexpected return\n" )); + goto Syntax_Error; + } + + decoder->zone--; + zone = decoder->zone; + ip = zone->cursor; + limit = zone->limit; + break; + + default: + FT_ERROR(( "Unimplemented opcode: %d", ip[-1] )); + + if ( ip[-1] == 12 ) + FT_ERROR(( " %d", ip[0] )); + FT_ERROR(( "\n" )); + + return FT_THROW( Unimplemented_Feature ); + } + + decoder->top = args; + + if ( decoder->top - stack >= CFF_MAX_OPERANDS ) + goto Stack_Overflow; + + } /* general operator processing */ + + } /* while ip < limit */ + + FT_TRACE4(( "..end..\n" )); + FT_TRACE4(( "\n" )); + + Fail: + return error; + + MM_Error: + FT_TRACE4(( "cff_decoder_parse_charstrings:" + " invalid opcode found in top DICT charstring\n")); + return FT_THROW( Invalid_File_Format ); + + Syntax_Error: + FT_TRACE4(( "cff_decoder_parse_charstrings: syntax error\n" )); + return FT_THROW( Invalid_File_Format ); + + Stack_Underflow: + FT_TRACE4(( "cff_decoder_parse_charstrings: stack underflow\n" )); + return FT_THROW( Too_Few_Arguments ); + + Stack_Overflow: + FT_TRACE4(( "cff_decoder_parse_charstrings: stack overflow\n" )); + return FT_THROW( Stack_Overflow ); + } + +#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */ + + + /************************************************************************** + * + * @Function: + * cff_decoder_init + * + * @Description: + * Initializes a given glyph decoder. + * + * @InOut: + * decoder :: + * A pointer to the glyph builder to initialize. + * + * @Input: + * face :: + * The current face object. + * + * size :: + * The current size object. + * + * slot :: + * The current glyph object. + * + * hinting :: + * Whether hinting is active. + * + * hint_mode :: + * The hinting mode. + */ + FT_LOCAL_DEF( void ) + cff_decoder_init( CFF_Decoder* decoder, + TT_Face face, + CFF_Size size, + CFF_GlyphSlot slot, + FT_Bool hinting, + FT_Render_Mode hint_mode, + CFF_Decoder_Get_Glyph_Callback get_callback, + CFF_Decoder_Free_Glyph_Callback free_callback ) + { + CFF_Font cff = (CFF_Font)face->extra.data; + + + /* clear everything */ + FT_ZERO( decoder ); + + /* initialize builder */ + cff_builder_init( &decoder->builder, face, size, slot, hinting ); + + /* initialize Type2 decoder */ + decoder->cff = cff; + decoder->num_globals = cff->global_subrs_index.count; + decoder->globals = cff->global_subrs; + decoder->globals_bias = cff_compute_bias( + cff->top_font.font_dict.charstring_type, + decoder->num_globals ); + + decoder->hint_mode = hint_mode; + + decoder->get_glyph_callback = get_callback; + decoder->free_glyph_callback = free_callback; + } + + + /* this function is used to select the subfont */ + /* and the locals subrs array */ + FT_LOCAL_DEF( FT_Error ) + cff_decoder_prepare( CFF_Decoder* decoder, + CFF_Size size, + FT_UInt glyph_index ) + { + CFF_Builder *builder = &decoder->builder; + CFF_Font cff = (CFF_Font)builder->face->extra.data; + CFF_SubFont sub = &cff->top_font; + FT_Error error = FT_Err_Ok; + + FT_Service_CFFLoad cffload = (FT_Service_CFFLoad)cff->cffload; + + + /* manage CID fonts */ + if ( cff->num_subfonts ) + { + FT_Byte fd_index = cffload->fd_select_get( &cff->fd_select, + glyph_index ); + + + if ( fd_index >= cff->num_subfonts ) + { + FT_TRACE4(( "cff_decoder_prepare: invalid CID subfont index\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + FT_TRACE3(( " in subfont %d:\n", fd_index )); + + sub = cff->subfonts[fd_index]; + + if ( builder->hints_funcs && size ) + { + FT_Size ftsize = FT_SIZE( size ); + CFF_Internal internal = (CFF_Internal)ftsize->internal->module_data; + + + /* for CFFs without subfonts, this value has already been set */ + builder->hints_globals = (void *)internal->subfonts[fd_index]; + } + } + + decoder->num_locals = sub->local_subrs_index.count; + decoder->locals = sub->local_subrs; + decoder->locals_bias = cff_compute_bias( + decoder->cff->top_font.font_dict.charstring_type, + decoder->num_locals ); + + decoder->glyph_width = sub->private_dict.default_width; + decoder->nominal_width = sub->private_dict.nominal_width; + + decoder->current_subfont = sub; + + Exit: + return error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/cffdecode.h b/non-source/foreign/freetype2/src/psaux/cffdecode.h new file mode 100644 index 000000000..038f7235c --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/cffdecode.h @@ -0,0 +1,63 @@ +/**************************************************************************** + * + * cffdecode.h + * + * PostScript CFF (Type 2) decoding routines (specification). + * + * Copyright (C) 2017-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef CFFDECODE_H_ +#define CFFDECODE_H_ + + +#include <freetype/internal/psaux.h> + + +FT_BEGIN_HEADER + + FT_LOCAL( void ) + cff_decoder_init( CFF_Decoder* decoder, + TT_Face face, + CFF_Size size, + CFF_GlyphSlot slot, + FT_Bool hinting, + FT_Render_Mode hint_mode, + CFF_Decoder_Get_Glyph_Callback get_callback, + CFF_Decoder_Free_Glyph_Callback free_callback ); + + FT_LOCAL( FT_Error ) + cff_decoder_prepare( CFF_Decoder* decoder, + CFF_Size size, + FT_UInt glyph_index ); + + + FT_LOCAL( FT_Int ) + cff_lookup_glyph_by_stdcharcode( CFF_Font cff, + FT_Int charcode ); + + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + FT_LOCAL( FT_Error ) + cff_decoder_parse_charstrings( CFF_Decoder* decoder, + FT_Byte* charstring_base, + FT_ULong charstring_len, + FT_Bool in_dict ); +#endif + + +FT_END_HEADER + +#endif + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psarrst.c b/non-source/foreign/freetype2/src/psaux/psarrst.c new file mode 100644 index 000000000..70313d283 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psarrst.c @@ -0,0 +1,240 @@ +/**************************************************************************** + * + * psarrst.c + * + * Adobe's code for Array Stacks (body). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include <freetype/internal/ftdebug.h> + +#include "psglue.h" +#include "psarrst.h" + +#include "pserror.h" + + + /* + * CF2_ArrStack uses an error pointer, to enable shared errors. + * Shared errors are necessary when multiple objects allow the program + * to continue after detecting errors. Only the first error should be + * recorded. + */ + + FT_LOCAL_DEF( void ) + cf2_arrstack_init( CF2_ArrStack arrstack, + FT_Memory memory, + FT_Error* error, + size_t sizeItem ) + { + FT_ASSERT( arrstack ); + + /* initialize the structure */ + arrstack->memory = memory; + arrstack->error = error; + arrstack->sizeItem = sizeItem; + arrstack->allocated = 0; + arrstack->count = 0; + arrstack->totalSize = 0; + arrstack->ptr = NULL; + } + + + FT_LOCAL_DEF( void ) + cf2_arrstack_finalize( CF2_ArrStack arrstack ) + { + FT_Memory memory = arrstack->memory; /* for FT_FREE */ + + + FT_ASSERT( arrstack ); + + arrstack->allocated = 0; + arrstack->count = 0; + arrstack->totalSize = 0; + + /* free the data buffer */ + FT_FREE( arrstack->ptr ); + } + + + /* allocate or reallocate the buffer size; */ + /* return false on memory error */ + static FT_Bool + cf2_arrstack_setNumElements( CF2_ArrStack arrstack, + size_t numElements ) + { + FT_ASSERT( arrstack ); + + { + FT_Error error = FT_Err_Ok; /* for FT_REALLOC */ + FT_Memory memory = arrstack->memory; /* for FT_REALLOC */ + + size_t newSize = numElements * arrstack->sizeItem; + + + if ( numElements > FT_LONG_MAX / arrstack->sizeItem ) + goto exit; + + + FT_ASSERT( newSize > 0 ); /* avoid realloc with zero size */ + + if ( !FT_QREALLOC( arrstack->ptr, arrstack->totalSize, newSize ) ) + { + arrstack->allocated = numElements; + arrstack->totalSize = newSize; + + if ( arrstack->count > numElements ) + { + /* we truncated the list! */ + CF2_SET_ERROR( arrstack->error, Stack_Overflow ); + arrstack->count = numElements; + return FALSE; + } + + return TRUE; /* success */ + } + } + + exit: + /* if there's not already an error, store this one */ + CF2_SET_ERROR( arrstack->error, Out_Of_Memory ); + + return FALSE; + } + + + /* set the count, ensuring allocation is sufficient */ + FT_LOCAL_DEF( void ) + cf2_arrstack_setCount( CF2_ArrStack arrstack, + size_t numElements ) + { + FT_ASSERT( arrstack ); + + if ( numElements > arrstack->allocated ) + { + /* expand the allocation first */ + if ( !cf2_arrstack_setNumElements( arrstack, numElements ) ) + return; + } + + arrstack->count = numElements; + } + + + /* clear the count */ + FT_LOCAL_DEF( void ) + cf2_arrstack_clear( CF2_ArrStack arrstack ) + { + FT_ASSERT( arrstack ); + + arrstack->count = 0; + } + + + /* current number of items */ + FT_LOCAL_DEF( size_t ) + cf2_arrstack_size( const CF2_ArrStack arrstack ) + { + FT_ASSERT( arrstack ); + + return arrstack->count; + } + + + FT_LOCAL_DEF( void* ) + cf2_arrstack_getBuffer( const CF2_ArrStack arrstack ) + { + FT_ASSERT( arrstack ); + + return arrstack->ptr; + } + + + /* return pointer to the given element */ + FT_LOCAL_DEF( void* ) + cf2_arrstack_getPointer( const CF2_ArrStack arrstack, + size_t idx ) + { + void* newPtr; + + + FT_ASSERT( arrstack ); + + if ( idx >= arrstack->count ) + { + /* overflow */ + CF2_SET_ERROR( arrstack->error, Stack_Overflow ); + idx = 0; /* choose safe default */ + } + + newPtr = (FT_Byte*)arrstack->ptr + idx * arrstack->sizeItem; + + return newPtr; + } + + + /* push (append) an element at the end of the list; */ + /* return false on memory error */ + /* TODO: should there be a length param for extra checking? */ + FT_LOCAL_DEF( void ) + cf2_arrstack_push( CF2_ArrStack arrstack, + const void* ptr ) + { + FT_ASSERT( arrstack ); + + if ( arrstack->count == arrstack->allocated ) + { + /* increase the buffer size */ + if ( !cf2_arrstack_setNumElements( + arrstack, arrstack->allocated * 2 + 16 ) ) + { + /* on error, ignore the push */ + return; + } + } + + FT_ASSERT( ptr ); + + { + size_t offset = arrstack->count * arrstack->sizeItem; + void* newPtr = (FT_Byte*)arrstack->ptr + offset; + + + FT_MEM_COPY( newPtr, ptr, arrstack->sizeItem ); + arrstack->count += 1; + } + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psarrst.h b/non-source/foreign/freetype2/src/psaux/psarrst.h new file mode 100644 index 000000000..31e5330cc --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psarrst.h @@ -0,0 +1,99 @@ +/**************************************************************************** + * + * psarrst.h + * + * Adobe's code for Array Stacks (specification). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSARRST_H_ +#define PSARRST_H_ + + +#include "pserror.h" + + +FT_BEGIN_HEADER + + + /* need to define the struct here (not opaque) so it can be allocated by */ + /* clients */ + typedef struct CF2_ArrStackRec_ + { + FT_Memory memory; + FT_Error* error; + + size_t sizeItem; /* bytes per element */ + size_t allocated; /* items allocated */ + size_t count; /* number of elements allocated */ + size_t totalSize; /* total bytes allocated */ + + void* ptr; /* ptr to data */ + + } CF2_ArrStackRec, *CF2_ArrStack; + + + FT_LOCAL( void ) + cf2_arrstack_init( CF2_ArrStack arrstack, + FT_Memory memory, + FT_Error* error, + size_t sizeItem ); + FT_LOCAL( void ) + cf2_arrstack_finalize( CF2_ArrStack arrstack ); + + FT_LOCAL( void ) + cf2_arrstack_setCount( CF2_ArrStack arrstack, + size_t numElements ); + FT_LOCAL( void ) + cf2_arrstack_clear( CF2_ArrStack arrstack ); + FT_LOCAL( size_t ) + cf2_arrstack_size( const CF2_ArrStack arrstack ); + + FT_LOCAL( void* ) + cf2_arrstack_getBuffer( const CF2_ArrStack arrstack ); + FT_LOCAL( void* ) + cf2_arrstack_getPointer( const CF2_ArrStack arrstack, + size_t idx ); + + FT_LOCAL( void ) + cf2_arrstack_push( CF2_ArrStack arrstack, + const void* ptr ); + + +FT_END_HEADER + + +#endif /* PSARRST_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psaux.c b/non-source/foreign/freetype2/src/psaux/psaux.c new file mode 100644 index 000000000..ffe89cd62 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psaux.c @@ -0,0 +1,40 @@ +/**************************************************************************** + * + * psaux.c + * + * FreeType auxiliary PostScript driver component (body only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "afmparse.c" +#include "psauxmod.c" +#include "psconv.c" +#include "psobjs.c" +#include "t1cmap.c" +#include "t1decode.c" +#include "cffdecode.c" + +#include "psarrst.c" +#include "psblues.c" +#include "pserror.c" +#include "psfont.c" +#include "psft.c" +#include "pshints.c" +#include "psintrp.c" +#include "psread.c" +#include "psstack.c" + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psauxerr.h b/non-source/foreign/freetype2/src/psaux/psauxerr.h new file mode 100644 index 000000000..18428c40d --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psauxerr.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * + * psauxerr.h + * + * PS auxiliary module error codes (specification only). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the PS auxiliary module error enumeration + * constants. + * + */ + +#ifndef PSAUXERR_H_ +#define PSAUXERR_H_ + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX PSaux_Err_ +#define FT_ERR_BASE FT_Mod_Err_PSaux + +#include <freetype/fterrors.h> + +#endif /* PSAUXERR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psauxmod.c b/non-source/foreign/freetype2/src/psaux/psauxmod.c new file mode 100644 index 000000000..6826f9d8d --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psauxmod.c @@ -0,0 +1,190 @@ +/**************************************************************************** + * + * psauxmod.c + * + * FreeType auxiliary PostScript module implementation (body). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include "psauxmod.h" +#include "psobjs.h" +#include "t1decode.h" +#include "t1cmap.h" +#include "psft.h" +#include "cffdecode.h" + +#ifndef T1_CONFIG_OPTION_NO_AFM +#include "afmparse.h" +#endif + + + FT_CALLBACK_TABLE_DEF + const PS_Table_FuncsRec ps_table_funcs = + { + ps_table_new, /* init */ + ps_table_done, /* done */ + ps_table_add, /* add */ + ps_table_release /* release */ + }; + + + FT_CALLBACK_TABLE_DEF + const PS_Parser_FuncsRec ps_parser_funcs = + { + ps_parser_init, /* init */ + ps_parser_done, /* done */ + + ps_parser_skip_spaces, /* skip_spaces */ + ps_parser_skip_PS_token, /* skip_PS_token */ + + ps_parser_to_int, /* to_int */ + ps_parser_to_fixed, /* to_fixed */ + ps_parser_to_bytes, /* to_bytes */ + ps_parser_to_coord_array, /* to_coord_array */ + ps_parser_to_fixed_array, /* to_fixed_array */ + ps_parser_to_token, /* to_token */ + ps_parser_to_token_array, /* to_token_array */ + + ps_parser_load_field, /* load_field */ + ps_parser_load_field_table /* load_field_table */ + }; + + + FT_CALLBACK_TABLE_DEF + const PS_Builder_FuncsRec ps_builder_funcs = + { + ps_builder_init, /* init */ + ps_builder_done /* done */ + }; + + + FT_CALLBACK_TABLE_DEF + const T1_Builder_FuncsRec t1_builder_funcs = + { + t1_builder_init, /* init */ + t1_builder_done, /* done */ + + t1_builder_check_points, /* check_points */ + t1_builder_add_point, /* add_point */ + t1_builder_add_point1, /* add_point1 */ + t1_builder_add_contour, /* add_contour */ + t1_builder_start_point, /* start_point */ + t1_builder_close_contour /* close_contour */ + }; + + + FT_CALLBACK_TABLE_DEF + const T1_Decoder_FuncsRec t1_decoder_funcs = + { + t1_decoder_init, /* init */ + t1_decoder_done, /* done */ +#ifdef T1_CONFIG_OPTION_OLD_ENGINE + t1_decoder_parse_charstrings, /* parse_charstrings_old */ +#else + t1_decoder_parse_metrics, /* parse_metrics */ +#endif + cf2_decoder_parse_charstrings /* parse_charstrings */ + }; + + +#ifndef T1_CONFIG_OPTION_NO_AFM + FT_CALLBACK_TABLE_DEF + const AFM_Parser_FuncsRec afm_parser_funcs = + { + afm_parser_init, /* init */ + afm_parser_done, /* done */ + afm_parser_parse /* parse */ + }; +#endif + + + FT_CALLBACK_TABLE_DEF + const T1_CMap_ClassesRec t1_cmap_classes = + { + &t1_cmap_standard_class_rec, + &t1_cmap_expert_class_rec, + &t1_cmap_custom_class_rec, + &t1_cmap_unicode_class_rec + }; + + + FT_CALLBACK_TABLE_DEF + const CFF_Builder_FuncsRec cff_builder_funcs = + { + cff_builder_init, /* init */ + cff_builder_done, /* done */ + + cff_check_points, /* check_points */ + cff_builder_add_point, /* add_point */ + cff_builder_add_point1, /* add_point1 */ + cff_builder_add_contour, /* add_contour */ + cff_builder_start_point, /* start_point */ + cff_builder_close_contour /* close_contour */ + }; + + + FT_CALLBACK_TABLE_DEF + const CFF_Decoder_FuncsRec cff_decoder_funcs = + { + cff_decoder_init, /* init */ + cff_decoder_prepare, /* prepare */ + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + cff_decoder_parse_charstrings, /* parse_charstrings_old */ +#endif + cf2_decoder_parse_charstrings /* parse_charstrings */ + }; + + + static + const PSAux_Interface psaux_interface = + { + &ps_table_funcs, + &ps_parser_funcs, + &t1_builder_funcs, + &t1_decoder_funcs, + t1_decrypt, + cff_random, + ps_decoder_init, + t1_make_subfont, + + (const T1_CMap_ClassesRec*) &t1_cmap_classes, + +#ifndef T1_CONFIG_OPTION_NO_AFM + &afm_parser_funcs, +#else + 0, +#endif + + &cff_decoder_funcs, + }; + + + FT_DEFINE_MODULE( + psaux_module_class, + + 0, + sizeof ( FT_ModuleRec ), + "psaux", + 0x20000L, + 0x20000L, + + &psaux_interface, /* module-specific interface */ + + (FT_Module_Constructor)NULL, /* module_init */ + (FT_Module_Destructor) NULL, /* module_done */ + (FT_Module_Requester) NULL /* get_interface */ + ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psauxmod.h b/non-source/foreign/freetype2/src/psaux/psauxmod.h new file mode 100644 index 000000000..82d7e348a --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psauxmod.h @@ -0,0 +1,60 @@ +/**************************************************************************** + * + * psauxmod.h + * + * FreeType auxiliary PostScript module implementation (specification). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSAUXMOD_H_ +#define PSAUXMOD_H_ + + +#include <freetype/ftmodapi.h> + +#include <freetype/internal/psaux.h> + + +FT_BEGIN_HEADER + + + FT_CALLBACK_TABLE + const CFF_Builder_FuncsRec cff_builder_funcs; + + 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_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psblues.c b/non-source/foreign/freetype2/src/psaux/psblues.c new file mode 100644 index 000000000..213b943b4 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psblues.c @@ -0,0 +1,571 @@ +/**************************************************************************** + * + * psblues.c + * + * Adobe's code for handling Blue Zones (body). + * + * Copyright 2009-2014 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include <freetype/internal/ftdebug.h> + +#include "psblues.h" +#include "pshints.h" +#include "psfont.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cf2blues + + + FT_LOCAL_DEF( void ) + cf2_blues_init( CF2_Blues blues, + CF2_Font font ) + { + /* pointer to parsed font object */ + PS_Decoder* decoder = font->decoder; + + CF2_Fixed zoneHeight; + CF2_Fixed maxZoneHeight = 0; + CF2_Fixed csUnitsPerPixel; + + size_t numBlueValues; + size_t numOtherBlues; + size_t numFamilyBlues; + size_t numFamilyOtherBlues; + + FT_Fixed* blueValues; + FT_Fixed* otherBlues; + FT_Fixed* familyBlues; + FT_Fixed* familyOtherBlues; + + size_t i; + CF2_Fixed emBoxBottom, emBoxTop; + +#if 0 + CF2_Int unitsPerEm = font->unitsPerEm; + + + if ( unitsPerEm == 0 ) + unitsPerEm = 1000; +#endif + + FT_ZERO( blues ); + blues->scale = font->innerTransform.d; + + cf2_getBlueMetrics( decoder, + &blues->blueScale, + &blues->blueShift, + &blues->blueFuzz ); + + cf2_getBlueValues( decoder, &numBlueValues, &blueValues ); + cf2_getOtherBlues( decoder, &numOtherBlues, &otherBlues ); + cf2_getFamilyBlues( decoder, &numFamilyBlues, &familyBlues ); + cf2_getFamilyOtherBlues( decoder, &numFamilyOtherBlues, &familyOtherBlues ); + + /* + * synthetic em box hint heuristic + * + * Apply this when ideographic dictionary (LanguageGroup 1) has no + * real alignment zones. Adobe tools generate dummy zones at -250 and + * 1100 for a 1000 unit em. Fonts with ICF-based alignment zones + * should not enable the heuristic. When the heuristic is enabled, + * the font's blue zones are ignored. + * + */ + + /* get em box from OS/2 typoAscender/Descender */ + /* TODO: FreeType does not parse these metrics. Skip them for now. */ +#if 0 + FCM_getHorizontalLineMetrics( &e, + font->font, + &ascender, + &descender, + &linegap ); + if ( ascender - descender == unitsPerEm ) + { + emBoxBottom = cf2_intToFixed( descender ); + emBoxTop = cf2_intToFixed( ascender ); + } + else +#endif + { + emBoxBottom = CF2_ICF_Bottom; + emBoxTop = CF2_ICF_Top; + } + + if ( cf2_getLanguageGroup( decoder ) == 1 && + ( numBlueValues == 0 || + ( numBlueValues == 4 && + blueValues[0] < emBoxBottom && + blueValues[1] < emBoxBottom && + blueValues[2] > emBoxTop && + blueValues[3] > emBoxTop ) ) ) + { + /* + * Construct hint edges suitable for synthetic ghost hints at top + * and bottom of em box. +-CF2_MIN_COUNTER allows for unhinted + * features above or below the last hinted edge. This also gives a + * net 1 pixel boost to the height of ideographic glyphs. + * + * Note: Adjust synthetic hints outward by epsilon (0x.0001) to + * avoid interference. E.g., some fonts have real hints at + * 880 and -120. + */ + + blues->emBoxBottomEdge.csCoord = emBoxBottom - CF2_FIXED_EPSILON; + blues->emBoxBottomEdge.dsCoord = cf2_fixedRound( + FT_MulFix( + blues->emBoxBottomEdge.csCoord, + blues->scale ) ) - + CF2_MIN_COUNTER; + blues->emBoxBottomEdge.scale = blues->scale; + blues->emBoxBottomEdge.flags = CF2_GhostBottom | + CF2_Locked | + CF2_Synthetic; + + blues->emBoxTopEdge.csCoord = emBoxTop + CF2_FIXED_EPSILON + + 2 * font->darkenY; + blues->emBoxTopEdge.dsCoord = cf2_fixedRound( + FT_MulFix( + blues->emBoxTopEdge.csCoord, + blues->scale ) ) + + CF2_MIN_COUNTER; + blues->emBoxTopEdge.scale = blues->scale; + blues->emBoxTopEdge.flags = CF2_GhostTop | + CF2_Locked | + CF2_Synthetic; + + blues->doEmBoxHints = TRUE; /* enable the heuristic */ + + return; + } + + /* copy `BlueValues' and `OtherBlues' to a combined array of top and */ + /* bottom zones */ + for ( i = 0; i < numBlueValues; i += 2 ) + { + blues->zone[blues->count].csBottomEdge = blueValues[i]; + blues->zone[blues->count].csTopEdge = blueValues[i + 1]; + + zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge, + blues->zone[blues->count].csBottomEdge ); + + if ( zoneHeight < 0 ) + { + FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" )); + continue; /* reject this zone */ + } + + if ( zoneHeight > maxZoneHeight ) + { + /* take maximum before darkening adjustment */ + /* so overshoot suppression point doesn't change */ + maxZoneHeight = zoneHeight; + } + + /* adjust both edges of top zone upward by twice darkening amount */ + if ( i != 0 ) + { + blues->zone[blues->count].csTopEdge += 2 * font->darkenY; + blues->zone[blues->count].csBottomEdge += 2 * font->darkenY; + } + + /* first `BlueValue' is bottom zone; others are top */ + if ( i == 0 ) + { + blues->zone[blues->count].bottomZone = + TRUE; + blues->zone[blues->count].csFlatEdge = + blues->zone[blues->count].csTopEdge; + } + else + { + blues->zone[blues->count].bottomZone = + FALSE; + blues->zone[blues->count].csFlatEdge = + blues->zone[blues->count].csBottomEdge; + } + + blues->count += 1; + } + + for ( i = 0; i < numOtherBlues; i += 2 ) + { + blues->zone[blues->count].csBottomEdge = otherBlues[i]; + blues->zone[blues->count].csTopEdge = otherBlues[i + 1]; + + zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge, + blues->zone[blues->count].csBottomEdge ); + + if ( zoneHeight < 0 ) + { + FT_TRACE4(( "cf2_blues_init: ignoring negative zone height\n" )); + continue; /* reject this zone */ + } + + if ( zoneHeight > maxZoneHeight ) + { + /* take maximum before darkening adjustment */ + /* so overshoot suppression point doesn't change */ + maxZoneHeight = zoneHeight; + } + + /* Note: bottom zones are not adjusted for darkening amount */ + + /* all OtherBlues are bottom zone */ + blues->zone[blues->count].bottomZone = + TRUE; + blues->zone[blues->count].csFlatEdge = + blues->zone[blues->count].csTopEdge; + + blues->count += 1; + } + + /* Adjust for FamilyBlues */ + + /* Search for the nearest flat edge in `FamilyBlues' or */ + /* `FamilyOtherBlues'. According to the Black Book, any matching edge */ + /* must be within one device pixel */ + + csUnitsPerPixel = FT_DivFix( cf2_intToFixed( 1 ), blues->scale ); + + /* loop on all zones in this font */ + for ( i = 0; i < blues->count; i++ ) + { + size_t j; + CF2_Fixed minDiff; + CF2_Fixed flatFamilyEdge, diff; + /* value for this font */ + CF2_Fixed flatEdge = blues->zone[i].csFlatEdge; + + + if ( blues->zone[i].bottomZone ) + { + /* In a bottom zone, the top edge is the flat edge. */ + /* Search `FamilyOtherBlues' for bottom zones; look for closest */ + /* Family edge that is within the one pixel threshold. */ + + minDiff = CF2_FIXED_MAX; + + for ( j = 0; j < numFamilyOtherBlues; j += 2 ) + { + /* top edge */ + flatFamilyEdge = familyOtherBlues[j + 1]; + + diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) ); + + if ( diff < minDiff && diff < csUnitsPerPixel ) + { + blues->zone[i].csFlatEdge = flatFamilyEdge; + minDiff = diff; + + if ( diff == 0 ) + break; + } + } + + /* check the first member of FamilyBlues, which is a bottom zone */ + if ( numFamilyBlues >= 2 ) + { + /* top edge */ + flatFamilyEdge = familyBlues[1]; + + diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) ); + + if ( diff < minDiff && diff < csUnitsPerPixel ) + blues->zone[i].csFlatEdge = flatFamilyEdge; + } + } + else + { + /* In a top zone, the bottom edge is the flat edge. */ + /* Search `FamilyBlues' for top zones; skip first zone, which is a */ + /* bottom zone; look for closest Family edge that is within the */ + /* one pixel threshold */ + + minDiff = CF2_FIXED_MAX; + + for ( j = 2; j < numFamilyBlues; j += 2 ) + { + /* bottom edge */ + flatFamilyEdge = familyBlues[j]; + + /* adjust edges of top zone upward by twice darkening amount */ + flatFamilyEdge += 2 * font->darkenY; /* bottom edge */ + + diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) ); + + if ( diff < minDiff && diff < csUnitsPerPixel ) + { + blues->zone[i].csFlatEdge = flatFamilyEdge; + minDiff = diff; + + if ( diff == 0 ) + break; + } + } + } + } + + /* TODO: enforce separation of zones, including BlueFuzz */ + + /* Adjust BlueScale; similar to AdjustBlueScale() in coretype */ + /* `bcsetup.c'. */ + + if ( maxZoneHeight > 0 ) + { + if ( blues->blueScale > FT_DivFix( cf2_intToFixed( 1 ), + maxZoneHeight ) ) + { + /* clamp at maximum scale */ + blues->blueScale = FT_DivFix( cf2_intToFixed( 1 ), + maxZoneHeight ); + } + + /* + * TODO: Revisit the bug fix for 613448. The minimum scale + * requirement catches a number of library fonts. For + * example, with default BlueScale (.039625) and 0.4 minimum, + * the test below catches any font with maxZoneHeight < 10.1. + * There are library fonts ranging from 2 to 10 that get + * caught, including e.g., Eurostile LT Std Medium with + * maxZoneHeight of 6. + * + */ +#if 0 + if ( blueScale < .4 / maxZoneHeight ) + { + tetraphilia_assert( 0 ); + /* clamp at minimum scale, per bug 0613448 fix */ + blueScale = .4 / maxZoneHeight; + } +#endif + + } + + /* + * Suppress overshoot and boost blue zones at small sizes. Boost + * amount varies linearly from 0.5 pixel near 0 to 0 pixel at + * blueScale cutoff. + * Note: This boost amount is different from the coretype heuristic. + * + */ + + if ( blues->scale < blues->blueScale ) + { + blues->suppressOvershoot = TRUE; + + /* Change rounding threshold for `dsFlatEdge'. */ + /* Note: constant changed from 0.5 to 0.6 to avoid a problem with */ + /* 10ppem Arial */ + + blues->boost = cf2_doubleToFixed( .6 ) - + FT_MulDiv( cf2_doubleToFixed ( .6 ), + blues->scale, + blues->blueScale ); + if ( blues->boost > 0x7FFF ) + { + /* boost must remain less than 0.5, or baseline could go negative */ + blues->boost = 0x7FFF; + } + } + + /* boost and darkening have similar effects; don't do both */ + if ( font->stemDarkened ) + blues->boost = 0; + + /* set device space alignment for each zone; */ + /* apply boost amount before rounding flat edge */ + + for ( i = 0; i < blues->count; i++ ) + { + if ( blues->zone[i].bottomZone ) + blues->zone[i].dsFlatEdge = cf2_fixedRound( + FT_MulFix( + blues->zone[i].csFlatEdge, + blues->scale ) - + blues->boost ); + else + blues->zone[i].dsFlatEdge = cf2_fixedRound( + FT_MulFix( + blues->zone[i].csFlatEdge, + blues->scale ) + + blues->boost ); + } + } + + + /* + * Check whether `stemHint' is captured by one of the blue zones. + * + * Zero, one or both edges may be valid; only valid edges can be + * captured. For compatibility with CoolType, search top and bottom + * zones in the same pass (see `BlueLock'). If a hint is captured, + * return true and position the edge(s) in one of 3 ways: + * + * 1) If `BlueScale' suppresses overshoot, position the captured edge + * at the flat edge of the zone. + * 2) If overshoot is not suppressed and `BlueShift' requires + * overshoot, position the captured edge a minimum of 1 device pixel + * from the flat edge. + * 3) If overshoot is not suppressed or required, position the captured + * edge at the nearest device pixel. + * + */ + FT_LOCAL_DEF( FT_Bool ) + cf2_blues_capture( const CF2_Blues blues, + CF2_Hint bottomHintEdge, + CF2_Hint topHintEdge ) + { + /* TODO: validate? */ + CF2_Fixed csFuzz = blues->blueFuzz; + + /* new position of captured edge */ + CF2_Fixed dsNew; + + /* amount that hint is moved when positioned */ + CF2_Fixed dsMove = 0; + + FT_Bool captured = FALSE; + CF2_UInt i; + + + /* assert edge flags are consistent */ + FT_ASSERT( !cf2_hint_isTop( bottomHintEdge ) && + !cf2_hint_isBottom( topHintEdge ) ); + + /* TODO: search once without blue fuzz for compatibility with coretype? */ + for ( i = 0; i < blues->count; i++ ) + { + if ( blues->zone[i].bottomZone && + cf2_hint_isBottom( bottomHintEdge ) ) + { + if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <= + bottomHintEdge->csCoord && + bottomHintEdge->csCoord <= + ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) ) + { + /* bottom edge captured by bottom zone */ + + if ( blues->suppressOvershoot ) + dsNew = blues->zone[i].dsFlatEdge; + + else if ( SUB_INT32( blues->zone[i].csTopEdge, + bottomHintEdge->csCoord ) >= + blues->blueShift ) + { + /* guarantee minimum of 1 pixel overshoot */ + dsNew = FT_MIN( + cf2_fixedRound( bottomHintEdge->dsCoord ), + SUB_INT32( blues->zone[i].dsFlatEdge, + cf2_intToFixed( 1 ) ) ); + } + + else + { + /* simply round captured edge */ + dsNew = cf2_fixedRound( bottomHintEdge->dsCoord ); + } + + dsMove = SUB_INT32( dsNew, bottomHintEdge->dsCoord ); + captured = TRUE; + + break; + } + } + + if ( !blues->zone[i].bottomZone && cf2_hint_isTop( topHintEdge ) ) + { + if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <= + topHintEdge->csCoord && + topHintEdge->csCoord <= + ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) ) + { + /* top edge captured by top zone */ + + if ( blues->suppressOvershoot ) + dsNew = blues->zone[i].dsFlatEdge; + + else if ( SUB_INT32( topHintEdge->csCoord, + blues->zone[i].csBottomEdge ) >= + blues->blueShift ) + { + /* guarantee minimum of 1 pixel overshoot */ + dsNew = FT_MAX( + cf2_fixedRound( topHintEdge->dsCoord ), + blues->zone[i].dsFlatEdge + cf2_intToFixed( 1 ) ); + } + + else + { + /* simply round captured edge */ + dsNew = cf2_fixedRound( topHintEdge->dsCoord ); + } + + dsMove = SUB_INT32( dsNew, topHintEdge->dsCoord ); + captured = TRUE; + + break; + } + } + } + + if ( captured ) + { + /* move both edges and flag them `locked' */ + if ( cf2_hint_isValid( bottomHintEdge ) ) + { + bottomHintEdge->dsCoord = ADD_INT32( bottomHintEdge->dsCoord, + dsMove ); + cf2_hint_lock( bottomHintEdge ); + } + + if ( cf2_hint_isValid( topHintEdge ) ) + { + topHintEdge->dsCoord = ADD_INT32( topHintEdge->dsCoord, dsMove ); + cf2_hint_lock( topHintEdge ); + } + } + + return captured; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psblues.h b/non-source/foreign/freetype2/src/psaux/psblues.h new file mode 100644 index 000000000..55fb88ecd --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psblues.h @@ -0,0 +1,185 @@ +/**************************************************************************** + * + * psblues.h + * + * Adobe's code for handling Blue Zones (specification). + * + * Copyright 2009-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + + /* + * A `CF2_Blues' object stores the blue zones (horizontal alignment + * zones) of a font. These are specified in the CFF private dictionary + * by `BlueValues', `OtherBlues', `FamilyBlues', and `FamilyOtherBlues'. + * Each zone is defined by a top and bottom edge in character space. + * Further, each zone is either a top zone or a bottom zone, as recorded + * by `bottomZone'. + * + * The maximum number of `BlueValues' and `FamilyBlues' is 7 each. + * However, these are combined to produce a total of 7 zones. + * Similarly, the maximum number of `OtherBlues' and `FamilyOtherBlues' + * is 5 and these are combined to produce an additional 5 zones. + * + * Blue zones are used to `capture' hints and force them to a common + * alignment point. This alignment is recorded in device space in + * `dsFlatEdge'. Except for this value, a `CF2_Blues' object could be + * constructed independently of scaling. Construction may occur once + * the matrix is known. Other features implemented in the Capture + * method are overshoot suppression, overshoot enforcement, and Blue + * Boost. + * + * Capture is determined by `BlueValues' and `OtherBlues', but the + * alignment point may be adjusted to the scaled flat edge of + * `FamilyBlues' or `FamilyOtherBlues'. No alignment is done to the + * curved edge of a zone. + * + */ + + +#ifndef PSBLUES_H_ +#define PSBLUES_H_ + + +#include "psglue.h" + + +FT_BEGIN_HEADER + + + /* + * `CF2_Hint' is shared by `cf2hints.h' and + * `cf2blues.h', but `cf2blues.h' depends on + * `cf2hints.h', so define it here. Note: The typedef is in + * `cf2glue.h'. + * + */ + enum + { + CF2_GhostBottom = 0x1, /* a single bottom edge */ + CF2_GhostTop = 0x2, /* a single top edge */ + CF2_PairBottom = 0x4, /* the bottom edge of a stem hint */ + CF2_PairTop = 0x8, /* the top edge of a stem hint */ + CF2_Locked = 0x10, /* this edge has been aligned */ + /* by a blue zone */ + CF2_Synthetic = 0x20 /* this edge was synthesized */ + }; + + + /* + * Default value for OS/2 typoAscender/Descender when their difference + * is not equal to `unitsPerEm'. The default is based on -250 and 1100 + * in `CF2_Blues', assuming 1000 units per em here. + * + */ + enum + { + CF2_ICF_Top = cf2_intToFixed( 880 ), + CF2_ICF_Bottom = cf2_intToFixed( -120 ) + }; + + + /* + * Constant used for hint adjustment and for synthetic em box hint + * placement. + */ +#define CF2_MIN_COUNTER cf2_doubleToFixed( 0.5 ) + + + /* shared typedef is in cf2glue.h */ + struct CF2_HintRec_ + { + CF2_UInt flags; /* attributes of the edge */ + size_t index; /* index in original stem hint array */ + /* (if not synthetic) */ + CF2_Fixed csCoord; + CF2_Fixed dsCoord; + CF2_Fixed scale; + }; + + + typedef struct CF2_BlueRec_ + { + CF2_Fixed csBottomEdge; + CF2_Fixed csTopEdge; + CF2_Fixed csFlatEdge; /* may be from either local or Family zones */ + CF2_Fixed dsFlatEdge; /* top edge of bottom zone or bottom edge */ + /* of top zone (rounded) */ + FT_Bool bottomZone; + + } CF2_BlueRec; + + + /* max total blue zones is 12 */ + enum + { + CF2_MAX_BLUES = 7, + CF2_MAX_OTHERBLUES = 5 + }; + + + typedef struct CF2_BluesRec_ + { + CF2_Fixed scale; + CF2_UInt count; + FT_Bool suppressOvershoot; + FT_Bool doEmBoxHints; + + CF2_Fixed blueScale; + CF2_Fixed blueShift; + CF2_Fixed blueFuzz; + + CF2_Fixed boost; + + CF2_HintRec emBoxTopEdge; + CF2_HintRec emBoxBottomEdge; + + CF2_BlueRec zone[CF2_MAX_BLUES + CF2_MAX_OTHERBLUES]; + + } CF2_BluesRec, *CF2_Blues; + + + FT_LOCAL( void ) + cf2_blues_init( CF2_Blues blues, + CF2_Font font ); + FT_LOCAL( FT_Bool ) + cf2_blues_capture( const CF2_Blues blues, + CF2_Hint bottomHintEdge, + CF2_Hint topHintEdge ); + + +FT_END_HEADER + + +#endif /* PSBLUES_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psconv.c b/non-source/foreign/freetype2/src/psaux/psconv.c new file mode 100644 index 000000000..56c0ecd1d --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psconv.c @@ -0,0 +1,610 @@ +/**************************************************************************** + * + * psconv.c + * + * Some convenience conversions (body). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/psaux.h> +#include <freetype/internal/ftdebug.h> + +#include "psconv.h" +#include "psauxerr.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT psconv + + + /* The following array is used by various functions to quickly convert */ + /* digits (both decimal and non-decimal) into numbers. */ + +#if 'A' == 65 + /* ASCII */ + + static const FT_Char ft_char_table[128] = + { + /* 0x00 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + }; + + /* no character >= 0x80 can represent a valid number */ +#define OP >= + +#endif /* 'A' == 65 */ + +#if 'A' == 193 + /* EBCDIC */ + + static const FT_Char ft_char_table[128] = + { + /* 0x80 */ + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, -1, -1, -1, -1, -1, -1, + -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, + -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, -1, -1, -1, -1, -1, -1, + -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, + -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + }; + + /* no character < 0x80 can represent a valid number */ +#define OP < + +#endif /* 'A' == 193 */ + + + FT_LOCAL_DEF( FT_Long ) + PS_Conv_Strtol( FT_Byte** cursor, + FT_Byte* limit, + FT_Long base ) + { + FT_Byte* p = *cursor; + + FT_Long num = 0; + FT_Bool sign = 0; + FT_Bool have_overflow = 0; + + FT_Long num_limit; + FT_Char c_limit; + + + if ( p >= limit ) + goto Bad; + + if ( base < 2 || base > 36 ) + { + FT_TRACE4(( "!!!INVALID BASE:!!!" )); + return 0; + } + + if ( *p == '-' || *p == '+' ) + { + sign = FT_BOOL( *p == '-' ); + + p++; + if ( p == limit ) + goto Bad; + + /* only a single sign is allowed */ + if ( *p == '-' || *p == '+' ) + return 0; + } + + num_limit = 0x7FFFFFFFL / base; + c_limit = (FT_Char)( 0x7FFFFFFFL % base ); + + for ( ; p < limit; p++ ) + { + FT_Char c; + + + if ( IS_PS_SPACE( *p ) || *p OP 0x80 ) + break; + + c = ft_char_table[*p & 0x7F]; + + if ( c < 0 || c >= base ) + break; + + if ( num > num_limit || ( num == num_limit && c > c_limit ) ) + have_overflow = 1; + else + num = num * base + c; + } + + *cursor = p; + + if ( have_overflow ) + { + num = 0x7FFFFFFFL; + FT_TRACE4(( "!!!OVERFLOW:!!!" )); + } + + if ( sign ) + num = -num; + + return num; + + Bad: + FT_TRACE4(( "!!!END OF DATA:!!!" )); + return 0; + } + + + FT_LOCAL_DEF( FT_Long ) + PS_Conv_ToInt( FT_Byte** cursor, + FT_Byte* limit ) + + { + FT_Byte* p = *cursor; + FT_Byte* curp; + + FT_Long num; + + + curp = p; + num = PS_Conv_Strtol( &p, limit, 10 ); + + if ( p == curp ) + return 0; + + if ( p < limit && *p == '#' ) + { + p++; + + curp = p; + num = PS_Conv_Strtol( &p, limit, num ); + + if ( p == curp ) + return 0; + } + + *cursor = p; + + return num; + } + + + FT_LOCAL_DEF( FT_Fixed ) + PS_Conv_ToFixed( FT_Byte** cursor, + FT_Byte* limit, + FT_Long power_ten ) + { + FT_Byte* p = *cursor; + FT_Byte* curp; + + FT_Fixed integral = 0; + FT_Long decimal = 0; + FT_Long divider = 1; + + FT_Bool sign = 0; + FT_Bool have_overflow = 0; + FT_Bool have_underflow = 0; + + + if ( p >= limit ) + goto Bad; + + if ( *p == '-' || *p == '+' ) + { + sign = FT_BOOL( *p == '-' ); + + p++; + if ( p == limit ) + goto Bad; + + /* only a single sign is allowed */ + if ( *p == '-' || *p == '+' ) + return 0; + } + + /* read the integer part */ + if ( *p != '.' ) + { + curp = p; + integral = PS_Conv_ToInt( &p, limit ); + + if ( p == curp ) + return 0; + + if ( integral > 0x7FFF ) + have_overflow = 1; + else + integral = (FT_Fixed)( (FT_UInt32)integral << 16 ); + } + + /* read the decimal part */ + if ( p < limit && *p == '.' ) + { + p++; + + for ( ; p < limit; p++ ) + { + FT_Char c; + + + if ( IS_PS_SPACE( *p ) || *p OP 0x80 ) + break; + + c = ft_char_table[*p & 0x7F]; + + if ( c < 0 || c >= 10 ) + break; + + /* only add digit if we don't overflow */ + if ( divider < 0xCCCCCCCL && decimal < 0xCCCCCCCL ) + { + decimal = decimal * 10 + c; + + if ( !integral && power_ten > 0 ) + power_ten--; + else + divider *= 10; + } + } + } + + /* read exponent, if any */ + if ( p + 1 < limit && ( *p == 'e' || *p == 'E' ) ) + { + FT_Long exponent; + + + p++; + + curp = p; + exponent = PS_Conv_ToInt( &p, limit ); + + if ( curp == p ) + return 0; + + /* arbitrarily limit exponent */ + if ( exponent > 1000 ) + have_overflow = 1; + else if ( exponent < -1000 ) + have_underflow = 1; + else + power_ten += exponent; + } + + *cursor = p; + + if ( !integral && !decimal ) + return 0; + + if ( have_overflow ) + goto Overflow; + if ( have_underflow ) + goto Underflow; + + while ( power_ten > 0 ) + { + if ( integral >= 0xCCCCCCCL ) + goto Overflow; + integral *= 10; + + if ( decimal >= 0xCCCCCCCL ) + { + if ( divider == 1 ) + goto Overflow; + divider /= 10; + } + else + decimal *= 10; + + power_ten--; + } + + while ( power_ten < 0 ) + { + integral /= 10; + if ( divider < 0xCCCCCCCL ) + divider *= 10; + else + decimal /= 10; + + if ( !integral && !decimal ) + goto Underflow; + + power_ten++; + } + + if ( decimal ) + { + decimal = FT_DivFix( decimal, divider ); + /* it's not necessary to check this addition for overflow */ + /* due to the structure of the real number representation */ + integral += decimal; + } + + Exit: + if ( sign ) + integral = -integral; + + return integral; + + Bad: + FT_TRACE4(( "!!!END OF DATA:!!!" )); + return 0; + + Overflow: + integral = 0x7FFFFFFFL; + FT_TRACE4(( "!!!OVERFLOW:!!!" )); + goto Exit; + + Underflow: + FT_TRACE4(( "!!!UNDERFLOW:!!!" )); + return 0; + } + + +#if 0 + FT_LOCAL_DEF( FT_UInt ) + PS_Conv_StringDecode( FT_Byte** cursor, + FT_Byte* limit, + FT_Byte* buffer, + FT_Offset n ) + { + FT_Byte* p; + FT_UInt r = 0; + + + for ( p = *cursor; r < n && p < limit; p++ ) + { + FT_Byte b; + + + if ( *p != '\\' ) + { + buffer[r++] = *p; + + continue; + } + + p++; + + switch ( *p ) + { + case 'n': + b = '\n'; + break; + case 'r': + b = '\r'; + break; + case 't': + b = '\t'; + break; + case 'b': + b = '\b'; + break; + case 'f': + b = '\f'; + break; + case '\r': + p++; + if ( *p != '\n' ) + { + b = *p; + + break; + } + /* no break */ + case '\n': + continue; + break; + default: + if ( IS_PS_DIGIT( *p ) ) + { + b = *p - '0'; + + p++; + + if ( IS_PS_DIGIT( *p ) ) + { + b = b * 8 + *p - '0'; + + p++; + + if ( IS_PS_DIGIT( *p ) ) + b = b * 8 + *p - '0'; + else + { + buffer[r++] = b; + b = *p; + } + } + else + { + buffer[r++] = b; + b = *p; + } + } + else + b = *p; + break; + } + + buffer[r++] = b; + } + + *cursor = p; + + return r; + } +#endif /* 0 */ + + + FT_LOCAL_DEF( FT_UInt ) + PS_Conv_ASCIIHexDecode( FT_Byte** cursor, + FT_Byte* limit, + FT_Byte* buffer, + FT_Offset n ) + { + FT_Byte* p; + FT_UInt r = 0; + FT_UInt w = 0; + FT_UInt pad = 0x01; + + + n *= 2; + +#if 1 + + p = *cursor; + + if ( p >= limit ) + return 0; + + if ( n > (FT_UInt)( limit - p ) ) + n = (FT_UInt)( limit - p ); + + /* we try to process two nibbles at a time to be as fast as possible */ + for ( ; r < n; r++ ) + { + FT_UInt c = p[r]; + + + if ( IS_PS_SPACE( c ) ) + continue; + + if ( c OP 0x80 ) + break; + + c = (FT_UInt)ft_char_table[c & 0x7F]; + if ( c >= 16 ) + break; + + pad = ( pad << 4 ) | c; + if ( pad & 0x100 ) + { + buffer[w++] = (FT_Byte)pad; + pad = 0x01; + } + } + + if ( pad != 0x01 ) + buffer[w++] = (FT_Byte)( pad << 4 ); + + *cursor = p + r; + + return w; + +#else /* 0 */ + + for ( r = 0; r < n; r++ ) + { + FT_Char c; + + + if ( IS_PS_SPACE( *p ) ) + continue; + + if ( *p OP 0x80 ) + break; + + c = ft_char_table[*p & 0x7F]; + + if ( (unsigned)c >= 16 ) + break; + + if ( r & 1 ) + { + *buffer = (FT_Byte)( *buffer + c ); + buffer++; + } + else + *buffer = (FT_Byte)( c << 4 ); + + r++; + } + + *cursor = p; + + return ( r + 1 ) / 2; + +#endif /* 0 */ + + } + + + FT_LOCAL_DEF( FT_UInt ) + PS_Conv_EexecDecode( FT_Byte** cursor, + FT_Byte* limit, + FT_Byte* buffer, + FT_Offset n, + FT_UShort* seed ) + { + FT_Byte* p; + FT_UInt r; + FT_UInt s = *seed; + + +#if 1 + + p = *cursor; + + if ( p >= limit ) + return 0; + + if ( n > (FT_UInt)( limit - p ) ) + n = (FT_UInt)( limit - p ); + + for ( r = 0; r < n; r++ ) + { + FT_UInt val = p[r]; + FT_UInt b = ( val ^ ( s >> 8 ) ); + + + s = ( (val + s)*52845U + 22719 ) & 0xFFFFU; + buffer[r] = (FT_Byte) b; + } + + *cursor = p + n; + *seed = (FT_UShort)s; + +#else /* 0 */ + + for ( r = 0, p = *cursor; r < n && p < limit; r++, p++ ) + { + FT_Byte b = (FT_Byte)( *p ^ ( s >> 8 ) ); + + + s = (FT_UShort)( ( *p + s ) * 52845U + 22719 ); + *buffer++ = b; + } + *cursor = p; + *seed = s; + +#endif /* 0 */ + + return r; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psconv.h b/non-source/foreign/freetype2/src/psaux/psconv.h new file mode 100644 index 000000000..91fcd15a1 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psconv.h @@ -0,0 +1,70 @@ +/**************************************************************************** + * + * psconv.h + * + * Some convenience conversions (specification). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSCONV_H_ +#define PSCONV_H_ + + +#include <freetype/internal/psaux.h> + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Long ) + PS_Conv_Strtol( FT_Byte** cursor, + FT_Byte* limit, + FT_Long base ); + + + FT_LOCAL( FT_Long ) + PS_Conv_ToInt( FT_Byte** cursor, + FT_Byte* limit ); + + FT_LOCAL( FT_Fixed ) + PS_Conv_ToFixed( FT_Byte** cursor, + FT_Byte* limit, + FT_Long power_ten ); + +#if 0 + FT_LOCAL( FT_UInt ) + PS_Conv_StringDecode( FT_Byte** cursor, + FT_Byte* limit, + FT_Byte* buffer, + FT_Offset n ); +#endif + + FT_LOCAL( FT_UInt ) + PS_Conv_ASCIIHexDecode( FT_Byte** cursor, + FT_Byte* limit, + FT_Byte* buffer, + FT_Offset n ); + + FT_LOCAL( FT_UInt ) + PS_Conv_EexecDecode( FT_Byte** cursor, + FT_Byte* limit, + FT_Byte* buffer, + FT_Offset n, + FT_UShort* seed ); + + +FT_END_HEADER + +#endif /* PSCONV_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/pserror.c b/non-source/foreign/freetype2/src/psaux/pserror.c new file mode 100644 index 000000000..98cebcf74 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/pserror.c @@ -0,0 +1,52 @@ +/**************************************************************************** + * + * pserror.c + * + * Adobe's code for error handling (body). + * + * Copyright 2006-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include "pserror.h" + + + FT_LOCAL_DEF( void ) + cf2_setError( FT_Error* error, + FT_Error value ) + { + if ( error && !*error ) + *error = value; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/pserror.h b/non-source/foreign/freetype2/src/psaux/pserror.h new file mode 100644 index 000000000..5738853fa --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/pserror.h @@ -0,0 +1,120 @@ +/**************************************************************************** + * + * pserror.h + * + * Adobe's code for error handling (specification). + * + * Copyright 2006-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSERROR_H_ +#define PSERROR_H_ + + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX CF2_Err_ +#define FT_ERR_BASE FT_Mod_Err_CF2 + + +#include <freetype/fterrors.h> +#include <freetype/internal/compiler-macros.h> +#include "psft.h" + + +FT_BEGIN_HEADER + + + /* + * A poor-man error facility. + * + * This code being written in vanilla C, doesn't have the luxury of a + * language-supported exception mechanism such as the one available in + * Java. Instead, we are stuck with using error codes that must be + * carefully managed and preserved. However, it is convenient for us to + * model our error mechanism on a Java-like exception mechanism. + * When we assign an error code we are thus `throwing' an error. + * + * The preservation of an error code is done by coding convention. + * Upon a function call if the error code is anything other than + * `FT_Err_Ok', which is guaranteed to be zero, we + * will return without altering that error. This will allow the + * error to propagate and be handled at the appropriate location in + * the code. + * + * This allows a style of code where the error code is initialized + * up front and a block of calls are made with the error code only + * being checked after the block. If a new error occurs, the original + * error will be preserved and a functional no-op should result in any + * subsequent function that has an initial error code not equal to + * `FT_Err_Ok'. + * + * Errors are encoded by calling the `FT_THROW' macro. For example, + * + * { + * FT_Error e; + * + * + * ... + * e = FT_THROW( Out_Of_Memory ); + * } + * + */ + + + /* Set error code to a particular value. */ + FT_LOCAL( void ) + cf2_setError( FT_Error* error, + FT_Error value ); + + + /* + * A macro that conditionally sets an error code. + * + * This macro will first check whether `error' is set; + * if not, it will set it to `e'. + * + */ +#define CF2_SET_ERROR( error, e ) \ + cf2_setError( error, FT_THROW( e ) ) + + +FT_END_HEADER + + +#endif /* PSERROR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psfixed.h b/non-source/foreign/freetype2/src/psaux/psfixed.h new file mode 100644 index 000000000..299d07637 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psfixed.h @@ -0,0 +1,94 @@ +/**************************************************************************** + * + * psfixed.h + * + * Adobe's code for Fixed-Point Mathematics (specification only). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSFIXED_H_ +#define PSFIXED_H_ + + +FT_BEGIN_HEADER + + + /* rasterizer integer and fixed-point arithmetic must be 32-bit */ + +#define CF2_Fixed CF2_F16Dot16 + typedef FT_Int32 CF2_Frac; /* 2.30 fixed-point */ + + +#define CF2_FIXED_MAX ( (CF2_Fixed)0x7FFFFFFFL ) +#define CF2_FIXED_MIN ( (CF2_Fixed)0x80000000L ) +#define CF2_FIXED_ONE ( (CF2_Fixed)0x10000L ) +#define CF2_FIXED_EPSILON ( (CF2_Fixed)0x0001 ) + + /* in C 89, left and right shift of negative numbers is */ + /* implementation specific behaviour in the general case */ + +#define cf2_intToFixed( i ) \ + ( (CF2_Fixed)( (FT_UInt32)(i) << 16 ) ) +#define cf2_fixedToInt( x ) \ + ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) ) +#define cf2_fixedRound( x ) \ + ( (CF2_Fixed)( ( (FT_UInt32)(x) + 0x8000U ) & 0xFFFF0000UL ) ) +#define cf2_doubleToFixed( f ) \ + ( (CF2_Fixed)( (f) * 65536.0 + 0.5 ) ) +#define cf2_fixedAbs( x ) \ + ( (x) < 0 ? NEG_INT32( x ) : (x) ) +#define cf2_fixedFloor( x ) \ + ( (CF2_Fixed)( (FT_UInt32)(x) & 0xFFFF0000UL ) ) +#define cf2_fixedFraction( x ) \ + ( (x) - cf2_fixedFloor( x ) ) +#define cf2_fracToFixed( x ) \ + ( ( (x) + 0x2000 - ( (x) < 0 ) ) >> 14 ) + + + /* signed numeric types */ + typedef enum CF2_NumberType_ + { + CF2_NumberFixed, /* 16.16 */ + CF2_NumberFrac, /* 2.30 */ + CF2_NumberInt /* 32.0 */ + + } CF2_NumberType; + + +FT_END_HEADER + + +#endif /* PSFIXED_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psfont.c b/non-source/foreign/freetype2/src/psaux/psfont.c new file mode 100644 index 000000000..0db1f0c5b --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psfont.c @@ -0,0 +1,566 @@ +/**************************************************************************** + * + * psfont.c + * + * Adobe's code for font instances (body). + * + * Copyright 2007-2014 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include <freetype/internal/ftcalc.h> + +#include "psft.h" + +#include "psglue.h" +#include "psfont.h" +#include "pserror.h" +#include "psintrp.h" + + + /* Compute a stem darkening amount in character space. */ + static void + cf2_computeDarkening( CF2_Fixed emRatio, + CF2_Fixed ppem, + CF2_Fixed stemWidth, + CF2_Fixed* darkenAmount, + CF2_Fixed boldenAmount, + FT_Bool stemDarkened, + FT_Int* darkenParams ) + { + /* + * Total darkening amount is computed in 1000 unit character space + * using the modified 5 part curve as Adobe's Avalon rasterizer. + * The darkening amount is smaller for thicker stems. + * It becomes zero when the stem is thicker than 2.333 pixels. + * + * By default, we use + * + * darkenAmount = 0.4 pixels if scaledStem <= 0.5 pixels, + * darkenAmount = 0.275 pixels if 1 <= scaledStem <= 1.667 pixels, + * darkenAmount = 0 pixel if scaledStem >= 2.333 pixels, + * + * and piecewise linear in-between: + * + * + * darkening + * ^ + * | + * | (x1,y1) + * |--------+ + * | \ + * | \ + * | \ (x3,y3) + * | +----------+ + * | (x2,y2) \ + * | \ + * | \ + * | +----------------- + * | (x4,y4) + * +---------------------------------------------> stem + * thickness + * + * + * This corresponds to the following values for the + * `darkening-parameters' property: + * + * (x1, y1) = (500, 400) + * (x2, y2) = (1000, 275) + * (x3, y3) = (1667, 275) + * (x4, y4) = (2333, 0) + * + */ + + /* Internal calculations are done in units per thousand for */ + /* convenience. The x axis is scaled stem width in */ + /* thousandths of a pixel. That is, 1000 is 1 pixel. */ + /* The y axis is darkening amount in thousandths of a pixel.*/ + /* In the code, below, dividing by ppem and */ + /* adjusting for emRatio converts darkenAmount to character */ + /* space (font units). */ + CF2_Fixed stemWidthPer1000, scaledStem; + FT_Int logBase2; + + + *darkenAmount = 0; + + if ( boldenAmount == 0 && !stemDarkened ) + return; + + /* protect against range problems and divide by zero */ + if ( emRatio < cf2_doubleToFixed( .01 ) ) + return; + + if ( stemDarkened ) + { + FT_Int x1 = darkenParams[0]; + FT_Int y1 = darkenParams[1]; + FT_Int x2 = darkenParams[2]; + FT_Int y2 = darkenParams[3]; + FT_Int x3 = darkenParams[4]; + FT_Int y3 = darkenParams[5]; + FT_Int x4 = darkenParams[6]; + FT_Int y4 = darkenParams[7]; + + + /* convert from true character space to 1000 unit character space; */ + /* add synthetic emboldening effect */ + + /* `stemWidthPer1000' will not overflow for a legitimate font */ + + stemWidthPer1000 = FT_MulFix( stemWidth + boldenAmount, emRatio ); + + /* `scaledStem' can easily overflow, so we must clamp its maximum */ + /* value; the test doesn't need to be precise, but must be */ + /* conservative. The clamp value (default 2333) where */ + /* `darkenAmount' is zero is well below the overflow value of */ + /* 32767. */ + /* */ + /* FT_MSB computes the integer part of the base 2 logarithm. The */ + /* number of bits for the product is 1 or 2 more than the sum of */ + /* logarithms; remembering that the 16 lowest bits of the fraction */ + /* are dropped this is correct to within a factor of almost 4. */ + /* For example, 0x80.0000 * 0x80.0000 = 0x4000.0000 is 23+23 and */ + /* is flagged as possible overflow because 0xFF.FFFF * 0xFF.FFFF = */ + /* 0xFFFF.FE00 is also 23+23. */ + + logBase2 = FT_MSB( (FT_UInt32)stemWidthPer1000 ) + + FT_MSB( (FT_UInt32)ppem ); + + if ( logBase2 >= 46 ) + /* possible overflow */ + scaledStem = cf2_intToFixed( x4 ); + else + scaledStem = FT_MulFix( stemWidthPer1000, ppem ); + + /* now apply the darkening parameters */ + + if ( scaledStem < cf2_intToFixed( x1 ) ) + *darkenAmount = FT_DivFix( cf2_intToFixed( y1 ), ppem ); + + else if ( scaledStem < cf2_intToFixed( x2 ) ) + { + FT_Int xdelta = x2 - x1; + FT_Int ydelta = y2 - y1; + FT_Int x = stemWidthPer1000 - + FT_DivFix( cf2_intToFixed( x1 ), ppem ); + + + if ( !xdelta ) + goto Try_x3; + + *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) + + FT_DivFix( cf2_intToFixed( y1 ), ppem ); + } + + else if ( scaledStem < cf2_intToFixed( x3 ) ) + { + Try_x3: + { + FT_Int xdelta = x3 - x2; + FT_Int ydelta = y3 - y2; + FT_Int x = stemWidthPer1000 - + FT_DivFix( cf2_intToFixed( x2 ), ppem ); + + + if ( !xdelta ) + goto Try_x4; + + *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) + + FT_DivFix( cf2_intToFixed( y2 ), ppem ); + } + } + + else if ( scaledStem < cf2_intToFixed( x4 ) ) + { + Try_x4: + { + FT_Int xdelta = x4 - x3; + FT_Int ydelta = y4 - y3; + FT_Int x = stemWidthPer1000 - + FT_DivFix( cf2_intToFixed( x3 ), ppem ); + + + if ( !xdelta ) + goto Use_y4; + + *darkenAmount = FT_MulDiv( x, ydelta, xdelta ) + + FT_DivFix( cf2_intToFixed( y3 ), ppem ); + } + } + + else + { + Use_y4: + *darkenAmount = FT_DivFix( cf2_intToFixed( y4 ), ppem ); + } + + /* use half the amount on each side and convert back to true */ + /* character space */ + *darkenAmount = FT_DivFix( *darkenAmount, 2 * emRatio ); + } + + /* add synthetic emboldening effect in character space */ + *darkenAmount += boldenAmount / 2; + } + + + /* set up values for the current FontDict and matrix; */ + /* called for each glyph to be rendered */ + + /* caller's transform is adjusted for subpixel positioning */ + static void + cf2_font_setup( CF2_Font font, + const CF2_Matrix* transform ) + { + /* pointer to parsed font object */ + PS_Decoder* decoder = font->decoder; + + FT_Bool needExtraSetup = FALSE; + + CFF_VStoreRec* vstore; + FT_Bool hasVariations = FALSE; + + /* character space units */ + CF2_Fixed boldenX = font->syntheticEmboldeningAmountX; + CF2_Fixed boldenY = font->syntheticEmboldeningAmountY; + + CFF_SubFont subFont; + CF2_Fixed ppem; + + CF2_UInt lenNormalizedV = 0; + FT_Fixed* normalizedV = NULL; + + /* clear previous error */ + font->error = FT_Err_Ok; + + /* if a CID fontDict has changed, we need to recompute some cached */ + /* data */ + subFont = cf2_getSubfont( decoder ); + if ( font->lastSubfont != subFont ) + { + font->lastSubfont = subFont; + needExtraSetup = TRUE; + } + + if ( !font->isT1 ) + { + /* check for variation vectors */ + vstore = cf2_getVStore( decoder ); + hasVariations = ( vstore->dataCount != 0 ); + + 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, + &normalizedV ); + if ( font->error ) + return; + + if ( cffload->blend_check_vector( &subFont->blend, + subFont->private_dict.vsindex, + lenNormalizedV, + normalizedV ) ) + { + /* blend has changed, reparse */ + cffload->load_private_dict( decoder->cff, + subFont, + lenNormalizedV, + normalizedV ); + needExtraSetup = TRUE; + } +#endif + + /* copy from subfont */ + font->blend.font = subFont->blend.font; + + /* clear state of charstring blend */ + font->blend.usedBV = FALSE; + + /* initialize value for charstring */ + font->vsindex = subFont->private_dict.vsindex; + + /* store vector inputs for blends in charstring */ + font->lenNDV = lenNormalizedV; + font->NDV = normalizedV; + } + } + + /* if ppem has changed, we need to recompute some cached data */ + /* note: because of CID font matrix concatenation, ppem and transform */ + /* do not necessarily track. */ + ppem = cf2_getPpemY( decoder ); + if ( font->ppem != ppem ) + { + font->ppem = ppem; + needExtraSetup = TRUE; + } + + /* copy hinted flag on each call */ + font->hinted = FT_BOOL( font->renderingFlags & CF2_FlagsHinted ); + + /* determine if transform has changed; */ + /* include Fontmatrix but ignore translation */ + if ( ft_memcmp( transform, + &font->currentTransform, + 4 * sizeof ( CF2_Fixed ) ) != 0 ) + { + /* save `key' information for `cache of one' matrix data; */ + /* save client transform, without the translation */ + font->currentTransform = *transform; + font->currentTransform.tx = + font->currentTransform.ty = cf2_intToFixed( 0 ); + + /* TODO: FreeType transform is simple scalar; for now, use identity */ + /* for outer */ + font->innerTransform = *transform; + font->outerTransform.a = + font->outerTransform.d = cf2_intToFixed( 1 ); + font->outerTransform.b = + font->outerTransform.c = cf2_intToFixed( 0 ); + + needExtraSetup = TRUE; + } + + /* + * font->darkened is set to true if there is a stem darkening request or + * the font is synthetic emboldened. + * font->darkened controls whether to adjust blue zones, winding order, + * and hinting. + * + */ + if ( font->stemDarkened != ( font->renderingFlags & CF2_FlagsDarkened ) ) + { + font->stemDarkened = + FT_BOOL( font->renderingFlags & CF2_FlagsDarkened ); + + /* blue zones depend on darkened flag */ + needExtraSetup = TRUE; + } + + /* recompute variables that are dependent on transform or FontDict or */ + /* darken flag */ + if ( needExtraSetup ) + { + /* StdVW is found in the private dictionary; */ + /* recompute darkening amounts whenever private dictionary or */ + /* transform change */ + /* Note: a rendering flag turns darkening on or off, so we want to */ + /* store the `on' amounts; */ + /* darkening amount is computed in character space */ + /* TODO: testing size-dependent darkening here; */ + /* what to do for rotations? */ + + CF2_Fixed emRatio; + CF2_Fixed stdHW; + CF2_Int unitsPerEm = font->unitsPerEm; + + + if ( unitsPerEm == 0 ) + unitsPerEm = 1000; + + ppem = FT_MAX( cf2_intToFixed( 4 ), + font->ppem ); /* use minimum ppem of 4 */ + +#if 0 + /* since vstem is measured in the x-direction, we use the `a' member */ + /* of the fontMatrix */ + emRatio = cf2_fixedFracMul( cf2_intToFixed( 1000 ), fontMatrix->a ); +#endif + + /* Freetype does not preserve the fontMatrix when parsing; use */ + /* unitsPerEm instead. */ + /* TODO: check precision of this */ + emRatio = cf2_intToFixed( 1000 ) / unitsPerEm; + font->stdVW = cf2_getStdVW( decoder ); + + if ( font->stdVW <= 0 ) + font->stdVW = FT_DivFix( cf2_intToFixed( 75 ), emRatio ); + + if ( boldenX > 0 ) + { + /* Ensure that boldenX is at least 1 pixel for synthetic bold font */ + /* (similar to what Avalon does) */ + boldenX = FT_MAX( boldenX, + FT_DivFix( cf2_intToFixed( unitsPerEm ), ppem ) ); + + /* Synthetic emboldening adds at least 1 pixel to darkenX, while */ + /* stem darkening adds at most half pixel. Since the purpose of */ + /* stem darkening (readability at small sizes) is met with */ + /* synthetic emboldening, no need to add stem darkening for a */ + /* synthetic bold font. */ + cf2_computeDarkening( emRatio, + ppem, + font->stdVW, + &font->darkenX, + boldenX, + FALSE, + font->darkenParams ); + } + else + cf2_computeDarkening( emRatio, + ppem, + font->stdVW, + &font->darkenX, + 0, + font->stemDarkened, + font->darkenParams ); + +#if 0 + /* since hstem is measured in the y-direction, we use the `d' member */ + /* of the fontMatrix */ + /* TODO: use the same units per em as above; check this */ + emRatio = cf2_fixedFracMul( cf2_intToFixed( 1000 ), fontMatrix->d ); +#endif + + /* set the default stem width, because it must be the same for all */ + /* family members; */ + /* choose a constant for StdHW that depends on font contrast */ + stdHW = cf2_getStdHW( decoder ); + + if ( stdHW > 0 && font->stdVW > MUL_INT32( 2, stdHW ) ) + font->stdHW = FT_DivFix( cf2_intToFixed( 75 ), emRatio ); + else + { + /* low contrast font gets less hstem darkening */ + font->stdHW = FT_DivFix( cf2_intToFixed( 110 ), emRatio ); + } + + cf2_computeDarkening( emRatio, + ppem, + font->stdHW, + &font->darkenY, + boldenY, + font->stemDarkened, + font->darkenParams ); + + if ( font->darkenX != 0 || font->darkenY != 0 ) + font->darkened = TRUE; + else + font->darkened = FALSE; + + font->reverseWinding = FALSE; /* initial expectation is CCW */ + + /* compute blue zones for this instance */ + cf2_blues_init( &font->blues, font ); + + } /* needExtraSetup */ + } + + + /* equivalent to AdobeGetOutline */ + FT_LOCAL_DEF( FT_Error ) + cf2_getGlyphOutline( CF2_Font font, + CF2_Buffer charstring, + const CF2_Matrix* transform, + CF2_F16Dot16* glyphWidth ) + { + FT_Error lastError = FT_Err_Ok; + + FT_Vector translation; + +#if 0 + FT_Vector advancePoint; +#endif + + CF2_Fixed advWidth = 0; + FT_Bool needWinding; + + + /* Note: use both integer and fraction for outlines. This allows bbox */ + /* to come out directly. */ + + translation.x = transform->tx; + translation.y = transform->ty; + + /* set up values based on transform */ + cf2_font_setup( font, transform ); + if ( font->error ) + goto exit; /* setup encountered an error */ + + /* reset darken direction */ + font->reverseWinding = FALSE; + + /* winding order only affects darkening */ + needWinding = font->darkened; + + while ( 1 ) + { + /* reset output buffer */ + cf2_outline_reset( &font->outline ); + + /* build the outline, passing the full translation */ + cf2_interpT2CharString( font, + charstring, + (CF2_OutlineCallbacks)&font->outline, + &translation, + FALSE, + 0, + 0, + &advWidth ); + + if ( font->error ) + goto exit; + + if ( !needWinding ) + break; + + /* check winding order */ + if ( font->outline.root.windingMomentum >= 0 ) /* CFF is CCW */ + break; + + /* invert darkening and render again */ + /* TODO: this should be a parameter to getOutline-computeOffset */ + font->reverseWinding = TRUE; + + needWinding = FALSE; /* exit after next iteration */ + } + + /* finish storing client outline */ + cf2_outline_close( &font->outline ); + + exit: + /* FreeType just wants the advance width; there is no translation */ + *glyphWidth = advWidth; + + /* free resources and collect errors from objects we've used */ + cf2_setError( &font->error, lastError ); + + return font->error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psfont.h b/non-source/foreign/freetype2/src/psaux/psfont.h new file mode 100644 index 000000000..836fce4e4 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psfont.h @@ -0,0 +1,134 @@ +/**************************************************************************** + * + * psfont.h + * + * Adobe's code for font instances (specification). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSFONT_H_ +#define PSFONT_H_ + + +#include <freetype/internal/services/svcfftl.h> + +#include "psft.h" +#include "psblues.h" + + +FT_BEGIN_HEADER + + +#define CF2_OPERAND_STACK_SIZE 48 +#define CF2_MAX_SUBR 16 /* maximum subroutine nesting; */ + /* only 10 are allowed but there exist */ + /* fonts like `HiraKakuProN-W3.ttf' */ + /* (Hiragino Kaku Gothic ProN W3; */ + /* 8.2d6e1; 2014-12-19) that exceed */ + /* this limit */ +#define CF2_STORAGE_SIZE 32 + + + /* typedef is in `cf2glue.h' */ + struct CF2_FontRec_ + { + FT_Memory memory; + FT_Error error; /* shared error for this instance */ + + FT_Bool isT1; + FT_Bool isCFF2; + CF2_RenderingFlags renderingFlags; + + /* variables that depend on Transform: */ + /* the following have zero translation; */ + /* inner * outer = font * original */ + + CF2_Matrix currentTransform; /* original client matrix */ + CF2_Matrix innerTransform; /* for hinting; erect, scaled */ + CF2_Matrix outerTransform; /* post hinting; includes rotations */ + CF2_Fixed ppem; /* transform-dependent */ + + /* variation data */ + CFF_BlendRec blend; /* cached charstring blend vector */ + CF2_UInt vsindex; /* current vsindex */ + CF2_UInt lenNDV; /* current length NDV or zero */ + FT_Fixed* NDV; /* ptr to current NDV or NULL */ + + CF2_Int unitsPerEm; + + CF2_Fixed syntheticEmboldeningAmountX; /* character space units */ + CF2_Fixed syntheticEmboldeningAmountY; /* character space units */ + + /* FreeType related members */ + CF2_OutlineRec outline; /* freetype glyph outline functions */ + PS_Decoder* decoder; + CFF_SubFont lastSubfont; /* FreeType parsed data; */ + /* top font or subfont */ + + /* these flags can vary from one call to the next */ + FT_Bool hinted; + FT_Bool darkened; /* true if stemDarkened or synthetic bold */ + /* i.e. darkenX != 0 || darkenY != 0 */ + FT_Bool stemDarkened; + + FT_Int darkenParams[8]; /* 1000 unit character space */ + + /* variables that depend on both FontDict and Transform */ + CF2_Fixed stdVW; /* in character space; depends on dict entry */ + CF2_Fixed stdHW; /* in character space; depends on dict entry */ + CF2_Fixed darkenX; /* character space units */ + CF2_Fixed darkenY; /* depends on transform */ + /* and private dict (StdVW) */ + FT_Bool reverseWinding; /* darken assuming */ + /* counterclockwise winding */ + + CF2_BluesRec blues; /* computed zone data */ + + FT_Service_CFFLoad cffload; /* pointer to cff functions */ + }; + + + FT_LOCAL( FT_Error ) + cf2_getGlyphOutline( CF2_Font font, + CF2_Buffer charstring, + const CF2_Matrix* transform, + CF2_F16Dot16* glyphWidth ); + + +FT_END_HEADER + + +#endif /* PSFONT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psft.c b/non-source/foreign/freetype2/src/psaux/psft.c new file mode 100644 index 000000000..fd0abe171 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psft.c @@ -0,0 +1,895 @@ +/**************************************************************************** + * + * psft.c + * + * FreeType Glue Component to Adobe's Interpreter (body). + * + * Copyright 2013-2014 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include <freetype/internal/ftdebug.h> + +#include "psfont.h" +#include "pserror.h" +#include "psobjs.h" +#include "cffdecode.h" + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/ftmm.h> +#include <freetype/internal/services/svmm.h> +#endif + +#include <freetype/internal/services/svcfftl.h> + + +#define CF2_MAX_SIZE cf2_intToFixed( 2000 ) /* max ppem */ + + + /* + * This check should avoid most internal overflow cases. Clients should + * generally respond to `Glyph_Too_Big' by getting a glyph outline + * at EM size, scaling it and filling it as a graphics operation. + * + */ + static FT_Error + cf2_checkTransform( const CF2_Matrix* transform, + CF2_Int unitsPerEm ) + { + CF2_Fixed maxScale; + + + if ( transform->a <= 0 || transform->d <= 0 ) + return FT_THROW( Invalid_Size_Handle ); + + FT_ASSERT( unitsPerEm > 0 ); + FT_ASSERT( transform->b == 0 && transform->c == 0 ); + FT_ASSERT( transform->tx == 0 && transform->ty == 0 ); + + if ( unitsPerEm > 0x7FFF ) + return FT_THROW( Glyph_Too_Big ); + + maxScale = FT_DivFix( CF2_MAX_SIZE, cf2_intToFixed( unitsPerEm ) ); + + if ( transform->a > maxScale || transform->d > maxScale ) + return FT_THROW( Glyph_Too_Big ); + + return FT_Err_Ok; + } + + + static void + cf2_setGlyphWidth( CF2_Outline outline, + CF2_Fixed width ) + { + PS_Decoder* decoder = outline->decoder; + + + FT_ASSERT( decoder ); + + if ( !decoder->builder.is_t1 ) + *decoder->glyph_width = cf2_fixedToInt( width ); + } + + + /* Clean up font instance. */ + static void + cf2_free_instance( void* ptr ) + { + CF2_Font font = (CF2_Font)ptr; + + + if ( font ) + { + FT_Memory memory = font->memory; + + + FT_FREE( font->blend.lastNDV ); + FT_FREE( font->blend.BV ); + } + } + + + /********************************************* + * + * functions for handling client outline; + * FreeType uses coordinates in 26.6 format + * + */ + + static void + cf2_builder_moveTo( CF2_OutlineCallbacks callbacks, + const CF2_CallbackParams params ) + { + /* downcast the object pointer */ + CF2_Outline outline = (CF2_Outline)callbacks; + PS_Builder* builder; + + (void)params; /* only used in debug mode */ + + + FT_ASSERT( outline && outline->decoder ); + FT_ASSERT( params->op == CF2_PathOpMoveTo ); + + builder = &outline->decoder->builder; + + /* note: two successive moves simply close the contour twice */ + ps_builder_close_contour( builder ); + builder->path_begun = 0; + } + + + static void + cf2_builder_lineTo( CF2_OutlineCallbacks callbacks, + const CF2_CallbackParams params ) + { + FT_Error error; + + /* downcast the object pointer */ + CF2_Outline outline = (CF2_Outline)callbacks; + PS_Builder* builder; + + + FT_ASSERT( outline && outline->decoder ); + FT_ASSERT( params->op == CF2_PathOpLineTo ); + + builder = &outline->decoder->builder; + + if ( !builder->path_begun ) + { + /* record the move before the line; also check points and set */ + /* `path_begun' */ + error = ps_builder_start_point( builder, + params->pt0.x, + params->pt0.y ); + if ( error ) + { + if ( !*callbacks->error ) + *callbacks->error = error; + return; + } + } + + /* `ps_builder_add_point1' includes a check_points call for one point */ + error = ps_builder_add_point1( builder, + params->pt1.x, + params->pt1.y ); + if ( error ) + { + if ( !*callbacks->error ) + *callbacks->error = error; + return; + } + } + + + static void + cf2_builder_cubeTo( CF2_OutlineCallbacks callbacks, + const CF2_CallbackParams params ) + { + FT_Error error; + + /* downcast the object pointer */ + CF2_Outline outline = (CF2_Outline)callbacks; + PS_Builder* builder; + + + FT_ASSERT( outline && outline->decoder ); + FT_ASSERT( params->op == CF2_PathOpCubeTo ); + + builder = &outline->decoder->builder; + + if ( !builder->path_begun ) + { + /* record the move before the line; also check points and set */ + /* `path_begun' */ + error = ps_builder_start_point( builder, + params->pt0.x, + params->pt0.y ); + if ( error ) + { + if ( !*callbacks->error ) + *callbacks->error = error; + return; + } + } + + /* prepare room for 3 points: 2 off-curve, 1 on-curve */ + error = ps_builder_check_points( builder, 3 ); + if ( error ) + { + if ( !*callbacks->error ) + *callbacks->error = error; + return; + } + + ps_builder_add_point( builder, + params->pt1.x, + params->pt1.y, 0 ); + ps_builder_add_point( builder, + params->pt2.x, + params->pt2.y, 0 ); + ps_builder_add_point( builder, + params->pt3.x, + params->pt3.y, 1 ); + } + + + static void + cf2_outline_init( CF2_Outline outline, + FT_Memory memory, + FT_Error* error ) + { + FT_ZERO( outline ); + + outline->root.memory = memory; + outline->root.error = error; + + outline->root.moveTo = cf2_builder_moveTo; + outline->root.lineTo = cf2_builder_lineTo; + outline->root.cubeTo = cf2_builder_cubeTo; + } + + + /* get scaling and hint flag from GlyphSlot */ + static void + cf2_getScaleAndHintFlag( PS_Decoder* decoder, + CF2_Fixed* x_scale, + CF2_Fixed* y_scale, + FT_Bool* hinted, + FT_Bool* scaled ) + { + FT_ASSERT( decoder && decoder->builder.glyph ); + + /* note: FreeType scale includes a factor of 64 */ + *hinted = decoder->builder.glyph->hint; + *scaled = decoder->builder.glyph->scaled; + + if ( *hinted ) + { + *x_scale = ADD_INT32( decoder->builder.glyph->x_scale, 32 ) / 64; + *y_scale = ADD_INT32( decoder->builder.glyph->y_scale, 32 ) / 64; + } + else + { + /* for unhinted outlines, `cff_slot_load' does the scaling, */ + /* thus render at `unity' scale */ + + *x_scale = 0x0400; /* 1/64 as 16.16 */ + *y_scale = 0x0400; + } + } + + + /* get units per em from `FT_Face' */ + /* TODO: should handle font matrix concatenation? */ + static FT_UShort + cf2_getUnitsPerEm( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->builder.face ); + + return decoder->builder.face->units_per_EM; + } + + + /* Main entry point: Render one glyph. */ + FT_LOCAL_DEF( FT_Error ) + cf2_decoder_parse_charstrings( PS_Decoder* decoder, + FT_Byte* charstring_base, + FT_ULong charstring_len ) + { + FT_Memory memory; + FT_Error error = FT_Err_Ok; + CF2_Font font; + + FT_Bool is_t1 = decoder->builder.is_t1; + + + FT_ASSERT( decoder && + ( is_t1 || decoder->cff ) ); + + if ( is_t1 && !decoder->current_subfont ) + { + FT_ERROR(( "cf2_decoder_parse_charstrings (Type 1): " + "SubFont missing. Use `t1_make_subfont' first\n" )); + return FT_THROW( Invalid_Table ); + } + + memory = decoder->builder.memory; + + /* CF2 data is saved here across glyphs */ + font = (CF2_Font)decoder->cf2_instance->data; + + /* on first glyph, allocate instance structure */ + if ( !decoder->cf2_instance->data ) + { + decoder->cf2_instance->finalizer = + (FT_Generic_Finalizer)cf2_free_instance; + + if ( FT_ALLOC( decoder->cf2_instance->data, + sizeof ( CF2_FontRec ) ) ) + return FT_THROW( Out_Of_Memory ); + + font = (CF2_Font)decoder->cf2_instance->data; + + font->memory = memory; + + if ( !is_t1 ) + font->cffload = (FT_Service_CFFLoad)decoder->cff->cffload; + + /* initialize a client outline, to be shared by each glyph rendered */ + cf2_outline_init( &font->outline, font->memory, &font->error ); + } + + /* save decoder; it is a stack variable and will be different on each */ + /* call */ + font->decoder = decoder; + font->outline.decoder = decoder; + + { + /* build parameters for Adobe engine */ + + PS_Builder* builder = &decoder->builder; + PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face ); + + FT_Bool no_stem_darkening_driver = + driver->no_stem_darkening; + FT_Char no_stem_darkening_font = + builder->face->internal->no_stem_darkening; + + /* local error */ + FT_Error error2 = FT_Err_Ok; + CF2_BufferRec buf; + CF2_Matrix transform; + CF2_F16Dot16 glyphWidth; + + FT_Bool hinted; + FT_Bool scaled; + + + /* FreeType has already looked up the GID; convert to */ + /* `RegionBuffer', assuming that the input has been validated */ + FT_ASSERT( charstring_base + charstring_len >= charstring_base ); + + FT_ZERO( &buf ); + buf.start = + buf.ptr = charstring_base; + buf.end = FT_OFFSET( charstring_base, charstring_len ); + + FT_ZERO( &transform ); + + cf2_getScaleAndHintFlag( decoder, + &transform.a, + &transform.d, + &hinted, + &scaled ); + + if ( is_t1 ) + font->isCFF2 = FALSE; + else + { + /* copy isCFF2 boolean from TT_Face to CF2_Font */ + font->isCFF2 = ((TT_Face)builder->face)->is_cff2; + } + font->isT1 = is_t1; + + font->renderingFlags = 0; + if ( hinted ) + font->renderingFlags |= CF2_FlagsHinted; + if ( scaled && ( !no_stem_darkening_font || + ( no_stem_darkening_font < 0 && + !no_stem_darkening_driver ) ) ) + font->renderingFlags |= CF2_FlagsDarkened; + + font->darkenParams[0] = driver->darken_params[0]; + font->darkenParams[1] = driver->darken_params[1]; + font->darkenParams[2] = driver->darken_params[2]; + font->darkenParams[3] = driver->darken_params[3]; + font->darkenParams[4] = driver->darken_params[4]; + font->darkenParams[5] = driver->darken_params[5]; + font->darkenParams[6] = driver->darken_params[6]; + font->darkenParams[7] = driver->darken_params[7]; + + /* now get an outline for this glyph; */ + /* also get units per em to validate scale */ + font->unitsPerEm = (CF2_Int)cf2_getUnitsPerEm( decoder ); + + if ( scaled ) + { + error2 = cf2_checkTransform( &transform, font->unitsPerEm ); + if ( error2 ) + return error2; + } + + error2 = cf2_getGlyphOutline( font, &buf, &transform, &glyphWidth ); + if ( error2 ) + return FT_ERR( Invalid_File_Format ); + + cf2_setGlyphWidth( &font->outline, glyphWidth ); + + return FT_Err_Ok; + } + } + + + /* get pointer to current FreeType subfont (based on current glyphID) */ + FT_LOCAL_DEF( CFF_SubFont ) + cf2_getSubfont( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + return decoder->current_subfont; + } + + + /* get pointer to VStore structure */ + FT_LOCAL_DEF( CFF_VStore ) + cf2_getVStore( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->cff ); + + return &decoder->cff->vstore; + } + + + /* get maxstack value from CFF2 Top DICT */ + FT_LOCAL_DEF( FT_UInt ) + cf2_getMaxstack( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->cff ); + + return decoder->cff->top_font.font_dict.maxstack; + } + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* Get normalized design vector for current render request; */ + /* return pointer and length. */ + /* */ + /* Note: Uses FT_Fixed not CF2_Fixed for the vector. */ + FT_LOCAL_DEF( FT_Error ) + cf2_getNormalizedVector( PS_Decoder* decoder, + CF2_UInt *len, + FT_Fixed* *vec ) + { + TT_Face face; + FT_Service_MultiMasters mm; + + + FT_ASSERT( decoder && decoder->builder.face ); + FT_ASSERT( vec && len ); + FT_ASSERT( !decoder->builder.is_t1 ); + + face = (TT_Face)decoder->builder.face; + mm = (FT_Service_MultiMasters)face->mm; + + return mm->get_var_blend( FT_FACE( face ), len, NULL, vec, NULL ); + } +#endif + + + /* get `y_ppem' from `CFF_Size' */ + FT_LOCAL_DEF( CF2_Fixed ) + cf2_getPpemY( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && + decoder->builder.face && + decoder->builder.face->size ); + + /* + * Note that `y_ppem' can be zero if there wasn't a call to + * `FT_Set_Char_Size' or something similar. However, this isn't a + * problem since we come to this place in the code only if + * FT_LOAD_NO_SCALE is set (the other case gets caught by + * `cf2_checkTransform'). The ppem value is needed to compute the stem + * darkening, which is disabled for getting the unscaled outline. + * + */ + return cf2_intToFixed( + decoder->builder.face->size->metrics.y_ppem ); + } + + + /* get standard stem widths for the current subfont; */ + /* FreeType stores these as integer font units */ + /* (note: variable names seem swapped) */ + FT_LOCAL_DEF( CF2_Fixed ) + cf2_getStdVW( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + return cf2_intToFixed( + decoder->current_subfont->private_dict.standard_height ); + } + + + FT_LOCAL_DEF( CF2_Fixed ) + cf2_getStdHW( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + return cf2_intToFixed( + decoder->current_subfont->private_dict.standard_width ); + } + + + /* note: FreeType stores 1000 times the actual value for `BlueScale' */ + FT_LOCAL_DEF( void ) + cf2_getBlueMetrics( PS_Decoder* decoder, + CF2_Fixed* blueScale, + CF2_Fixed* blueShift, + CF2_Fixed* blueFuzz ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + *blueScale = FT_DivFix( + decoder->current_subfont->private_dict.blue_scale, + cf2_intToFixed( 1000 ) ); + *blueShift = cf2_intToFixed( + decoder->current_subfont->private_dict.blue_shift ); + *blueFuzz = cf2_intToFixed( + decoder->current_subfont->private_dict.blue_fuzz ); + } + + + /* get blue values counts and arrays; the FreeType parser has validated */ + /* the counts and verified that each is an even number */ + FT_LOCAL_DEF( void ) + cf2_getBlueValues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + *count = decoder->current_subfont->private_dict.num_blue_values; + *data = (FT_Fixed*) + &decoder->current_subfont->private_dict.blue_values; + } + + + FT_LOCAL_DEF( void ) + cf2_getOtherBlues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + *count = decoder->current_subfont->private_dict.num_other_blues; + *data = (FT_Fixed*) + &decoder->current_subfont->private_dict.other_blues; + } + + + FT_LOCAL_DEF( void ) + cf2_getFamilyBlues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + *count = decoder->current_subfont->private_dict.num_family_blues; + *data = (FT_Fixed*) + &decoder->current_subfont->private_dict.family_blues; + } + + + FT_LOCAL_DEF( void ) + cf2_getFamilyOtherBlues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + *count = decoder->current_subfont->private_dict.num_family_other_blues; + *data = (FT_Fixed*) + &decoder->current_subfont->private_dict.family_other_blues; + } + + + FT_LOCAL_DEF( CF2_Int ) + cf2_getLanguageGroup( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + return decoder->current_subfont->private_dict.language_group; + } + + + /* convert unbiased subroutine index to `CF2_Buffer' and */ + /* return 0 on success */ + FT_LOCAL_DEF( CF2_Int ) + cf2_initGlobalRegionBuffer( PS_Decoder* decoder, + CF2_Int subrNum, + CF2_Buffer buf ) + { + CF2_UInt idx; + + + FT_ASSERT( decoder ); + + FT_ZERO( buf ); + + idx = (CF2_UInt)( subrNum + decoder->globals_bias ); + if ( idx >= decoder->num_globals ) + return TRUE; /* error */ + + FT_ASSERT( decoder->globals ); + + buf->start = + buf->ptr = decoder->globals[idx]; + buf->end = decoder->globals[idx + 1]; + + return FALSE; /* success */ + } + + + /* convert AdobeStandardEncoding code to CF2_Buffer; */ + /* used for seac component */ + FT_LOCAL_DEF( FT_Error ) + cf2_getSeacComponent( PS_Decoder* decoder, + CF2_Int code, + CF2_Buffer buf ) + { + CF2_Int gid; + FT_Byte* charstring; + FT_ULong len; + FT_Error error; + + + FT_ASSERT( decoder ); + FT_ASSERT( !decoder->builder.is_t1 ); + + FT_ZERO( buf ); + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* Incremental fonts don't necessarily have valid charsets. */ + /* They use the character code, not the glyph index, in this case. */ + if ( decoder->builder.face->internal->incremental_interface ) + gid = code; + else +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + { + gid = cff_lookup_glyph_by_stdcharcode( decoder->cff, code ); + if ( gid < 0 ) + return FT_THROW( Invalid_Glyph_Format ); + } + + error = decoder->get_glyph_callback( (TT_Face)decoder->builder.face, + (CF2_UInt)gid, + &charstring, + &len ); + /* TODO: for now, just pass the FreeType error through */ + if ( error ) + return error; + + /* assume input has been validated */ + FT_ASSERT( charstring + len >= charstring ); + + buf->start = charstring; + buf->end = FT_OFFSET( charstring, len ); + buf->ptr = buf->start; + + return FT_Err_Ok; + } + + + FT_LOCAL_DEF( void ) + cf2_freeSeacComponent( PS_Decoder* decoder, + CF2_Buffer buf ) + { + FT_ASSERT( decoder ); + FT_ASSERT( !decoder->builder.is_t1 ); + + decoder->free_glyph_callback( (TT_Face)decoder->builder.face, + (FT_Byte**)&buf->start, + (FT_ULong)( buf->end - buf->start ) ); + } + + + FT_LOCAL_DEF( FT_Error ) + cf2_getT1SeacComponent( PS_Decoder* decoder, + FT_UInt glyph_index, + CF2_Buffer buf ) + { + FT_Data glyph_data; + FT_Error error = FT_Err_Ok; + T1_Face face = (T1_Face)decoder->builder.face; + T1_Font type1 = &face->type1; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + FT_Incremental_InterfaceRec *inc = + face->root.internal->incremental_interface; + + + /* For incremental fonts get the character data using the */ + /* callback function. */ + if ( inc ) + error = inc->funcs->get_glyph_data( inc->object, + glyph_index, &glyph_data ); + else +#endif + /* For ordinary fonts get the character data stored in the face record. */ + { + glyph_data.pointer = type1->charstrings[glyph_index]; + glyph_data.length = type1->charstrings_len[glyph_index]; + } + + if ( !error ) + { + FT_Byte* charstring_base = (FT_Byte*)glyph_data.pointer; + FT_ULong charstring_len = glyph_data.length; + + + FT_ASSERT( charstring_base + charstring_len >= charstring_base ); + + FT_ZERO( buf ); + buf->start = + buf->ptr = charstring_base; + buf->end = charstring_base + charstring_len; + } + + return error; + } + + + FT_LOCAL_DEF( void ) + cf2_freeT1SeacComponent( PS_Decoder* decoder, + CF2_Buffer buf ) + { +#ifdef FT_CONFIG_OPTION_INCREMENTAL + + T1_Face face; + FT_Data data; + + + FT_ASSERT( decoder ); + + face = (T1_Face)decoder->builder.face; + + data.pointer = buf->start; + data.length = (FT_UInt)( buf->end - buf->start ); + + if ( face->root.internal->incremental_interface ) + face->root.internal->incremental_interface->funcs->free_glyph_data( + face->root.internal->incremental_interface->object, + &data ); + +#else /* !FT_CONFIG_OPTION_INCREMENTAL */ + + FT_UNUSED( decoder ); + FT_UNUSED( buf ); + +#endif /* !FT_CONFIG_OPTION_INCREMENTAL */ + } + + + FT_LOCAL_DEF( CF2_Int ) + cf2_initLocalRegionBuffer( PS_Decoder* decoder, + CF2_Int subrNum, + CF2_Buffer buf ) + { + CF2_UInt idx; + + + FT_ASSERT( decoder ); + + FT_ZERO( buf ); + + idx = (CF2_UInt)( subrNum + decoder->locals_bias ); + if ( idx >= decoder->num_locals ) + return TRUE; /* error */ + + FT_ASSERT( decoder->locals ); + + buf->start = decoder->locals[idx]; + + if ( decoder->builder.is_t1 ) + { + /* 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. */ + if ( decoder->locals_len ) + buf->end = FT_OFFSET( buf->start, decoder->locals_len[idx] ); + else + { + /* We are using subroutines from a CID font. We must adjust */ + /* for the seed bytes. */ + buf->start += ( decoder->lenIV >= 0 ? decoder->lenIV : 0 ); + buf->end = decoder->locals[idx + 1]; + } + + if ( !buf->start ) + { + FT_ERROR(( "cf2_initLocalRegionBuffer (Type 1 mode):" + " invoking empty subrs\n" )); + } + } + else + { + buf->end = decoder->locals[idx + 1]; + } + + buf->ptr = buf->start; + + return FALSE; /* success */ + } + + + FT_LOCAL_DEF( CF2_Fixed ) + cf2_getDefaultWidthX( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + return cf2_intToFixed( + decoder->current_subfont->private_dict.default_width ); + } + + + FT_LOCAL_DEF( CF2_Fixed ) + cf2_getNominalWidthX( PS_Decoder* decoder ) + { + FT_ASSERT( decoder && decoder->current_subfont ); + + return cf2_intToFixed( + decoder->current_subfont->private_dict.nominal_width ); + } + + + FT_LOCAL_DEF( void ) + cf2_outline_reset( CF2_Outline outline ) + { + PS_Decoder* decoder = outline->decoder; + + + FT_ASSERT( decoder ); + + outline->root.windingMomentum = 0; + + FT_GlyphLoader_Rewind( decoder->builder.loader ); + } + + + FT_LOCAL_DEF( void ) + cf2_outline_close( CF2_Outline outline ) + { + PS_Decoder* decoder = outline->decoder; + + + FT_ASSERT( decoder ); + + ps_builder_close_contour( &decoder->builder ); + + FT_GlyphLoader_Add( decoder->builder.loader ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psft.h b/non-source/foreign/freetype2/src/psaux/psft.h new file mode 100644 index 000000000..d9082f3a2 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psft.h @@ -0,0 +1,167 @@ +/**************************************************************************** + * + * psft.h + * + * FreeType Glue Component to Adobe's Interpreter (specification). + * + * Copyright 2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSFT_H_ +#define PSFT_H_ + + +#include <freetype/internal/compiler-macros.h> +#include "pstypes.h" + + /* TODO: disable asserts for now */ +#define CF2_NDEBUG + + +#include <freetype/ftsystem.h> + +#include "psglue.h" +#include <freetype/internal/psaux.h> /* for PS_Decoder */ + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + cf2_decoder_parse_charstrings( PS_Decoder* decoder, + FT_Byte* charstring_base, + FT_ULong charstring_len ); + + FT_LOCAL( CFF_SubFont ) + cf2_getSubfont( PS_Decoder* decoder ); + + FT_LOCAL( CFF_VStore ) + cf2_getVStore( PS_Decoder* decoder ); + + FT_LOCAL( FT_UInt ) + cf2_getMaxstack( PS_Decoder* decoder ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_LOCAL( FT_Error ) + cf2_getNormalizedVector( PS_Decoder* decoder, + CF2_UInt *len, + FT_Fixed* *vec ); +#endif + + FT_LOCAL( CF2_Fixed ) + cf2_getPpemY( PS_Decoder* decoder ); + FT_LOCAL( CF2_Fixed ) + cf2_getStdVW( PS_Decoder* decoder ); + FT_LOCAL( CF2_Fixed ) + cf2_getStdHW( PS_Decoder* decoder ); + + FT_LOCAL( void ) + cf2_getBlueMetrics( PS_Decoder* decoder, + CF2_Fixed* blueScale, + CF2_Fixed* blueShift, + CF2_Fixed* blueFuzz ); + FT_LOCAL( void ) + cf2_getBlueValues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ); + FT_LOCAL( void ) + cf2_getOtherBlues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ); + FT_LOCAL( void ) + cf2_getFamilyBlues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ); + FT_LOCAL( void ) + cf2_getFamilyOtherBlues( PS_Decoder* decoder, + size_t* count, + FT_Fixed* *data ); + + FT_LOCAL( CF2_Int ) + cf2_getLanguageGroup( PS_Decoder* decoder ); + + FT_LOCAL( CF2_Int ) + cf2_initGlobalRegionBuffer( PS_Decoder* decoder, + CF2_Int subrNum, + CF2_Buffer buf ); + FT_LOCAL( FT_Error ) + cf2_getSeacComponent( PS_Decoder* decoder, + CF2_Int code, + CF2_Buffer buf ); + FT_LOCAL( void ) + cf2_freeSeacComponent( PS_Decoder* decoder, + CF2_Buffer buf ); + FT_LOCAL( CF2_Int ) + cf2_initLocalRegionBuffer( PS_Decoder* decoder, + CF2_Int subrNum, + CF2_Buffer buf ); + + FT_LOCAL( CF2_Fixed ) + cf2_getDefaultWidthX( PS_Decoder* decoder ); + FT_LOCAL( CF2_Fixed ) + cf2_getNominalWidthX( PS_Decoder* decoder ); + + + FT_LOCAL( FT_Error ) + cf2_getT1SeacComponent( PS_Decoder* decoder, + FT_UInt glyph_index, + CF2_Buffer buf ); + FT_LOCAL( void ) + cf2_freeT1SeacComponent( PS_Decoder* decoder, + CF2_Buffer buf ); + + /* + * FreeType client outline + * + * process output from the charstring interpreter + */ + typedef struct CF2_OutlineRec_ + { + CF2_OutlineCallbacksRec root; /* base class must be first */ + PS_Decoder* decoder; + + } CF2_OutlineRec, *CF2_Outline; + + + FT_LOCAL( void ) + cf2_outline_reset( CF2_Outline outline ); + FT_LOCAL( void ) + cf2_outline_close( CF2_Outline outline ); + + +FT_END_HEADER + + +#endif /* PSFT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psglue.h b/non-source/foreign/freetype2/src/psaux/psglue.h new file mode 100644 index 000000000..63085d71c --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psglue.h @@ -0,0 +1,144 @@ +/**************************************************************************** + * + * psglue.h + * + * Adobe's code for shared stuff (specification only). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSGLUE_H_ +#define PSGLUE_H_ + + +/* common includes for other modules */ +#include "pserror.h" +#include "psfixed.h" +#include "psarrst.h" +#include "psread.h" + + +FT_BEGIN_HEADER + + + /* rendering parameters */ + + /* apply hints to rendered glyphs */ +#define CF2_FlagsHinted 1 + /* for testing */ +#define CF2_FlagsDarkened 2 + + /* type for holding the flags */ + typedef CF2_Int CF2_RenderingFlags; + + + /* elements of a glyph outline */ + typedef enum CF2_PathOp_ + { + CF2_PathOpMoveTo = 1, /* change the current point */ + CF2_PathOpLineTo = 2, /* line */ + CF2_PathOpQuadTo = 3, /* quadratic curve */ + CF2_PathOpCubeTo = 4 /* cubic curve */ + + } CF2_PathOp; + + + /* a matrix of fixed-point values */ + typedef struct CF2_Matrix_ + { + CF2_F16Dot16 a; + CF2_F16Dot16 b; + CF2_F16Dot16 c; + CF2_F16Dot16 d; + CF2_F16Dot16 tx; + CF2_F16Dot16 ty; + + } CF2_Matrix; + + + /* these typedefs are needed by more than one header file */ + /* and gcc compiler doesn't allow redefinition */ + typedef struct CF2_FontRec_ CF2_FontRec, *CF2_Font; + typedef struct CF2_HintRec_ CF2_HintRec, *CF2_Hint; + + + /* A common structure for all callback parameters. */ + /* */ + /* Some members may be unused. For example, `pt0' is not used for */ + /* `moveTo' and `pt3' is not used for `quadTo'. The initial point `pt0' */ + /* is included for each path element for generality; curve conversions */ + /* need it. The `op' parameter allows one function to handle multiple */ + /* element types. */ + + typedef struct CF2_CallbackParamsRec_ + { + FT_Vector pt0; + FT_Vector pt1; + FT_Vector pt2; + FT_Vector pt3; + + CF2_Int op; + + } CF2_CallbackParamsRec, *CF2_CallbackParams; + + + /* forward reference */ + typedef struct CF2_OutlineCallbacksRec_ CF2_OutlineCallbacksRec, + *CF2_OutlineCallbacks; + + /* callback function pointers */ + typedef void + (*CF2_Callback_Type)( CF2_OutlineCallbacks callbacks, + const CF2_CallbackParams params ); + + + struct CF2_OutlineCallbacksRec_ + { + CF2_Callback_Type moveTo; + CF2_Callback_Type lineTo; + CF2_Callback_Type quadTo; + CF2_Callback_Type cubeTo; + + CF2_Int windingMomentum; /* for winding order detection */ + + FT_Memory memory; + FT_Error* error; + }; + + +FT_END_HEADER + + +#endif /* PSGLUE_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/pshints.c b/non-source/foreign/freetype2/src/psaux/pshints.c new file mode 100644 index 000000000..7bd08a9c9 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/pshints.c @@ -0,0 +1,1952 @@ +/**************************************************************************** + * + * pshints.c + * + * Adobe's code for handling CFF hints (body). + * + * Copyright 2007-2014 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include <freetype/internal/ftdebug.h> + +#include "psglue.h" +#include "psfont.h" +#include "pshints.h" +#include "psintrp.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cf2hints + + + typedef struct CF2_HintMoveRec_ + { + size_t j; /* index of upper hint map edge */ + CF2_Fixed moveUp; /* adjustment to optimum position */ + + } CF2_HintMoveRec, *CF2_HintMove; + + + /* Compute angular momentum for winding order detection. It is called */ + /* for all lines and curves, but not necessarily in element order. */ + static CF2_Int + cf2_getWindingMomentum( CF2_Fixed x1, + CF2_Fixed y1, + CF2_Fixed x2, + CF2_Fixed y2 ) + { + /* cross product of pt1 position from origin with pt2 position from */ + /* pt1; we reduce the precision so that the result fits into 32 bits */ + + return ( x1 >> 16 ) * ( SUB_INT32( y2, y1 ) >> 16 ) - + ( y1 >> 16 ) * ( SUB_INT32( x2, x1 ) >> 16 ); + } + + + /* + * Construct from a StemHint; this is used as a parameter to + * `cf2_blues_capture'. + * `hintOrigin' is the character space displacement of a seac accent. + * Adjust stem hint for darkening here. + * + */ + static void + cf2_hint_init( CF2_Hint hint, + const CF2_ArrStack stemHintArray, + size_t indexStemHint, + const CF2_Font font, + CF2_Fixed hintOrigin, + CF2_Fixed scale, + FT_Bool bottom ) + { + CF2_Fixed width; + const CF2_StemHintRec* stemHint; + + + FT_ZERO( hint ); + + stemHint = (const CF2_StemHintRec*)cf2_arrstack_getPointer( + stemHintArray, + indexStemHint ); + + width = SUB_INT32( stemHint->max, stemHint->min ); + + if ( width == cf2_intToFixed( -21 ) ) + { + /* ghost bottom */ + + if ( bottom ) + { + hint->csCoord = stemHint->max; + hint->flags = CF2_GhostBottom; + } + else + hint->flags = 0; + } + + else if ( width == cf2_intToFixed( -20 ) ) + { + /* ghost top */ + + if ( bottom ) + hint->flags = 0; + else + { + hint->csCoord = stemHint->min; + hint->flags = CF2_GhostTop; + } + } + + else if ( width < 0 ) + { + /* inverted pair */ + + /* + * Hints with negative widths were produced by an early version of a + * non-Adobe font tool. The Type 2 spec allows edge (ghost) hints + * with negative widths, but says + * + * All other negative widths have undefined meaning. + * + * CoolType has a silent workaround that negates the hint width; for + * permissive mode, we do the same here. + * + * Note: Such fonts cannot use ghost hints, but should otherwise work. + * Note: Some poor hints in our faux fonts can produce negative + * widths at some blends. For example, see a light weight of + * `u' in ASerifMM. + * + */ + if ( bottom ) + { + hint->csCoord = stemHint->max; + hint->flags = CF2_PairBottom; + } + else + { + hint->csCoord = stemHint->min; + hint->flags = CF2_PairTop; + } + } + + else + { + /* normal pair */ + + if ( bottom ) + { + hint->csCoord = stemHint->min; + hint->flags = CF2_PairBottom; + } + else + { + hint->csCoord = stemHint->max; + hint->flags = CF2_PairTop; + } + } + + /* Now that ghost hints have been detected, adjust this edge for */ + /* darkening. Bottoms are not changed; tops are incremented by twice */ + /* `darkenY'. */ + if ( cf2_hint_isTop( hint ) ) + hint->csCoord = ADD_INT32( hint->csCoord, 2 * font->darkenY ); + + hint->csCoord = ADD_INT32( hint->csCoord, hintOrigin ); + hint->scale = scale; + hint->index = indexStemHint; /* index in original stem hint array */ + + /* if original stem hint has been used, use the same position */ + if ( hint->flags != 0 && stemHint->used ) + { + if ( cf2_hint_isTop( hint ) ) + hint->dsCoord = stemHint->maxDS; + else + hint->dsCoord = stemHint->minDS; + + cf2_hint_lock( hint ); + } + else + hint->dsCoord = FT_MulFix( hint->csCoord, scale ); + } + + + /* initialize an invalid hint map element */ + static void + cf2_hint_initZero( CF2_Hint hint ) + { + FT_ZERO( hint ); + } + + + FT_LOCAL_DEF( FT_Bool ) + cf2_hint_isValid( const CF2_Hint hint ) + { + return FT_BOOL( hint->flags ); + } + + + static FT_Bool + cf2_hint_isPair( const CF2_Hint hint ) + { + return FT_BOOL( hint->flags & ( CF2_PairBottom | CF2_PairTop ) ); + } + + + static FT_Bool + cf2_hint_isPairTop( const CF2_Hint hint ) + { + return FT_BOOL( hint->flags & CF2_PairTop ); + } + + + FT_LOCAL_DEF( FT_Bool ) + cf2_hint_isTop( const CF2_Hint hint ) + { + return FT_BOOL( hint->flags & ( CF2_PairTop | CF2_GhostTop ) ); + } + + + FT_LOCAL_DEF( FT_Bool ) + cf2_hint_isBottom( const CF2_Hint hint ) + { + return FT_BOOL( hint->flags & ( CF2_PairBottom | CF2_GhostBottom ) ); + } + + + static FT_Bool + cf2_hint_isLocked( const CF2_Hint hint ) + { + return FT_BOOL( hint->flags & CF2_Locked ); + } + + + static FT_Bool + cf2_hint_isSynthetic( const CF2_Hint hint ) + { + return FT_BOOL( hint->flags & CF2_Synthetic ); + } + + + FT_LOCAL_DEF( void ) + cf2_hint_lock( CF2_Hint hint ) + { + hint->flags |= CF2_Locked; + } + + + FT_LOCAL_DEF( void ) + cf2_hintmap_init( CF2_HintMap hintmap, + CF2_Font font, + CF2_HintMap initialMap, + CF2_ArrStack hintMoves, + CF2_Fixed scale ) + { + FT_ZERO( hintmap ); + + /* copy parameters from font instance */ + hintmap->hinted = font->hinted; + hintmap->scale = scale; + hintmap->font = font; + hintmap->initialHintMap = initialMap; + /* will clear in `cf2_hintmap_adjustHints' */ + hintmap->hintMoves = hintMoves; + } + + + static FT_Bool + cf2_hintmap_isValid( const CF2_HintMap hintmap ) + { + return hintmap->isValid; + } + + + static void + cf2_hintmap_dump( CF2_HintMap hintmap ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + CF2_UInt i; + + + FT_TRACE6(( " index csCoord dsCoord scale flags\n" )); + + for ( i = 0; i < hintmap->count; i++ ) + { + CF2_Hint hint = &hintmap->edge[i]; + + + FT_TRACE6(( " %3zu %7.2f %7.2f %5d %s%s%s%s\n", + hint->index, + hint->csCoord / 65536.0, + hint->dsCoord / ( hint->scale * 1.0 ), + hint->scale, + ( cf2_hint_isPair( hint ) ? "p" : "g" ), + ( cf2_hint_isTop( hint ) ? "t" : "b" ), + ( cf2_hint_isLocked( hint ) ? "L" : ""), + ( cf2_hint_isSynthetic( hint ) ? "S" : "" ) )); + } +#else + FT_UNUSED( hintmap ); +#endif + } + + + /* transform character space coordinate to device space using hint map */ + static CF2_Fixed + cf2_hintmap_map( CF2_HintMap hintmap, + CF2_Fixed csCoord ) + { + if ( hintmap->count == 0 || !hintmap->hinted ) + { + /* there are no hints; use uniform scale and zero offset */ + return FT_MulFix( csCoord, hintmap->scale ); + } + else + { + /* start linear search from last hit */ + CF2_UInt i = hintmap->lastIndex; + + + FT_ASSERT( hintmap->lastIndex < CF2_MAX_HINT_EDGES ); + + /* search up */ + while ( i < hintmap->count - 1 && + csCoord >= hintmap->edge[i + 1].csCoord ) + i += 1; + + /* search down */ + while ( i > 0 && csCoord < hintmap->edge[i].csCoord ) + i -= 1; + + hintmap->lastIndex = i; + + if ( i == 0 && csCoord < hintmap->edge[0].csCoord ) + { + /* special case for points below first edge: use uniform scale */ + return ADD_INT32( FT_MulFix( SUB_INT32( csCoord, + hintmap->edge[0].csCoord ), + hintmap->scale ), + hintmap->edge[0].dsCoord ); + } + else + { + /* + * Note: entries with duplicate csCoord are allowed. + * Use edge[i], the highest entry where csCoord >= entry[i].csCoord + */ + return ADD_INT32( FT_MulFix( SUB_INT32( csCoord, + hintmap->edge[i].csCoord ), + hintmap->edge[i].scale ), + hintmap->edge[i].dsCoord ); + } + } + } + + + /* + * This hinting policy moves a hint pair in device space so that one of + * its two edges is on a device pixel boundary (its fractional part is + * zero). `cf2_hintmap_insertHint' guarantees no overlap in CS + * space. Ensure here that there is no overlap in DS. + * + * In the first pass, edges are adjusted relative to adjacent hints. + * Those that are below have already been adjusted. Those that are + * above have not yet been adjusted. If a hint above blocks an + * adjustment to an optimal position, we will try again in a second + * pass. The second pass is top-down. + * + */ + + static void + cf2_hintmap_adjustHints( CF2_HintMap hintmap ) + { + size_t i, j; + + + cf2_arrstack_clear( hintmap->hintMoves ); /* working storage */ + + /* + * First pass is bottom-up (font hint order) without look-ahead. + * Locked edges are already adjusted. + * Unlocked edges begin with dsCoord from `initialHintMap'. + * Save edges that are not optimally adjusted in `hintMoves' array, + * and process them in second pass. + */ + + for ( i = 0; i < hintmap->count; i++ ) + { + FT_Bool isPair = cf2_hint_isPair( &hintmap->edge[i] ); + + /* final amount to move edge or edge pair */ + CF2_Fixed move = 0; + + CF2_Fixed dsCoord_i; + CF2_Fixed dsCoord_j; + + + /* index of upper edge (same value for ghost hint) */ + j = isPair ? i + 1 : i; + + FT_ASSERT( j < hintmap->count ); + FT_ASSERT( cf2_hint_isValid( &hintmap->edge[i] ) ); + FT_ASSERT( cf2_hint_isValid( &hintmap->edge[j] ) ); + FT_ASSERT( cf2_hint_isLocked( &hintmap->edge[i] ) == + cf2_hint_isLocked( &hintmap->edge[j] ) ); + + dsCoord_i = hintmap->edge[i].dsCoord; + dsCoord_j = hintmap->edge[j].dsCoord; + + if ( !cf2_hint_isLocked( &hintmap->edge[i] ) ) + { + /* hint edge is not locked, we can adjust it */ + CF2_Fixed fracDown = cf2_fixedFraction( dsCoord_i ); + CF2_Fixed fracUp = cf2_fixedFraction( dsCoord_j ); + + /* calculate all four possibilities; moves down are negative */ + CF2_Fixed downMoveDown = 0 - fracDown; + CF2_Fixed upMoveDown = 0 - fracUp; + CF2_Fixed downMoveUp = ( fracDown == 0 ) + ? 0 + : cf2_intToFixed( 1 ) - fracDown; + CF2_Fixed upMoveUp = ( fracUp == 0 ) + ? 0 + : cf2_intToFixed( 1 ) - fracUp; + + /* smallest move up */ + CF2_Fixed moveUp = FT_MIN( downMoveUp, upMoveUp ); + /* smallest move down */ + CF2_Fixed moveDown = FT_MAX( downMoveDown, upMoveDown ); + + CF2_Fixed downMinCounter = CF2_MIN_COUNTER; + CF2_Fixed upMinCounter = CF2_MIN_COUNTER; + FT_Bool saveEdge = FALSE; + + + /* minimum counter constraint doesn't apply when adjacent edges */ + /* are synthetic */ + /* TODO: doesn't seem a big effect; for now, reduce the code */ +#if 0 + if ( i == 0 || + cf2_hint_isSynthetic( &hintmap->edge[i - 1] ) ) + downMinCounter = 0; + + if ( j >= hintmap->count - 1 || + cf2_hint_isSynthetic( &hintmap->edge[j + 1] ) ) + upMinCounter = 0; +#endif + + /* is there room to move up? */ + /* there is if we are at top of array or the next edge is at or */ + /* beyond proposed move up? */ + if ( j >= hintmap->count - 1 || + hintmap->edge[j + 1].dsCoord >= + ADD_INT32( dsCoord_j, moveUp + upMinCounter ) ) + { + /* there is room to move up; is there also room to move down? */ + if ( i == 0 || + hintmap->edge[i - 1].dsCoord <= + ADD_INT32( dsCoord_i, moveDown - downMinCounter ) ) + { + /* move smaller absolute amount */ + move = ( -moveDown < moveUp ) ? moveDown : moveUp; /* optimum */ + } + else + move = moveUp; + } + else + { + /* is there room to move down? */ + if ( i == 0 || + hintmap->edge[i - 1].dsCoord <= + ADD_INT32( dsCoord_i, moveDown - downMinCounter ) ) + { + move = moveDown; + /* true if non-optimum move */ + saveEdge = FT_BOOL( moveUp < -moveDown ); + } + else + { + /* no room to move either way without overlapping or reducing */ + /* the counter too much */ + move = 0; + saveEdge = TRUE; + } + } + + /* Identify non-moves and moves down that aren't optimal, and save */ + /* them for second pass. */ + /* Do this only if there is an unlocked edge above (which could */ + /* possibly move). */ + if ( saveEdge && + j < hintmap->count - 1 && + !cf2_hint_isLocked( &hintmap->edge[j + 1] ) ) + { + CF2_HintMoveRec savedMove; + + + savedMove.j = j; + /* desired adjustment in second pass */ + savedMove.moveUp = moveUp - move; + + cf2_arrstack_push( hintmap->hintMoves, &savedMove ); + } + + /* move the edge(s) */ + hintmap->edge[i].dsCoord = ADD_INT32( dsCoord_i, move ); + if ( isPair ) + hintmap->edge[j].dsCoord = ADD_INT32( dsCoord_j, move ); + } + + /* assert there are no overlaps in device space; */ + /* ignore tests if there was overflow (that is, if */ + /* operands have the same sign but the sum does not) */ + FT_ASSERT( i == 0 || + ( ( dsCoord_i ^ move ) >= 0 && + ( dsCoord_i ^ hintmap->edge[i].dsCoord ) < 0 ) || + hintmap->edge[i - 1].dsCoord <= hintmap->edge[i].dsCoord ); + FT_ASSERT( i < j || + ( ( dsCoord_j ^ move ) >= 0 && + ( dsCoord_j ^ hintmap->edge[j].dsCoord ) < 0 ) || + hintmap->edge[i].dsCoord <= hintmap->edge[j].dsCoord ); + + /* adjust the scales, avoiding divide by zero */ + if ( i > 0 ) + { + if ( hintmap->edge[i].csCoord != hintmap->edge[i - 1].csCoord ) + hintmap->edge[i - 1].scale = + FT_DivFix( SUB_INT32( hintmap->edge[i].dsCoord, + hintmap->edge[i - 1].dsCoord ), + SUB_INT32( hintmap->edge[i].csCoord, + hintmap->edge[i - 1].csCoord ) ); + } + + if ( isPair ) + { + if ( hintmap->edge[j].csCoord != hintmap->edge[j - 1].csCoord ) + hintmap->edge[j - 1].scale = + FT_DivFix( SUB_INT32( hintmap->edge[j].dsCoord, + hintmap->edge[j - 1].dsCoord ), + SUB_INT32( hintmap->edge[j].csCoord, + hintmap->edge[j - 1].csCoord ) ); + + i += 1; /* skip upper edge on next loop */ + } + } + + /* second pass tries to move non-optimal hints up, in case there is */ + /* room now */ + for ( i = cf2_arrstack_size( hintmap->hintMoves ); i > 0; i-- ) + { + CF2_HintMove hintMove = (CF2_HintMove) + cf2_arrstack_getPointer( hintmap->hintMoves, i - 1 ); + + + j = hintMove->j; + + /* this was tested before the push, above */ + FT_ASSERT( j < hintmap->count - 1 ); + + /* is there room to move up? */ + if ( hintmap->edge[j + 1].dsCoord >= + ADD_INT32( hintmap->edge[j].dsCoord, + hintMove->moveUp + CF2_MIN_COUNTER ) ) + { + /* there is more room now, move edge up */ + hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord, + hintMove->moveUp ); + + if ( cf2_hint_isPair( &hintmap->edge[j] ) ) + { + FT_ASSERT( j > 0 ); + hintmap->edge[j - 1].dsCoord = + ADD_INT32( hintmap->edge[j - 1].dsCoord, hintMove->moveUp ); + } + } + } + } + + + /* insert hint edges into map, sorted by csCoord */ + static void + cf2_hintmap_insertHint( CF2_HintMap hintmap, + CF2_Hint bottomHintEdge, + CF2_Hint topHintEdge ) + { + CF2_UInt indexInsert; + + /* set default values, then check for edge hints */ + FT_Bool isPair = TRUE; + CF2_Hint firstHintEdge = bottomHintEdge; + CF2_Hint secondHintEdge = topHintEdge; + + + /* one or none of the input params may be invalid when dealing with */ + /* edge hints; at least one edge must be valid */ + FT_ASSERT( cf2_hint_isValid( bottomHintEdge ) || + cf2_hint_isValid( topHintEdge ) ); + + /* determine how many and which edges to insert */ + if ( !cf2_hint_isValid( bottomHintEdge ) ) + { + /* insert only the top edge */ + firstHintEdge = topHintEdge; + isPair = FALSE; + } + else if ( !cf2_hint_isValid( topHintEdge ) ) + { + /* insert only the bottom edge */ + isPair = FALSE; + } + + /* paired edges must be in proper order */ + if ( isPair && + topHintEdge->csCoord < bottomHintEdge->csCoord ) + return; + + /* linear search to find index value of insertion point */ + indexInsert = 0; + for ( ; indexInsert < hintmap->count; indexInsert++ ) + { + if ( hintmap->edge[indexInsert].csCoord >= firstHintEdge->csCoord ) + break; + } + + FT_TRACE7(( " Got hint at %.2f (%.2f)\n", + firstHintEdge->csCoord / 65536.0, + firstHintEdge->dsCoord / 65536.0 )); + if ( isPair ) + FT_TRACE7(( " Got hint at %.2f (%.2f)\n", + secondHintEdge->csCoord / 65536.0, + secondHintEdge->dsCoord / 65536.0 )); + + /* + * Discard any hints that overlap in character space. Most often, this + * is while building the initial map, where captured hints from all + * zones are combined. Define overlap to include hints that `touch' + * (overlap zero). Hiragino Sans/Gothic fonts have numerous hints that + * touch. Some fonts have non-ideographic glyphs that overlap our + * synthetic hints. + * + * Overlap also occurs when darkening stem hints that are close. + * + */ + if ( indexInsert < hintmap->count ) + { + /* we are inserting before an existing edge: */ + /* verify that an existing edge is not the same */ + if ( hintmap->edge[indexInsert].csCoord == firstHintEdge->csCoord ) + return; /* ignore overlapping stem hint */ + + /* verify that a new pair does not straddle the next edge */ + if ( isPair && + hintmap->edge[indexInsert].csCoord <= secondHintEdge->csCoord ) + return; /* ignore overlapping stem hint */ + + /* verify that we are not inserting between paired edges */ + if ( cf2_hint_isPairTop( &hintmap->edge[indexInsert] ) ) + return; /* ignore overlapping stem hint */ + } + + /* recompute device space locations using initial hint map */ + if ( cf2_hintmap_isValid( hintmap->initialHintMap ) && + !cf2_hint_isLocked( firstHintEdge ) ) + { + if ( isPair ) + { + /* Use hint map to position the center of stem, and nominal scale */ + /* to position the two edges. This preserves the stem width. */ + CF2_Fixed midpoint = + cf2_hintmap_map( + hintmap->initialHintMap, + ADD_INT32( + firstHintEdge->csCoord, + SUB_INT32 ( secondHintEdge->csCoord, + firstHintEdge->csCoord ) / 2 ) ); + CF2_Fixed halfWidth = + FT_MulFix( SUB_INT32( secondHintEdge->csCoord, + firstHintEdge->csCoord ) / 2, + hintmap->scale ); + + + firstHintEdge->dsCoord = SUB_INT32( midpoint, halfWidth ); + secondHintEdge->dsCoord = ADD_INT32( midpoint, halfWidth ); + } + else + firstHintEdge->dsCoord = cf2_hintmap_map( hintmap->initialHintMap, + firstHintEdge->csCoord ); + } + + /* + * Discard any hints that overlap in device space; this can occur + * because locked hints have been moved to align with blue zones. + * + * TODO: Although we might correct this later during adjustment, we + * don't currently have a way to delete a conflicting hint once it has + * been inserted. See v2.030 MinionPro-Regular, 12 ppem darkened, + * initial hint map for second path, glyph 945 (the perispomeni (tilde) + * in U+1F6E, Greek omega with psili and perispomeni). Darkening is + * 25. Pair 667,747 initially conflicts in design space with top edge + * 660. This is because 667 maps to 7.87, and the top edge was + * captured by a zone at 8.0. The pair is later successfully inserted + * in a zone without the top edge. In this zone it is adjusted to 8.0, + * and no longer conflicts with the top edge in design space. This + * means it can be included in yet a later zone which does have the top + * edge hint. This produces a small mismatch between the first and + * last points of this path, even though the hint masks are the same. + * The density map difference is tiny (1/256). + * + */ + + if ( indexInsert > 0 ) + { + /* we are inserting after an existing edge */ + if ( firstHintEdge->dsCoord < hintmap->edge[indexInsert - 1].dsCoord ) + return; + } + + if ( indexInsert < hintmap->count ) + { + /* we are inserting before an existing edge */ + if ( isPair ) + { + if ( secondHintEdge->dsCoord > hintmap->edge[indexInsert].dsCoord ) + return; + } + else + { + if ( firstHintEdge->dsCoord > hintmap->edge[indexInsert].dsCoord ) + return; + } + } + + /* make room to insert */ + { + CF2_UInt iSrc = hintmap->count - 1; + CF2_UInt iDst = isPair ? hintmap->count + 1 : hintmap->count; + + CF2_UInt count = hintmap->count - indexInsert; + + + if ( iDst >= CF2_MAX_HINT_EDGES ) + { + FT_TRACE4(( "cf2_hintmap_insertHint: too many hintmaps\n" )); + return; + } + + while ( count-- ) + hintmap->edge[iDst--] = hintmap->edge[iSrc--]; + + /* insert first edge */ + hintmap->edge[indexInsert] = *firstHintEdge; /* copy struct */ + hintmap->count += 1; + + FT_TRACE7(( " Inserting hint %.2f (%.2f)\n", + firstHintEdge->csCoord / 65536.0, + firstHintEdge->dsCoord / 65536.0 )); + + if ( isPair ) + { + /* insert second edge */ + hintmap->edge[indexInsert + 1] = *secondHintEdge; /* copy struct */ + hintmap->count += 1; + + FT_TRACE7(( " Inserting hint %.2f (%.2f)\n", + secondHintEdge->csCoord / 65536.0, + secondHintEdge->dsCoord / 65536.0 )); + + } + } + + return; + } + + + /* + * Build a map from hints and mask. + * + * This function may recur one level if `hintmap->initialHintMap' is not yet + * valid. + * If `initialMap' is true, simply build initial map. + * + * Synthetic hints are used in two ways. A hint at zero is inserted, if + * needed, in the initial hint map, to prevent translations from + * propagating across the origin. If synthetic em box hints are enabled + * for ideographic dictionaries, then they are inserted in all hint + * maps, including the initial one. + * + */ + FT_LOCAL_DEF( void ) + cf2_hintmap_build( CF2_HintMap hintmap, + CF2_ArrStack hStemHintArray, + CF2_ArrStack vStemHintArray, + CF2_HintMask hintMask, + CF2_Fixed hintOrigin, + FT_Bool initialMap ) + { + FT_Byte* maskPtr; + + CF2_Font font = hintmap->font; + CF2_HintMaskRec tempHintMask; + + size_t bitCount, i; + FT_Byte maskByte; + + + /* check whether initial map is constructed */ + if ( !initialMap && !cf2_hintmap_isValid( hintmap->initialHintMap ) ) + { + /* make recursive call with initialHintMap and temporary mask; */ + /* temporary mask will get all bits set, below */ + cf2_hintmask_init( &tempHintMask, hintMask->error ); + cf2_hintmap_build( hintmap->initialHintMap, + hStemHintArray, + vStemHintArray, + &tempHintMask, + hintOrigin, + TRUE ); + } + + if ( !cf2_hintmask_isValid( hintMask ) ) + { + /* without a hint mask, assume all hints are active */ + cf2_hintmask_setAll( hintMask, + cf2_arrstack_size( hStemHintArray ) + + cf2_arrstack_size( vStemHintArray ) ); + if ( !cf2_hintmask_isValid( hintMask ) ) + { + if ( font->isT1 ) + { + /* no error, just continue unhinted */ + *hintMask->error = FT_Err_Ok; + hintmap->hinted = FALSE; + } + return; /* too many stem hints */ + } + } + + /* begin by clearing the map */ + hintmap->count = 0; + hintmap->lastIndex = 0; + + /* make a copy of the hint mask so we can modify it */ + tempHintMask = *hintMask; + maskPtr = cf2_hintmask_getMaskPtr( &tempHintMask ); + + /* use the hStem hints only, which are first in the mask */ + bitCount = cf2_arrstack_size( hStemHintArray ); + + /* Defense-in-depth. Should never return here. */ + if ( bitCount > hintMask->bitCount ) + return; + + /* synthetic embox hints get highest priority */ + if ( font->blues.doEmBoxHints ) + { + CF2_HintRec dummy; + + + cf2_hint_initZero( &dummy ); /* invalid hint map element */ + + /* ghost bottom */ + cf2_hintmap_insertHint( hintmap, + &font->blues.emBoxBottomEdge, + &dummy ); + /* ghost top */ + cf2_hintmap_insertHint( hintmap, + &dummy, + &font->blues.emBoxTopEdge ); + } + + /* insert hints captured by a blue zone or already locked (higher */ + /* priority) */ + for ( i = 0, maskByte = 0x80; i < bitCount; i++ ) + { + if ( maskByte & *maskPtr ) + { + /* expand StemHint into two `CF2_Hint' elements */ + CF2_HintRec bottomHintEdge, topHintEdge; + + + cf2_hint_init( &bottomHintEdge, + hStemHintArray, + i, + font, + hintOrigin, + hintmap->scale, + TRUE /* bottom */ ); + cf2_hint_init( &topHintEdge, + hStemHintArray, + i, + font, + hintOrigin, + hintmap->scale, + FALSE /* top */ ); + + if ( cf2_hint_isLocked( &bottomHintEdge ) || + cf2_hint_isLocked( &topHintEdge ) || + cf2_blues_capture( &font->blues, + &bottomHintEdge, + &topHintEdge ) ) + { + /* insert captured hint into map */ + cf2_hintmap_insertHint( hintmap, &bottomHintEdge, &topHintEdge ); + + *maskPtr &= ~maskByte; /* turn off the bit for this hint */ + } + } + + if ( ( i & 7 ) == 7 ) + { + /* move to next mask byte */ + maskPtr++; + maskByte = 0x80; + } + else + maskByte >>= 1; + } + + /* initial hint map includes only captured hints plus maybe one at 0 */ + + /* + * TODO: There is a problem here because we are trying to build a + * single hint map containing all captured hints. It is + * possible for there to be conflicts between captured hints, + * either because of darkening or because the hints are in + * separate hint zones (we are ignoring hint zones for the + * initial map). An example of the latter is MinionPro-Regular + * v2.030 glyph 883 (Greek Capital Alpha with Psili) at 15ppem. + * A stem hint for the psili conflicts with the top edge hint + * for the base character. The stem hint gets priority because + * of its sort order. In glyph 884 (Greek Capital Alpha with + * Psili and Oxia), the top of the base character gets a stem + * hint, and the psili does not. This creates different initial + * maps for the two glyphs resulting in different renderings of + * the base character. Will probably defer this either as not + * worth the cost or as a font bug. I don't think there is any + * good reason for an accent to be captured by an alignment + * zone. -darnold 2/12/10 + */ + + if ( initialMap ) + { + /* Apply a heuristic that inserts a point for (0,0), unless it's */ + /* already covered by a mapping. This locks the baseline for glyphs */ + /* that have no baseline hints. */ + + if ( hintmap->count == 0 || + hintmap->edge[0].csCoord > 0 || + hintmap->edge[hintmap->count - 1].csCoord < 0 ) + { + /* all edges are above 0 or all edges are below 0; */ + /* construct a locked edge hint at 0 */ + + CF2_HintRec edge, invalid; + + + cf2_hint_initZero( &edge ); + + edge.flags = CF2_GhostBottom | + CF2_Locked | + CF2_Synthetic; + edge.scale = hintmap->scale; + + cf2_hint_initZero( &invalid ); + cf2_hintmap_insertHint( hintmap, &edge, &invalid ); + } + } + else + { + /* insert remaining hints */ + + maskPtr = cf2_hintmask_getMaskPtr( &tempHintMask ); + + for ( i = 0, maskByte = 0x80; i < bitCount; i++ ) + { + if ( maskByte & *maskPtr ) + { + CF2_HintRec bottomHintEdge, topHintEdge; + + + cf2_hint_init( &bottomHintEdge, + hStemHintArray, + i, + font, + hintOrigin, + hintmap->scale, + TRUE /* bottom */ ); + cf2_hint_init( &topHintEdge, + hStemHintArray, + i, + font, + hintOrigin, + hintmap->scale, + FALSE /* top */ ); + + cf2_hintmap_insertHint( hintmap, &bottomHintEdge, &topHintEdge ); + } + + if ( ( i & 7 ) == 7 ) + { + /* move to next mask byte */ + maskPtr++; + maskByte = 0x80; + } + else + maskByte >>= 1; + } + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( initialMap ) + { + FT_TRACE6(( "flags: [p]air [g]host [t]op" + " [b]ottom [L]ocked [S]ynthetic\n" )); + FT_TRACE6(( "Initial hintmap:\n" )); + } + else + FT_TRACE6(( "Hints:\n" )); +#endif + + cf2_hintmap_dump( hintmap ); + + /* + * Note: The following line is a convenient place to break when + * debugging hinting. Examine `hintmap->edge' for the list of + * enabled hints, then step over the call to see the effect of + * adjustment. We stop here first on the recursive call that + * creates the initial map, and then on each counter group and + * hint zone. + */ + + /* adjust positions of hint edges that are not locked to blue zones */ + cf2_hintmap_adjustHints( hintmap ); + + FT_TRACE6(( "Hints adjusted:\n" )); + cf2_hintmap_dump( hintmap ); + + /* save the position of all hints that were used in this hint map; */ + /* if we use them again, we'll locate them in the same position */ + if ( !initialMap ) + { + for ( i = 0; i < hintmap->count; i++ ) + { + if ( !cf2_hint_isSynthetic( &hintmap->edge[i] ) ) + { + /* Note: include both valid and invalid edges */ + /* Note: top and bottom edges are copied back separately */ + CF2_StemHint stemhint = (CF2_StemHint) + cf2_arrstack_getPointer( hStemHintArray, + hintmap->edge[i].index ); + + + if ( cf2_hint_isTop( &hintmap->edge[i] ) ) + stemhint->maxDS = hintmap->edge[i].dsCoord; + else + stemhint->minDS = hintmap->edge[i].dsCoord; + + stemhint->used = TRUE; + } + } + } + + /* hint map is ready to use */ + hintmap->isValid = TRUE; + + /* remember this mask has been used */ + cf2_hintmask_setNew( hintMask, FALSE ); + } + + + FT_LOCAL_DEF( void ) + cf2_glyphpath_init( CF2_GlyphPath glyphpath, + CF2_Font font, + CF2_OutlineCallbacks callbacks, + CF2_Fixed scaleY, + /* CF2_Fixed hShift, */ + CF2_ArrStack hStemHintArray, + CF2_ArrStack vStemHintArray, + CF2_HintMask hintMask, + CF2_Fixed hintOriginY, + const CF2_Blues blues, + const FT_Vector* fractionalTranslation ) + { + FT_ZERO( glyphpath ); + + glyphpath->font = font; + glyphpath->callbacks = callbacks; + + cf2_arrstack_init( &glyphpath->hintMoves, + font->memory, + &font->error, + sizeof ( CF2_HintMoveRec ) ); + + cf2_hintmap_init( &glyphpath->initialHintMap, + font, + &glyphpath->initialHintMap, + &glyphpath->hintMoves, + scaleY ); + cf2_hintmap_init( &glyphpath->firstHintMap, + font, + &glyphpath->initialHintMap, + &glyphpath->hintMoves, + scaleY ); + cf2_hintmap_init( &glyphpath->hintMap, + font, + &glyphpath->initialHintMap, + &glyphpath->hintMoves, + scaleY ); + + glyphpath->scaleX = font->innerTransform.a; + glyphpath->scaleC = font->innerTransform.c; + glyphpath->scaleY = font->innerTransform.d; + + glyphpath->fractionalTranslation = *fractionalTranslation; + +#if 0 + glyphpath->hShift = hShift; /* for fauxing */ +#endif + + glyphpath->hStemHintArray = hStemHintArray; + glyphpath->vStemHintArray = vStemHintArray; + glyphpath->hintMask = hintMask; /* ptr to current mask */ + glyphpath->hintOriginY = hintOriginY; + glyphpath->blues = blues; + glyphpath->darken = font->darkened; /* TODO: should we make copies? */ + glyphpath->xOffset = font->darkenX; + glyphpath->yOffset = font->darkenY; + glyphpath->miterLimit = 2 * FT_MAX( + cf2_fixedAbs( glyphpath->xOffset ), + cf2_fixedAbs( glyphpath->yOffset ) ); + + /* .1 character space unit */ + glyphpath->snapThreshold = cf2_doubleToFixed( 0.1 ); + + glyphpath->moveIsPending = TRUE; + glyphpath->pathIsOpen = FALSE; + glyphpath->pathIsClosing = FALSE; + glyphpath->elemIsQueued = FALSE; + } + + + FT_LOCAL_DEF( void ) + cf2_glyphpath_finalize( CF2_GlyphPath glyphpath ) + { + cf2_arrstack_finalize( &glyphpath->hintMoves ); + } + + + /* + * Hint point in y-direction and apply outerTransform. + * Input `current' hint map (which is actually delayed by one element). + * Input x,y point in Character Space. + * Output x,y point in Device Space, including translation. + */ + static void + cf2_glyphpath_hintPoint( CF2_GlyphPath glyphpath, + CF2_HintMap hintmap, + FT_Vector* ppt, + CF2_Fixed x, + CF2_Fixed y ) + { + FT_Vector pt; /* hinted point in upright DS */ + + + pt.x = ADD_INT32( FT_MulFix( glyphpath->scaleX, x ), + FT_MulFix( glyphpath->scaleC, y ) ); + pt.y = cf2_hintmap_map( hintmap, y ); + + ppt->x = ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.a, pt.x ), + ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.c, pt.y ), + glyphpath->fractionalTranslation.x ) ); + ppt->y = ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.b, pt.x ), + ADD_INT32( + FT_MulFix( glyphpath->font->outerTransform.d, pt.y ), + glyphpath->fractionalTranslation.y ) ); + } + + + /* + * From two line segments, (u1,u2) and (v1,v2), compute a point of + * intersection on the corresponding lines. + * Return false if no intersection is found, or if the intersection is + * too far away from the ends of the line segments, u2 and v1. + * + */ + static FT_Bool + cf2_glyphpath_computeIntersection( CF2_GlyphPath glyphpath, + const FT_Vector* u1, + const FT_Vector* u2, + const FT_Vector* v1, + const FT_Vector* v2, + FT_Vector* intersection ) + { + /* + * Let `u' be a zero-based vector from the first segment, `v' from the + * second segment. + * Let `w 'be the zero-based vector from `u1' to `v1'. + * `perp' is the `perpendicular dot product'; see + * https://mathworld.wolfram.com/PerpDotProduct.html. + * `s' is the parameter for the parametric line for the first segment + * (`u'). + * + * See notation in + * http://geomalgorithms.com/a05-_intersect-1.html. + * Calculations are done in 16.16, but must handle the squaring of + * line lengths in character space. We scale all vectors by 1/32 to + * avoid overflow. This allows values up to 4095 to be squared. The + * scale factor cancels in the divide. + * + * TODO: the scale factor could be computed from UnitsPerEm. + * + */ + +#define cf2_perp( a, b ) \ + ( FT_MulFix( a.x, b.y ) - FT_MulFix( a.y, b.x ) ) + + /* round and divide by 32 */ +#define CF2_CS_SCALE( x ) \ + ( ( (x) + 0x10 ) >> 5 ) + + FT_Vector u, v, w; /* scaled vectors */ + CF2_Fixed denominator, s; + + + u.x = CF2_CS_SCALE( SUB_INT32( u2->x, u1->x ) ); + u.y = CF2_CS_SCALE( SUB_INT32( u2->y, u1->y ) ); + v.x = CF2_CS_SCALE( SUB_INT32( v2->x, v1->x ) ); + v.y = CF2_CS_SCALE( SUB_INT32( v2->y, v1->y ) ); + w.x = CF2_CS_SCALE( SUB_INT32( v1->x, u1->x ) ); + w.y = CF2_CS_SCALE( SUB_INT32( v1->y, u1->y ) ); + + denominator = cf2_perp( u, v ); + + if ( denominator == 0 ) + return FALSE; /* parallel or coincident lines */ + + s = FT_DivFix( cf2_perp( w, v ), denominator ); + + intersection->x = ADD_INT32( u1->x, + FT_MulFix( s, SUB_INT32( u2->x, u1->x ) ) ); + intersection->y = ADD_INT32( u1->y, + FT_MulFix( s, SUB_INT32( u2->y, u1->y ) ) ); + + + /* + * Special case snapping for horizontal and vertical lines. + * This cleans up intersections and reduces problems with winding + * order detection. + * Sample case is sbc cd KozGoPr6N-Medium.otf 20 16685. + * Note: these calculations are in character space. + * + */ + + if ( u1->x == u2->x && + cf2_fixedAbs( SUB_INT32( intersection->x, + u1->x ) ) < glyphpath->snapThreshold ) + intersection->x = u1->x; + if ( u1->y == u2->y && + cf2_fixedAbs( SUB_INT32( intersection->y, + u1->y ) ) < glyphpath->snapThreshold ) + intersection->y = u1->y; + + if ( v1->x == v2->x && + cf2_fixedAbs( SUB_INT32( intersection->x, + v1->x ) ) < glyphpath->snapThreshold ) + intersection->x = v1->x; + if ( v1->y == v2->y && + cf2_fixedAbs( SUB_INT32( intersection->y, + v1->y ) ) < glyphpath->snapThreshold ) + intersection->y = v1->y; + + /* limit the intersection distance from midpoint of u2 and v1 */ + if ( cf2_fixedAbs( intersection->x - ADD_INT32( u2->x, v1->x ) / 2 ) > + glyphpath->miterLimit || + cf2_fixedAbs( intersection->y - ADD_INT32( u2->y, v1->y ) / 2 ) > + glyphpath->miterLimit ) + return FALSE; + + return TRUE; + } + + + /* + * Push the cached element (glyphpath->prevElem*) to the outline + * consumer. When a darkening offset is used, the end point of the + * cached element may be adjusted to an intersection point or we may + * synthesize a connecting line to the current element. If we are + * closing a subpath, we may also generate a connecting line to the start + * point. + * + * This is where Character Space (CS) is converted to Device Space (DS) + * using a hint map. This calculation must use a HintMap that was valid + * at the time the element was saved. For the first point in a subpath, + * that is a saved HintMap. For most elements, it just means the caller + * has delayed building a HintMap from the current HintMask. + * + * Transform each point with outerTransform and call the outline + * callbacks. This is a general 3x3 transform: + * + * x' = a*x + c*y + tx, y' = b*x + d*y + ty + * + * but it uses 4 elements from CF2_Font and the translation part + * from CF2_GlyphPath. + * + */ + static void + cf2_glyphpath_pushPrevElem( CF2_GlyphPath glyphpath, + CF2_HintMap hintmap, + FT_Vector* nextP0, + FT_Vector nextP1, + FT_Bool close ) + { + CF2_CallbackParamsRec params; + + FT_Vector* prevP0; + FT_Vector* prevP1; + + FT_Vector intersection = { 0, 0 }; + FT_Bool useIntersection = FALSE; + + + FT_ASSERT( glyphpath->prevElemOp == CF2_PathOpLineTo || + glyphpath->prevElemOp == CF2_PathOpCubeTo ); + + if ( glyphpath->prevElemOp == CF2_PathOpLineTo ) + { + prevP0 = &glyphpath->prevElemP0; + prevP1 = &glyphpath->prevElemP1; + } + else + { + prevP0 = &glyphpath->prevElemP2; + prevP1 = &glyphpath->prevElemP3; + } + + /* optimization: if previous and next elements are offset by the same */ + /* amount, then there will be no gap, and no need to compute an */ + /* intersection. */ + if ( prevP1->x != nextP0->x || prevP1->y != nextP0->y ) + { + /* previous element does not join next element: */ + /* adjust end point of previous element to the intersection */ + useIntersection = cf2_glyphpath_computeIntersection( glyphpath, + prevP0, + prevP1, + nextP0, + &nextP1, + &intersection ); + if ( useIntersection ) + { + /* modify the last point of the cached element (either line or */ + /* curve) */ + *prevP1 = intersection; + } + } + + params.pt0 = glyphpath->currentDS; + + switch( glyphpath->prevElemOp ) + { + case CF2_PathOpLineTo: + params.op = CF2_PathOpLineTo; + + /* note: pt2 and pt3 are unused */ + + if ( close ) + { + /* use first hint map if closing */ + cf2_glyphpath_hintPoint( glyphpath, + &glyphpath->firstHintMap, + ¶ms.pt1, + glyphpath->prevElemP1.x, + glyphpath->prevElemP1.y ); + } + else + { + cf2_glyphpath_hintPoint( glyphpath, + hintmap, + ¶ms.pt1, + glyphpath->prevElemP1.x, + glyphpath->prevElemP1.y ); + } + + /* output only non-zero length lines */ + if ( params.pt0.x != params.pt1.x || params.pt0.y != params.pt1.y ) + { + glyphpath->callbacks->lineTo( glyphpath->callbacks, ¶ms ); + + glyphpath->currentDS = params.pt1; + } + break; + + case CF2_PathOpCubeTo: + params.op = CF2_PathOpCubeTo; + + /* TODO: should we intersect the interior joins (p1-p2 and p2-p3)? */ + cf2_glyphpath_hintPoint( glyphpath, + hintmap, + ¶ms.pt1, + glyphpath->prevElemP1.x, + glyphpath->prevElemP1.y ); + cf2_glyphpath_hintPoint( glyphpath, + hintmap, + ¶ms.pt2, + glyphpath->prevElemP2.x, + glyphpath->prevElemP2.y ); + cf2_glyphpath_hintPoint( glyphpath, + hintmap, + ¶ms.pt3, + glyphpath->prevElemP3.x, + glyphpath->prevElemP3.y ); + + glyphpath->callbacks->cubeTo( glyphpath->callbacks, ¶ms ); + + glyphpath->currentDS = params.pt3; + + break; + } + + if ( !useIntersection || close ) + { + /* insert connecting line between end of previous element and start */ + /* of current one */ + /* note: at the end of a subpath, we might do both, so use `nextP0' */ + /* before we change it, below */ + + if ( close ) + { + /* if we are closing the subpath, then nextP0 is in the first */ + /* hint zone */ + cf2_glyphpath_hintPoint( glyphpath, + &glyphpath->firstHintMap, + ¶ms.pt1, + nextP0->x, + nextP0->y ); + } + else + { + cf2_glyphpath_hintPoint( glyphpath, + hintmap, + ¶ms.pt1, + nextP0->x, + nextP0->y ); + } + + if ( params.pt1.x != glyphpath->currentDS.x || + params.pt1.y != glyphpath->currentDS.y ) + { + /* length is nonzero */ + params.op = CF2_PathOpLineTo; + params.pt0 = glyphpath->currentDS; + + /* note: pt2 and pt3 are unused */ + glyphpath->callbacks->lineTo( glyphpath->callbacks, ¶ms ); + + glyphpath->currentDS = params.pt1; + } + } + + if ( useIntersection ) + { + /* return intersection point to caller */ + *nextP0 = intersection; + } + } + + + /* push a MoveTo element based on current point and offset of current */ + /* element */ + static void + cf2_glyphpath_pushMove( CF2_GlyphPath glyphpath, + FT_Vector start ) + { + CF2_CallbackParamsRec params; + + + params.op = CF2_PathOpMoveTo; + params.pt0 = glyphpath->currentDS; + + /* Test if move has really happened yet; it would have called */ + /* `cf2_hintmap_build' to set `isValid'. */ + if ( !cf2_hintmap_isValid( &glyphpath->hintMap ) ) + { + /* we are here iff first subpath is missing a moveto operator: */ + /* synthesize first moveTo to finish initialization of hintMap */ + cf2_glyphpath_moveTo( glyphpath, + glyphpath->start.x, + glyphpath->start.y ); + } + + cf2_glyphpath_hintPoint( glyphpath, + &glyphpath->hintMap, + ¶ms.pt1, + start.x, + start.y ); + + /* note: pt2 and pt3 are unused */ + glyphpath->callbacks->moveTo( glyphpath->callbacks, ¶ms ); + + glyphpath->currentDS = params.pt1; + glyphpath->offsetStart0 = start; + } + + + /* + * All coordinates are in character space. + * On input, (x1, y1) and (x2, y2) give line segment. + * On output, (x, y) give offset vector. + * We use a piecewise approximation to trig functions. + * + * TODO: Offset true perpendicular and proper length + * supply the y-translation for hinting here, too, + * that adds yOffset unconditionally to *y. + */ + static void + cf2_glyphpath_computeOffset( CF2_GlyphPath glyphpath, + CF2_Fixed x1, + CF2_Fixed y1, + CF2_Fixed x2, + CF2_Fixed y2, + CF2_Fixed* x, + CF2_Fixed* y ) + { + CF2_Fixed dx = SUB_INT32( x2, x1 ); + CF2_Fixed dy = SUB_INT32( y2, y1 ); + + + /* note: negative offsets don't work here; negate deltas to change */ + /* quadrants, below */ + if ( glyphpath->font->reverseWinding ) + { + dx = NEG_INT32( dx ); + dy = NEG_INT32( dy ); + } + + *x = *y = 0; + + if ( !glyphpath->darken ) + return; + + /* add momentum for this path element */ + glyphpath->callbacks->windingMomentum = + ADD_INT32( glyphpath->callbacks->windingMomentum, + cf2_getWindingMomentum( x1, y1, x2, y2 ) ); + + /* note: allow mixed integer and fixed multiplication here */ + if ( dx >= 0 ) + { + if ( dy >= 0 ) + { + /* first quadrant, +x +y */ + + if ( dx > MUL_INT32( 2, dy ) ) + { + /* +x */ + *x = 0; + *y = 0; + } + else if ( dy > MUL_INT32( 2, dx ) ) + { + /* +y */ + *x = glyphpath->xOffset; + *y = glyphpath->yOffset; + } + else + { + /* +x +y */ + *x = FT_MulFix( cf2_doubleToFixed( 0.7 ), + glyphpath->xOffset ); + *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ), + glyphpath->yOffset ); + } + } + else + { + /* fourth quadrant, +x -y */ + + if ( dx > MUL_INT32( -2, dy ) ) + { + /* +x */ + *x = 0; + *y = 0; + } + else if ( NEG_INT32( dy ) > MUL_INT32( 2, dx ) ) + { + /* -y */ + *x = NEG_INT32( glyphpath->xOffset ); + *y = glyphpath->yOffset; + } + else + { + /* +x -y */ + *x = FT_MulFix( cf2_doubleToFixed( -0.7 ), + glyphpath->xOffset ); + *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ), + glyphpath->yOffset ); + } + } + } + else + { + if ( dy >= 0 ) + { + /* second quadrant, -x +y */ + + if ( NEG_INT32( dx ) > MUL_INT32( 2, dy ) ) + { + /* -x */ + *x = 0; + *y = MUL_INT32( 2, glyphpath->yOffset ); + } + else if ( dy > MUL_INT32( -2, dx ) ) + { + /* +y */ + *x = glyphpath->xOffset; + *y = glyphpath->yOffset; + } + else + { + /* -x +y */ + *x = FT_MulFix( cf2_doubleToFixed( 0.7 ), + glyphpath->xOffset ); + *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ), + glyphpath->yOffset ); + } + } + else + { + /* third quadrant, -x -y */ + + if ( NEG_INT32( dx ) > MUL_INT32( -2, dy ) ) + { + /* -x */ + *x = 0; + *y = MUL_INT32( 2, glyphpath->yOffset ); + } + else if ( NEG_INT32( dy ) > MUL_INT32( -2, dx ) ) + { + /* -y */ + *x = NEG_INT32( glyphpath->xOffset ); + *y = glyphpath->yOffset; + } + else + { + /* -x -y */ + *x = FT_MulFix( cf2_doubleToFixed( -0.7 ), + glyphpath->xOffset ); + *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ), + glyphpath->yOffset ); + } + } + } + } + + + /* + * The functions cf2_glyphpath_{moveTo,lineTo,curveTo,closeOpenPath} are + * called by the interpreter with Character Space (CS) coordinates. Each + * path element is placed into a queue of length one to await the + * calculation of the following element. At that time, the darkening + * offset of the following element is known and joins can be computed, + * including possible modification of this element, before mapping to + * Device Space (DS) and passing it on to the outline consumer. + * + */ + FT_LOCAL_DEF( void ) + cf2_glyphpath_moveTo( CF2_GlyphPath glyphpath, + CF2_Fixed x, + CF2_Fixed y ) + { + cf2_glyphpath_closeOpenPath( glyphpath ); + + /* save the parameters of the move for later, when we'll know how to */ + /* offset it; */ + /* also save last move point */ + glyphpath->currentCS.x = glyphpath->start.x = x; + glyphpath->currentCS.y = glyphpath->start.y = y; + + glyphpath->moveIsPending = TRUE; + + /* ensure we have a valid map with current mask */ + if ( !cf2_hintmap_isValid( &glyphpath->hintMap ) || + cf2_hintmask_isNew( glyphpath->hintMask ) ) + cf2_hintmap_build( &glyphpath->hintMap, + glyphpath->hStemHintArray, + glyphpath->vStemHintArray, + glyphpath->hintMask, + glyphpath->hintOriginY, + FALSE ); + + /* save a copy of current HintMap to use when drawing initial point */ + glyphpath->firstHintMap = glyphpath->hintMap; /* structure copy */ + } + + + FT_LOCAL_DEF( void ) + cf2_glyphpath_lineTo( CF2_GlyphPath glyphpath, + CF2_Fixed x, + CF2_Fixed y ) + { + CF2_Fixed xOffset, yOffset; + FT_Vector P0, P1; + FT_Bool newHintMap; + + /* + * New hints will be applied after cf2_glyphpath_pushPrevElem has run. + * In case this is a synthesized closing line, any new hints should be + * delayed until this path is closed (`cf2_hintmask_isNew' will be + * called again before the next line or curve). + */ + + /* true if new hint map not on close */ + newHintMap = cf2_hintmask_isNew( glyphpath->hintMask ) && + !glyphpath->pathIsClosing; + + /* + * Zero-length lines may occur in the charstring. Because we cannot + * compute darkening offsets or intersections from zero-length lines, + * it is best to remove them and avoid artifacts. However, zero-length + * lines in CS at the start of a new hint map can generate non-zero + * lines in DS due to hint substitution. We detect a change in hint + * map here and pass those zero-length lines along. + */ + + /* + * Note: Find explicitly closed paths here with a conditional + * breakpoint using + * + * !gp->pathIsClosing && gp->start.x == x && gp->start.y == y + * + */ + + if ( glyphpath->currentCS.x == x && + glyphpath->currentCS.y == y && + !newHintMap ) + /* + * Ignore zero-length lines in CS where the hint map is the same + * because the line in DS will also be zero length. + * + * Ignore zero-length lines when we synthesize a closing line because + * the close will be handled in cf2_glyphPath_pushPrevElem. + */ + return; + + cf2_glyphpath_computeOffset( glyphpath, + glyphpath->currentCS.x, + glyphpath->currentCS.y, + x, + y, + &xOffset, + &yOffset ); + + /* construct offset points */ + P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset ); + P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset ); + P1.x = ADD_INT32( x, xOffset ); + P1.y = ADD_INT32( y, yOffset ); + + if ( glyphpath->moveIsPending ) + { + /* emit offset 1st point as MoveTo */ + cf2_glyphpath_pushMove( glyphpath, P0 ); + + glyphpath->moveIsPending = FALSE; /* adjust state machine */ + glyphpath->pathIsOpen = TRUE; + + glyphpath->offsetStart1 = P1; /* record second point */ + } + + if ( glyphpath->elemIsQueued ) + { + FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) || + glyphpath->hintMap.count == 0 ); + + cf2_glyphpath_pushPrevElem( glyphpath, + &glyphpath->hintMap, + &P0, + P1, + FALSE ); + } + + /* queue the current element with offset points */ + glyphpath->elemIsQueued = TRUE; + glyphpath->prevElemOp = CF2_PathOpLineTo; + glyphpath->prevElemP0 = P0; + glyphpath->prevElemP1 = P1; + + /* update current map */ + if ( newHintMap ) + cf2_hintmap_build( &glyphpath->hintMap, + glyphpath->hStemHintArray, + glyphpath->vStemHintArray, + glyphpath->hintMask, + glyphpath->hintOriginY, + FALSE ); + + glyphpath->currentCS.x = x; /* pre-offset current point */ + glyphpath->currentCS.y = y; + } + + + FT_LOCAL_DEF( void ) + cf2_glyphpath_curveTo( CF2_GlyphPath glyphpath, + CF2_Fixed x1, + CF2_Fixed y1, + CF2_Fixed x2, + CF2_Fixed y2, + CF2_Fixed x3, + CF2_Fixed y3 ) + { + CF2_Fixed xOffset1, yOffset1, xOffset3, yOffset3; + FT_Vector P0, P1, P2, P3; + + + /* TODO: ignore zero length portions of curve?? */ + cf2_glyphpath_computeOffset( glyphpath, + glyphpath->currentCS.x, + glyphpath->currentCS.y, + x1, + y1, + &xOffset1, + &yOffset1 ); + cf2_glyphpath_computeOffset( glyphpath, + x2, + y2, + x3, + y3, + &xOffset3, + &yOffset3 ); + + /* add momentum from the middle segment */ + glyphpath->callbacks->windingMomentum = + ADD_INT32( glyphpath->callbacks->windingMomentum, + cf2_getWindingMomentum( x1, y1, x2, y2 ) ); + + /* construct offset points */ + P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset1 ); + P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset1 ); + P1.x = ADD_INT32( x1, xOffset1 ); + P1.y = ADD_INT32( y1, yOffset1 ); + /* note: preserve angle of final segment by using offset3 at both ends */ + P2.x = ADD_INT32( x2, xOffset3 ); + P2.y = ADD_INT32( y2, yOffset3 ); + P3.x = ADD_INT32( x3, xOffset3 ); + P3.y = ADD_INT32( y3, yOffset3 ); + + if ( glyphpath->moveIsPending ) + { + /* emit offset 1st point as MoveTo */ + cf2_glyphpath_pushMove( glyphpath, P0 ); + + glyphpath->moveIsPending = FALSE; + glyphpath->pathIsOpen = TRUE; + + glyphpath->offsetStart1 = P1; /* record second point */ + } + + if ( glyphpath->elemIsQueued ) + { + FT_ASSERT( cf2_hintmap_isValid( &glyphpath->hintMap ) || + glyphpath->hintMap.count == 0 ); + + cf2_glyphpath_pushPrevElem( glyphpath, + &glyphpath->hintMap, + &P0, + P1, + FALSE ); + } + + /* queue the current element with offset points */ + glyphpath->elemIsQueued = TRUE; + glyphpath->prevElemOp = CF2_PathOpCubeTo; + glyphpath->prevElemP0 = P0; + glyphpath->prevElemP1 = P1; + glyphpath->prevElemP2 = P2; + glyphpath->prevElemP3 = P3; + + /* update current map */ + if ( cf2_hintmask_isNew( glyphpath->hintMask ) ) + cf2_hintmap_build( &glyphpath->hintMap, + glyphpath->hStemHintArray, + glyphpath->vStemHintArray, + glyphpath->hintMask, + glyphpath->hintOriginY, + FALSE ); + + glyphpath->currentCS.x = x3; /* pre-offset current point */ + glyphpath->currentCS.y = y3; + } + + + FT_LOCAL_DEF( void ) + cf2_glyphpath_closeOpenPath( CF2_GlyphPath glyphpath ) + { + if ( glyphpath->pathIsOpen ) + { + /* + * A closing line in Character Space line is always generated below + * with `cf2_glyphPath_lineTo'. It may be ignored later if it turns + * out to be zero length in Device Space. + */ + glyphpath->pathIsClosing = TRUE; + + cf2_glyphpath_lineTo( glyphpath, + glyphpath->start.x, + glyphpath->start.y ); + + /* empty the final element from the queue and close the path */ + if ( glyphpath->elemIsQueued ) + cf2_glyphpath_pushPrevElem( glyphpath, + &glyphpath->hintMap, + &glyphpath->offsetStart0, + glyphpath->offsetStart1, + TRUE ); + + /* reset state machine */ + glyphpath->moveIsPending = TRUE; + glyphpath->pathIsOpen = FALSE; + glyphpath->pathIsClosing = FALSE; + glyphpath->elemIsQueued = FALSE; + } + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/pshints.h b/non-source/foreign/freetype2/src/psaux/pshints.h new file mode 100644 index 000000000..31a823036 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/pshints.h @@ -0,0 +1,288 @@ +/**************************************************************************** + * + * pshints.h + * + * Adobe's code for handling CFF hints (body). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSHINT_H_ +#define PSHINT_H_ + +FT_BEGIN_HEADER + + + enum + { + CF2_MAX_HINTS = 96 /* maximum # of hints */ + }; + + + /* + * A HintMask object stores a bit mask that specifies which hints in the + * charstring are active at a given time. Hints in CFF must be declared + * at the start, before any drawing operators, with horizontal hints + * preceding vertical hints. The HintMask is ordered the same way, with + * horizontal hints immediately followed by vertical hints. Clients are + * responsible for knowing how many of each type are present. + * + * The maximum total number of hints is 96, as specified by the CFF + * specification. + * + * A HintMask is built 0 or more times while interpreting a charstring, by + * the HintMask operator. There is only one HintMask, but it is built or + * rebuilt each time there is a hint substitution (HintMask operator) in + * the charstring. A default HintMask with all bits set is built if there + * has been no HintMask operator prior to the first drawing operator. + * + */ + + typedef struct CF2_HintMaskRec_ + { + FT_Error* error; + + FT_Bool isValid; + FT_Bool isNew; + + size_t bitCount; + size_t byteCount; + + FT_Byte mask[( CF2_MAX_HINTS + 7 ) / 8]; + + } CF2_HintMaskRec, *CF2_HintMask; + + + typedef struct CF2_StemHintRec_ + { + FT_Bool used; /* DS positions are valid */ + + CF2_Fixed min; /* original character space value */ + CF2_Fixed max; + + CF2_Fixed minDS; /* DS position after first use */ + CF2_Fixed maxDS; + + } CF2_StemHintRec, *CF2_StemHint; + + + /* + * A HintMap object stores a piecewise linear function for mapping + * y-coordinates from character space to device space, providing + * appropriate pixel alignment to stem edges. + * + * The map is implemented as an array of `CF2_Hint' elements, each + * representing an edge. When edges are paired, as from stem hints, the + * bottom edge must immediately precede the top edge in the array. + * Element character space AND device space positions must both increase + * monotonically in the array. `CF2_Hint' elements are also used as + * parameters to `cf2_blues_capture'. + * + * The `cf2_hintmap_build' method must be called before any drawing + * operation (beginning with a Move operator) and at each hint + * substitution (HintMask operator). + * + * The `cf2_hintmap_map' method is called to transform y-coordinates at + * each drawing operation (move, line, curve). + * + */ + + /* TODO: make this a CF2_ArrStack and add a deep copy method */ + enum + { + CF2_MAX_HINT_EDGES = CF2_MAX_HINTS * 2 + }; + + + typedef struct CF2_HintMapRec_ + { + CF2_Font font; + + /* initial map based on blue zones */ + struct CF2_HintMapRec_* initialHintMap; + + /* working storage for 2nd pass adjustHints */ + CF2_ArrStack hintMoves; + + FT_Bool isValid; + FT_Bool hinted; + + CF2_Fixed scale; + CF2_UInt count; + + /* start search from this index */ + CF2_UInt lastIndex; + + CF2_HintRec edge[CF2_MAX_HINT_EDGES]; /* 192 */ + + } CF2_HintMapRec, *CF2_HintMap; + + + FT_LOCAL( FT_Bool ) + cf2_hint_isValid( const CF2_Hint hint ); + FT_LOCAL( FT_Bool ) + cf2_hint_isTop( const CF2_Hint hint ); + FT_LOCAL( FT_Bool ) + cf2_hint_isBottom( const CF2_Hint hint ); + FT_LOCAL( void ) + cf2_hint_lock( CF2_Hint hint ); + + + FT_LOCAL( void ) + cf2_hintmap_init( CF2_HintMap hintmap, + CF2_Font font, + CF2_HintMap initialMap, + CF2_ArrStack hintMoves, + CF2_Fixed scale ); + FT_LOCAL( void ) + cf2_hintmap_build( CF2_HintMap hintmap, + CF2_ArrStack hStemHintArray, + CF2_ArrStack vStemHintArray, + CF2_HintMask hintMask, + CF2_Fixed hintOrigin, + FT_Bool initialMap ); + + + /* + * GlyphPath is a wrapper for drawing operations that scales the + * coordinates according to the render matrix and HintMap. It also tracks + * open paths to control ClosePath and to insert MoveTo for broken fonts. + * + */ + typedef struct CF2_GlyphPathRec_ + { + /* TODO: gather some of these into a hinting context */ + + CF2_Font font; /* font instance */ + CF2_OutlineCallbacks callbacks; /* outline consumer */ + + + CF2_HintMapRec hintMap; /* current hint map */ + CF2_HintMapRec firstHintMap; /* saved copy */ + CF2_HintMapRec initialHintMap; /* based on all captured hints */ + + CF2_ArrStackRec hintMoves; /* list of hint moves for 2nd pass */ + + CF2_Fixed scaleX; /* matrix a */ + CF2_Fixed scaleC; /* matrix c */ + CF2_Fixed scaleY; /* matrix d */ + + FT_Vector fractionalTranslation; /* including deviceXScale */ +#if 0 + CF2_Fixed hShift; /* character space horizontal shift */ + /* (for fauxing) */ +#endif + + FT_Bool pathIsOpen; /* true after MoveTo */ + FT_Bool pathIsClosing; /* true when synthesizing closepath line */ + FT_Bool darken; /* true if stem darkening */ + FT_Bool moveIsPending; /* true between MoveTo and offset MoveTo */ + + /* references used to call `cf2_hintmap_build', if necessary */ + CF2_ArrStack hStemHintArray; + CF2_ArrStack vStemHintArray; + CF2_HintMask hintMask; /* ptr to the current mask */ + CF2_Fixed hintOriginY; /* copy of current origin */ + const CF2_BluesRec* blues; + + CF2_Fixed xOffset; /* character space offsets */ + CF2_Fixed yOffset; + + /* character space miter limit threshold */ + CF2_Fixed miterLimit; + /* vertical/horizontal snap distance in character space */ + CF2_Fixed snapThreshold; + + FT_Vector offsetStart0; /* first and second points of first */ + FT_Vector offsetStart1; /* element with offset applied */ + + /* current point, character space, before offset */ + FT_Vector currentCS; + /* current point, device space */ + FT_Vector currentDS; + /* start point of subpath, character space */ + FT_Vector start; + + /* the following members constitute the `queue' of one element */ + FT_Bool elemIsQueued; + CF2_Int prevElemOp; + + FT_Vector prevElemP0; + FT_Vector prevElemP1; + FT_Vector prevElemP2; + FT_Vector prevElemP3; + + } CF2_GlyphPathRec, *CF2_GlyphPath; + + + FT_LOCAL( void ) + cf2_glyphpath_init( CF2_GlyphPath glyphpath, + CF2_Font font, + CF2_OutlineCallbacks callbacks, + CF2_Fixed scaleY, + /* CF2_Fixed hShift, */ + CF2_ArrStack hStemHintArray, + CF2_ArrStack vStemHintArray, + CF2_HintMask hintMask, + CF2_Fixed hintOrigin, + const CF2_Blues blues, + const FT_Vector* fractionalTranslation ); + FT_LOCAL( void ) + cf2_glyphpath_finalize( CF2_GlyphPath glyphpath ); + + FT_LOCAL( void ) + cf2_glyphpath_moveTo( CF2_GlyphPath glyphpath, + CF2_Fixed x, + CF2_Fixed y ); + FT_LOCAL( void ) + cf2_glyphpath_lineTo( CF2_GlyphPath glyphpath, + CF2_Fixed x, + CF2_Fixed y ); + FT_LOCAL( void ) + cf2_glyphpath_curveTo( CF2_GlyphPath glyphpath, + CF2_Fixed x1, + CF2_Fixed y1, + CF2_Fixed x2, + CF2_Fixed y2, + CF2_Fixed x3, + CF2_Fixed y3 ); + FT_LOCAL( void ) + cf2_glyphpath_closeOpenPath( CF2_GlyphPath glyphpath ); + + +FT_END_HEADER + + +#endif /* PSHINT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psintrp.c b/non-source/foreign/freetype2/src/psaux/psintrp.c new file mode 100644 index 000000000..7572e225e --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psintrp.c @@ -0,0 +1,3050 @@ +/**************************************************************************** + * + * psintrp.c + * + * Adobe's CFF Interpreter (body). + * + * Copyright 2007-2014 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/services/svcfftl.h> + +#include "psglue.h" +#include "psfont.h" +#include "psstack.h" +#include "pshints.h" +#include "psintrp.h" + +#include "pserror.h" + +#include "psobjs.h" /* for cff_random */ +#include "t1decode.h" /* for t1 seac */ + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT cf2interp + + + FT_LOCAL_DEF( void ) + cf2_hintmask_init( CF2_HintMask hintmask, + FT_Error* error ) + { + FT_ZERO( hintmask ); + + hintmask->error = error; + } + + + FT_LOCAL_DEF( FT_Bool ) + cf2_hintmask_isValid( const CF2_HintMask hintmask ) + { + return hintmask->isValid; + } + + + FT_LOCAL_DEF( FT_Bool ) + cf2_hintmask_isNew( const CF2_HintMask hintmask ) + { + return hintmask->isNew; + } + + + FT_LOCAL_DEF( void ) + cf2_hintmask_setNew( CF2_HintMask hintmask, + FT_Bool val ) + { + hintmask->isNew = val; + } + + + /* clients call `getMaskPtr' in order to iterate */ + /* through hint mask */ + + FT_LOCAL_DEF( FT_Byte* ) + cf2_hintmask_getMaskPtr( CF2_HintMask hintmask ) + { + return hintmask->mask; + } + + + static size_t + cf2_hintmask_setCounts( CF2_HintMask hintmask, + size_t bitCount ) + { + if ( bitCount > CF2_MAX_HINTS ) + { + /* total of h and v stems must be <= 96 */ + CF2_SET_ERROR( hintmask->error, Invalid_Glyph_Format ); + return 0; + } + + hintmask->bitCount = bitCount; + hintmask->byteCount = ( hintmask->bitCount + 7 ) / 8; + + hintmask->isValid = TRUE; + hintmask->isNew = TRUE; + + return bitCount; + } + + + /* consume the hintmask bytes from the charstring, advancing the src */ + /* pointer */ + static void + cf2_hintmask_read( CF2_HintMask hintmask, + CF2_Buffer charstring, + size_t bitCount ) + { + size_t i; + +#ifndef CF2_NDEBUG + /* these are the bits in the final mask byte that should be zero */ + /* Note: this variable is only used in an assert expression below */ + /* and then only if CF2_NDEBUG is not defined */ + CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1; +#endif + + + /* initialize counts and isValid */ + if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 ) + return; + + FT_ASSERT( hintmask->byteCount > 0 ); + + FT_TRACE4(( " (maskbytes:" )); + + /* set mask and advance interpreter's charstring pointer */ + for ( i = 0; i < hintmask->byteCount; i++ ) + { + hintmask->mask[i] = (FT_Byte)cf2_buf_readByte( charstring ); + FT_TRACE4(( " 0x%02X", hintmask->mask[i] )); + } + + FT_TRACE4(( ")\n" )); + + /* assert any unused bits in last byte are zero unless there's a prior */ + /* error */ + /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */ +#ifndef CF2_NDEBUG + FT_ASSERT( ( hintmask->mask[hintmask->byteCount - 1] & mask ) == 0 || + *hintmask->error ); +#endif + } + + + FT_LOCAL_DEF( void ) + cf2_hintmask_setAll( CF2_HintMask hintmask, + size_t bitCount ) + { + size_t i; + CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1; + + + /* initialize counts and isValid */ + if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 ) + return; + + FT_ASSERT( hintmask->byteCount > 0 ); + FT_ASSERT( hintmask->byteCount <= + sizeof ( hintmask->mask ) / sizeof ( hintmask->mask[0] ) ); + + /* set mask to all ones */ + for ( i = 0; i < hintmask->byteCount; i++ ) + hintmask->mask[i] = 0xFF; + + /* clear unused bits */ + /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */ + hintmask->mask[hintmask->byteCount - 1] &= ~mask; + } + + + /* Type2 charstring opcodes */ + enum + { + cf2_cmdRESERVED_0, /* 0 */ + cf2_cmdHSTEM, /* 1 */ + cf2_cmdRESERVED_2, /* 2 */ + cf2_cmdVSTEM, /* 3 */ + cf2_cmdVMOVETO, /* 4 */ + cf2_cmdRLINETO, /* 5 */ + cf2_cmdHLINETO, /* 6 */ + cf2_cmdVLINETO, /* 7 */ + cf2_cmdRRCURVETO, /* 8 */ + cf2_cmdCLOSEPATH, /* 9 T1 only */ + cf2_cmdCALLSUBR, /* 10 */ + cf2_cmdRETURN, /* 11 */ + cf2_cmdESC, /* 12 */ + cf2_cmdHSBW, /* 13 T1 only */ + cf2_cmdENDCHAR, /* 14 */ + cf2_cmdVSINDEX, /* 15 */ + cf2_cmdBLEND, /* 16 */ + cf2_cmdRESERVED_17, /* 17 */ + cf2_cmdHSTEMHM, /* 18 */ + cf2_cmdHINTMASK, /* 19 */ + cf2_cmdCNTRMASK, /* 20 */ + cf2_cmdRMOVETO, /* 21 */ + cf2_cmdHMOVETO, /* 22 */ + cf2_cmdVSTEMHM, /* 23 */ + cf2_cmdRCURVELINE, /* 24 */ + cf2_cmdRLINECURVE, /* 25 */ + cf2_cmdVVCURVETO, /* 26 */ + cf2_cmdHHCURVETO, /* 27 */ + cf2_cmdEXTENDEDNMBR, /* 28 */ + cf2_cmdCALLGSUBR, /* 29 */ + cf2_cmdVHCURVETO, /* 30 */ + cf2_cmdHVCURVETO /* 31 */ + }; + + enum + { + cf2_escDOTSECTION, /* 0 */ + cf2_escVSTEM3, /* 1 T1 only */ + cf2_escHSTEM3, /* 2 T1 only */ + cf2_escAND, /* 3 */ + cf2_escOR, /* 4 */ + cf2_escNOT, /* 5 */ + cf2_escSEAC, /* 6 T1 only */ + cf2_escSBW, /* 7 T1 only */ + cf2_escRESERVED_8, /* 8 */ + cf2_escABS, /* 9 */ + cf2_escADD, /* 10 like otherADD */ + cf2_escSUB, /* 11 like otherSUB */ + cf2_escDIV, /* 12 */ + cf2_escRESERVED_13, /* 13 */ + cf2_escNEG, /* 14 */ + cf2_escEQ, /* 15 */ + cf2_escCALLOTHERSUBR,/* 16 T1 only */ + cf2_escPOP, /* 17 T1 only */ + cf2_escDROP, /* 18 */ + cf2_escRESERVED_19, /* 19 */ + cf2_escPUT, /* 20 like otherPUT */ + cf2_escGET, /* 21 like otherGET */ + cf2_escIFELSE, /* 22 like otherIFELSE */ + cf2_escRANDOM, /* 23 like otherRANDOM */ + cf2_escMUL, /* 24 like otherMUL */ + cf2_escRESERVED_25, /* 25 */ + cf2_escSQRT, /* 26 */ + cf2_escDUP, /* 27 like otherDUP */ + cf2_escEXCH, /* 28 like otherEXCH */ + cf2_escINDEX, /* 29 */ + cf2_escROLL, /* 30 */ + cf2_escRESERVED_31, /* 31 */ + cf2_escRESERVED_32, /* 32 */ + cf2_escSETCURRENTPT, /* 33 T1 only */ + cf2_escHFLEX, /* 34 */ + cf2_escFLEX, /* 35 */ + cf2_escHFLEX1, /* 36 */ + cf2_escFLEX1, /* 37 */ + cf2_escRESERVED_38 /* 38 & all higher */ + }; + + + /* `stemHintArray' does not change once we start drawing the outline. */ + static void + cf2_doStems( const CF2_Font font, + CF2_Stack opStack, + CF2_ArrStack stemHintArray, + CF2_Fixed* width, + FT_Bool* haveWidth, + CF2_Fixed hintOffset ) + { + CF2_UInt i; + CF2_UInt count = cf2_stack_count( opStack ); + FT_Bool hasWidthArg = FT_BOOL( count & 1 ); + + /* variable accumulates delta values from operand stack */ + CF2_Fixed position = hintOffset; + + if ( font->isT1 && !font->decoder->flex_state && !*haveWidth ) + FT_ERROR(( "cf2_doStems (Type 1 mode):" + " No width. Use hsbw/sbw as first op\n" )); + + if ( !font->isT1 && hasWidthArg && !*haveWidth ) + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + cf2_getNominalWidthX( font->decoder ) ); + + if ( font->decoder->width_only ) + goto exit; + + for ( i = hasWidthArg ? 1 : 0; i < count; i += 2 ) + { + /* construct a CF2_StemHint and push it onto the list */ + CF2_StemHintRec stemhint; + + + stemhint.min = + position = ADD_INT32( position, + cf2_stack_getReal( opStack, i ) ); + stemhint.max = + position = ADD_INT32( position, + cf2_stack_getReal( opStack, i + 1 ) ); + + stemhint.used = FALSE; + stemhint.maxDS = + stemhint.minDS = 0; + + cf2_arrstack_push( stemHintArray, &stemhint ); /* defer error check */ + } + + cf2_stack_clear( opStack ); + + exit: + /* cf2_doStems must define a width (may be default) */ + *haveWidth = TRUE; + } + + + static void + cf2_doFlex( CF2_Stack opStack, + CF2_Fixed* curX, + CF2_Fixed* curY, + CF2_GlyphPath glyphPath, + const FT_Bool* readFromStack, + FT_Bool doConditionalLastRead ) + { + CF2_Fixed vals[14]; + CF2_UInt idx; + FT_Bool isHFlex; + CF2_Int top, i, j; + + + vals[0] = *curX; + vals[1] = *curY; + idx = 0; + isHFlex = FT_BOOL( readFromStack[9] == FALSE ); + top = isHFlex ? 9 : 10; + + for ( i = 0; i < top; i++ ) + { + vals[i + 2] = vals[i]; + if ( readFromStack[i] ) + vals[i + 2] = ADD_INT32( vals[i + 2], cf2_stack_getReal( opStack, + idx++ ) ); + } + + if ( isHFlex ) + vals[9 + 2] = *curY; + + if ( doConditionalLastRead ) + { + FT_Bool lastIsX = FT_BOOL( + cf2_fixedAbs( SUB_INT32( vals[10], *curX ) ) > + cf2_fixedAbs( SUB_INT32( vals[11], *curY ) ) ); + CF2_Fixed lastVal = cf2_stack_getReal( opStack, idx ); + + + if ( lastIsX ) + { + vals[12] = ADD_INT32( vals[10], lastVal ); + vals[13] = *curY; + } + else + { + vals[12] = *curX; + vals[13] = ADD_INT32( vals[11], lastVal ); + } + } + else + { + if ( readFromStack[10] ) + vals[12] = ADD_INT32( vals[10], + cf2_stack_getReal( opStack, idx++ ) ); + else + vals[12] = *curX; + + if ( readFromStack[11] ) + vals[13] = ADD_INT32( vals[11], + cf2_stack_getReal( opStack, idx ) ); + else + vals[13] = *curY; + } + + for ( j = 0; j < 2; j++ ) + cf2_glyphpath_curveTo( glyphPath, vals[j * 6 + 2], + vals[j * 6 + 3], + vals[j * 6 + 4], + vals[j * 6 + 5], + vals[j * 6 + 6], + vals[j * 6 + 7] ); + + cf2_stack_clear( opStack ); + + *curX = vals[12]; + *curY = vals[13]; + } + + + /* Blend numOperands on the stack, */ + /* store results into the first numBlends values, */ + /* then pop remaining arguments. */ + static void + cf2_doBlend( const CFF_Blend blend, + CF2_Stack opStack, + CF2_UInt numBlends ) + { + CF2_UInt delta; + CF2_UInt base; + CF2_UInt i, j; + CF2_UInt numOperands = (CF2_UInt)( numBlends * blend->lenBV ); + + + base = cf2_stack_count( opStack ) - numOperands; + delta = base + numBlends; + + FT_TRACE6(( " (" )); + + for ( i = 0; i < numBlends; i++ ) + { + const CF2_Fixed* weight = &blend->BV[1]; + + /* start with first term */ + CF2_Fixed sum = cf2_stack_getReal( opStack, i + base ); + + + for ( j = 1; j < blend->lenBV; j++ ) + sum = ADD_INT32( sum, + FT_MulFix( *weight++, + cf2_stack_getReal( opStack, + delta++ ) ) ); + + FT_TRACE6(( "%f ", (double)sum / 65536 )); + + /* store blended result */ + cf2_stack_setReal( opStack, i + base, sum ); + } + + FT_TRACE6(( "blended)\n" )); + + /* leave only `numBlends' results on stack */ + cf2_stack_pop( opStack, numOperands - numBlends ); + } + + + /* + * `error' is a shared error code used by many objects in this + * routine. Before the code continues from an error, it must check and + * record the error in `*error'. The idea is that this shared + * error code will record the first error encountered. If testing + * for an error anyway, the cost of `goto exit' is small, so we do it, + * even if continuing would be safe. In this case, `lastError' is + * set, so the testing and storing can be done in one place, at `exit'. + * + * Continuing after an error is intended for objects which do their own + * testing of `*error', e.g., array stack functions. This allows us to + * avoid an extra test after the call. + * + * Unimplemented opcodes are ignored. + * + */ + FT_LOCAL_DEF( void ) + cf2_interpT2CharString( CF2_Font font, + const CF2_Buffer buf, + CF2_OutlineCallbacks callbacks, + const FT_Vector* translation, + FT_Bool doingSeac, + CF2_Fixed curX, + CF2_Fixed curY, + CF2_Fixed* width ) + { + /* lastError is used for errors that are immediately tested */ + FT_Error lastError = FT_Err_Ok; + + /* pointer to parsed font object */ + PS_Decoder* decoder = font->decoder; + + FT_Error* error = &font->error; + FT_Memory memory = font->memory; + + CF2_Fixed scaleY = font->innerTransform.d; + CF2_Fixed nominalWidthX = cf2_getNominalWidthX( decoder ); + + /* stuff for Type 1 */ + FT_Int known_othersubr_result_cnt = 0; + FT_Bool large_int = FALSE; + FT_Bool initial_map_ready = FALSE; + +#define PS_STORAGE_SIZE 3 + CF2_F16Dot16 results[PS_STORAGE_SIZE]; /* for othersubr results */ + FT_Int result_cnt = 0; + + /* save this for hinting seac accents */ + CF2_Fixed hintOriginY = curY; + + CF2_Stack opStack = NULL; + FT_UInt stackSize; + FT_Byte op1; /* first opcode byte */ + + CF2_F16Dot16 storage[CF2_STORAGE_SIZE]; /* for `put' and `get' */ + CF2_F16Dot16 flexStore[6]; /* for Type 1 flex */ + + /* instruction limit; 20,000,000 matches Avalon */ + FT_UInt32 instructionLimit = 20000000UL; + + CF2_ArrStackRec subrStack; + + FT_Bool haveWidth; + CF2_Buffer charstring = NULL; + + CF2_Int charstringIndex = -1; /* initialize to empty */ + + /* TODO: placeholders for hint structures */ + + /* objects used for hinting */ + CF2_ArrStackRec hStemHintArray; + CF2_ArrStackRec vStemHintArray; + + CF2_HintMaskRec hintMask; + CF2_GlyphPathRec glyphPath; + + + FT_ZERO( &storage ); + FT_ZERO( &results ); + FT_ZERO( &flexStore ); + + /* initialize the remaining objects */ + cf2_arrstack_init( &subrStack, + memory, + error, + sizeof ( CF2_BufferRec ) ); + cf2_arrstack_init( &hStemHintArray, + memory, + error, + sizeof ( CF2_StemHintRec ) ); + cf2_arrstack_init( &vStemHintArray, + memory, + error, + sizeof ( CF2_StemHintRec ) ); + + /* initialize CF2_StemHint arrays */ + cf2_hintmask_init( &hintMask, error ); + + /* initialize path map to manage drawing operations */ + + /* Note: last 4 params are used to handle `MoveToPermissive', which */ + /* may need to call `hintMap.Build' */ + /* TODO: MoveToPermissive is gone; are these still needed? */ + cf2_glyphpath_init( &glyphPath, + font, + callbacks, + scaleY, + /* hShift, */ + &hStemHintArray, + &vStemHintArray, + &hintMask, + hintOriginY, + &font->blues, + translation ); + + /* + * Initialize state for width parsing. From the CFF Spec: + * + * The first stack-clearing operator, which must be one of hstem, + * hstemhm, vstem, vstemhm, cntrmask, hintmask, hmoveto, vmoveto, + * rmoveto, or endchar, takes an additional argument - the width (as + * described earlier), which may be expressed as zero or one numeric + * argument. + * + * What we implement here uses the first validly specified width, but + * does not detect errors for specifying more than one width. + * + * If one of the above operators occurs without explicitly specifying + * a width, we assume the default width. + * + * CFF2 charstrings always return the default width (0). + * + */ + haveWidth = font->isCFF2 ? TRUE : FALSE; + *width = cf2_getDefaultWidthX( decoder ); + + /* + * Note: At this point, all pointers to resources must be NULL + * and all local objects must be initialized. + * There must be no branches to `exit:' above this point. + * + */ + + /* allocate an operand stack */ + stackSize = font->isCFF2 ? cf2_getMaxstack( decoder ) + : CF2_OPERAND_STACK_SIZE; + opStack = cf2_stack_init( memory, error, stackSize ); + + if ( !opStack ) + { + lastError = FT_THROW( Out_Of_Memory ); + goto exit; + } + + /* initialize subroutine stack by placing top level charstring as */ + /* first element (max depth plus one for the charstring) */ + /* Note: Caller owns and must finalize the first charstring. */ + /* Our copy of it does not change that requirement. */ + cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 ); + + charstring = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack ); + + /* catch errors so far */ + if ( *error ) + goto exit; + + *charstring = *buf; /* structure copy */ + charstringIndex = 0; /* entry is valid now */ + + /* main interpreter loop */ + while ( 1 ) + { + if ( font->isT1 ) + FT_ASSERT( known_othersubr_result_cnt == 0 || + result_cnt == 0 ); + + if ( cf2_buf_isEnd( charstring ) ) + { + /* If we've reached the end of the charstring, simulate a */ + /* cf2_cmdRETURN or cf2_cmdENDCHAR. */ + /* We do this for both CFF and CFF2. */ + if ( charstringIndex ) + op1 = cf2_cmdRETURN; /* end of buffer for subroutine */ + else + op1 = cf2_cmdENDCHAR; /* end of buffer for top level charstring */ + } + else + { + op1 = (FT_Byte)cf2_buf_readByte( charstring ); + + /* Explicit RETURN and ENDCHAR in CFF2 should be ignored. */ + /* Note: Trace message will report 0 instead of 11 or 14. */ + if ( ( op1 == cf2_cmdRETURN || op1 == cf2_cmdENDCHAR ) && + font->isCFF2 ) + op1 = cf2_cmdRESERVED_0; + } + + if ( font->isT1 ) + { + if ( !initial_map_ready && + !( op1 == cf2_cmdHSTEM || + op1 == cf2_cmdVSTEM || + op1 == cf2_cmdHSBW || + op1 == cf2_cmdCALLSUBR || + op1 == cf2_cmdRETURN || + op1 == cf2_cmdESC || + op1 == cf2_cmdENDCHAR || + op1 >= 32 /* Numbers */ ) ) + { + /* Skip outline commands first time round. */ + /* `endchar' will trigger initial hintmap build */ + /* and rewind the charstring. */ + FT_TRACE4(( " <outline command skipped>\n" )); + cf2_stack_clear( opStack ); + continue; + } + + if ( result_cnt > 0 && + !( op1 == cf2_cmdCALLSUBR || + op1 == cf2_cmdRETURN || + op1 == cf2_cmdESC || + op1 >= 32 /* Numbers */ ) ) + { + /* all operands have been transferred by previous pops */ + result_cnt = 0; + } + + if ( large_int && !( op1 >= 32 || op1 == cf2_escDIV ) ) + { + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " no `div' after large integer\n" )); + + large_int = FALSE; + } + } + + /* check for errors once per loop */ + if ( *error ) + goto exit; + + instructionLimit--; + if ( instructionLimit == 0 ) + { + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + switch( op1 ) + { + case cf2_cmdRESERVED_0: + case cf2_cmdRESERVED_2: + case cf2_cmdRESERVED_17: + /* we may get here if we have a prior error */ + FT_TRACE4(( " unknown op (%d)\n", op1 )); + break; + + case cf2_cmdVSINDEX: + FT_TRACE4(( " vsindex\n" )); + + if ( !font->isCFF2 ) + break; /* clear stack & ignore */ + + if ( font->blend.usedBV ) + { + /* vsindex not allowed after blend */ + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + { + FT_Int temp = cf2_stack_popInt( opStack ); + + + if ( temp >= 0 ) + font->vsindex = (FT_UInt)temp; + } + break; + + case cf2_cmdBLEND: + { + FT_UInt numBlends; + + + FT_TRACE4(( " blend" )); + + if ( !font->isCFF2 ) + break; /* clear stack & ignore */ + + /* do we have a `blend' op in a non-variant font? */ + if ( !font->blend.font ) + { + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + /* check cached blend vector */ + if ( font->cffload->blend_check_vector( &font->blend, + font->vsindex, + font->lenNDV, + font->NDV ) ) + { + lastError = font->cffload->blend_build_vector( &font->blend, + font->vsindex, + font->lenNDV, + font->NDV ); + if ( lastError ) + goto exit; + } + + /* do the blend */ + numBlends = (FT_UInt)cf2_stack_popInt( opStack ); + if ( numBlends > stackSize ) + { + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + cf2_doBlend( &font->blend, opStack, numBlends ); + + font->blend.usedBV = TRUE; + } + continue; /* do not clear the stack */ + + case cf2_cmdHSTEMHM: + case cf2_cmdHSTEM: + FT_TRACE4(( "%s\n", op1 == cf2_cmdHSTEMHM ? " hstemhm" + : " hstem" )); + + if ( !font->isT1 ) + { + /* never add hints after the mask is computed */ + /* except if in Type 1 mode (no hintmask op) */ + if ( cf2_hintmask_isValid( &hintMask ) ) + { + FT_TRACE4(( "cf2_interpT2CharString:" + " invalid horizontal hint mask\n" )); + break; + } + } + + /* add left-sidebearing correction in Type 1 mode */ + cf2_doStems( font, + opStack, + &hStemHintArray, + width, + &haveWidth, + font->isT1 ? decoder->builder.left_bearing->y + : 0 ); + + if ( decoder->width_only ) + goto exit; + + break; + + case cf2_cmdVSTEMHM: + case cf2_cmdVSTEM: + FT_TRACE4(( "%s\n", op1 == cf2_cmdVSTEMHM ? " vstemhm" + : " vstem" )); + + if ( !font->isT1 ) + { + /* never add hints after the mask is computed */ + /* except if in Type 1 mode (no hintmask op) */ + if ( cf2_hintmask_isValid( &hintMask ) ) + { + FT_TRACE4(( "cf2_interpT2CharString:" + " invalid vertical hint mask\n" )); + break; + } + } + + /* add left-sidebearing correction in Type 1 mode */ + cf2_doStems( font, + opStack, + &vStemHintArray, + width, + &haveWidth, + font->isT1 ? decoder->builder.left_bearing->x + : 0 ); + + if ( decoder->width_only ) + goto exit; + + break; + + case cf2_cmdVMOVETO: + FT_TRACE4(( " vmoveto\n" )); + + if ( font->isT1 && !decoder->flex_state && !haveWidth ) + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " No width. Use hsbw/sbw as first op\n" )); + + if ( cf2_stack_count( opStack ) > 1 && !haveWidth ) + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); + + /* width is defined or default after this */ + haveWidth = TRUE; + + if ( decoder->width_only ) + goto exit; + + curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) ); + + if ( !decoder->flex_state ) + cf2_glyphpath_moveTo( &glyphPath, curX, curY ); + + break; + + case cf2_cmdRLINETO: + { + CF2_UInt idx; + CF2_UInt count = cf2_stack_count( opStack ); + + + FT_TRACE4(( " rlineto\n" )); + + for ( idx = 0; idx < count; idx += 2 ) + { + curX = ADD_INT32( curX, cf2_stack_getReal( opStack, + idx + 0 ) ); + curY = ADD_INT32( curY, cf2_stack_getReal( opStack, + idx + 1 ) ); + + cf2_glyphpath_lineTo( &glyphPath, curX, curY ); + } + + cf2_stack_clear( opStack ); + } + continue; /* no need to clear stack again */ + + case cf2_cmdHLINETO: + case cf2_cmdVLINETO: + { + CF2_UInt idx; + CF2_UInt count = cf2_stack_count( opStack ); + + FT_Bool isX = FT_BOOL( op1 == cf2_cmdHLINETO ); + + + FT_TRACE4(( "%s\n", isX ? " hlineto" : " vlineto" )); + + for ( idx = 0; idx < count; idx++ ) + { + CF2_Fixed v = cf2_stack_getReal( opStack, idx ); + + + if ( isX ) + curX = ADD_INT32( curX, v ); + else + curY = ADD_INT32( curY, v ); + + isX = !isX; + + cf2_glyphpath_lineTo( &glyphPath, curX, curY ); + } + + cf2_stack_clear( opStack ); + } + continue; + + case cf2_cmdRCURVELINE: + case cf2_cmdRRCURVETO: + { + CF2_UInt count = cf2_stack_count( opStack ); + CF2_UInt idx = 0; + + + FT_TRACE4(( "%s\n", op1 == cf2_cmdRCURVELINE ? " rcurveline" + : " rrcurveto" )); + + while ( idx + 6 <= count ) + { + CF2_Fixed x1, y1, x2, y2, x3, y3; + + + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 ); + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 ); + + cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); + + curX = x3; + curY = y3; + idx += 6; + } + + if ( op1 == cf2_cmdRCURVELINE ) + { + curX = ADD_INT32( curX, cf2_stack_getReal( opStack, + idx + 0 ) ); + curY = ADD_INT32( curY, cf2_stack_getReal( opStack, + idx + 1 ) ); + + cf2_glyphpath_lineTo( &glyphPath, curX, curY ); + } + + cf2_stack_clear( opStack ); + } + continue; /* no need to clear stack again */ + + case cf2_cmdCLOSEPATH: + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (%d)\n", op1 )); + else + { + FT_TRACE4(( " closepath\n" )); + + /* if there is no path, `closepath' is a no-op */ + cf2_glyphpath_closeOpenPath( &glyphPath ); + + haveWidth = TRUE; + } + break; + + case cf2_cmdCALLGSUBR: + case cf2_cmdCALLSUBR: + { + CF2_Int subrNum; + + + FT_TRACE4(( "%s", op1 == cf2_cmdCALLGSUBR ? " callgsubr" + : " callsubr" )); + + if ( ( !font->isT1 && charstringIndex > CF2_MAX_SUBR ) || + ( font->isT1 && charstringIndex > T1_MAX_SUBRS_CALLS ) ) + { + /* max subr plus one for charstring */ + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; /* overflow of stack */ + } + + /* push our current CFF charstring region on subrStack */ + charstring = (CF2_Buffer) + cf2_arrstack_getPointer( + &subrStack, + (size_t)charstringIndex + 1 ); + + /* set up the new CFF region and pointer */ + subrNum = cf2_stack_popInt( opStack ); + + if ( font->isT1 && decoder->locals_hash ) + { + size_t* val = ft_hash_num_lookup( subrNum, + decoder->locals_hash ); + + + if ( val ) + subrNum = *val; + else + subrNum = -1; + } + + switch ( op1 ) + { + case cf2_cmdCALLGSUBR: + FT_TRACE4(( " (idx %d, entering level %d)\n", + subrNum + decoder->globals_bias, + charstringIndex + 1 )); + + if ( cf2_initGlobalRegionBuffer( decoder, + subrNum, + charstring ) ) + { + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; /* subroutine lookup or stream error */ + } + break; + + default: + /* cf2_cmdCALLSUBR */ + FT_TRACE4(( " (idx %d, entering level %d)\n", + subrNum + decoder->locals_bias, + charstringIndex + 1 )); + + if ( cf2_initLocalRegionBuffer( decoder, + subrNum, + charstring ) ) + { + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; /* subroutine lookup or stream error */ + } + } + + charstringIndex += 1; /* entry is valid now */ + } + continue; /* do not clear the stack */ + + case cf2_cmdRETURN: + FT_TRACE4(( " return (leaving level %d)\n", charstringIndex )); + + if ( charstringIndex < 1 ) + { + /* Note: cannot return from top charstring */ + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; /* underflow of stack */ + } + + /* restore position in previous charstring */ + charstring = (CF2_Buffer) + cf2_arrstack_getPointer( + &subrStack, + (CF2_UInt)--charstringIndex ); + continue; /* do not clear the stack */ + + case cf2_cmdESC: + { + FT_Byte op2 = (FT_Byte)cf2_buf_readByte( charstring ); + + + /* first switch for 2-byte operators handles CFF2 */ + /* and opcodes that are reserved for both CFF and CFF2 */ + switch ( op2 ) + { + case cf2_escHFLEX: + { + static const FT_Bool readFromStack[12] = + { + TRUE /* dx1 */, FALSE /* dy1 */, + TRUE /* dx2 */, TRUE /* dy2 */, + TRUE /* dx3 */, FALSE /* dy3 */, + TRUE /* dx4 */, FALSE /* dy4 */, + TRUE /* dx5 */, FALSE /* dy5 */, + TRUE /* dx6 */, FALSE /* dy6 */ + }; + + + FT_TRACE4(( " hflex\n" )); + + cf2_doFlex( opStack, + &curX, + &curY, + &glyphPath, + readFromStack, + FALSE /* doConditionalLastRead */ ); + } + continue; + + case cf2_escFLEX: + { + static const FT_Bool readFromStack[12] = + { + TRUE /* dx1 */, TRUE /* dy1 */, + TRUE /* dx2 */, TRUE /* dy2 */, + TRUE /* dx3 */, TRUE /* dy3 */, + TRUE /* dx4 */, TRUE /* dy4 */, + TRUE /* dx5 */, TRUE /* dy5 */, + TRUE /* dx6 */, TRUE /* dy6 */ + }; + + + FT_TRACE4(( " flex\n" )); + + cf2_doFlex( opStack, + &curX, + &curY, + &glyphPath, + readFromStack, + FALSE /* doConditionalLastRead */ ); + } + break; /* TODO: why is this not a continue? */ + + case cf2_escHFLEX1: + { + static const FT_Bool readFromStack[12] = + { + TRUE /* dx1 */, TRUE /* dy1 */, + TRUE /* dx2 */, TRUE /* dy2 */, + TRUE /* dx3 */, FALSE /* dy3 */, + TRUE /* dx4 */, FALSE /* dy4 */, + TRUE /* dx5 */, TRUE /* dy5 */, + TRUE /* dx6 */, FALSE /* dy6 */ + }; + + + FT_TRACE4(( " hflex1\n" )); + + cf2_doFlex( opStack, + &curX, + &curY, + &glyphPath, + readFromStack, + FALSE /* doConditionalLastRead */ ); + } + continue; + + case cf2_escFLEX1: + { + static const FT_Bool readFromStack[12] = + { + TRUE /* dx1 */, TRUE /* dy1 */, + TRUE /* dx2 */, TRUE /* dy2 */, + TRUE /* dx3 */, TRUE /* dy3 */, + TRUE /* dx4 */, TRUE /* dy4 */, + TRUE /* dx5 */, TRUE /* dy5 */, + FALSE /* dx6 */, FALSE /* dy6 */ + }; + + + FT_TRACE4(( " flex1\n" )); + + cf2_doFlex( opStack, + &curX, + &curY, + &glyphPath, + readFromStack, + TRUE /* doConditionalLastRead */ ); + } + continue; + + /* these opcodes are always reserved */ + case cf2_escRESERVED_8: + case cf2_escRESERVED_13: + case cf2_escRESERVED_19: + case cf2_escRESERVED_25: + case cf2_escRESERVED_31: + case cf2_escRESERVED_32: + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + break; + + default: + { + if ( font->isCFF2 || op2 >= cf2_escRESERVED_38 ) + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + else if ( font->isT1 && result_cnt > 0 && op2 != cf2_escPOP ) + { + /* all operands have been transferred by previous pops */ + result_cnt = 0; + } + else + { + /* second switch for 2-byte operators handles */ + /* CFF and Type 1 */ + switch ( op2 ) + { + + case cf2_escDOTSECTION: + /* something about `flip type of locking' -- ignore it */ + FT_TRACE4(( " dotsection\n" )); + + break; + + case cf2_escVSTEM3: + case cf2_escHSTEM3: + /* + * Type 1: Type 2: + * x0 dx0 x1 dx1 x2 dx2 vstem3 x dx {dxa dxb}* vstem + * y0 dy0 y1 dy1 y2 dy2 hstem3 y dy {dya dyb}* hstem + * relative to lsb point relative to zero + * + */ + { + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + else + { + CF2_F16Dot16 v0, v1, v2; + + FT_Bool isV = FT_BOOL( op2 == cf2_escVSTEM3 ); + + + FT_TRACE4(( "%s\n", isV ? " vstem3" + : " hstem3" )); + + FT_ASSERT( cf2_stack_count( opStack ) == 6 ); + + v0 = cf2_stack_getReal( opStack, 0 ); + v1 = cf2_stack_getReal( opStack, 2 ); + v2 = cf2_stack_getReal( opStack, 4 ); + + cf2_stack_setReal( + opStack, 2, + SUB_INT32( SUB_INT32( v1, v0 ), + cf2_stack_getReal( opStack, 1 ) ) ); + cf2_stack_setReal( + opStack, 4, + SUB_INT32( SUB_INT32( v2, v1 ), + cf2_stack_getReal( opStack, 3 ) ) ); + + /* add left-sidebearing correction */ + cf2_doStems( font, + opStack, + isV ? &vStemHintArray : &hStemHintArray, + width, + &haveWidth, + isV ? decoder->builder.left_bearing->x + : decoder->builder.left_bearing->y ); + + if ( decoder->width_only ) + goto exit; + } + } + break; + + case cf2_escAND: + { + CF2_F16Dot16 arg1; + CF2_F16Dot16 arg2; + + + FT_TRACE4(( " and\n" )); + + arg2 = cf2_stack_popFixed( opStack ); + arg1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushInt( opStack, arg1 && arg2 ); + } + continue; /* do not clear the stack */ + + case cf2_escOR: + { + CF2_F16Dot16 arg1; + CF2_F16Dot16 arg2; + + + FT_TRACE4(( " or\n" )); + + arg2 = cf2_stack_popFixed( opStack ); + arg1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushInt( opStack, arg1 || arg2 ); + } + continue; /* do not clear the stack */ + + case cf2_escNOT: + { + CF2_F16Dot16 arg; + + + FT_TRACE4(( " not\n" )); + + arg = cf2_stack_popFixed( opStack ); + + cf2_stack_pushInt( opStack, !arg ); + } + continue; /* do not clear the stack */ + + case cf2_escSEAC: + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + else + { + FT_Error error2; + CF2_Int bchar_index, achar_index; + FT_Vector left_bearing, advance; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + T1_Face face = (T1_Face)decoder->builder.face; +#endif + CF2_BufferRec component; + CF2_Fixed dummyWidth; + + CF2_Int achar = cf2_stack_popInt( opStack ); + CF2_Int bchar = cf2_stack_popInt( opStack ); + + FT_Pos ady = cf2_stack_popFixed ( opStack ); + FT_Pos adx = cf2_stack_popFixed ( opStack ); + FT_Pos asb = cf2_stack_popFixed ( opStack ); + + + FT_TRACE4(( " seac\n" )); + + if ( doingSeac ) + { + FT_ERROR(( " nested seac\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; /* nested seac */ + } + + if ( decoder->builder.metrics_only ) + { + FT_ERROR(( " unexpected seac\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; /* unexpected seac */ + } + + /* `glyph_names' is set to 0 for CID fonts which do */ + /* not include an encoding. How can we deal with */ + /* these? */ +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( decoder->glyph_names == 0 && + !face->root.internal->incremental_interface ) +#else + if ( decoder->glyph_names == 0 ) +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + { + FT_ERROR(( "cf2_interpT2CharString:\n" )); + FT_ERROR(( " (Type 1 seac) glyph names table" + " not available in this font\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + /* seac weirdness */ + adx += decoder->builder.left_bearing->x; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( face->root.internal->incremental_interface ) + { + /* the caller must handle the font encoding also */ + bchar_index = bchar; + achar_index = achar; + } + else +#endif + { + bchar_index = t1_lookup_glyph_by_stdcharcode_ps( + decoder, bchar ); + achar_index = t1_lookup_glyph_by_stdcharcode_ps( + decoder, achar ); + } + + if ( bchar_index < 0 || achar_index < 0 ) + { + FT_ERROR(( "cf2_interpT2CharString:\n" )); + FT_ERROR(( " (Type 1 seac) invalid" + " seac character code arguments\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + /* if we are trying to load a composite glyph, */ + /* do not load the accent character and return */ + /* the array of subglyphs. */ + if ( decoder->builder.no_recurse ) + { + FT_GlyphSlot glyph = (FT_GlyphSlot)decoder->builder.glyph; + FT_GlyphLoader loader = glyph->internal->loader; + FT_SubGlyph subg; + + + /* reallocate subglyph array if necessary */ + error2 = FT_GlyphLoader_CheckSubGlyphs( loader, 2 ); + if ( error2 ) + { + lastError = error2; /* pass FreeType error through */ + goto exit; + } + + subg = loader->current.subglyphs; + + /* subglyph 0 = base character */ + subg->index = bchar_index; + subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES | + FT_SUBGLYPH_FLAG_USE_MY_METRICS; + subg->arg1 = 0; + subg->arg2 = 0; + subg++; + + /* subglyph 1 = accent character */ + subg->index = achar_index; + subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES; + subg->arg1 = (FT_Int)FIXED_TO_INT( adx - asb ); + subg->arg2 = (FT_Int)FIXED_TO_INT( ady ); + + /* set up remaining glyph fields */ + glyph->num_subglyphs = 2; + glyph->subglyphs = loader->base.subglyphs; + glyph->format = FT_GLYPH_FORMAT_COMPOSITE; + + loader->current.num_subglyphs = 2; + + goto exit; + } + + /* First load `bchar' in builder */ + /* now load the unscaled outline */ + + /* prepare loader */ + FT_GlyphLoader_Prepare( decoder->builder.loader ); + + error2 = cf2_getT1SeacComponent( decoder, + (FT_UInt)bchar_index, + &component ); + if ( error2 ) + { + 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, + translation, + TRUE, + 0, + 0, + &dummyWidth ); + cf2_freeT1SeacComponent( decoder, &component ); + + /* If the SEAC glyph doesn't have a (H)SBW of its */ + /* own use the values from the base glyph. */ + + if ( !haveWidth ) + { + left_bearing = *decoder->builder.left_bearing; + advance = *decoder->builder.advance; + } + + decoder->builder.left_bearing->x = 0; + decoder->builder.left_bearing->y = 0; + + /* Now load `achar' on top of */ + /* the base outline */ + + error2 = cf2_getT1SeacComponent( decoder, + (FT_UInt)achar_index, + &component ); + if ( error2 ) + { + lastError = error2; /* pass FreeType error through */ + goto exit; + } + cf2_interpT2CharString( font, + &component, + callbacks, + translation, + TRUE, + adx - asb, + ady, + &dummyWidth ); + cf2_freeT1SeacComponent( decoder, &component ); + + /* 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; + + goto exit; + } + break; + + case cf2_escSBW: + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + else + { + CF2_Fixed lsb_x, lsb_y; + PS_Builder* builder; + + + FT_TRACE4(( " sbw" )); + + builder = &decoder->builder; + + builder->advance->y = cf2_stack_popFixed( opStack ); + builder->advance->x = cf2_stack_popFixed( opStack ); + + lsb_y = cf2_stack_popFixed( opStack ); + lsb_x = cf2_stack_popFixed( opStack ); + + builder->left_bearing->x = + ADD_INT32( builder->left_bearing->x, lsb_x ); + builder->left_bearing->y = + ADD_INT32( builder->left_bearing->y, lsb_y ); + + haveWidth = TRUE; + + /* the `metrics_only' indicates that we only want */ + /* to compute the glyph's metrics (lsb + advance */ + /* width), not load the rest of it; so exit */ + /* immediately */ + if ( builder->metrics_only ) + goto exit; + + if ( initial_map_ready ) + { + curX = ADD_INT32( curX, lsb_x ); + curY = ADD_INT32( curY, lsb_y ); + } + } + break; + + case cf2_escABS: + { + CF2_F16Dot16 arg; + + + FT_TRACE4(( " abs\n" )); + + arg = cf2_stack_popFixed( opStack ); + + if ( arg < -CF2_FIXED_MAX ) + cf2_stack_pushFixed( opStack, CF2_FIXED_MAX ); + else + cf2_stack_pushFixed( opStack, FT_ABS( arg ) ); + } + continue; /* do not clear the stack */ + + case cf2_escADD: + { + CF2_F16Dot16 summand1; + CF2_F16Dot16 summand2; + + + FT_TRACE4(( " add\n" )); + + summand2 = cf2_stack_popFixed( opStack ); + summand1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + ADD_INT32( summand1, + summand2 ) ); + } + continue; /* do not clear the stack */ + + case cf2_escSUB: + { + CF2_F16Dot16 minuend; + CF2_F16Dot16 subtrahend; + + + FT_TRACE4(( " sub\n" )); + + subtrahend = cf2_stack_popFixed( opStack ); + minuend = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + SUB_INT32( minuend, subtrahend ) ); + } + continue; /* do not clear the stack */ + + case cf2_escDIV: + { + CF2_F16Dot16 dividend; + CF2_F16Dot16 divisor; + + + FT_TRACE4(( " div\n" )); + + if ( font->isT1 && large_int ) + { + divisor = (CF2_F16Dot16)cf2_stack_popInt( opStack ); + dividend = (CF2_F16Dot16)cf2_stack_popInt( opStack ); + + large_int = FALSE; + } + else + { + divisor = cf2_stack_popFixed( opStack ); + dividend = cf2_stack_popFixed( opStack ); + } + + cf2_stack_pushFixed( opStack, + FT_DivFix( dividend, divisor ) ); + + } + continue; /* do not clear the stack */ + + case cf2_escNEG: + { + CF2_F16Dot16 arg; + + + FT_TRACE4(( " neg\n" )); + + arg = cf2_stack_popFixed( opStack ); + + if ( arg < -CF2_FIXED_MAX ) + cf2_stack_pushFixed( opStack, CF2_FIXED_MAX ); + else + cf2_stack_pushFixed( opStack, -arg ); + } + continue; /* do not clear the stack */ + + case cf2_escEQ: + { + CF2_F16Dot16 arg1; + CF2_F16Dot16 arg2; + + + FT_TRACE4(( " eq\n" )); + + arg2 = cf2_stack_popFixed( opStack ); + arg1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushInt( opStack, arg1 == arg2 ); + } + continue; /* do not clear the stack */ + + case cf2_escCALLOTHERSUBR: + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + else + { + CF2_Int subr_no; + CF2_Int arg_cnt; + CF2_UInt count; + CF2_UInt opIdx = 0; + + + FT_TRACE4(( " callothersubr\n" )); + + subr_no = cf2_stack_popInt( opStack ); + arg_cnt = cf2_stack_popInt( opStack ); + + /******************************************************** + * + * remove all operands to callothersubr from the stack + * + * for handled othersubrs, where we know the number of + * arguments, we increase the stack by the value of + * known_othersubr_result_cnt + * + * for unhandled othersubrs the following pops adjust + * the stack pointer as necessary + */ + + count = cf2_stack_count( opStack ); + if ( (CF2_UInt)arg_cnt > count ) + { + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " stack underflow\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + opIdx += count - (CF2_UInt)arg_cnt; + + known_othersubr_result_cnt = 0; + result_cnt = 0; + + /* XXX TODO: The checks to `arg_count == <whatever>' */ + /* might not be correct; an othersubr expects a */ + /* certain number of operands on the PostScript stack */ + /* (as opposed to the T1 stack) but it doesn't have to */ + /* put them there by itself; previous othersubrs might */ + /* have left the operands there if they were not */ + /* followed by an appropriate number of pops */ + /* */ + /* On the other hand, Adobe Reader 7.0.8 for Linux */ + /* doesn't accept a font that contains charstrings */ + /* like */ + /* */ + /* 100 200 2 20 callothersubr */ + /* 300 1 20 callothersubr pop */ + /* */ + /* Perhaps this is the reason why BuildCharArray */ + /* exists. */ + + switch ( subr_no ) + { + case 0: /* end flex feature */ + if ( arg_cnt != 3 ) + goto Unexpected_OtherSubr; + + if ( initial_map_ready && + ( !decoder->flex_state || + decoder->num_flex_vectors != 7 ) ) + { + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " unexpected flex end\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + /* the two `results' are popped */ + /* by the following setcurrentpoint */ + cf2_stack_pushFixed( opStack, curX ); + cf2_stack_pushFixed( opStack, curY ); + known_othersubr_result_cnt = 2; + break; + + case 1: /* start flex feature */ + if ( arg_cnt != 0 ) + goto Unexpected_OtherSubr; + + if ( !initial_map_ready ) + break; + + if ( ps_builder_check_points( &decoder->builder, 6 ) ) + goto exit; + + decoder->flex_state = 1; + decoder->num_flex_vectors = 0; + break; + + case 2: /* add flex vectors */ + { + FT_Int idx; + FT_Int idx2; + + + if ( arg_cnt != 0 ) + goto Unexpected_OtherSubr; + + if ( !initial_map_ready ) + break; + + if ( !decoder->flex_state ) + { + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " missing flex start\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + /* note that we should not add a point for */ + /* index 0; this will move our current position */ + /* to the flex point without adding any point */ + /* to the outline */ + idx = decoder->num_flex_vectors++; + if ( idx > 0 && idx < 7 ) + { + /* in malformed fonts it is possible to have */ + /* other opcodes in the middle of a flex (which */ + /* don't increase `num_flex_vectors'); we thus */ + /* have to check whether we can add a point */ + + if ( ps_builder_check_points( &decoder->builder, + 1 ) ) + { + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + /* map: 1->2 2->4 3->6 4->2 5->4 6->6 */ + idx2 = ( idx > 3 ? idx - 3 : idx ) * 2; + + flexStore[idx2 - 2] = curX; + flexStore[idx2 - 1] = curY; + + if ( idx == 3 || idx == 6 ) + cf2_glyphpath_curveTo( &glyphPath, + flexStore[0], + flexStore[1], + flexStore[2], + flexStore[3], + flexStore[4], + flexStore[5] ); + } + } + break; + + case 3: /* change hints */ + if ( arg_cnt != 1 ) + goto Unexpected_OtherSubr; + + if ( initial_map_ready ) + { + /* do not clear hints if initial hintmap */ + /* is not ready - we need to collate all */ + cf2_arrstack_clear( &vStemHintArray ); + cf2_arrstack_clear( &hStemHintArray ); + + cf2_hintmask_init( &hintMask, error ); + hintMask.isValid = FALSE; + hintMask.isNew = TRUE; + } + + known_othersubr_result_cnt = 1; + break; + + case 12: + case 13: + /* counter control hints, clear stack */ + cf2_stack_clear( opStack ); + break; + + case 14: + case 15: + case 16: + case 17: + case 18: /* multiple masters */ + { + PS_Blend blend = decoder->blend; + FT_UInt num_points, nn, mm; + CF2_UInt delta; + CF2_UInt values; + + + if ( !blend ) + { + FT_ERROR(( + "cf2_interpT2CharString:" + " unexpected multiple masters operator\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + num_points = (FT_UInt)subr_no - 13 + + ( subr_no == 18 ); + if ( arg_cnt != (FT_Int)( num_points * + blend->num_designs ) ) + { + FT_ERROR(( + "cf2_interpT2CharString:" + " incorrect number of multiple masters arguments\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + /* We want to compute */ + /* */ + /* a0*w0 + a1*w1 + ... + ak*wk */ + /* */ + /* but we only have a0, a1-a0, a2-a0, ..., ak-a0. */ + /* */ + /* However, given that w0 + w1 + ... + wk == 1, we */ + /* can rewrite it easily as */ + /* */ + /* a0 + (a1-a0)*w1 + (a2-a0)*w2 + ... + (ak-a0)*wk */ + /* */ + /* where k == num_designs-1. */ + /* */ + /* I guess that's why it's written in this `compact' */ + /* form. */ + /* */ + delta = opIdx + num_points; + values = opIdx; + for ( nn = 0; nn < num_points; nn++ ) + { + CF2_Fixed tmp = cf2_stack_getReal( opStack, + values ); + + + for ( mm = 1; mm < blend->num_designs; mm++ ) + tmp = ADD_INT32( tmp, + FT_MulFix( + cf2_stack_getReal( opStack, + delta++ ), + blend->weight_vector[mm] ) ); + + cf2_stack_setReal( opStack, values++, tmp ); + } + cf2_stack_pop( opStack, + (CF2_UInt)arg_cnt - num_points ); + + known_othersubr_result_cnt = (FT_Int)num_points; + break; + } + + case 19: + /* <idx> 1 19 callothersubr */ + /* ==> replace elements starting from index */ + /* cvi( <idx> ) of BuildCharArray with */ + /* WeightVector */ + { + FT_UInt idx; + PS_Blend blend = decoder->blend; + FT_UInt len_buildchar = decoder->len_buildchar; + + + if ( arg_cnt != 1 || !blend ) + goto Unexpected_OtherSubr; + + idx = (FT_UInt)cf2_stack_popInt( opStack ); + + if ( len_buildchar < blend->num_designs || + len_buildchar - blend->num_designs < idx ) + goto Unexpected_OtherSubr; + + if ( decoder->buildchar && blend->weight_vector ) + ft_memcpy( &decoder->buildchar[idx], + blend->weight_vector, + blend->num_designs * + sizeof ( blend->weight_vector[0] ) ); + } + break; + + case 20: + /* <arg1> <arg2> 2 20 callothersubr pop */ + /* ==> push <arg1> + <arg2> onto T1 stack */ + { + CF2_F16Dot16 summand1; + CF2_F16Dot16 summand2; + + + if ( arg_cnt != 2 ) + goto Unexpected_OtherSubr; + + summand2 = cf2_stack_popFixed( opStack ); + summand1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + ADD_INT32( summand1, + summand2 ) ); + known_othersubr_result_cnt = 1; + } + break; + + case 21: + /* <arg1> <arg2> 2 21 callothersubr pop */ + /* ==> push <arg1> - <arg2> onto T1 stack */ + { + CF2_F16Dot16 minuend; + CF2_F16Dot16 subtrahend; + + + if ( arg_cnt != 2 ) + goto Unexpected_OtherSubr; + + subtrahend = cf2_stack_popFixed( opStack ); + minuend = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + SUB_INT32( minuend, + subtrahend ) ); + known_othersubr_result_cnt = 1; + } + break; + + case 22: + /* <arg1> <arg2> 2 22 callothersubr pop */ + /* ==> push <arg1> * <arg2> onto T1 stack */ + { + CF2_F16Dot16 factor1; + CF2_F16Dot16 factor2; + + + if ( arg_cnt != 2 ) + goto Unexpected_OtherSubr; + + factor2 = cf2_stack_popFixed( opStack ); + factor1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + FT_MulFix( factor1, factor2 ) ); + known_othersubr_result_cnt = 1; + } + break; + + case 23: + /* <arg1> <arg2> 2 23 callothersubr pop */ + /* ==> push <arg1> / <arg2> onto T1 stack */ + { + CF2_F16Dot16 dividend; + CF2_F16Dot16 divisor; + + + if ( arg_cnt != 2 ) + goto Unexpected_OtherSubr; + + divisor = cf2_stack_popFixed( opStack ); + dividend = cf2_stack_popFixed( opStack ); + + if ( divisor == 0 ) + goto Unexpected_OtherSubr; + + cf2_stack_pushFixed( opStack, + FT_DivFix( dividend, + divisor ) ); + known_othersubr_result_cnt = 1; + } + break; + + case 24: + /* <val> <idx> 2 24 callothersubr */ + /* ==> set BuildCharArray[cvi( <idx> )] = <val> */ + { + CF2_UInt idx; + PS_Blend blend = decoder->blend; + + + if ( arg_cnt != 2 || !blend ) + goto Unexpected_OtherSubr; + + idx = (CF2_UInt)cf2_stack_popInt( opStack ); + + if ( idx >= decoder->len_buildchar ) + goto Unexpected_OtherSubr; + + decoder->buildchar[idx] = + cf2_stack_popFixed( opStack ); + } + break; + + case 25: + /* <idx> 1 25 callothersubr pop */ + /* ==> push BuildCharArray[cvi( idx )] */ + /* onto T1 stack */ + { + CF2_UInt idx; + PS_Blend blend = decoder->blend; + + + if ( arg_cnt != 1 || !blend ) + goto Unexpected_OtherSubr; + + idx = (CF2_UInt)cf2_stack_popInt( opStack ); + + if ( idx >= decoder->len_buildchar ) + goto Unexpected_OtherSubr; + + cf2_stack_pushFixed( opStack, + decoder->buildchar[idx] ); + known_othersubr_result_cnt = 1; + } + break; + +#if 0 + case 26: + /* <val> mark <idx> */ + /* ==> set BuildCharArray[cvi( <idx> )] = <val>, */ + /* leave mark on T1 stack */ + /* <val> <idx> */ + /* ==> set BuildCharArray[cvi( <idx> )] = <val> */ + XXX which routine has left its mark on the + XXX (PostScript) stack?; + break; +#endif + + case 27: + /* <res1> <res2> <val1> <val2> 4 27 callothersubr pop */ + /* ==> push <res1> onto T1 stack if <val1> <= <val2>, */ + /* otherwise push <res2> */ + { + CF2_F16Dot16 arg1; + CF2_F16Dot16 arg2; + CF2_F16Dot16 cond1; + CF2_F16Dot16 cond2; + + + if ( arg_cnt != 4 ) + goto Unexpected_OtherSubr; + + cond2 = cf2_stack_popFixed( opStack ); + cond1 = cf2_stack_popFixed( opStack ); + arg2 = cf2_stack_popFixed( opStack ); + arg1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + cond1 <= cond2 ? arg1 : arg2 ); + known_othersubr_result_cnt = 1; + } + break; + + case 28: + /* 0 28 callothersubr pop */ + /* ==> push random value from interval [0, 1) */ + /* onto stack */ + { + CF2_F16Dot16 r; + + + if ( arg_cnt != 0 ) + goto Unexpected_OtherSubr; + + /* only use the lower 16 bits of `random' */ + /* to generate a number in the range (0;1] */ + r = (CF2_F16Dot16) + ( ( decoder->current_subfont->random & 0xFFFF ) + 1 ); + + decoder->current_subfont->random = + cff_random( decoder->current_subfont->random ); + + cf2_stack_pushFixed( opStack, r ); + known_othersubr_result_cnt = 1; + } + break; + + default: + if ( arg_cnt >= 0 && subr_no >= 0 ) + { + FT_Int i; + + + FT_ERROR(( + "cf2_interpT2CharString (Type 1 mode):" + " unknown othersubr [%d %d], wish me luck\n", + arg_cnt, subr_no )); + + /* store the unused args */ + /* for this unhandled OtherSubr */ + + if ( arg_cnt > PS_STORAGE_SIZE ) + arg_cnt = PS_STORAGE_SIZE; + result_cnt = arg_cnt; + + for ( i = 1; i <= arg_cnt; i++ ) + results[result_cnt - i] = + cf2_stack_popFixed( opStack ); + + break; + } + /* fall through */ + + Unexpected_OtherSubr: + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " invalid othersubr [%d %d]\n", + arg_cnt, subr_no )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + } + continue; /* do not clear the stack */ + + case cf2_escPOP: + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + else + { + FT_TRACE4(( " pop" )); + + if ( known_othersubr_result_cnt > 0 ) + { + known_othersubr_result_cnt--; + /* ignore, we pushed the operands ourselves */ + continue; + } + + if ( result_cnt == 0 ) + { + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " no more operands for othersubr\n" )); + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; + } + + result_cnt--; + cf2_stack_pushFixed( opStack, results[result_cnt] ); + } + continue; /* do not clear the stack */ + + case cf2_escDROP: + FT_TRACE4(( " drop\n" )); + + (void)cf2_stack_popFixed( opStack ); + continue; /* do not clear the stack */ + + case cf2_escPUT: + { + CF2_F16Dot16 val; + CF2_UInt idx; + + + FT_TRACE4(( " put\n" )); + + idx = (CF2_UInt)cf2_stack_popInt( opStack ); + val = cf2_stack_popFixed( opStack ); + + if ( idx < CF2_STORAGE_SIZE ) + storage[idx] = val; + } + continue; /* do not clear the stack */ + + case cf2_escGET: + { + CF2_UInt idx; + + + FT_TRACE4(( " get\n" )); + + idx = (CF2_UInt)cf2_stack_popInt( opStack ); + + if ( idx < CF2_STORAGE_SIZE ) + cf2_stack_pushFixed( opStack, storage[idx] ); + } + continue; /* do not clear the stack */ + + case cf2_escIFELSE: + { + CF2_F16Dot16 arg1; + CF2_F16Dot16 arg2; + CF2_F16Dot16 cond1; + CF2_F16Dot16 cond2; + + + FT_TRACE4(( " ifelse\n" )); + + cond2 = cf2_stack_popFixed( opStack ); + cond1 = cf2_stack_popFixed( opStack ); + arg2 = cf2_stack_popFixed( opStack ); + arg1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + cond1 <= cond2 ? arg1 : arg2 ); + } + continue; /* do not clear the stack */ + + case cf2_escRANDOM: /* in spec */ + { + CF2_F16Dot16 r; + + + FT_TRACE4(( " random\n" )); + + /* only use the lower 16 bits of `random' */ + /* to generate a number in the range (0;1] */ + r = (CF2_F16Dot16) + ( ( decoder->current_subfont->random & 0xFFFF ) + 1 ); + + decoder->current_subfont->random = + cff_random( decoder->current_subfont->random ); + + cf2_stack_pushFixed( opStack, r ); + } + continue; /* do not clear the stack */ + + case cf2_escMUL: + { + CF2_F16Dot16 factor1; + CF2_F16Dot16 factor2; + + + FT_TRACE4(( " mul\n" )); + + factor2 = cf2_stack_popFixed( opStack ); + factor1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, + FT_MulFix( factor1, factor2 ) ); + } + continue; /* do not clear the stack */ + + case cf2_escSQRT: + { + CF2_F16Dot16 arg; + + + FT_TRACE4(( " sqrt\n" )); + + arg = cf2_stack_popFixed( opStack ); + if ( arg > 0 ) + arg = (CF2_F16Dot16)FT_SqrtFixed( (FT_UInt32)arg ); + else + arg = 0; + + cf2_stack_pushFixed( opStack, arg ); + } + continue; /* do not clear the stack */ + + case cf2_escDUP: + { + CF2_F16Dot16 arg; + + + FT_TRACE4(( " dup\n" )); + + arg = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, arg ); + cf2_stack_pushFixed( opStack, arg ); + } + continue; /* do not clear the stack */ + + case cf2_escEXCH: + { + CF2_F16Dot16 arg1; + CF2_F16Dot16 arg2; + + + FT_TRACE4(( " exch\n" )); + + arg2 = cf2_stack_popFixed( opStack ); + arg1 = cf2_stack_popFixed( opStack ); + + cf2_stack_pushFixed( opStack, arg2 ); + cf2_stack_pushFixed( opStack, arg1 ); + } + continue; /* do not clear the stack */ + + case cf2_escINDEX: + { + CF2_Int idx; + CF2_UInt size; + + + FT_TRACE4(( " index\n" )); + + idx = cf2_stack_popInt( opStack ); + size = cf2_stack_count( opStack ); + + if ( size > 0 ) + { + /* for `cf2_stack_getReal', */ + /* index 0 is bottom of stack */ + CF2_UInt gr_idx; + + + if ( idx < 0 ) + gr_idx = size - 1; + else if ( (CF2_UInt)idx >= size ) + gr_idx = 0; + else + gr_idx = size - 1 - (CF2_UInt)idx; + + cf2_stack_pushFixed( opStack, + cf2_stack_getReal( opStack, + gr_idx ) ); + } + } + continue; /* do not clear the stack */ + + case cf2_escROLL: + { + CF2_Int idx; + CF2_Int count; + + + FT_TRACE4(( " roll\n" )); + + idx = cf2_stack_popInt( opStack ); + count = cf2_stack_popInt( opStack ); + + cf2_stack_roll( opStack, count, idx ); + } + continue; /* do not clear the stack */ + + case cf2_escSETCURRENTPT: + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (12, %d)\n", op2 )); + else + { + FT_TRACE4(( " setcurrentpoint" )); + + if ( !initial_map_ready ) + break; + + /* From the T1 specification, section 6.4: */ + /* */ + /* The setcurrentpoint command is used only in */ + /* conjunction with results from OtherSubrs */ + /* procedures. */ + + /* known_othersubr_result_cnt != 0 is already handled */ + /* above. */ + + /* Note, however, that both Ghostscript and Adobe */ + /* Distiller handle this situation by silently */ + /* ignoring the inappropriate `setcurrentpoint' */ + /* instruction. So we do the same. */ +#if 0 + + if ( decoder->flex_state != 1 ) + { + FT_ERROR(( "cf2_interpT2CharString:" + " unexpected `setcurrentpoint'\n" )); + goto Syntax_Error; + } + else + ... +#endif + + curY = cf2_stack_popFixed( opStack ); + curX = cf2_stack_popFixed( opStack ); + + decoder->flex_state = 0; + } + break; + + } /* end of 2nd switch checking op2 */ + } + } + } /* end of 1st switch checking op2 */ + } /* case cf2_cmdESC */ + + break; + + case cf2_cmdHSBW: + if ( !font->isT1 ) + FT_TRACE4(( " unknown op (%d)\n", op1 )); + else + { + CF2_Fixed lsb_x; + PS_Builder* builder; + + + FT_TRACE4(( " hsbw\n" )); + + builder = &decoder->builder; + + builder->advance->x = cf2_stack_popFixed( opStack ); + builder->advance->y = 0; + + lsb_x = cf2_stack_popFixed( opStack ); + + builder->left_bearing->x = ADD_INT32( builder->left_bearing->x, + lsb_x ); + + haveWidth = TRUE; + + /* the `metrics_only' indicates that we only want to compute */ + /* the glyph's metrics (lsb + advance width), not load the */ + /* rest of it; so exit immediately */ + if ( builder->metrics_only ) + goto exit; + + if ( initial_map_ready ) + curX = ADD_INT32( curX, lsb_x ); + } + break; + + case cf2_cmdENDCHAR: + FT_TRACE4(( " endchar\n" )); + + if ( font->isT1 && !initial_map_ready ) + { + FT_TRACE5(( "cf2_interpT2CharString (Type 1 mode): " + "Build initial hintmap, rewinding...\n" )); + + /* trigger initial hintmap build */ + cf2_glyphpath_moveTo( &glyphPath, curX, curY ); + + initial_map_ready = TRUE; + + /* change hints routine - clear for rewind */ + cf2_arrstack_clear( &vStemHintArray ); + cf2_arrstack_clear( &hStemHintArray ); + + cf2_hintmask_init( &hintMask, error ); + hintMask.isValid = FALSE; + hintMask.isNew = TRUE; + + /* rewind charstring */ + /* some charstrings use endchar from a final subroutine call */ + /* without returning, detect these and exit to the top level */ + /* charstring */ + while ( charstringIndex > 0 ) + { + FT_TRACE4(( " return (leaving level %d)\n", charstringIndex )); + + /* restore position in previous charstring */ + charstring = (CF2_Buffer) + cf2_arrstack_getPointer( + &subrStack, + (CF2_UInt)--charstringIndex ); + } + charstring->ptr = charstring->start; + + break; + } + + if ( cf2_stack_count( opStack ) == 1 || + cf2_stack_count( opStack ) == 5 ) + { + if ( !haveWidth ) + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); + } + + /* width is defined or default after this */ + haveWidth = TRUE; + + if ( decoder->width_only ) + goto exit; + + /* close path if still open */ + cf2_glyphpath_closeOpenPath( &glyphPath ); + + /* disable seac for CFF2 and Type1 */ + /* (charstring ending with args on stack) */ + if ( !font->isCFF2 && !font->isT1 && cf2_stack_count( opStack ) > 1 ) + { + /* must be either 4 or 5 -- */ + /* this is a (deprecated) implied `seac' operator */ + + CF2_Int achar; + CF2_Int bchar; + CF2_BufferRec component; + CF2_Fixed dummyWidth; /* ignore component width */ + FT_Error error2; + + + if ( doingSeac ) + { + lastError = FT_THROW( Invalid_Glyph_Format ); + goto exit; /* nested seac */ + } + + achar = cf2_stack_popInt( opStack ); + bchar = cf2_stack_popInt( opStack ); + + curY = cf2_stack_popFixed( opStack ); + curX = cf2_stack_popFixed( opStack ); + + error2 = cf2_getSeacComponent( decoder, achar, &component ); + if ( error2 ) + { + lastError = error2; /* pass FreeType error through */ + goto exit; + } + cf2_interpT2CharString( font, + &component, + callbacks, + translation, + TRUE, + curX, + curY, + &dummyWidth ); + cf2_freeSeacComponent( decoder, &component ); + + error2 = cf2_getSeacComponent( decoder, bchar, &component ); + if ( error2 ) + { + lastError = error2; /* pass FreeType error through */ + goto exit; + } + cf2_interpT2CharString( font, + &component, + callbacks, + translation, + TRUE, + 0, + 0, + &dummyWidth ); + cf2_freeSeacComponent( decoder, &component ); + } + goto exit; + + case cf2_cmdCNTRMASK: + case cf2_cmdHINTMASK: + /* the final \n in the tracing message gets added in */ + /* `cf2_hintmask_read' (which also traces the mask bytes) */ + FT_TRACE4(( "%s", op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" )); + + /* never add hints after the mask is computed */ + if ( cf2_stack_count( opStack ) > 1 && + cf2_hintmask_isValid( &hintMask ) ) + { + FT_TRACE4(( "cf2_interpT2CharString: invalid hint mask\n" )); + break; + } + + /* if there are arguments on the stack, there this is an */ + /* implied cf2_cmdVSTEMHM */ + cf2_doStems( font, + opStack, + &vStemHintArray, + width, + &haveWidth, + 0 ); + + if ( decoder->width_only ) + goto exit; + + if ( op1 == cf2_cmdHINTMASK ) + { + /* consume the hint mask bytes which follow the operator */ + cf2_hintmask_read( &hintMask, + charstring, + cf2_arrstack_size( &hStemHintArray ) + + cf2_arrstack_size( &vStemHintArray ) ); + } + else + { + /* + * Consume the counter mask bytes which follow the operator: + * Build a temporary hint map, just to place and lock those + * stems participating in the counter mask. These are most + * likely the dominant hstems, and are grouped together in a + * few counter groups, not necessarily in correspondence + * with the hint groups. This reduces the chances of + * conflicts between hstems that are initially placed in + * separate hint groups and then brought together. The + * positions are copied back to `hStemHintArray', so we can + * discard `counterMask' and `counterHintMap'. + * + */ + CF2_HintMapRec counterHintMap; + CF2_HintMaskRec counterMask; + + + cf2_hintmap_init( &counterHintMap, + font, + &glyphPath.initialHintMap, + &glyphPath.hintMoves, + scaleY ); + cf2_hintmask_init( &counterMask, error ); + + cf2_hintmask_read( &counterMask, + charstring, + cf2_arrstack_size( &hStemHintArray ) + + cf2_arrstack_size( &vStemHintArray ) ); + cf2_hintmap_build( &counterHintMap, + &hStemHintArray, + &vStemHintArray, + &counterMask, + 0, + FALSE ); + } + break; + + case cf2_cmdRMOVETO: + FT_TRACE4(( " rmoveto\n" )); + + if ( font->isT1 && !decoder->flex_state && !haveWidth ) + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " No width. Use hsbw/sbw as first op\n" )); + + if ( cf2_stack_count( opStack ) > 2 && !haveWidth ) + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); + + /* width is defined or default after this */ + haveWidth = TRUE; + + if ( decoder->width_only ) + goto exit; + + curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) ); + curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) ); + + if ( !decoder->flex_state ) + cf2_glyphpath_moveTo( &glyphPath, curX, curY ); + + break; + + case cf2_cmdHMOVETO: + FT_TRACE4(( " hmoveto\n" )); + + if ( font->isT1 && !decoder->flex_state && !haveWidth ) + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " No width. Use hsbw/sbw as first op\n" )); + + if ( cf2_stack_count( opStack ) > 1 && !haveWidth ) + *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ), + nominalWidthX ); + + /* width is defined or default after this */ + haveWidth = TRUE; + + if ( decoder->width_only ) + goto exit; + + curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) ); + + if ( !decoder->flex_state ) + cf2_glyphpath_moveTo( &glyphPath, curX, curY ); + + break; + + case cf2_cmdRLINECURVE: + { + CF2_UInt count = cf2_stack_count( opStack ); + CF2_UInt idx = 0; + + + FT_TRACE4(( " rlinecurve\n" )); + + while ( idx + 6 < count ) + { + curX = ADD_INT32( curX, cf2_stack_getReal( opStack, + idx + 0 ) ); + curY = ADD_INT32( curY, cf2_stack_getReal( opStack, + idx + 1 ) ); + + cf2_glyphpath_lineTo( &glyphPath, curX, curY ); + idx += 2; + } + + while ( idx < count ) + { + CF2_Fixed x1, y1, x2, y2, x3, y3; + + + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 ); + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 ); + + cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); + + curX = x3; + curY = y3; + idx += 6; + } + + cf2_stack_clear( opStack ); + } + continue; /* no need to clear stack again */ + + case cf2_cmdVVCURVETO: + { + CF2_UInt count, count1 = cf2_stack_count( opStack ); + CF2_UInt idx = 0; + + + /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */ + /* we enforce it by clearing the second bit */ + /* (and sorting the stack indexing to suit) */ + count = count1 & ~2U; + idx += count1 - count; + + FT_TRACE4(( " vvcurveto\n" )); + + while ( idx < count ) + { + CF2_Fixed x1, y1, x2, y2, x3, y3; + + + if ( ( count - idx ) & 1 ) + { + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curX ); + + idx++; + } + else + x1 = curX; + + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); + x3 = x2; + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 ); + + cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); + + curX = x3; + curY = y3; + idx += 4; + } + + cf2_stack_clear( opStack ); + } + continue; /* no need to clear stack again */ + + case cf2_cmdHHCURVETO: + { + CF2_UInt count, count1 = cf2_stack_count( opStack ); + CF2_UInt idx = 0; + + + /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */ + /* we enforce it by clearing the second bit */ + /* (and sorting the stack indexing to suit) */ + count = count1 & ~2U; + idx += count1 - count; + + FT_TRACE4(( " hhcurveto\n" )); + + while ( idx < count ) + { + CF2_Fixed x1, y1, x2, y2, x3, y3; + + + if ( ( count - idx ) & 1 ) + { + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curY ); + + idx++; + } + else + y1 = curY; + + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 ); + y3 = y2; + + cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); + + curX = x3; + curY = y3; + idx += 4; + } + + cf2_stack_clear( opStack ); + } + continue; /* no need to clear stack again */ + + case cf2_cmdVHCURVETO: + case cf2_cmdHVCURVETO: + { + CF2_UInt count, count1 = cf2_stack_count( opStack ); + CF2_UInt idx = 0; + + FT_Bool alternate = FT_BOOL( op1 == cf2_cmdHVCURVETO ); + + + /* if `cf2_stack_count' isn't of the form 8n, 8n+1, */ + /* 8n+4, or 8n+5, we enforce it by clearing the */ + /* second bit */ + /* (and sorting the stack indexing to suit) */ + count = count1 & ~2U; + idx += count1 - count; + + FT_TRACE4(( "%s\n", alternate ? " hvcurveto" : " vhcurveto" )); + + while ( idx < count ) + { + CF2_Fixed x1, x2, x3, y1, y2, y3; + + + if ( alternate ) + { + x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX ); + y1 = curY; + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 ); + + if ( count - idx == 5 ) + { + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 ); + + idx++; + } + else + x3 = x2; + + alternate = FALSE; + } + else + { + x1 = curX; + y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY ); + x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 ); + y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 ); + x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 ); + + if ( count - idx == 5 ) + { + y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), y2 ); + + idx++; + } + else + y3 = y2; + + alternate = TRUE; + } + + cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 ); + + curX = x3; + curY = y3; + idx += 4; + } + + cf2_stack_clear( opStack ); + } + continue; /* no need to clear stack again */ + + case cf2_cmdEXTENDEDNMBR: + { + CF2_Int v; + + CF2_Int byte1 = cf2_buf_readByte( charstring ); + CF2_Int byte2 = cf2_buf_readByte( charstring ); + + + v = (FT_Short)( ( byte1 << 8 ) | + byte2 ); + + FT_TRACE4(( " %d", v )); + + cf2_stack_pushInt( opStack, v ); + } + continue; + + default: + /* numbers */ + { + if ( /* op1 >= 32 && */ op1 <= 246 ) + { + CF2_Int v; + + + v = op1 - 139; + + FT_TRACE4(( " %d", v )); + + /* -107 .. 107 */ + cf2_stack_pushInt( opStack, v ); + } + + else if ( /* op1 >= 247 && */ op1 <= 250 ) + { + CF2_Int v; + + + v = op1; + v -= 247; + v *= 256; + v += cf2_buf_readByte( charstring ); + v += 108; + + FT_TRACE4(( " %d", v )); + + /* 108 .. 1131 */ + cf2_stack_pushInt( opStack, v ); + } + + else if ( /* op1 >= 251 && */ op1 <= 254 ) + { + CF2_Int v; + + + v = op1; + v -= 251; + v *= 256; + v += cf2_buf_readByte( charstring ); + v = -v - 108; + + FT_TRACE4(( " %d", v )); + + /* -1131 .. -108 */ + cf2_stack_pushInt( opStack, v ); + } + + else /* op1 == 255 */ + { + CF2_Fixed v; + + FT_UInt32 byte1 = (FT_UInt32)cf2_buf_readByte( charstring ); + FT_UInt32 byte2 = (FT_UInt32)cf2_buf_readByte( charstring ); + FT_UInt32 byte3 = (FT_UInt32)cf2_buf_readByte( charstring ); + FT_UInt32 byte4 = (FT_UInt32)cf2_buf_readByte( charstring ); + + + v = (CF2_Fixed)( ( byte1 << 24 ) | + ( byte2 << 16 ) | + ( byte3 << 8 ) | + byte4 ); + + /* + * For Type 1: + * + * According to the specification, values > 32000 or < -32000 + * must be followed by a `div' operator to make the result be + * in the range [-32000;32000]. We expect that the second + * argument of `div' is not a large number. Additionally, we + * don't handle stuff like `<large1> <large2> <num> div <num> + * div' or <large1> <large2> <num> div div'. This is probably + * not allowed anyway. + * + * <large> <num> <num>+ div is not checked but should not be + * allowed as the large value remains untouched. + * + */ + if ( font->isT1 ) + { + if ( v > 32000 || v < -32000 ) + { + if ( large_int ) + FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):" + " no `div' after large integer\n" )); + else + large_int = TRUE; + } + + FT_TRACE4(( " %d", v )); + + cf2_stack_pushInt( opStack, (CF2_Int)v ); + } + else + { + FT_TRACE4(( " %.5fF", v / 65536.0 )); + + cf2_stack_pushFixed( opStack, v ); + } + } + } + continue; /* don't clear stack */ + + } /* end of switch statement checking `op1' */ + + cf2_stack_clear( opStack ); + + } /* end of main interpreter loop */ + + /* we get here if the charstring ends without cf2_cmdENDCHAR */ + FT_TRACE4(( "cf2_interpT2CharString:" + " charstring ends without ENDCHAR\n" )); + + exit: + /* check whether last error seen is also the first one */ + cf2_setError( error, lastError ); + + if ( *error ) + FT_TRACE4(( "charstring error %d\n", *error )); + + /* free resources from objects we've used */ + cf2_glyphpath_finalize( &glyphPath ); + cf2_arrstack_finalize( &vStemHintArray ); + cf2_arrstack_finalize( &hStemHintArray ); + cf2_arrstack_finalize( &subrStack ); + cf2_stack_free( opStack ); + + FT_TRACE4(( "\n" )); + + return; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psintrp.h b/non-source/foreign/freetype2/src/psaux/psintrp.h new file mode 100644 index 000000000..d8b9342ec --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psintrp.h @@ -0,0 +1,83 @@ +/**************************************************************************** + * + * psintrp.h + * + * Adobe's CFF Interpreter (specification). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSINTRP_H_ +#define PSINTRP_H_ + + +#include "psft.h" +#include "pshints.h" + + +FT_BEGIN_HEADER + + + FT_LOCAL( void ) + cf2_hintmask_init( CF2_HintMask hintmask, + FT_Error* error ); + FT_LOCAL( FT_Bool ) + cf2_hintmask_isValid( const CF2_HintMask hintmask ); + FT_LOCAL( FT_Bool ) + cf2_hintmask_isNew( const CF2_HintMask hintmask ); + FT_LOCAL( void ) + cf2_hintmask_setNew( CF2_HintMask hintmask, + FT_Bool val ); + FT_LOCAL( FT_Byte* ) + cf2_hintmask_getMaskPtr( CF2_HintMask hintmask ); + FT_LOCAL( void ) + cf2_hintmask_setAll( CF2_HintMask hintmask, + size_t bitCount ); + + FT_LOCAL( void ) + cf2_interpT2CharString( CF2_Font font, + const CF2_Buffer buf, + CF2_OutlineCallbacks callbacks, + const FT_Vector* translation, + FT_Bool doingSeac, + CF2_Fixed curX, + CF2_Fixed curY, + CF2_Fixed* width ); + + +FT_END_HEADER + + +#endif /* PSINTRP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psobjs.c b/non-source/foreign/freetype2/src/psaux/psobjs.c new file mode 100644 index 000000000..eca465f00 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psobjs.c @@ -0,0 +1,2560 @@ +/**************************************************************************** + * + * psobjs.c + * + * Auxiliary functions for PostScript fonts (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/psaux.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/ftdriver.h> + +#include "psobjs.h" +#include "psconv.h" +#include "psft.h" + +#include "psauxerr.h" +#include "psauxmod.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT psobjs + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS_TABLE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @Function: + * ps_table_new + * + * @Description: + * Initializes a PS_Table. + * + * @InOut: + * table :: + * The address of the target table. + * + * @Input: + * count :: + * The table size = the maximum number of elements. + * + * memory :: + * The memory object to use for all subsequent + * reallocations. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + ps_table_new( PS_Table table, + FT_Int count, + FT_Memory memory ) + { + FT_Error error; + + + table->memory = memory; + if ( FT_NEW_ARRAY( table->elements, count ) || + FT_NEW_ARRAY( table->lengths, count ) ) + goto Exit; + + table->max_elems = count; + table->init = 0xDEADBEEFUL; + table->block = NULL; + table->capacity = 0; + table->cursor = 0; + + *(PS_Table_FuncsRec*)&table->funcs = ps_table_funcs; + + Exit: + if ( error ) + FT_FREE( table->elements ); + + return error; + } + + + static FT_Error + ps_table_realloc( PS_Table table, + FT_Offset new_size ) + { + FT_Memory memory = table->memory; + FT_Byte* old_base = table->block; + FT_Error error; + + + /* (re)allocate the base block */ + if ( FT_REALLOC( table->block, table->capacity, new_size ) ) + return error; + + /* rebase offsets if necessary */ + if ( old_base && table->block != old_base ) + { + FT_Byte** offset = table->elements; + FT_Byte** limit = offset + table->max_elems; + + + for ( ; offset < limit; offset++ ) + { + if ( *offset ) + *offset = table->block + ( *offset - old_base ); + } + } + + table->capacity = new_size; + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * ps_table_add + * + * @Description: + * Adds an object to a PS_Table, possibly growing its memory block. + * + * @InOut: + * table :: + * The target table. + * + * @Input: + * idx :: + * The index of the object in the table. + * + * object :: + * The address of the object to copy in memory. + * + * length :: + * The length in bytes of the source object. + * + * @Return: + * FreeType error code. 0 means success. An error is returned if a + * reallocation fails. + */ + FT_LOCAL_DEF( FT_Error ) + ps_table_add( PS_Table table, + FT_Int idx, + const void* object, + FT_UInt length ) + { + if ( idx < 0 || idx >= table->max_elems ) + { + FT_ERROR(( "ps_table_add: invalid index\n" )); + return FT_THROW( Invalid_Argument ); + } + + /* grow the base block if needed */ + if ( table->cursor + length > table->capacity ) + { + FT_Error error; + FT_Offset new_size = table->capacity; + FT_PtrDist in_offset; + + + in_offset = (FT_Byte*)object - table->block; + if ( in_offset < 0 || (FT_Offset)in_offset >= table->capacity ) + in_offset = -1; + + while ( new_size < table->cursor + length ) + { + /* increase size by 25% and round up to the nearest multiple + of 1024 */ + new_size += ( new_size >> 2 ) + 1; + new_size = FT_PAD_CEIL( new_size, 1024 ); + } + + error = ps_table_realloc( table, new_size ); + if ( error ) + return error; + + if ( in_offset >= 0 ) + object = table->block + in_offset; + } + + /* add the object to the base block and adjust offset */ + table->elements[idx] = FT_OFFSET( table->block, table->cursor ); + table->lengths [idx] = length; + /* length == 0 also implies a NULL destination, so skip the copy call */ + if ( length > 0 ) + FT_MEM_COPY( table->block + table->cursor, object, length ); + + table->cursor += length; + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * ps_table_done + * + * @Description: + * Finalizes a PS_TableRec (i.e., reallocate it to its current + * cursor). + * + * @InOut: + * table :: + * The target table. + */ + FT_LOCAL_DEF( void ) + ps_table_done( PS_Table table ) + { + /* no problem if shrinking fails */ + ps_table_realloc( table, table->cursor ); + } + + + FT_LOCAL_DEF( void ) + ps_table_release( PS_Table table ) + { + FT_Memory memory = table->memory; + + + if ( table->init == 0xDEADBEEFUL ) + { + FT_FREE( table->block ); + FT_FREE( table->elements ); + FT_FREE( table->lengths ); + table->init = 0; + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 PARSER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /* first character must be already part of the comment */ + + static void + skip_comment( FT_Byte* *acur, + FT_Byte* limit ) + { + FT_Byte* cur = *acur; + + + while ( cur < limit ) + { + if ( IS_PS_NEWLINE( *cur ) ) + break; + cur++; + } + + *acur = cur; + } + + + static void + skip_spaces( FT_Byte* *acur, + FT_Byte* limit ) + { + FT_Byte* cur = *acur; + + + while ( cur < limit ) + { + if ( !IS_PS_SPACE( *cur ) ) + { + if ( *cur == '%' ) + /* According to the PLRM, a comment is equal to a space. */ + skip_comment( &cur, limit ); + else + break; + } + cur++; + } + + *acur = cur; + } + + +#define IS_OCTAL_DIGIT( c ) ( '0' <= (c) && (c) <= '7' ) + + + /* first character must be `('; */ + /* *acur is positioned at the character after the closing `)' */ + + static FT_Error + skip_literal_string( FT_Byte* *acur, + FT_Byte* limit ) + { + FT_Byte* cur = *acur; + FT_Int embed = 0; + FT_Error error = FT_ERR( Invalid_File_Format ); + unsigned int i; + + + while ( cur < limit ) + { + FT_Byte c = *cur; + + + cur++; + + if ( c == '\\' ) + { + /* Red Book 3rd ed., section `Literal Text Strings', p. 29: */ + /* A backslash can introduce three different types */ + /* of escape sequences: */ + /* - a special escaped char like \r, \n, etc. */ + /* - a one-, two-, or three-digit octal number */ + /* - none of the above in which case the backslash is ignored */ + + if ( cur == limit ) + /* error (or to be ignored?) */ + break; + + switch ( *cur ) + { + /* skip `special' escape */ + case 'n': + case 'r': + case 't': + case 'b': + case 'f': + case '\\': + case '(': + case ')': + cur++; + break; + + default: + /* skip octal escape or ignore backslash */ + for ( i = 0; i < 3 && cur < limit; i++ ) + { + if ( !IS_OCTAL_DIGIT( *cur ) ) + break; + + cur++; + } + } + } + else if ( c == '(' ) + embed++; + else if ( c == ')' ) + { + embed--; + if ( embed == 0 ) + { + error = FT_Err_Ok; + break; + } + } + } + + *acur = cur; + + return error; + } + + + /* first character must be `<' */ + + static FT_Error + skip_string( FT_Byte* *acur, + FT_Byte* limit ) + { + FT_Byte* cur = *acur; + FT_Error err = FT_Err_Ok; + + + while ( ++cur < limit ) + { + /* All whitespace characters are ignored. */ + skip_spaces( &cur, limit ); + if ( cur >= limit ) + break; + + if ( !IS_PS_XDIGIT( *cur ) ) + break; + } + + if ( cur < limit && *cur != '>' ) + { + FT_ERROR(( "skip_string: missing closing delimiter `>'\n" )); + err = FT_THROW( Invalid_File_Format ); + } + else + cur++; + + *acur = cur; + return err; + } + + + /* first character must be the opening brace that */ + /* starts the procedure */ + + /* NB: [ and ] need not match: */ + /* `/foo {[} def' is a valid PostScript fragment, */ + /* even within a Type1 font */ + + static FT_Error + skip_procedure( FT_Byte* *acur, + FT_Byte* limit ) + { + FT_Byte* cur; + FT_Int embed = 0; + FT_Error error = FT_Err_Ok; + + + FT_ASSERT( **acur == '{' ); + + for ( cur = *acur; cur < limit && error == FT_Err_Ok; cur++ ) + { + switch ( *cur ) + { + case '{': + embed++; + break; + + case '}': + embed--; + if ( embed == 0 ) + { + cur++; + goto end; + } + break; + + case '(': + error = skip_literal_string( &cur, limit ); + break; + + case '<': + error = skip_string( &cur, limit ); + break; + + case '%': + skip_comment( &cur, limit ); + break; + } + } + + end: + if ( embed != 0 ) + error = FT_THROW( Invalid_File_Format ); + + *acur = cur; + + return error; + } + + + /************************************************************************ + * + * All exported parsing routines handle leading whitespace and stop at + * the first character which isn't part of the just handled token. + * + */ + + + FT_LOCAL_DEF( void ) + ps_parser_skip_PS_token( PS_Parser parser ) + { + /* Note: PostScript allows any non-delimiting, non-whitespace */ + /* character in a name (PS Ref Manual, 3rd ed, p31). */ + /* PostScript delimiters are (, ), <, >, [, ], {, }, /, and %. */ + + FT_Byte* cur = parser->cursor; + FT_Byte* limit = parser->limit; + FT_Error error = FT_Err_Ok; + + + skip_spaces( &cur, limit ); /* this also skips comments */ + if ( cur >= limit ) + goto Exit; + + /* self-delimiting, single-character tokens */ + if ( *cur == '[' || *cur == ']' ) + { + cur++; + goto Exit; + } + + /* skip balanced expressions (procedures and strings) */ + + if ( *cur == '{' ) /* {...} */ + { + error = skip_procedure( &cur, limit ); + goto Exit; + } + + if ( *cur == '(' ) /* (...) */ + { + error = skip_literal_string( &cur, limit ); + goto Exit; + } + + if ( *cur == '<' ) /* <...> */ + { + if ( cur + 1 < limit && *( cur + 1 ) == '<' ) /* << */ + { + cur++; + cur++; + } + else + error = skip_string( &cur, limit ); + + goto Exit; + } + + if ( *cur == '>' ) + { + cur++; + if ( cur >= limit || *cur != '>' ) /* >> */ + { + FT_ERROR(( "ps_parser_skip_PS_token:" + " unexpected closing delimiter `>'\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + cur++; + goto Exit; + } + + if ( *cur == '/' ) + cur++; + + /* anything else */ + while ( cur < limit ) + { + /* *cur might be invalid (e.g., ')' or '}'), but this */ + /* is handled by the test `cur == parser->cursor' below */ + if ( IS_PS_DELIM( *cur ) ) + break; + + cur++; + } + + Exit: + if ( cur < limit && cur == parser->cursor ) + { + FT_ERROR(( "ps_parser_skip_PS_token:" + " current token is `%c' which is self-delimiting\n", + *cur )); + FT_ERROR(( " " + " but invalid at this point\n" )); + + error = FT_THROW( Invalid_File_Format ); + } + + if ( cur > limit ) + cur = limit; + + parser->error = error; + parser->cursor = cur; + } + + + FT_LOCAL_DEF( void ) + ps_parser_skip_spaces( PS_Parser parser ) + { + skip_spaces( &parser->cursor, parser->limit ); + } + + + /* `token' here means either something between balanced delimiters */ + /* or the next token; the delimiters are not removed. */ + + FT_LOCAL_DEF( void ) + ps_parser_to_token( PS_Parser parser, + T1_Token token ) + { + FT_Byte* cur; + FT_Byte* limit; + FT_Int embed; + + + token->type = T1_TOKEN_TYPE_NONE; + token->start = NULL; + token->limit = NULL; + + /* first of all, skip leading whitespace */ + ps_parser_skip_spaces( parser ); + + cur = parser->cursor; + limit = parser->limit; + + if ( cur >= limit ) + return; + + switch ( *cur ) + { + /************* check for literal string *****************/ + case '(': + token->type = T1_TOKEN_TYPE_STRING; + token->start = cur; + + if ( skip_literal_string( &cur, limit ) == FT_Err_Ok ) + token->limit = cur; + break; + + /************* check for programs/array *****************/ + case '{': + token->type = T1_TOKEN_TYPE_ARRAY; + token->start = cur; + + if ( skip_procedure( &cur, limit ) == FT_Err_Ok ) + token->limit = cur; + break; + + /************* check for table/array ********************/ + /* XXX: in theory we should also look for "<<" */ + /* since this is semantically equivalent to "["; */ + /* in practice it doesn't matter (?) */ + case '[': + token->type = T1_TOKEN_TYPE_ARRAY; + embed = 1; + token->start = cur++; + + /* we need this to catch `[ ]' */ + parser->cursor = cur; + ps_parser_skip_spaces( parser ); + cur = parser->cursor; + + while ( cur < limit && !parser->error ) + { + /* XXX: this is wrong because it does not */ + /* skip comments, procedures, and strings */ + if ( *cur == '[' ) + embed++; + else if ( *cur == ']' ) + { + embed--; + if ( embed <= 0 ) + { + token->limit = ++cur; + break; + } + } + + parser->cursor = cur; + ps_parser_skip_PS_token( parser ); + /* we need this to catch `[XXX ]' */ + ps_parser_skip_spaces ( parser ); + cur = parser->cursor; + } + break; + + /* ************ otherwise, it is any token **************/ + default: + token->start = cur; + token->type = ( *cur == '/' ) ? T1_TOKEN_TYPE_KEY : T1_TOKEN_TYPE_ANY; + ps_parser_skip_PS_token( parser ); + cur = parser->cursor; + if ( !parser->error ) + token->limit = cur; + } + + if ( !token->limit ) + { + token->start = NULL; + token->type = T1_TOKEN_TYPE_NONE; + } + + parser->cursor = cur; + } + + + /* NB: `tokens' can be NULL if we only want to count */ + /* the number of array elements */ + + FT_LOCAL_DEF( void ) + ps_parser_to_token_array( PS_Parser parser, + T1_Token tokens, + FT_UInt max_tokens, + FT_Int* pnum_tokens ) + { + T1_TokenRec master; + + + *pnum_tokens = -1; + + /* this also handles leading whitespace */ + ps_parser_to_token( parser, &master ); + + if ( master.type == T1_TOKEN_TYPE_ARRAY ) + { + FT_Byte* old_cursor = parser->cursor; + FT_Byte* old_limit = parser->limit; + T1_Token cur = tokens; + T1_Token limit = cur + max_tokens; + + + /* don't include outermost delimiters */ + parser->cursor = master.start + 1; + parser->limit = master.limit - 1; + + while ( parser->cursor < parser->limit ) + { + T1_TokenRec token; + + + ps_parser_to_token( parser, &token ); + if ( !token.type ) + break; + + if ( tokens && cur < limit ) + *cur = token; + + cur++; + } + + *pnum_tokens = (FT_Int)( cur - tokens ); + + parser->cursor = old_cursor; + parser->limit = old_limit; + } + } + + + /* first character must be a delimiter or a part of a number */ + /* NB: `coords' can be NULL if we just want to skip the */ + /* array; in this case we ignore `max_coords' */ + + static FT_Int + ps_tocoordarray( FT_Byte* *acur, + FT_Byte* limit, + FT_Int max_coords, + FT_Short* coords ) + { + FT_Byte* cur = *acur; + FT_Int count = 0; + FT_Byte c, ender; + + + if ( cur >= limit ) + goto Exit; + + /* check for the beginning of an array; otherwise, only one number */ + /* will be read */ + c = *cur; + ender = 0; + + if ( c == '[' ) + ender = ']'; + else if ( c == '{' ) + ender = '}'; + + if ( ender ) + cur++; + + /* now, read the coordinates */ + while ( cur < limit ) + { + FT_Short dummy; + FT_Byte* old_cur; + + + /* skip whitespace in front of data */ + skip_spaces( &cur, limit ); + if ( cur >= limit ) + goto Exit; + + if ( *cur == ender ) + { + cur++; + break; + } + + old_cur = cur; + + if ( coords && count >= max_coords ) + break; + + /* call PS_Conv_ToFixed() even if coords == NULL */ + /* to properly parse number at `cur' */ + *( coords ? &coords[count] : &dummy ) = + (FT_Short)( PS_Conv_ToFixed( &cur, limit, 0 ) >> 16 ); + + if ( old_cur == cur ) + { + count = -1; + goto Exit; + } + else + count++; + + if ( !ender ) + break; + } + + Exit: + *acur = cur; + return count; + } + + + /* first character must be a delimiter or a part of a number */ + /* NB: `values' can be NULL if we just want to skip the */ + /* array; in this case we ignore `max_values' */ + /* */ + /* return number of successfully parsed values */ + + static FT_Int + ps_tofixedarray( FT_Byte* *acur, + FT_Byte* limit, + FT_Int max_values, + FT_Fixed* values, + FT_Int power_ten ) + { + FT_Byte* cur = *acur; + FT_Int count = 0; + FT_Byte c, ender; + + + if ( cur >= limit ) + goto Exit; + + /* Check for the beginning of an array. Otherwise, only one number */ + /* will be read. */ + c = *cur; + ender = 0; + + if ( c == '[' ) + ender = ']'; + else if ( c == '{' ) + ender = '}'; + + if ( ender ) + cur++; + + /* now, read the values */ + while ( cur < limit ) + { + FT_Fixed dummy; + FT_Byte* old_cur; + + + /* skip whitespace in front of data */ + skip_spaces( &cur, limit ); + if ( cur >= limit ) + goto Exit; + + if ( *cur == ender ) + { + cur++; + break; + } + + old_cur = cur; + + if ( values && count >= max_values ) + break; + + /* call PS_Conv_ToFixed() even if coords == NULL */ + /* to properly parse number at `cur' */ + *( values ? &values[count] : &dummy ) = + PS_Conv_ToFixed( &cur, limit, power_ten ); + + if ( old_cur == cur ) + { + count = -1; + goto Exit; + } + else + count++; + + if ( !ender ) + break; + } + + Exit: + *acur = cur; + return count; + } + + +#if 0 + + static FT_String* + ps_tostring( FT_Byte** cursor, + FT_Byte* limit, + FT_Memory memory ) + { + FT_Byte* cur = *cursor; + FT_UInt len = 0; + FT_Int count; + FT_String* result; + FT_Error error; + + + /* XXX: some stupid fonts have a `Notice' or `Copyright' string */ + /* that simply doesn't begin with an opening parenthesis, even */ + /* though they have a closing one! E.g. "amuncial.pfb" */ + /* */ + /* We must deal with these ill-fated cases there. Note that */ + /* these fonts didn't work with the old Type 1 driver as the */ + /* notice/copyright was not recognized as a valid string token */ + /* and made the old token parser commit errors. */ + + while ( cur < limit && ( *cur == ' ' || *cur == '\t' ) ) + cur++; + if ( cur + 1 >= limit ) + return 0; + + if ( *cur == '(' ) + cur++; /* skip the opening parenthesis, if there is one */ + + *cursor = cur; + count = 0; + + /* then, count its length */ + for ( ; cur < limit; cur++ ) + { + if ( *cur == '(' ) + count++; + + else if ( *cur == ')' ) + { + count--; + if ( count < 0 ) + break; + } + } + + len = (FT_UInt)( cur - *cursor ); + if ( cur >= limit || FT_QALLOC( result, len + 1 ) ) + return 0; + + /* now copy the string */ + FT_MEM_COPY( result, *cursor, len ); + result[len] = '\0'; + *cursor = cur; + return result; + } + +#endif /* 0 */ + + + static int + ps_tobool( FT_Byte* *acur, + FT_Byte* limit ) + { + FT_Byte* cur = *acur; + FT_Bool result = 0; + + + /* return 1 if we find `true', 0 otherwise */ + if ( cur + 3 < limit && + cur[0] == 't' && + cur[1] == 'r' && + cur[2] == 'u' && + cur[3] == 'e' ) + { + result = 1; + cur += 5; + } + else if ( cur + 4 < limit && + cur[0] == 'f' && + cur[1] == 'a' && + cur[2] == 'l' && + cur[3] == 's' && + cur[4] == 'e' ) + { + result = 0; + cur += 6; + } + + *acur = cur; + return result; + } + + + /* load a simple field (i.e. non-table) into the current list of objects */ + + FT_LOCAL_DEF( FT_Error ) + ps_parser_load_field( PS_Parser parser, + const T1_Field field, + void** objects, + FT_UInt max_objects, + FT_ULong* pflags ) + { + T1_TokenRec token; + FT_Byte* cur; + FT_Byte* limit; + FT_UInt count; + FT_UInt idx; + FT_Error error; + T1_FieldType type; + + + /* this also skips leading whitespace */ + ps_parser_to_token( parser, &token ); + if ( !token.type ) + goto Fail; + + count = 1; + idx = 0; + cur = token.start; + limit = token.limit; + + type = field->type; + + /* we must detect arrays in /FontBBox */ + if ( type == T1_FIELD_TYPE_BBOX ) + { + T1_TokenRec token2; + FT_Byte* old_cur = parser->cursor; + FT_Byte* old_limit = parser->limit; + + + /* don't include delimiters */ + parser->cursor = token.start + 1; + parser->limit = token.limit - 1; + + ps_parser_to_token( parser, &token2 ); + parser->cursor = old_cur; + parser->limit = old_limit; + + if ( token2.type == T1_TOKEN_TYPE_ARRAY ) + { + type = T1_FIELD_TYPE_MM_BBOX; + goto FieldArray; + } + } + else if ( token.type == T1_TOKEN_TYPE_ARRAY ) + { + count = max_objects; + + FieldArray: + /* if this is an array and we have no blend, an error occurs */ + if ( max_objects == 0 ) + goto Fail; + + idx = 1; + + /* don't include delimiters */ + cur++; + limit--; + } + + for ( ; count > 0; count--, idx++ ) + { + FT_Byte* q = (FT_Byte*)objects[idx] + field->offset; + FT_Long val; + + + skip_spaces( &cur, limit ); + + switch ( type ) + { + case T1_FIELD_TYPE_BOOL: + val = ps_tobool( &cur, limit ); + FT_TRACE4(( " %s", val ? "true" : "false" )); + goto Store_Integer; + + case T1_FIELD_TYPE_FIXED: + val = PS_Conv_ToFixed( &cur, limit, 0 ); + FT_TRACE4(( " %f", (double)val / 65536 )); + goto Store_Integer; + + case T1_FIELD_TYPE_FIXED_1000: + val = PS_Conv_ToFixed( &cur, limit, 3 ); + FT_TRACE4(( " %f", (double)val / 65536 / 1000 )); + goto Store_Integer; + + case T1_FIELD_TYPE_INTEGER: + val = PS_Conv_ToInt( &cur, limit ); + FT_TRACE4(( " %ld", val )); + /* fall through */ + + Store_Integer: + switch ( field->size ) + { + case (8 / FT_CHAR_BIT): + *(FT_Byte*)q = (FT_Byte)val; + break; + + case (16 / FT_CHAR_BIT): + *(FT_UShort*)q = (FT_UShort)val; + break; + + case (32 / FT_CHAR_BIT): + *(FT_UInt32*)q = (FT_UInt32)val; + break; + + default: /* for 64-bit systems */ + *(FT_Long*)q = val; + } + break; + + case T1_FIELD_TYPE_STRING: + case T1_FIELD_TYPE_KEY: + { + FT_Memory memory = parser->memory; + FT_UInt len = (FT_UInt)( limit - cur ); + FT_String* string = NULL; + + + if ( cur >= limit ) + break; + + /* we allow both a string or a name */ + /* for cases like /FontName (foo) def */ + if ( token.type == T1_TOKEN_TYPE_KEY ) + { + /* don't include leading `/' */ + len--; + cur++; + } + else if ( token.type == T1_TOKEN_TYPE_STRING ) + { + /* don't include delimiting parentheses */ + /* XXX we don't handle <<...>> here */ + /* XXX should we convert octal escapes? */ + /* if so, what encoding should we use? */ + cur++; + len -= 2; + } + else + { + FT_ERROR(( "ps_parser_load_field:" + " expected a name or string\n" )); + FT_ERROR(( " " + " but found token of type %d instead\n", + token.type )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* for this to work (FT_String**)q must have been */ + /* initialized to NULL */ + if ( *(FT_String**)q ) + { + FT_TRACE0(( "ps_parser_load_field: overwriting field %s\n", + field->ident )); + FT_FREE( *(FT_String**)q ); + } + + if ( FT_QALLOC( string, len + 1 ) ) + goto Exit; + + FT_MEM_COPY( string, cur, len ); + string[len] = 0; + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( token.type == T1_TOKEN_TYPE_STRING ) + FT_TRACE4(( " (%s)", string )); + else + FT_TRACE4(( " /%s", string )); +#endif + + *(FT_String**)q = string; + } + break; + + case T1_FIELD_TYPE_BBOX: + { + FT_Fixed temp[4]; + FT_BBox* bbox = (FT_BBox*)q; + FT_Int result; + + + result = ps_tofixedarray( &cur, limit, 4, temp, 0 ); + + if ( result < 4 ) + { + FT_ERROR(( "ps_parser_load_field:" + " expected four integers in bounding box\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + bbox->xMin = FT_RoundFix( temp[0] ); + bbox->yMin = FT_RoundFix( temp[1] ); + bbox->xMax = FT_RoundFix( temp[2] ); + bbox->yMax = FT_RoundFix( temp[3] ); + + FT_TRACE4(( " [%ld %ld %ld %ld]", + bbox->xMin / 65536, + bbox->yMin / 65536, + bbox->xMax / 65536, + bbox->yMax / 65536 )); + } + break; + + case T1_FIELD_TYPE_MM_BBOX: + { + FT_Memory memory = parser->memory; + FT_Fixed* temp = NULL; + FT_Int result; + FT_UInt i; + + + if ( FT_QNEW_ARRAY( temp, max_objects * 4 ) ) + goto Exit; + + for ( i = 0; i < 4; i++ ) + { + result = ps_tofixedarray( &cur, limit, (FT_Int)max_objects, + temp + i * max_objects, 0 ); + if ( result < 0 || (FT_UInt)result < max_objects ) + { + FT_ERROR(( "ps_parser_load_field:" + " expected %d integer%s in the %s subarray\n", + max_objects, max_objects > 1 ? "s" : "", + i == 0 ? "first" + : ( i == 1 ? "second" + : ( i == 2 ? "third" + : "fourth" ) ) )); + FT_ERROR(( " " + " of /FontBBox in the /Blend dictionary\n" )); + error = FT_THROW( Invalid_File_Format ); + + FT_FREE( temp ); + goto Exit; + } + + skip_spaces( &cur, limit ); + } + + FT_TRACE4(( " [" )); + for ( i = 0; i < max_objects; i++ ) + { + FT_BBox* bbox = (FT_BBox*)objects[i]; + + + bbox->xMin = FT_RoundFix( temp[i ] ); + bbox->yMin = FT_RoundFix( temp[i + max_objects] ); + bbox->xMax = FT_RoundFix( temp[i + 2 * max_objects] ); + bbox->yMax = FT_RoundFix( temp[i + 3 * max_objects] ); + + FT_TRACE4(( " [%ld %ld %ld %ld]", + bbox->xMin / 65536, + bbox->yMin / 65536, + bbox->xMax / 65536, + bbox->yMax / 65536 )); + } + FT_TRACE4(( "]" )); + + FT_FREE( temp ); + } + break; + + default: + /* an error occurred */ + goto Fail; + } + } + +#if 0 /* obsolete -- keep for reference */ + if ( pflags ) + *pflags |= 1L << field->flag_bit; +#else + FT_UNUSED( pflags ); +#endif + + error = FT_Err_Ok; + + Exit: + return error; + + Fail: + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + +#define T1_MAX_TABLE_ELEMENTS 32 + + + FT_LOCAL_DEF( FT_Error ) + ps_parser_load_field_table( PS_Parser parser, + const T1_Field field, + void** objects, + FT_UInt max_objects, + FT_ULong* pflags ) + { + T1_TokenRec elements[T1_MAX_TABLE_ELEMENTS]; + T1_Token token; + FT_Int num_elements; + FT_Error error = FT_Err_Ok; + FT_Byte* old_cursor; + FT_Byte* old_limit; + T1_FieldRec fieldrec = *(T1_Field)field; + + + fieldrec.type = T1_FIELD_TYPE_INTEGER; + if ( field->type == T1_FIELD_TYPE_FIXED_ARRAY || + field->type == T1_FIELD_TYPE_BBOX ) + fieldrec.type = T1_FIELD_TYPE_FIXED; + + ps_parser_to_token_array( parser, elements, + T1_MAX_TABLE_ELEMENTS, &num_elements ); + if ( num_elements < 0 ) + { + error = FT_ERR( Ignore ); + goto Exit; + } + if ( (FT_UInt)num_elements > field->array_max ) + num_elements = (FT_Int)field->array_max; + + old_cursor = parser->cursor; + old_limit = parser->limit; + + /* we store the elements count if necessary; */ + /* we further assume that `count_offset' can't be zero */ + if ( field->type != T1_FIELD_TYPE_BBOX && field->count_offset != 0 ) + *(FT_Byte*)( (FT_Byte*)objects[0] + field->count_offset ) = + (FT_Byte)num_elements; + + FT_TRACE4(( " [" )); + + /* we now load each element, adjusting the field.offset on each one */ + token = elements; + for ( ; num_elements > 0; num_elements--, token++ ) + { + parser->cursor = token->start; + parser->limit = token->limit; + + error = ps_parser_load_field( parser, + &fieldrec, + objects, + max_objects, + 0 ); + if ( error ) + break; + + fieldrec.offset += fieldrec.size; + } + + FT_TRACE4(( "]" )); + +#if 0 /* obsolete -- keep for reference */ + if ( pflags ) + *pflags |= 1L << field->flag_bit; +#else + FT_UNUSED( pflags ); +#endif + + parser->cursor = old_cursor; + parser->limit = old_limit; + + Exit: + return error; + } + + + FT_LOCAL_DEF( FT_Long ) + ps_parser_to_int( PS_Parser parser ) + { + ps_parser_skip_spaces( parser ); + return PS_Conv_ToInt( &parser->cursor, parser->limit ); + } + + + /* first character must be `<' if `delimiters' is non-zero */ + + FT_LOCAL_DEF( FT_Error ) + ps_parser_to_bytes( PS_Parser parser, + FT_Byte* bytes, + FT_Offset max_bytes, + FT_ULong* pnum_bytes, + FT_Bool delimiters ) + { + FT_Error error = FT_Err_Ok; + FT_Byte* cur; + + + ps_parser_skip_spaces( parser ); + cur = parser->cursor; + + if ( cur >= parser->limit ) + goto Exit; + + if ( delimiters ) + { + if ( *cur != '<' ) + { + FT_ERROR(( "ps_parser_to_bytes: Missing starting delimiter `<'\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + cur++; + } + + *pnum_bytes = PS_Conv_ASCIIHexDecode( &cur, + parser->limit, + bytes, + max_bytes ); + + parser->cursor = cur; + + if ( delimiters ) + { + if ( cur < parser->limit && *cur != '>' ) + { + FT_ERROR(( "ps_parser_to_bytes: Missing closing delimiter `>'\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + parser->cursor++; + } + + Exit: + return error; + } + + + FT_LOCAL_DEF( FT_Fixed ) + ps_parser_to_fixed( PS_Parser parser, + FT_Int power_ten ) + { + ps_parser_skip_spaces( parser ); + return PS_Conv_ToFixed( &parser->cursor, parser->limit, power_ten ); + } + + + FT_LOCAL_DEF( FT_Int ) + ps_parser_to_coord_array( PS_Parser parser, + FT_Int max_coords, + FT_Short* coords ) + { + ps_parser_skip_spaces( parser ); + return ps_tocoordarray( &parser->cursor, parser->limit, + max_coords, coords ); + } + + + FT_LOCAL_DEF( FT_Int ) + ps_parser_to_fixed_array( PS_Parser parser, + FT_Int max_values, + FT_Fixed* values, + FT_Int power_ten ) + { + ps_parser_skip_spaces( parser ); + return ps_tofixedarray( &parser->cursor, parser->limit, + max_values, values, power_ten ); + } + + +#if 0 + + FT_LOCAL_DEF( FT_String* ) + T1_ToString( PS_Parser parser ) + { + return ps_tostring( &parser->cursor, parser->limit, parser->memory ); + } + + + FT_LOCAL_DEF( FT_Bool ) + T1_ToBool( PS_Parser parser ) + { + return ps_tobool( &parser->cursor, parser->limit ); + } + +#endif /* 0 */ + + + FT_LOCAL_DEF( void ) + ps_parser_init( PS_Parser parser, + FT_Byte* base, + FT_Byte* limit, + FT_Memory memory ) + { + parser->error = FT_Err_Ok; + parser->base = base; + parser->limit = limit; + parser->cursor = base; + parser->memory = memory; + parser->funcs = ps_parser_funcs; + } + + + FT_LOCAL_DEF( void ) + ps_parser_done( PS_Parser parser ) + { + FT_UNUSED( parser ); + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @Function: + * t1_builder_init + * + * @Description: + * Initializes a given glyph builder. + * + * @InOut: + * builder :: + * A pointer to the glyph builder to initialize. + * + * @Input: + * face :: + * The current face object. + * + * size :: + * The current size object. + * + * glyph :: + * The current glyph object. + * + * hinting :: + * Whether hinting should be applied. + */ + FT_LOCAL_DEF( void ) + t1_builder_init( T1_Builder builder, + FT_Face face, + FT_Size size, + FT_GlyphSlot glyph, + FT_Bool hinting ) + { + builder->parse_state = T1_Parse_Start; + builder->load_points = 1; + + builder->face = face; + builder->glyph = glyph; + builder->memory = face->memory; + + if ( glyph ) + { + FT_GlyphLoader loader = glyph->internal->loader; + + + builder->loader = loader; + builder->base = &loader->base.outline; + builder->current = &loader->current.outline; + FT_GlyphLoader_Rewind( loader ); + + builder->hints_globals = size->internal->module_data; + builder->hints_funcs = NULL; + + if ( hinting ) + builder->hints_funcs = glyph->internal->glyph_hints; + } + + builder->pos_x = 0; + builder->pos_y = 0; + + builder->left_bearing.x = 0; + builder->left_bearing.y = 0; + builder->advance.x = 0; + builder->advance.y = 0; + + builder->funcs = t1_builder_funcs; + } + + + /************************************************************************** + * + * @Function: + * t1_builder_done + * + * @Description: + * Finalizes a given glyph builder. Its contents can still be used + * after the call, but the function saves important information + * within the corresponding glyph slot. + * + * @Input: + * builder :: + * A pointer to the glyph builder to finalize. + */ + FT_LOCAL_DEF( void ) + t1_builder_done( T1_Builder builder ) + { + FT_GlyphSlot glyph = builder->glyph; + + + if ( glyph ) + glyph->outline = *builder->base; + } + + + /* check that there is enough space for `count' more points */ + FT_LOCAL_DEF( FT_Error ) + t1_builder_check_points( T1_Builder builder, + FT_Int count ) + { + return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 ); + } + + + /* add a new point, do not check space */ + FT_LOCAL_DEF( void ) + t1_builder_add_point( T1_Builder builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ) + { + FT_Outline* outline = builder->current; + + + if ( builder->load_points ) + { + FT_Vector* point = outline->points + outline->n_points; + FT_Byte* control = outline->tags + outline->n_points; + + + point->x = FIXED_TO_INT( x ); + point->y = FIXED_TO_INT( y ); + *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC ); + } + outline->n_points++; + } + + + /* check space for a new on-curve point, then add it */ + FT_LOCAL_DEF( FT_Error ) + t1_builder_add_point1( T1_Builder builder, + FT_Pos x, + FT_Pos y ) + { + FT_Error error; + + + error = t1_builder_check_points( builder, 1 ); + if ( !error ) + t1_builder_add_point( builder, x, y, 1 ); + + return error; + } + + + /* check space for a new contour, then add it */ + FT_LOCAL_DEF( FT_Error ) + t1_builder_add_contour( T1_Builder builder ) + { + FT_Outline* outline = builder->current; + FT_Error error; + + + /* this might happen in invalid fonts */ + if ( !outline ) + { + FT_ERROR(( "t1_builder_add_contour: no outline to add points to\n" )); + return FT_THROW( Invalid_File_Format ); + } + + if ( !builder->load_points ) + { + outline->n_contours++; + return FT_Err_Ok; + } + + error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 ); + if ( !error ) + { + if ( outline->n_contours > 0 ) + outline->contours[outline->n_contours - 1] = outline->n_points - 1; + + outline->n_contours++; + } + + return error; + } + + + /* if a path was begun, add its first on-curve point */ + FT_LOCAL_DEF( FT_Error ) + t1_builder_start_point( T1_Builder builder, + FT_Pos x, + FT_Pos y ) + { + FT_Error error = FT_ERR( Invalid_File_Format ); + + + /* test whether we are building a new contour */ + + if ( builder->parse_state == T1_Parse_Have_Path ) + error = FT_Err_Ok; + else + { + builder->parse_state = T1_Parse_Have_Path; + error = t1_builder_add_contour( builder ); + if ( !error ) + error = t1_builder_add_point1( builder, x, y ); + } + + return error; + } + + + /* close the current contour */ + FT_LOCAL_DEF( void ) + t1_builder_close_contour( T1_Builder builder ) + { + FT_Outline* outline = builder->current; + FT_Int first; + + + if ( !outline ) + return; + + first = outline->n_contours <= 1 + ? 0 : outline->contours[outline->n_contours - 2] + 1; + + /* in malformed fonts it can happen that a contour was started */ + /* but no points were added */ + if ( outline->n_contours && first == outline->n_points ) + { + outline->n_contours--; + return; + } + + /* We must not include the last point in the path if it */ + /* is located on the first point. */ + if ( outline->n_points > 1 ) + { + FT_Vector* p1 = outline->points + first; + FT_Vector* p2 = outline->points + outline->n_points - 1; + FT_Byte* control = outline->tags + outline->n_points - 1; + + + /* `delete' last point only if it coincides with the first */ + /* point and it is not a control point (which can happen). */ + if ( p1->x == p2->x && p1->y == p2->y ) + if ( *control == FT_CURVE_TAG_ON ) + outline->n_points--; + } + + if ( outline->n_contours > 0 ) + { + /* Don't add contours only consisting of one point, i.e., */ + /* check whether the first and the last point is the same. */ + if ( first == outline->n_points - 1 ) + { + outline->n_contours--; + outline->n_points--; + } + else + outline->contours[outline->n_contours - 1] = outline->n_points - 1; + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CFF BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @Function: + * cff_builder_init + * + * @Description: + * Initializes a given glyph builder. + * + * @InOut: + * builder :: + * A pointer to the glyph builder to initialize. + * + * @Input: + * face :: + * The current face object. + * + * size :: + * The current size object. + * + * glyph :: + * The current glyph object. + * + * hinting :: + * Whether hinting is active. + */ + FT_LOCAL_DEF( void ) + cff_builder_init( CFF_Builder* builder, + TT_Face face, + CFF_Size size, + CFF_GlyphSlot glyph, + FT_Bool hinting ) + { + builder->path_begun = 0; + builder->load_points = 1; + + builder->face = face; + builder->glyph = glyph; + builder->memory = face->root.memory; + + if ( glyph ) + { + FT_GlyphLoader loader = glyph->root.internal->loader; + + + builder->loader = loader; + builder->base = &loader->base.outline; + builder->current = &loader->current.outline; + FT_GlyphLoader_Rewind( loader ); + + builder->hints_globals = NULL; + builder->hints_funcs = NULL; + + if ( hinting && size ) + { + FT_Size ftsize = FT_SIZE( size ); + CFF_Internal internal = (CFF_Internal)ftsize->internal->module_data; + + if ( internal ) + { + builder->hints_globals = (void *)internal->topfont; + builder->hints_funcs = glyph->root.internal->glyph_hints; + } + } + } + + builder->pos_x = 0; + builder->pos_y = 0; + + builder->left_bearing.x = 0; + builder->left_bearing.y = 0; + builder->advance.x = 0; + builder->advance.y = 0; + + builder->funcs = cff_builder_funcs; + } + + + /************************************************************************** + * + * @Function: + * cff_builder_done + * + * @Description: + * Finalizes a given glyph builder. Its contents can still be used + * after the call, but the function saves important information + * within the corresponding glyph slot. + * + * @Input: + * builder :: + * A pointer to the glyph builder to finalize. + */ + FT_LOCAL_DEF( void ) + cff_builder_done( CFF_Builder* builder ) + { + CFF_GlyphSlot glyph = builder->glyph; + + + if ( glyph ) + glyph->root.outline = *builder->base; + } + + + /* check that there is enough space for `count' more points */ + FT_LOCAL_DEF( FT_Error ) + cff_check_points( CFF_Builder* builder, + FT_Int count ) + { + return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 ); + } + + + /* add a new point, do not check space */ + FT_LOCAL_DEF( void ) + cff_builder_add_point( CFF_Builder* builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ) + { + FT_Outline* outline = builder->current; + + + if ( builder->load_points ) + { + FT_Vector* point = outline->points + outline->n_points; + FT_Byte* control = outline->tags + outline->n_points; + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face ); + + + if ( driver->hinting_engine == FT_HINTING_FREETYPE ) + { + point->x = x >> 16; + point->y = y >> 16; + } + else +#endif + { + /* cf2_decoder_parse_charstrings uses 16.16 coordinates */ + point->x = x >> 10; + point->y = y >> 10; + } + *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC ); + } + + outline->n_points++; + } + + + /* check space for a new on-curve point, then add it */ + FT_LOCAL_DEF( FT_Error ) + cff_builder_add_point1( CFF_Builder* builder, + FT_Pos x, + FT_Pos y ) + { + FT_Error error; + + + error = cff_check_points( builder, 1 ); + if ( !error ) + cff_builder_add_point( builder, x, y, 1 ); + + return error; + } + + + /* check space for a new contour, then add it */ + FT_LOCAL_DEF( FT_Error ) + cff_builder_add_contour( CFF_Builder* builder ) + { + FT_Outline* outline = builder->current; + FT_Error error; + + + if ( !builder->load_points ) + { + outline->n_contours++; + return FT_Err_Ok; + } + + error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 ); + if ( !error ) + { + if ( outline->n_contours > 0 ) + outline->contours[outline->n_contours - 1] = outline->n_points - 1; + + outline->n_contours++; + } + + return error; + } + + + /* if a path was begun, add its first on-curve point */ + FT_LOCAL_DEF( FT_Error ) + cff_builder_start_point( CFF_Builder* builder, + FT_Pos x, + FT_Pos y ) + { + FT_Error error = FT_Err_Ok; + + + /* test whether we are building a new contour */ + if ( !builder->path_begun ) + { + builder->path_begun = 1; + error = cff_builder_add_contour( builder ); + if ( !error ) + error = cff_builder_add_point1( builder, x, y ); + } + + return error; + } + + + /* close the current contour */ + FT_LOCAL_DEF( void ) + cff_builder_close_contour( CFF_Builder* builder ) + { + FT_Outline* outline = builder->current; + FT_Int first; + + + if ( !outline ) + return; + + first = outline->n_contours <= 1 + ? 0 : outline->contours[outline->n_contours - 2] + 1; + + /* in malformed fonts it can happen that a contour was started */ + /* but no points were added */ + if ( outline->n_contours && first == outline->n_points ) + { + outline->n_contours--; + return; + } + + /* We must not include the last point in the path if it */ + /* is located on the first point. */ + if ( outline->n_points > 1 ) + { + FT_Vector* p1 = outline->points + first; + FT_Vector* p2 = outline->points + outline->n_points - 1; + FT_Byte* control = outline->tags + outline->n_points - 1; + + + /* `delete' last point only if it coincides with the first */ + /* point and if it is not a control point (which can happen). */ + if ( p1->x == p2->x && p1->y == p2->y ) + if ( *control == FT_CURVE_TAG_ON ) + outline->n_points--; + } + + if ( outline->n_contours > 0 ) + { + /* Don't add contours only consisting of one point, i.e., */ + /* check whether begin point and last point are the same. */ + if ( first == outline->n_points - 1 ) + { + outline->n_contours--; + outline->n_points--; + } + else + outline->contours[outline->n_contours - 1] = outline->n_points - 1; + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @Function: + * ps_builder_init + * + * @Description: + * Initializes a given glyph builder. + * + * @InOut: + * builder :: + * A pointer to the glyph builder to initialize. + * + * @Input: + * face :: + * The current face object. + * + * size :: + * The current size object. + * + * glyph :: + * The current glyph object. + * + * hinting :: + * Whether hinting should be applied. + */ + FT_LOCAL_DEF( void ) + ps_builder_init( PS_Builder* ps_builder, + void* builder, + FT_Bool is_t1 ) + { + FT_ZERO( ps_builder ); + + if ( is_t1 ) + { + T1_Builder t1builder = (T1_Builder)builder; + + + ps_builder->memory = t1builder->memory; + ps_builder->face = (FT_Face)t1builder->face; + ps_builder->glyph = (CFF_GlyphSlot)t1builder->glyph; + ps_builder->loader = t1builder->loader; + ps_builder->base = t1builder->base; + ps_builder->current = t1builder->current; + + ps_builder->pos_x = &t1builder->pos_x; + ps_builder->pos_y = &t1builder->pos_y; + + ps_builder->left_bearing = &t1builder->left_bearing; + ps_builder->advance = &t1builder->advance; + + ps_builder->bbox = &t1builder->bbox; + ps_builder->path_begun = 0; + ps_builder->load_points = t1builder->load_points; + ps_builder->no_recurse = t1builder->no_recurse; + + ps_builder->metrics_only = t1builder->metrics_only; + } + else + { + CFF_Builder* cffbuilder = (CFF_Builder*)builder; + + + ps_builder->memory = cffbuilder->memory; + ps_builder->face = (FT_Face)cffbuilder->face; + ps_builder->glyph = cffbuilder->glyph; + ps_builder->loader = cffbuilder->loader; + ps_builder->base = cffbuilder->base; + ps_builder->current = cffbuilder->current; + + ps_builder->pos_x = &cffbuilder->pos_x; + ps_builder->pos_y = &cffbuilder->pos_y; + + ps_builder->left_bearing = &cffbuilder->left_bearing; + ps_builder->advance = &cffbuilder->advance; + + ps_builder->bbox = &cffbuilder->bbox; + ps_builder->path_begun = cffbuilder->path_begun; + ps_builder->load_points = cffbuilder->load_points; + ps_builder->no_recurse = cffbuilder->no_recurse; + + ps_builder->metrics_only = cffbuilder->metrics_only; + } + + ps_builder->is_t1 = is_t1; + ps_builder->funcs = ps_builder_funcs; + } + + + /************************************************************************** + * + * @Function: + * ps_builder_done + * + * @Description: + * Finalizes a given glyph builder. Its contents can still be used + * after the call, but the function saves important information + * within the corresponding glyph slot. + * + * @Input: + * builder :: + * A pointer to the glyph builder to finalize. + */ + FT_LOCAL_DEF( void ) + ps_builder_done( PS_Builder* builder ) + { + CFF_GlyphSlot glyph = builder->glyph; + + + if ( glyph ) + glyph->root.outline = *builder->base; + } + + + /* check that there is enough space for `count' more points */ + FT_LOCAL_DEF( FT_Error ) + ps_builder_check_points( PS_Builder* builder, + FT_Int count ) + { + return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 ); + } + + + /* add a new point, do not check space */ + FT_LOCAL_DEF( void ) + ps_builder_add_point( PS_Builder* builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ) + { + FT_Outline* outline = builder->current; + + + if ( builder->load_points ) + { + FT_Vector* point = outline->points + outline->n_points; + FT_Byte* control = outline->tags + outline->n_points; + +#ifdef CFF_CONFIG_OPTION_OLD_ENGINE + PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face ); + + + if ( !builder->is_t1 && + driver->hinting_engine == FT_HINTING_FREETYPE ) + { + point->x = x >> 16; + point->y = y >> 16; + } + else +#endif +#ifdef T1_CONFIG_OPTION_OLD_ENGINE +#ifndef CFF_CONFIG_OPTION_OLD_ENGINE + PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face ); +#endif + if ( builder->is_t1 && + driver->hinting_engine == FT_HINTING_FREETYPE ) + { + point->x = FIXED_TO_INT( x ); + point->y = FIXED_TO_INT( y ); + } + else +#endif + { + /* cf2_decoder_parse_charstrings uses 16.16 coordinates */ + point->x = x >> 10; + point->y = y >> 10; + } + *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC ); + } + outline->n_points++; + } + + + /* check space for a new on-curve point, then add it */ + FT_LOCAL_DEF( FT_Error ) + ps_builder_add_point1( PS_Builder* builder, + FT_Pos x, + FT_Pos y ) + { + FT_Error error; + + + error = ps_builder_check_points( builder, 1 ); + if ( !error ) + ps_builder_add_point( builder, x, y, 1 ); + + return error; + } + + + /* check space for a new contour, then add it */ + FT_LOCAL_DEF( FT_Error ) + ps_builder_add_contour( PS_Builder* builder ) + { + FT_Outline* outline = builder->current; + FT_Error error; + + + /* this might happen in invalid fonts */ + if ( !outline ) + { + FT_ERROR(( "ps_builder_add_contour: no outline to add points to\n" )); + return FT_THROW( Invalid_File_Format ); + } + + if ( !builder->load_points ) + { + outline->n_contours++; + return FT_Err_Ok; + } + + error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 ); + if ( !error ) + { + if ( outline->n_contours > 0 ) + outline->contours[outline->n_contours - 1] = outline->n_points - 1; + + outline->n_contours++; + } + + return error; + } + + + /* if a path was begun, add its first on-curve point */ + FT_LOCAL_DEF( FT_Error ) + ps_builder_start_point( PS_Builder* builder, + FT_Pos x, + FT_Pos y ) + { + FT_Error error = FT_Err_Ok; + + + /* test whether we are building a new contour */ + if ( !builder->path_begun ) + { + builder->path_begun = 1; + error = ps_builder_add_contour( builder ); + if ( !error ) + error = ps_builder_add_point1( builder, x, y ); + } + + return error; + } + + + /* close the current contour */ + FT_LOCAL_DEF( void ) + ps_builder_close_contour( PS_Builder* builder ) + { + FT_Outline* outline = builder->current; + FT_Int first; + + + if ( !outline ) + return; + + first = outline->n_contours <= 1 + ? 0 : outline->contours[outline->n_contours - 2] + 1; + + /* in malformed fonts it can happen that a contour was started */ + /* but no points were added */ + if ( outline->n_contours && first == outline->n_points ) + { + outline->n_contours--; + return; + } + + /* We must not include the last point in the path if it */ + /* is located on the first point. */ + if ( outline->n_points > 1 ) + { + FT_Vector* p1 = outline->points + first; + FT_Vector* p2 = outline->points + outline->n_points - 1; + FT_Byte* control = outline->tags + outline->n_points - 1; + + + /* `delete' last point only if it coincides with the first */ + /* point and it is not a control point (which can happen). */ + if ( p1->x == p2->x && p1->y == p2->y ) + if ( *control == FT_CURVE_TAG_ON ) + outline->n_points--; + } + + if ( outline->n_contours > 0 ) + { + /* Don't add contours only consisting of one point, i.e., */ + /* check whether the first and the last point is the same. */ + if ( first == outline->n_points - 1 ) + { + outline->n_contours--; + outline->n_points--; + } + else + outline->contours[outline->n_contours - 1] = outline->n_points - 1; + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** OTHER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @Function: + * ps_decoder_init + * + * @Description: + * Creates a wrapper decoder for use in the combined + * Type 1 / CFF interpreter. + * + * @InOut: + * ps_decoder :: + * A pointer to the decoder to initialize. + * + * @Input: + * decoder :: + * A pointer to the original decoder. + * + * is_t1 :: + * Flag indicating Type 1 or CFF + */ + FT_LOCAL_DEF( void ) + ps_decoder_init( PS_Decoder* ps_decoder, + void* decoder, + FT_Bool is_t1 ) + { + FT_ZERO( ps_decoder ); + + if ( is_t1 ) + { + T1_Decoder t1_decoder = (T1_Decoder)decoder; + + + ps_builder_init( &ps_decoder->builder, + &t1_decoder->builder, + is_t1 ); + + ps_decoder->cf2_instance = &t1_decoder->cf2_instance; + ps_decoder->psnames = t1_decoder->psnames; + + ps_decoder->num_glyphs = t1_decoder->num_glyphs; + ps_decoder->glyph_names = t1_decoder->glyph_names; + ps_decoder->hint_mode = t1_decoder->hint_mode; + ps_decoder->blend = t1_decoder->blend; + + ps_decoder->num_locals = (FT_UInt)t1_decoder->num_subrs; + ps_decoder->locals = t1_decoder->subrs; + ps_decoder->locals_len = t1_decoder->subrs_len; + ps_decoder->locals_hash = t1_decoder->subrs_hash; + + ps_decoder->buildchar = t1_decoder->buildchar; + ps_decoder->len_buildchar = t1_decoder->len_buildchar; + + ps_decoder->lenIV = t1_decoder->lenIV; + } + else + { + CFF_Decoder* cff_decoder = (CFF_Decoder*)decoder; + + + ps_builder_init( &ps_decoder->builder, + &cff_decoder->builder, + is_t1 ); + + ps_decoder->cff = cff_decoder->cff; + ps_decoder->cf2_instance = &cff_decoder->cff->cf2_instance; + ps_decoder->current_subfont = cff_decoder->current_subfont; + + ps_decoder->num_globals = cff_decoder->num_globals; + ps_decoder->globals = cff_decoder->globals; + ps_decoder->globals_bias = cff_decoder->globals_bias; + ps_decoder->num_locals = cff_decoder->num_locals; + ps_decoder->locals = cff_decoder->locals; + ps_decoder->locals_bias = cff_decoder->locals_bias; + + ps_decoder->glyph_width = &cff_decoder->glyph_width; + ps_decoder->width_only = cff_decoder->width_only; + + ps_decoder->hint_mode = cff_decoder->hint_mode; + + ps_decoder->get_glyph_callback = cff_decoder->get_glyph_callback; + ps_decoder->free_glyph_callback = cff_decoder->free_glyph_callback; + } + } + + + /* Synthesize a SubFont object for Type 1 fonts, for use in the */ + /* new interpreter to access Private dict data. */ + FT_LOCAL_DEF( void ) + t1_make_subfont( FT_Face face, + PS_Private priv, + CFF_SubFont subfont ) + { + CFF_Private cpriv = &subfont->private_dict; + FT_UInt n, count; + + + FT_ZERO( subfont ); + FT_ZERO( cpriv ); + + count = cpriv->num_blue_values = priv->num_blue_values; + for ( n = 0; n < count; n++ ) + cpriv->blue_values[n] = cf2_intToFixed( priv->blue_values[n] ); + + count = cpriv->num_other_blues = priv->num_other_blues; + for ( n = 0; n < count; n++ ) + cpriv->other_blues[n] = cf2_intToFixed( priv->other_blues[n] ); + + count = cpriv->num_family_blues = priv->num_family_blues; + for ( n = 0; n < count; n++ ) + cpriv->family_blues[n] = cf2_intToFixed( priv->family_blues[n] ); + + count = cpriv->num_family_other_blues = priv->num_family_other_blues; + for ( n = 0; n < count; n++ ) + cpriv->family_other_blues[n] = + cf2_intToFixed( priv->family_other_blues[n] ); + + cpriv->blue_scale = priv->blue_scale; + cpriv->blue_shift = (FT_Pos)priv->blue_shift; + cpriv->blue_fuzz = (FT_Pos)priv->blue_fuzz; + + cpriv->standard_width = (FT_Pos)priv->standard_width[0]; + cpriv->standard_height = (FT_Pos)priv->standard_height[0]; + + count = cpriv->num_snap_widths = priv->num_snap_widths; + for ( n = 0; n < count; n++ ) + cpriv->snap_widths[n] = (FT_Pos)priv->snap_widths[n]; + + count = cpriv->num_snap_heights = priv->num_snap_heights; + for ( n = 0; n < count; n++ ) + cpriv->snap_heights[n] = (FT_Pos)priv->snap_heights[n]; + + cpriv->force_bold = priv->force_bold; + cpriv->lenIV = priv->lenIV; + cpriv->language_group = priv->language_group; + cpriv->expansion_factor = priv->expansion_factor; + + cpriv->subfont = subfont; + + + /* Initialize the random number generator. */ + if ( face->internal->random_seed != -1 ) + { + /* If we have a face-specific seed, use it. */ + /* If non-zero, update it to a positive value. */ + subfont->random = (FT_UInt32)face->internal->random_seed; + if ( face->internal->random_seed ) + { + do + { + face->internal->random_seed = (FT_Int32)cff_random( + (FT_UInt32)face->internal->random_seed ); + + } while ( face->internal->random_seed < 0 ); + } + } + if ( !subfont->random ) + { + FT_UInt32 seed; + + + /* compute random seed from some memory addresses */ + seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^ + (FT_Offset)(char*)&face ^ + (FT_Offset)(char*)&subfont ); + seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 ); + if ( seed == 0 ) + seed = 0x7384; + + subfont->random = seed; + } + } + + + FT_LOCAL_DEF( void ) + t1_decrypt( FT_Byte* buffer, + FT_Offset length, + FT_UShort seed ) + { + PS_Conv_EexecDecode( &buffer, + FT_OFFSET( buffer, length ), + buffer, + length, + &seed ); + } + + + FT_LOCAL_DEF( FT_UInt32 ) + cff_random( FT_UInt32 r ) + { + /* a 32bit version of the `xorshift' algorithm */ + r ^= r << 13; + r ^= r >> 17; + r ^= r << 5; + + return r; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psobjs.h b/non-source/foreign/freetype2/src/psaux/psobjs.h new file mode 100644 index 000000000..345fc8a73 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psobjs.h @@ -0,0 +1,312 @@ +/**************************************************************************** + * + * psobjs.h + * + * Auxiliary functions for PostScript fonts (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSOBJS_H_ +#define PSOBJS_H_ + + +#include <freetype/internal/psaux.h> +#include <freetype/internal/cffotypes.h> + + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1_TABLE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + FT_CALLBACK_TABLE + const PS_Table_FuncsRec ps_table_funcs; + + FT_CALLBACK_TABLE + const PS_Parser_FuncsRec ps_parser_funcs; + + FT_CALLBACK_TABLE + const T1_Builder_FuncsRec t1_builder_funcs; + + + FT_LOCAL( FT_Error ) + ps_table_new( PS_Table table, + FT_Int count, + FT_Memory memory ); + + FT_LOCAL( FT_Error ) + ps_table_add( PS_Table table, + FT_Int idx, + const void* object, + FT_UInt length ); + + FT_LOCAL( void ) + ps_table_done( PS_Table table ); + + + FT_LOCAL( void ) + ps_table_release( PS_Table table ); + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 PARSER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + FT_LOCAL( void ) + ps_parser_skip_spaces( PS_Parser parser ); + + FT_LOCAL( void ) + ps_parser_skip_PS_token( PS_Parser parser ); + + FT_LOCAL( void ) + ps_parser_to_token( PS_Parser parser, + T1_Token token ); + + FT_LOCAL( void ) + ps_parser_to_token_array( PS_Parser parser, + T1_Token tokens, + FT_UInt max_tokens, + FT_Int* pnum_tokens ); + + FT_LOCAL( FT_Error ) + ps_parser_load_field( PS_Parser parser, + const T1_Field field, + void** objects, + FT_UInt max_objects, + FT_ULong* pflags ); + + FT_LOCAL( FT_Error ) + ps_parser_load_field_table( PS_Parser parser, + const T1_Field field, + void** objects, + FT_UInt max_objects, + FT_ULong* pflags ); + + FT_LOCAL( FT_Long ) + ps_parser_to_int( PS_Parser parser ); + + + FT_LOCAL( FT_Error ) + ps_parser_to_bytes( PS_Parser parser, + FT_Byte* bytes, + FT_Offset max_bytes, + FT_ULong* pnum_bytes, + FT_Bool delimiters ); + + + FT_LOCAL( FT_Fixed ) + ps_parser_to_fixed( PS_Parser parser, + FT_Int power_ten ); + + + FT_LOCAL( FT_Int ) + ps_parser_to_coord_array( PS_Parser parser, + FT_Int max_coords, + FT_Short* coords ); + + FT_LOCAL( FT_Int ) + ps_parser_to_fixed_array( PS_Parser parser, + FT_Int max_values, + FT_Fixed* values, + FT_Int power_ten ); + + + FT_LOCAL( void ) + ps_parser_init( PS_Parser parser, + FT_Byte* base, + FT_Byte* limit, + FT_Memory memory ); + + FT_LOCAL( void ) + ps_parser_done( PS_Parser parser ); + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** T1 BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_LOCAL( void ) + t1_builder_init( T1_Builder builder, + FT_Face face, + FT_Size size, + FT_GlyphSlot glyph, + FT_Bool hinting ); + + FT_LOCAL( void ) + t1_builder_done( T1_Builder builder ); + + FT_LOCAL( FT_Error ) + t1_builder_check_points( T1_Builder builder, + FT_Int count ); + + FT_LOCAL( void ) + t1_builder_add_point( T1_Builder builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ); + + FT_LOCAL( FT_Error ) + t1_builder_add_point1( T1_Builder builder, + FT_Pos x, + FT_Pos y ); + + FT_LOCAL( FT_Error ) + t1_builder_add_contour( T1_Builder builder ); + + + FT_LOCAL( FT_Error ) + t1_builder_start_point( T1_Builder builder, + FT_Pos x, + FT_Pos y ); + + + FT_LOCAL( void ) + t1_builder_close_contour( T1_Builder builder ); + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CFF BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_LOCAL( void ) + cff_builder_init( CFF_Builder* builder, + TT_Face face, + CFF_Size size, + CFF_GlyphSlot glyph, + FT_Bool hinting ); + + FT_LOCAL( void ) + cff_builder_done( CFF_Builder* builder ); + + FT_LOCAL( FT_Error ) + cff_check_points( CFF_Builder* builder, + FT_Int count ); + + FT_LOCAL( void ) + cff_builder_add_point( CFF_Builder* builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ); + FT_LOCAL( FT_Error ) + cff_builder_add_point1( CFF_Builder* builder, + FT_Pos x, + FT_Pos y ); + FT_LOCAL( FT_Error ) + cff_builder_start_point( CFF_Builder* builder, + FT_Pos x, + FT_Pos y ); + FT_LOCAL( void ) + cff_builder_close_contour( CFF_Builder* builder ); + + FT_LOCAL( FT_Error ) + cff_builder_add_contour( CFF_Builder* builder ); + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS BUILDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_LOCAL( void ) + ps_builder_init( PS_Builder* ps_builder, + void* builder, + FT_Bool is_t1 ); + + + FT_LOCAL( void ) + ps_builder_done( PS_Builder* builder ); + + FT_LOCAL( FT_Error ) + ps_builder_check_points( PS_Builder* builder, + FT_Int count ); + + FT_LOCAL( void ) + ps_builder_add_point( PS_Builder* builder, + FT_Pos x, + FT_Pos y, + FT_Byte flag ); + + FT_LOCAL( FT_Error ) + ps_builder_add_point1( PS_Builder* builder, + FT_Pos x, + FT_Pos y ); + + FT_LOCAL( FT_Error ) + ps_builder_add_contour( PS_Builder* builder ); + + FT_LOCAL( FT_Error ) + ps_builder_start_point( PS_Builder* builder, + FT_Pos x, + FT_Pos y ); + + FT_LOCAL( void ) + ps_builder_close_contour( PS_Builder* builder ); + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** OTHER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_LOCAL( void ) + ps_decoder_init( PS_Decoder* ps_decoder, + void* decoder, + FT_Bool is_t1 ); + + FT_LOCAL( void ) + t1_make_subfont( FT_Face face, + PS_Private priv, + CFF_SubFont subfont ); + + FT_LOCAL( void ) + t1_decrypt( FT_Byte* buffer, + FT_Offset length, + FT_UShort seed ); + + + FT_LOCAL( FT_UInt32 ) + cff_random( FT_UInt32 r ); + + +FT_END_HEADER + +#endif /* PSOBJS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psread.c b/non-source/foreign/freetype2/src/psaux/psread.c new file mode 100644 index 000000000..7f657f2cd --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psread.c @@ -0,0 +1,112 @@ +/**************************************************************************** + * + * psread.c + * + * Adobe's code for stream handling (body). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include <freetype/internal/ftdebug.h> + +#include "psglue.h" + +#include "pserror.h" + + + /* Define CF2_IO_FAIL as 1 to enable random errors and random */ + /* value errors in I/O. */ +#define CF2_IO_FAIL 0 + + +#if CF2_IO_FAIL + + /* set the .00 value to a nonzero probability */ + static int + randomError2( void ) + { + /* for region buffer ReadByte (interp) function */ + return (double)rand() / RAND_MAX < .00; + } + + /* set the .00 value to a nonzero probability */ + static CF2_Int + randomValue() + { + return (double)rand() / RAND_MAX < .00 ? rand() : 0; + } + +#endif /* CF2_IO_FAIL */ + + + /* Region Buffer */ + /* */ + /* Can be constructed from a copied buffer managed by */ + /* `FCM_getDatablock'. */ + /* Reads bytes with check for end of buffer. */ + + /* reading past the end of the buffer sets error and returns zero */ + FT_LOCAL_DEF( CF2_Int ) + cf2_buf_readByte( CF2_Buffer buf ) + { + if ( buf->ptr < buf->end ) + { +#if CF2_IO_FAIL + if ( randomError2() ) + { + CF2_SET_ERROR( buf->error, Invalid_Stream_Operation ); + return 0; + } + + return *(buf->ptr)++ + randomValue(); +#else + return *(buf->ptr)++; +#endif + } + else + { + CF2_SET_ERROR( buf->error, Invalid_Stream_Operation ); + return 0; + } + } + + + /* note: end condition can occur without error */ + FT_LOCAL_DEF( FT_Bool ) + cf2_buf_isEnd( CF2_Buffer buf ) + { + return FT_BOOL( buf->ptr >= buf->end ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psread.h b/non-source/foreign/freetype2/src/psaux/psread.h new file mode 100644 index 000000000..9e55fe044 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psread.h @@ -0,0 +1,68 @@ +/**************************************************************************** + * + * psread.h + * + * Adobe's code for stream handling (specification). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSREAD_H_ +#define PSREAD_H_ + + +FT_BEGIN_HEADER + + + typedef struct CF2_BufferRec_ + { + FT_Error* error; + const FT_Byte* start; + const FT_Byte* end; + const FT_Byte* ptr; + + } CF2_BufferRec, *CF2_Buffer; + + + FT_LOCAL( CF2_Int ) + cf2_buf_readByte( CF2_Buffer buf ); + FT_LOCAL( FT_Bool ) + cf2_buf_isEnd( CF2_Buffer buf ); + + +FT_END_HEADER + + +#endif /* PSREAD_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psstack.c b/non-source/foreign/freetype2/src/psaux/psstack.c new file mode 100644 index 000000000..797486588 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psstack.c @@ -0,0 +1,329 @@ +/**************************************************************************** + * + * psstack.c + * + * Adobe's code for emulating a CFF stack (body). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#include "psft.h" +#include <freetype/internal/ftdebug.h> + +#include "psglue.h" +#include "psfont.h" +#include "psstack.h" + +#include "pserror.h" + + + /* Allocate and initialize an instance of CF2_Stack. */ + /* Note: This function returns NULL on error (does not set */ + /* `error'). */ + FT_LOCAL_DEF( CF2_Stack ) + cf2_stack_init( FT_Memory memory, + FT_Error* e, + FT_UInt stackSize ) + { + FT_Error error; /* for FT_QNEW */ + CF2_Stack stack = NULL; + + + if ( FT_QNEW( stack ) ) + return NULL; + + stack->memory = memory; + stack->error = e; + + /* allocate the stack buffer */ + if ( FT_QNEW_ARRAY( stack->buffer, stackSize ) ) + { + FT_FREE( stack ); + return NULL; + } + + stack->stackSize = stackSize; + stack->top = stack->buffer; /* empty stack */ + + return stack; + } + + + FT_LOCAL_DEF( void ) + cf2_stack_free( CF2_Stack stack ) + { + if ( stack ) + { + FT_Memory memory = stack->memory; + + /* free the buffer */ + FT_FREE( stack->buffer ); + + /* free the main structure */ + FT_FREE( stack ); + } + } + + + FT_LOCAL_DEF( CF2_UInt ) + cf2_stack_count( CF2_Stack stack ) + { + return (CF2_UInt)( stack->top - stack->buffer ); + } + + + FT_LOCAL_DEF( void ) + cf2_stack_pushInt( CF2_Stack stack, + CF2_Int val ) + { + if ( stack->top == stack->buffer + stack->stackSize ) + { + CF2_SET_ERROR( stack->error, Stack_Overflow ); + return; /* stack overflow */ + } + + stack->top->u.i = val; + stack->top->type = CF2_NumberInt; + stack->top++; + } + + + FT_LOCAL_DEF( void ) + cf2_stack_pushFixed( CF2_Stack stack, + CF2_Fixed val ) + { + if ( stack->top == stack->buffer + stack->stackSize ) + { + CF2_SET_ERROR( stack->error, Stack_Overflow ); + return; /* stack overflow */ + } + + stack->top->u.r = val; + stack->top->type = CF2_NumberFixed; + stack->top++; + } + + + /* this function is only allowed to pop an integer type */ + FT_LOCAL_DEF( CF2_Int ) + cf2_stack_popInt( CF2_Stack stack ) + { + if ( stack->top == stack->buffer ) + { + CF2_SET_ERROR( stack->error, Stack_Underflow ); + return 0; /* underflow */ + } + if ( stack->top[-1].type != CF2_NumberInt ) + { + CF2_SET_ERROR( stack->error, Syntax_Error ); + return 0; /* type mismatch */ + } + + stack->top--; + + return stack->top->u.i; + } + + + /* Note: type mismatch is silently cast */ + /* TODO: check this */ + FT_LOCAL_DEF( CF2_Fixed ) + cf2_stack_popFixed( CF2_Stack stack ) + { + if ( stack->top == stack->buffer ) + { + CF2_SET_ERROR( stack->error, Stack_Underflow ); + return cf2_intToFixed( 0 ); /* underflow */ + } + + stack->top--; + + switch ( stack->top->type ) + { + case CF2_NumberInt: + return cf2_intToFixed( stack->top->u.i ); + case CF2_NumberFrac: + return cf2_fracToFixed( stack->top->u.f ); + default: + return stack->top->u.r; + } + } + + + /* Note: type mismatch is silently cast */ + /* TODO: check this */ + FT_LOCAL_DEF( CF2_Fixed ) + cf2_stack_getReal( CF2_Stack stack, + CF2_UInt idx ) + { + FT_ASSERT( cf2_stack_count( stack ) <= stack->stackSize ); + + if ( idx >= cf2_stack_count( stack ) ) + { + CF2_SET_ERROR( stack->error, Stack_Overflow ); + return cf2_intToFixed( 0 ); /* bounds error */ + } + + switch ( stack->buffer[idx].type ) + { + case CF2_NumberInt: + return cf2_intToFixed( stack->buffer[idx].u.i ); + case CF2_NumberFrac: + return cf2_fracToFixed( stack->buffer[idx].u.f ); + default: + return stack->buffer[idx].u.r; + } + } + + + /* provide random access to stack */ + FT_LOCAL_DEF( void ) + cf2_stack_setReal( CF2_Stack stack, + CF2_UInt idx, + CF2_Fixed val ) + { + if ( idx > cf2_stack_count( stack ) ) + { + CF2_SET_ERROR( stack->error, Stack_Overflow ); + return; + } + + stack->buffer[idx].u.r = val; + stack->buffer[idx].type = CF2_NumberFixed; + } + + + /* discard (pop) num values from stack */ + FT_LOCAL_DEF( void ) + cf2_stack_pop( CF2_Stack stack, + CF2_UInt num ) + { + if ( num > cf2_stack_count( stack ) ) + { + CF2_SET_ERROR( stack->error, Stack_Underflow ); + return; + } + stack->top -= num; + } + + + FT_LOCAL_DEF( void ) + cf2_stack_roll( CF2_Stack stack, + CF2_Int count, + CF2_Int shift ) + { + /* we initialize this variable to avoid compiler warnings */ + CF2_StackNumber last = { { 0 }, CF2_NumberInt }; + + CF2_Int start_idx, idx, i; + + + if ( count < 2 ) + return; /* nothing to do (values 0 and 1), or undefined value */ + + if ( (CF2_UInt)count > cf2_stack_count( stack ) ) + { + CF2_SET_ERROR( stack->error, Stack_Overflow ); + return; + } + + /* before C99 it is implementation-defined whether */ + /* the result of `%' is negative if the first operand */ + /* is negative */ + if ( shift < 0 ) + shift = -( ( -shift ) % count ); + else + shift %= count; + + if ( shift == 0 ) + return; /* nothing to do */ + + /* We use the following algorithm to do the rolling, */ + /* which needs two temporary variables only. */ + /* */ + /* Example: */ + /* */ + /* count = 8 */ + /* shift = 2 */ + /* */ + /* stack indices before roll: 7 6 5 4 3 2 1 0 */ + /* stack indices after roll: 1 0 7 6 5 4 3 2 */ + /* */ + /* The value of index 0 gets moved to index 2, while */ + /* the old value of index 2 gets moved to index 4, */ + /* and so on. We thus have the following copying */ + /* chains for shift value 2. */ + /* */ + /* 0 -> 2 -> 4 -> 6 -> 0 */ + /* 1 -> 3 -> 5 -> 7 -> 1 */ + /* */ + /* If `count' and `shift' are incommensurable, we */ + /* have a single chain only. Otherwise, increase */ + /* the start index by 1 after the first chain, then */ + /* do the next chain until all elements in all */ + /* chains are handled. */ + + start_idx = -1; + idx = -1; + for ( i = 0; i < count; i++ ) + { + CF2_StackNumber tmp; + + + if ( start_idx == idx ) + { + start_idx++; + idx = start_idx; + last = stack->buffer[idx]; + } + + idx += shift; + if ( idx >= count ) + idx -= count; + else if ( idx < 0 ) + idx += count; + + tmp = stack->buffer[idx]; + stack->buffer[idx] = last; + last = tmp; + } + } + + + FT_LOCAL_DEF( void ) + cf2_stack_clear( CF2_Stack stack ) + { + stack->top = stack->buffer; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/psstack.h b/non-source/foreign/freetype2/src/psaux/psstack.h new file mode 100644 index 000000000..907b42400 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/psstack.h @@ -0,0 +1,122 @@ +/**************************************************************************** + * + * psstack.h + * + * Adobe's code for emulating a CFF stack (specification). + * + * Copyright 2007-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSSTACK_H_ +#define PSSTACK_H_ + +#include <freetype/internal/compiler-macros.h> + +FT_BEGIN_HEADER + + + /* CFF operand stack; specified maximum of 48 or 192 values */ + typedef struct CF2_StackNumber_ + { + union + { + CF2_Fixed r; /* 16.16 fixed-point */ + CF2_Frac f; /* 2.30 fixed-point (for font matrix) */ + CF2_Int i; + } u; + + CF2_NumberType type; + + } CF2_StackNumber; + + + typedef struct CF2_StackRec_ + { + FT_Memory memory; + FT_Error* error; + CF2_StackNumber* buffer; + CF2_StackNumber* top; + FT_UInt stackSize; + + } CF2_StackRec, *CF2_Stack; + + + FT_LOCAL( CF2_Stack ) + cf2_stack_init( FT_Memory memory, + FT_Error* error, + FT_UInt stackSize ); + FT_LOCAL( void ) + cf2_stack_free( CF2_Stack stack ); + + FT_LOCAL( CF2_UInt ) + cf2_stack_count( CF2_Stack stack ); + + FT_LOCAL( void ) + cf2_stack_pushInt( CF2_Stack stack, + CF2_Int val ); + FT_LOCAL( void ) + cf2_stack_pushFixed( CF2_Stack stack, + CF2_Fixed val ); + + FT_LOCAL( CF2_Int ) + cf2_stack_popInt( CF2_Stack stack ); + FT_LOCAL( CF2_Fixed ) + cf2_stack_popFixed( CF2_Stack stack ); + + FT_LOCAL( CF2_Fixed ) + cf2_stack_getReal( CF2_Stack stack, + CF2_UInt idx ); + FT_LOCAL( void ) + cf2_stack_setReal( CF2_Stack stack, + CF2_UInt idx, + CF2_Fixed val ); + + FT_LOCAL( void ) + cf2_stack_pop( CF2_Stack stack, + CF2_UInt num ); + + FT_LOCAL( void ) + cf2_stack_roll( CF2_Stack stack, + CF2_Int count, + CF2_Int idx ); + + FT_LOCAL( void ) + cf2_stack_clear( CF2_Stack stack ); + + +FT_END_HEADER + + +#endif /* PSSTACK_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/pstypes.h b/non-source/foreign/freetype2/src/psaux/pstypes.h new file mode 100644 index 000000000..435ef7e1f --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/pstypes.h @@ -0,0 +1,77 @@ +/**************************************************************************** + * + * pstypes.h + * + * Adobe's code for defining data types (specification only). + * + * Copyright 2011-2013 Adobe Systems Incorporated. + * + * This software, and all works of authorship, whether in source or + * object code form as indicated by the copyright notice(s) included + * herein (collectively, the "Work") is made available, and may only be + * used, modified, and distributed under the FreeType Project License, + * LICENSE.TXT. Additionally, subject to the terms and conditions of the + * FreeType Project License, each contributor to the Work hereby grants + * to any individual or legal entity exercising permissions granted by + * the FreeType Project License and this section (hereafter, "You" or + * "Your") a perpetual, worldwide, non-exclusive, no-charge, + * royalty-free, irrevocable (except as stated in this section) patent + * license to make, have made, use, offer to sell, sell, import, and + * otherwise transfer the Work, where such license applies only to those + * patent claims licensable by such contributor that are necessarily + * infringed by their contribution(s) alone or by combination of their + * contribution(s) with the Work to which such contribution(s) was + * submitted. If You institute patent litigation against any entity + * (including a cross-claim or counterclaim in a lawsuit) alleging that + * the Work or a contribution incorporated within the Work constitutes + * direct or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate as of + * the date such litigation is filed. + * + * By using, modifying, or distributing the Work you indicate that you + * have read and understood the terms and conditions of the + * FreeType Project License as well as those provided in this section, + * and you accept them fully. + * + */ + + +#ifndef PSTYPES_H_ +#define PSTYPES_H_ + +#include <freetype/freetype.h> + + +FT_BEGIN_HEADER + + + /* + * The data models that we expect to support are as follows: + * + * name char short int long long-long pointer example + * ----------------------------------------------------- + * ILP32 8 16 32 32 64* 32 32-bit MacOS, x86 + * LLP64 8 16 32 32 64 64 x64 + * LP64 8 16 32 64 64 64 64-bit MacOS + * + * *) type may be supported by emulation on a 32-bit architecture + * + */ + + + /* integers at least 32 bits wide */ +#define CF2_UInt FT_UFast +#define CF2_Int FT_Fast + + + /* fixed-float numbers */ + typedef FT_Int32 CF2_F16Dot16; + + +FT_END_HEADER + + +#endif /* PSTYPES_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/t1cmap.c b/non-source/foreign/freetype2/src/psaux/t1cmap.c new file mode 100644 index 000000000..5681c3bd0 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/t1cmap.c @@ -0,0 +1,393 @@ +/**************************************************************************** + * + * t1cmap.c + * + * Type 1 character map support (body). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include "t1cmap.h" + +#include <freetype/internal/ftdebug.h> + +#include "psauxerr.h" + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + static void + t1_cmap_std_init( T1_CMapStd cmap, + FT_Int is_expert ) + { + T1_Face face = (T1_Face)FT_CMAP_FACE( cmap ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + + cmap->num_glyphs = (FT_UInt)face->type1.num_glyphs; + cmap->glyph_names = (const char* const*)face->type1.glyph_names; + cmap->sid_to_string = psnames->adobe_std_strings; + cmap->code_to_sid = is_expert ? psnames->adobe_expert_encoding + : psnames->adobe_std_encoding; + + FT_ASSERT( cmap->code_to_sid ); + } + + + FT_CALLBACK_DEF( void ) + t1_cmap_std_done( FT_CMap cmap_ ) /* T1_CMapStd */ + { + T1_CMapStd cmap = (T1_CMapStd)cmap_; + + + cmap->num_glyphs = 0; + cmap->glyph_names = NULL; + cmap->sid_to_string = NULL; + cmap->code_to_sid = NULL; + } + + + FT_CALLBACK_DEF( FT_UInt ) + t1_cmap_std_char_index( FT_CMap cmap, /* T1_CMapStd */ + FT_UInt32 char_code ) + { + T1_CMapStd t1cmap = (T1_CMapStd)cmap; + FT_UInt result = 0; + + + if ( char_code < 256 ) + { + FT_UInt code, n; + const char* glyph_name; + + + /* convert character code to Adobe SID string */ + code = t1cmap->code_to_sid[char_code]; + glyph_name = t1cmap->sid_to_string( code ); + + /* look for the corresponding glyph name */ + for ( n = 0; n < t1cmap->num_glyphs; n++ ) + { + const char* gname = t1cmap->glyph_names[n]; + + + if ( gname && gname[0] == glyph_name[0] && + ft_strcmp( gname, glyph_name ) == 0 ) + { + result = n; + break; + } + } + } + + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + t1_cmap_std_char_next( FT_CMap cmap, + FT_UInt32 *pchar_code ) + { + FT_UInt result = 0; + FT_UInt32 char_code = *pchar_code + 1; + + + while ( char_code < 256 ) + { + result = t1_cmap_std_char_index( cmap, char_code ); + if ( result != 0 ) + goto Exit; + + char_code++; + } + char_code = 0; + + Exit: + *pchar_code = char_code; + return result; + } + + + FT_CALLBACK_DEF( FT_Error ) + t1_cmap_standard_init( FT_CMap cmap, /* T1_CMapStd */ + FT_Pointer pointer ) + { + T1_CMapStd t1cmap = (T1_CMapStd)cmap; + FT_UNUSED( pointer ); + + + t1_cmap_std_init( t1cmap, 0 ); + return 0; + } + + + FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec + t1_cmap_standard_class_rec = + { + sizeof ( T1_CMapStdRec ), + + (FT_CMap_InitFunc) t1_cmap_standard_init, /* init */ + (FT_CMap_DoneFunc) t1_cmap_std_done, /* done */ + (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, /* char_index */ + (FT_CMap_CharNextFunc) t1_cmap_std_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */ + }; + + + FT_CALLBACK_DEF( FT_Error ) + t1_cmap_expert_init( FT_CMap cmap, /* T1_CMapStd */ + FT_Pointer pointer ) + { + T1_CMapStd t1cmap = (T1_CMapStd)cmap; + FT_UNUSED( pointer ); + + + t1_cmap_std_init( t1cmap, 1 ); + return 0; + } + + FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec + t1_cmap_expert_class_rec = + { + sizeof ( T1_CMapStdRec ), + + (FT_CMap_InitFunc) t1_cmap_expert_init, /* init */ + (FT_CMap_DoneFunc) t1_cmap_std_done, /* done */ + (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, /* char_index */ + (FT_CMap_CharNextFunc) t1_cmap_std_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */ + }; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 CUSTOM ENCODING CMAP *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + FT_CALLBACK_DEF( FT_Error ) + t1_cmap_custom_init( FT_CMap cmap, /* T1_CMapCustom */ + FT_Pointer pointer ) + { + T1_CMapCustom t1cmap = (T1_CMapCustom)cmap; + T1_Face face = (T1_Face)FT_CMAP_FACE( cmap ); + T1_Encoding encoding = &face->type1.encoding; + + FT_UNUSED( pointer ); + + + t1cmap->first = (FT_UInt)encoding->code_first; + t1cmap->count = (FT_UInt)encoding->code_last - t1cmap->first; + t1cmap->indices = encoding->char_index; + + FT_ASSERT( t1cmap->indices ); + FT_ASSERT( encoding->code_first <= encoding->code_last ); + + return 0; + } + + + FT_CALLBACK_DEF( void ) + t1_cmap_custom_done( FT_CMap cmap ) /* T1_CMapCustom */ + { + T1_CMapCustom t1cmap = (T1_CMapCustom)cmap; + + + t1cmap->indices = NULL; + t1cmap->first = 0; + t1cmap->count = 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + t1_cmap_custom_char_index( FT_CMap cmap, /* T1_CMapCustom */ + FT_UInt32 char_code ) + { + T1_CMapCustom t1cmap = (T1_CMapCustom)cmap; + FT_UInt result = 0; + + + if ( char_code >= t1cmap->first && + char_code < ( t1cmap->first + t1cmap->count ) ) + result = t1cmap->indices[char_code]; + + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + t1_cmap_custom_char_next( FT_CMap cmap, /* T1_CMapCustom */ + FT_UInt32 *pchar_code ) + { + T1_CMapCustom t1cmap = (T1_CMapCustom)cmap; + FT_UInt result = 0; + FT_UInt32 char_code = *pchar_code; + + + char_code++; + + if ( char_code < t1cmap->first ) + char_code = t1cmap->first; + + for ( ; char_code < ( t1cmap->first + t1cmap->count ); char_code++ ) + { + result = t1cmap->indices[char_code]; + if ( result != 0 ) + goto Exit; + } + + char_code = 0; + + Exit: + *pchar_code = char_code; + return result; + } + + + FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec + t1_cmap_custom_class_rec = + { + sizeof ( T1_CMapCustomRec ), + + (FT_CMap_InitFunc) t1_cmap_custom_init, /* init */ + (FT_CMap_DoneFunc) t1_cmap_custom_done, /* done */ + (FT_CMap_CharIndexFunc)t1_cmap_custom_char_index, /* char_index */ + (FT_CMap_CharNextFunc) t1_cmap_custom_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */ + }; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 SYNTHETIC UNICODE ENCODING CMAP *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_CALLBACK_DEF( const char * ) + psaux_get_glyph_name( void* face_, + FT_UInt idx ) + { + T1_Face face = (T1_Face)face_; + + + return face->type1.glyph_names[idx]; + } + + + FT_CALLBACK_DEF( FT_Error ) + t1_cmap_unicode_init( FT_CMap cmap, /* PS_Unicodes */ + FT_Pointer pointer ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + T1_Face face = (T1_Face)FT_CMAP_FACE( cmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + FT_UNUSED( pointer ); + + + if ( !psnames->unicodes_init ) + return FT_THROW( Unimplemented_Feature ); + + return psnames->unicodes_init( memory, + unicodes, + (FT_UInt)face->type1.num_glyphs, + &psaux_get_glyph_name, + (PS_FreeGlyphNameFunc)NULL, + (FT_Pointer)face ); + } + + + FT_CALLBACK_DEF( void ) + t1_cmap_unicode_done( FT_CMap cmap ) /* PS_Unicodes */ + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + FT_Face face = FT_CMAP_FACE( cmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + + + FT_FREE( unicodes->maps ); + unicodes->num_maps = 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + t1_cmap_unicode_char_index( FT_CMap cmap, /* PS_Unicodes */ + FT_UInt32 char_code ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + T1_Face face = (T1_Face)FT_CMAP_FACE( cmap ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + + return psnames->unicodes_char_index( unicodes, char_code ); + } + + + FT_CALLBACK_DEF( FT_UInt ) + t1_cmap_unicode_char_next( FT_CMap cmap, /* PS_Unicodes */ + FT_UInt32 *pchar_code ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + T1_Face face = (T1_Face)FT_CMAP_FACE( cmap ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + + return psnames->unicodes_char_next( unicodes, pchar_code ); + } + + + FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec + t1_cmap_unicode_class_rec = + { + sizeof ( PS_UnicodesRec ), + + (FT_CMap_InitFunc) t1_cmap_unicode_init, /* init */ + (FT_CMap_DoneFunc) t1_cmap_unicode_done, /* done */ + (FT_CMap_CharIndexFunc)t1_cmap_unicode_char_index, /* char_index */ + (FT_CMap_CharNextFunc) t1_cmap_unicode_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */ + }; + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/t1cmap.h b/non-source/foreign/freetype2/src/psaux/t1cmap.h new file mode 100644 index 000000000..445e6a278 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/t1cmap.h @@ -0,0 +1,104 @@ +/**************************************************************************** + * + * t1cmap.h + * + * Type 1 character map support (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef T1CMAP_H_ +#define T1CMAP_H_ + +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/t1types.h> + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* standard (and expert) encoding cmaps */ + typedef struct T1_CMapStdRec_* T1_CMapStd; + + typedef struct T1_CMapStdRec_ + { + FT_CMapRec cmap; + + const FT_UShort* code_to_sid; + PS_Adobe_Std_StringsFunc sid_to_string; + + FT_UInt num_glyphs; + const char* const* glyph_names; + + } T1_CMapStdRec; + + + FT_CALLBACK_TABLE const FT_CMap_ClassRec + t1_cmap_standard_class_rec; + + FT_CALLBACK_TABLE const FT_CMap_ClassRec + t1_cmap_expert_class_rec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 CUSTOM ENCODING CMAP *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct T1_CMapCustomRec_* T1_CMapCustom; + + typedef struct T1_CMapCustomRec_ + { + FT_CMapRec cmap; + FT_UInt first; + FT_UInt count; + FT_UShort* indices; + + } T1_CMapCustomRec; + + + FT_CALLBACK_TABLE const FT_CMap_ClassRec + t1_cmap_custom_class_rec; + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE1 SYNTHETIC UNICODE ENCODING CMAP *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* unicode (synthetic) cmaps */ + + FT_CALLBACK_TABLE const FT_CMap_ClassRec + t1_cmap_unicode_class_rec; + + /* */ + + +FT_END_HEADER + +#endif /* T1CMAP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/t1decode.c b/non-source/foreign/freetype2/src/psaux/t1decode.c new file mode 100644 index 000000000..c74baa803 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/t1decode.c @@ -0,0 +1,2159 @@ +/**************************************************************************** + * + * t1decode.c + * + * PostScript Type 1 decoding routines (body). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/pshints.h> +#include <freetype/internal/fthash.h> +#include <freetype/ftoutln.h> + +#include "t1decode.h" +#include "psobjs.h" + +#include "psauxerr.h" + + +/* ensure proper sign extension */ +#define Fix2Int( f ) ( (FT_Int) (FT_Short)( (f) >> 16 ) ) +#define Fix2UInt( f ) ( (FT_UInt)(FT_Short)( (f) >> 16 ) ) + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT t1decode + + + typedef enum T1_Operator_ + { + op_none = 0, + op_endchar, + op_hsbw, + op_seac, + op_sbw, + op_closepath, + op_hlineto, + op_hmoveto, + op_hvcurveto, + op_rlineto, + op_rmoveto, + op_rrcurveto, + op_vhcurveto, + op_vlineto, + op_vmoveto, + op_dotsection, + op_hstem, + op_hstem3, + op_vstem, + op_vstem3, + op_div, + op_callothersubr, + op_callsubr, + op_pop, + op_return, + op_setcurrentpoint, + op_unknown15, + + op_max /* never remove this one */ + + } T1_Operator; + + + static + const FT_Int t1_args_count[op_max] = + { + 0, /* none */ + 0, /* endchar */ + 2, /* hsbw */ + 5, /* seac */ + 4, /* sbw */ + 0, /* closepath */ + 1, /* hlineto */ + 1, /* hmoveto */ + 4, /* hvcurveto */ + 2, /* rlineto */ + 2, /* rmoveto */ + 6, /* rrcurveto */ + 4, /* vhcurveto */ + 1, /* vlineto */ + 1, /* vmoveto */ + 0, /* dotsection */ + 2, /* hstem */ + 6, /* hstem3 */ + 2, /* vstem */ + 6, /* vstem3 */ + 2, /* div */ + -1, /* callothersubr */ + 1, /* callsubr */ + 0, /* pop */ + 0, /* return */ + 2, /* setcurrentpoint */ + 2 /* opcode 15 (undocumented and obsolete) */ + }; + + + /************************************************************************** + * + * @Function: + * t1_lookup_glyph_by_stdcharcode_ps + * + * @Description: + * Looks up a given glyph by its StandardEncoding charcode. Used to + * implement the SEAC Type 1 operator in the Adobe engine + * + * @Input: + * face :: + * The current face object. + * + * charcode :: + * The character code to look for. + * + * @Return: + * A glyph index in the font face. Returns -1 if the corresponding + * glyph wasn't found. + */ + FT_LOCAL_DEF( FT_Int ) + t1_lookup_glyph_by_stdcharcode_ps( PS_Decoder* decoder, + FT_Int charcode ) + { + FT_UInt n; + const FT_String* glyph_name; + FT_Service_PsCMaps psnames = decoder->psnames; + + + /* check range of standard char code */ + if ( charcode < 0 || charcode > 255 ) + return -1; + + glyph_name = psnames->adobe_std_strings( + psnames->adobe_std_encoding[charcode]); + + for ( n = 0; n < decoder->num_glyphs; n++ ) + { + FT_String* name = (FT_String*)decoder->glyph_names[n]; + + + if ( name && + name[0] == glyph_name[0] && + ft_strcmp( name, glyph_name ) == 0 ) + return (FT_Int)n; + } + + return -1; + } + + +#ifdef T1_CONFIG_OPTION_OLD_ENGINE + + /************************************************************************** + * + * @Function: + * t1_lookup_glyph_by_stdcharcode + * + * @Description: + * Looks up a given glyph by its StandardEncoding charcode. Used to + * implement the SEAC Type 1 operator. + * + * @Input: + * face :: + * The current face object. + * + * charcode :: + * The character code to look for. + * + * @Return: + * A glyph index in the font face. Returns -1 if the corresponding + * glyph wasn't found. + */ + static FT_Int + t1_lookup_glyph_by_stdcharcode( T1_Decoder decoder, + FT_Int charcode ) + { + FT_UInt n; + const FT_String* glyph_name; + FT_Service_PsCMaps psnames = decoder->psnames; + + + /* check range of standard char code */ + if ( charcode < 0 || charcode > 255 ) + return -1; + + glyph_name = psnames->adobe_std_strings( + psnames->adobe_std_encoding[charcode]); + + for ( n = 0; n < decoder->num_glyphs; n++ ) + { + FT_String* name = (FT_String*)decoder->glyph_names[n]; + + + if ( name && + name[0] == glyph_name[0] && + ft_strcmp( name, glyph_name ) == 0 ) + return (FT_Int)n; + } + + return -1; + } + + + /* parse a single Type 1 glyph */ + FT_LOCAL_DEF( FT_Error ) + t1_decoder_parse_glyph( T1_Decoder decoder, + FT_UInt glyph ) + { + return decoder->parse_callback( decoder, glyph ); + } + + + /************************************************************************** + * + * @Function: + * t1operator_seac + * + * @Description: + * Implements the `seac' Type 1 operator for a Type 1 decoder. + * + * @Input: + * decoder :: + * The current CID decoder. + * + * asb :: + * The accent's side bearing. + * + * adx :: + * The horizontal offset of the accent. + * + * ady :: + * The vertical offset of the accent. + * + * bchar :: + * The base character's StandardEncoding charcode. + * + * achar :: + * The accent character's StandardEncoding charcode. + * + * @Return: + * FreeType error code. 0 means success. + */ + static FT_Error + t1operator_seac( T1_Decoder decoder, + FT_Pos asb, + FT_Pos adx, + FT_Pos ady, + FT_Int bchar, + FT_Int achar ) + { + FT_Error error; + FT_Int bchar_index, achar_index; +#if 0 + FT_Int n_base_points; + FT_Outline* base = decoder->builder.base; +#endif + FT_Vector left_bearing, advance; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + T1_Face face = (T1_Face)decoder->builder.face; +#endif + + + if ( decoder->seac ) + { + FT_ERROR(( "t1operator_seac: invalid nested seac\n" )); + return FT_THROW( Syntax_Error ); + } + + if ( decoder->builder.metrics_only ) + { + FT_ERROR(( "t1operator_seac: unexpected seac\n" )); + return FT_THROW( Syntax_Error ); + } + + /* seac weirdness */ + adx += decoder->builder.left_bearing.x; + + /* `glyph_names' is set to 0 for CID fonts which do not */ + /* include an encoding. How can we deal with these? */ +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( decoder->glyph_names == 0 && + !face->root.internal->incremental_interface ) +#else + if ( decoder->glyph_names == 0 ) +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + { + FT_ERROR(( "t1operator_seac:" + " glyph names table not available in this font\n" )); + return FT_THROW( Syntax_Error ); + } + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( face->root.internal->incremental_interface ) + { + /* the caller must handle the font encoding also */ + bchar_index = bchar; + achar_index = achar; + } + else +#endif + { + bchar_index = t1_lookup_glyph_by_stdcharcode( decoder, bchar ); + achar_index = t1_lookup_glyph_by_stdcharcode( decoder, achar ); + } + + if ( bchar_index < 0 || achar_index < 0 ) + { + FT_ERROR(( "t1operator_seac:" + " invalid seac character code arguments\n" )); + return FT_THROW( Syntax_Error ); + } + + /* if we are trying to load a composite glyph, do not load the */ + /* accent character and return the array of subglyphs. */ + if ( decoder->builder.no_recurse ) + { + FT_GlyphSlot glyph = (FT_GlyphSlot)decoder->builder.glyph; + FT_GlyphLoader loader = glyph->internal->loader; + FT_SubGlyph subg; + + + /* reallocate subglyph array if necessary */ + error = FT_GlyphLoader_CheckSubGlyphs( loader, 2 ); + if ( error ) + goto Exit; + + subg = loader->current.subglyphs; + + /* subglyph 0 = base character */ + subg->index = bchar_index; + subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES | + FT_SUBGLYPH_FLAG_USE_MY_METRICS; + subg->arg1 = 0; + subg->arg2 = 0; + subg++; + + /* subglyph 1 = accent character */ + subg->index = achar_index; + subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES; + subg->arg1 = (FT_Int)FIXED_TO_INT( adx - asb ); + subg->arg2 = (FT_Int)FIXED_TO_INT( ady ); + + /* set up remaining glyph fields */ + glyph->num_subglyphs = 2; + glyph->subglyphs = loader->base.subglyphs; + glyph->format = FT_GLYPH_FORMAT_COMPOSITE; + + loader->current.num_subglyphs = 2; + goto Exit; + } + + /* First load `bchar' in builder */ + /* now load the unscaled outline */ + + FT_GlyphLoader_Prepare( decoder->builder.loader ); /* prepare loader */ + + /* 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 ); + decoder->seac = FALSE; + if ( error ) + goto Exit; + + /* If the SEAC glyph doesn't have a (H)SBW of its */ + /* own use the values from the base glyph. */ + + 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; + + decoder->builder.pos_x = adx - asb; + decoder->builder.pos_y = ady; + + /* Now load `achar' on top of */ + /* the base outline */ + + /* the seac operator must not be nested */ + decoder->seac = TRUE; + error = t1_decoder_parse_glyph( decoder, (FT_UInt)achar_index ); + decoder->seac = FALSE; + if ( error ) + goto Exit; + + /* restore the left side bearing and advance width */ + /* of the SEAC glyph or base character (saved above) */ + + decoder->builder.left_bearing = left_bearing; + decoder->builder.advance = advance; + + decoder->builder.pos_x = 0; + decoder->builder.pos_y = 0; + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * t1_decoder_parse_charstrings + * + * @Description: + * Parses a given Type 1 charstrings program. + * + * @Input: + * decoder :: + * The current Type 1 decoder. + * + * charstring_base :: + * The base address of the charstring stream. + * + * charstring_len :: + * The length in bytes of the charstring stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + t1_decoder_parse_charstrings( T1_Decoder decoder, + FT_Byte* charstring_base, + FT_UInt charstring_len ) + { + FT_Error error; + T1_Decoder_Zone zone; + FT_Byte* ip; + FT_Byte* limit; + T1_Builder builder = &decoder->builder; + FT_Pos x, y, orig_x, orig_y; + FT_Int known_othersubr_result_cnt = 0; + FT_Int unknown_othersubr_result_cnt = 0; + FT_Bool large_int; + FT_Fixed seed; + + T1_Hints_Funcs hinter; + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_Bool bol = TRUE; +#endif + + + /* compute random seed from stack address of parameter */ + seed = (FT_Fixed)( ( (FT_Offset)(char*)&seed ^ + (FT_Offset)(char*)&decoder ^ + (FT_Offset)(char*)&charstring_base ) & + FT_ULONG_MAX ); + seed = ( seed ^ ( seed >> 10 ) ^ ( seed >> 20 ) ) & 0xFFFFL; + if ( seed == 0 ) + seed = 0x7384; + + /* First of all, initialize the decoder */ + decoder->top = decoder->stack; + decoder->zone = decoder->zones; + zone = decoder->zones; + + builder->parse_state = T1_Parse_Start; + + hinter = (T1_Hints_Funcs)builder->hints_funcs; + + /* a font that reads BuildCharArray without setting */ + /* its values first is buggy, but ... */ + FT_ASSERT( ( decoder->len_buildchar == 0 ) == + ( decoder->buildchar == NULL ) ); + + if ( decoder->buildchar && decoder->len_buildchar > 0 ) + FT_ARRAY_ZERO( decoder->buildchar, decoder->len_buildchar ); + + zone->base = charstring_base; + limit = zone->limit = charstring_base + charstring_len; + ip = zone->cursor = zone->base; + + error = FT_Err_Ok; + + x = orig_x = builder->pos_x; + y = orig_y = builder->pos_y; + + /* begin hints recording session, if any */ + if ( hinter ) + hinter->open( hinter->hints ); + + large_int = FALSE; + + /* now, execute loop */ + while ( ip < limit ) + { + FT_Long* top = decoder->top; + T1_Operator op = op_none; + FT_Int32 value = 0; + + + FT_ASSERT( known_othersubr_result_cnt == 0 || + unknown_othersubr_result_cnt == 0 ); + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( bol ) + { + FT_TRACE5(( " (%td)", decoder->top - decoder->stack )); + bol = FALSE; + } +#endif + + /********************************************************************** + * + * Decode operator or operand + * + */ + + /* first of all, decompress operator or value */ + switch ( *ip++ ) + { + case 1: + op = op_hstem; + break; + + case 3: + op = op_vstem; + break; + case 4: + op = op_vmoveto; + break; + case 5: + op = op_rlineto; + break; + case 6: + op = op_hlineto; + break; + case 7: + op = op_vlineto; + break; + case 8: + op = op_rrcurveto; + break; + case 9: + op = op_closepath; + break; + case 10: + op = op_callsubr; + break; + case 11: + op = op_return; + break; + + case 13: + op = op_hsbw; + break; + case 14: + op = op_endchar; + break; + + case 15: /* undocumented, obsolete operator */ + op = op_unknown15; + break; + + case 21: + op = op_rmoveto; + break; + case 22: + op = op_hmoveto; + break; + + case 30: + op = op_vhcurveto; + break; + case 31: + op = op_hvcurveto; + break; + + case 12: + if ( ip >= limit ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " invalid escape (12+EOF)\n" )); + goto Syntax_Error; + } + + switch ( *ip++ ) + { + case 0: + op = op_dotsection; + break; + case 1: + op = op_vstem3; + break; + case 2: + op = op_hstem3; + break; + case 6: + op = op_seac; + break; + case 7: + op = op_sbw; + break; + case 12: + op = op_div; + break; + case 16: + op = op_callothersubr; + break; + case 17: + op = op_pop; + break; + case 33: + op = op_setcurrentpoint; + break; + + default: + FT_ERROR(( "t1_decoder_parse_charstrings:" + " invalid escape (12+%d)\n", + ip[-1] )); + goto Syntax_Error; + } + break; + + case 255: /* four bytes integer */ + if ( ip + 4 > limit ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unexpected EOF in integer\n" )); + goto Syntax_Error; + } + + value = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) | + ( (FT_UInt32)ip[1] << 16 ) | + ( (FT_UInt32)ip[2] << 8 ) | + (FT_UInt32)ip[3] ); + ip += 4; + + /* According to the specification, values > 32000 or < -32000 must */ + /* be followed by a `div' operator to make the result be in the */ + /* range [-32000;32000]. We expect that the second argument of */ + /* `div' is not a large number. Additionally, we don't handle */ + /* stuff like `<large1> <large2> <num> div <num> div' or */ + /* <large1> <large2> <num> div div'. This is probably not allowed */ + /* anyway. */ + if ( value > 32000 || value < -32000 ) + { + if ( large_int ) + FT_ERROR(( "t1_decoder_parse_charstrings:" + " no `div' after large integer\n" )); + else + large_int = TRUE; + } + else + { + if ( !large_int ) + value = (FT_Int32)( (FT_UInt32)value << 16 ); + } + + break; + + default: + if ( ip[-1] >= 32 ) + { + if ( ip[-1] < 247 ) + value = (FT_Int32)ip[-1] - 139; + else + { + if ( ++ip > limit ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unexpected EOF in integer\n" )); + goto Syntax_Error; + } + + if ( ip[-2] < 251 ) + value = ( ( ip[-2] - 247 ) * 256 ) + ip[-1] + 108; + else + value = -( ( ( ip[-2] - 251 ) * 256 ) + ip[-1] + 108 ); + } + + if ( !large_int ) + value = (FT_Int32)( (FT_UInt32)value << 16 ); + } + else + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " invalid byte (%d)\n", ip[-1] )); + goto Syntax_Error; + } + } + + if ( unknown_othersubr_result_cnt > 0 ) + { + switch ( op ) + { + case op_callsubr: + case op_return: + case op_none: + case op_pop: + break; + + default: + /* all operands have been transferred by previous pops */ + unknown_othersubr_result_cnt = 0; + break; + } + } + + if ( large_int && !( op == op_none || op == op_div ) ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " no `div' after large integer\n" )); + + large_int = FALSE; + } + + /********************************************************************** + * + * Push value on stack, or process operator + * + */ + if ( op == op_none ) + { + if ( top - decoder->stack >= T1_MAX_CHARSTRINGS_OPERANDS ) + { + FT_ERROR(( "t1_decoder_parse_charstrings: stack overflow\n" )); + goto Syntax_Error; + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( large_int ) + FT_TRACE4(( " %d", value )); + else + FT_TRACE4(( " %d", value / 65536 )); +#endif + + *top++ = value; + decoder->top = top; + } + else if ( op == op_callothersubr ) /* callothersubr */ + { + FT_Int subr_no; + FT_Int arg_cnt; + + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE4(( " callothersubr\n" )); + bol = TRUE; +#endif + + if ( top - decoder->stack < 2 ) + goto Stack_Underflow; + + top -= 2; + + subr_no = Fix2Int( top[1] ); + arg_cnt = Fix2Int( top[0] ); + + /************************************************************ + * + * remove all operands to callothersubr from the stack + * + * for handled othersubrs, where we know the number of + * arguments, we increase the stack by the value of + * known_othersubr_result_cnt + * + * for unhandled othersubrs the following pops adjust the + * stack pointer as necessary + */ + + if ( arg_cnt > top - decoder->stack ) + goto Stack_Underflow; + + top -= arg_cnt; + + known_othersubr_result_cnt = 0; + unknown_othersubr_result_cnt = 0; + + /* XXX TODO: The checks to `arg_count == <whatever>' */ + /* might not be correct; an othersubr expects a certain */ + /* number of operands on the PostScript stack (as opposed */ + /* to the T1 stack) but it doesn't have to put them there */ + /* by itself; previous othersubrs might have left the */ + /* operands there if they were not followed by an */ + /* appropriate number of pops */ + /* */ + /* On the other hand, Adobe Reader 7.0.8 for Linux doesn't */ + /* accept a font that contains charstrings like */ + /* */ + /* 100 200 2 20 callothersubr */ + /* 300 1 20 callothersubr pop */ + /* */ + /* Perhaps this is the reason why BuildCharArray exists. */ + + switch ( subr_no ) + { + case 0: /* end flex feature */ + if ( arg_cnt != 3 ) + goto Unexpected_OtherSubr; + + if ( !decoder->flex_state || + decoder->num_flex_vectors != 7 ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unexpected flex end\n" )); + goto Syntax_Error; + } + + /* the two `results' are popped by the following setcurrentpoint */ + top[0] = x; + top[1] = y; + known_othersubr_result_cnt = 2; + break; + + case 1: /* start flex feature */ + if ( arg_cnt != 0 ) + goto Unexpected_OtherSubr; + + if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) || + FT_SET_ERROR( t1_builder_check_points( builder, 6 ) ) ) + goto Fail; + + decoder->flex_state = 1; + decoder->num_flex_vectors = 0; + break; + + case 2: /* add flex vectors */ + { + FT_Int idx; + + + if ( arg_cnt != 0 ) + goto Unexpected_OtherSubr; + + if ( !decoder->flex_state ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " missing flex start\n" )); + goto Syntax_Error; + } + + /* note that we should not add a point for index 0; */ + /* this will move our current position to the flex */ + /* point without adding any point to the outline */ + idx = decoder->num_flex_vectors++; + if ( idx > 0 && idx < 7 ) + { + /* in malformed fonts it is possible to have other */ + /* opcodes in the middle of a flex (which don't */ + /* increase `num_flex_vectors'); we thus have to */ + /* check whether we can add a point */ + if ( FT_SET_ERROR( t1_builder_check_points( builder, 1 ) ) ) + goto Syntax_Error; + + t1_builder_add_point( builder, + x, + y, + (FT_Byte)( idx == 3 || idx == 6 ) ); + } + } + break; + + case 3: /* change hints */ + if ( arg_cnt != 1 ) + goto Unexpected_OtherSubr; + + known_othersubr_result_cnt = 1; + + if ( hinter ) + hinter->reset( hinter->hints, + (FT_UInt)builder->current->n_points ); + break; + + case 12: + case 13: + /* counter control hints, clear stack */ + top = decoder->stack; + break; + + case 14: + case 15: + case 16: + case 17: + case 18: /* multiple masters */ + { + PS_Blend blend = decoder->blend; + FT_UInt num_points, nn, mm; + FT_Long* delta; + FT_Long* values; + + + if ( !blend ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unexpected multiple masters operator\n" )); + goto Syntax_Error; + } + + num_points = (FT_UInt)subr_no - 13 + ( subr_no == 18 ); + if ( arg_cnt != (FT_Int)( num_points * blend->num_designs ) ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " incorrect number of multiple masters arguments\n" )); + goto Syntax_Error; + } + + /* We want to compute */ + /* */ + /* a0*w0 + a1*w1 + ... + ak*wk */ + /* */ + /* but we only have a0, a1-a0, a2-a0, ..., ak-a0. */ + /* */ + /* However, given that w0 + w1 + ... + wk == 1, we can */ + /* rewrite it easily as */ + /* */ + /* a0 + (a1-a0)*w1 + (a2-a0)*w2 + ... + (ak-a0)*wk */ + /* */ + /* where k == num_designs-1. */ + /* */ + /* I guess that's why it's written in this `compact' */ + /* form. */ + /* */ + delta = top + num_points; + values = top; + for ( nn = 0; nn < num_points; nn++ ) + { + FT_Long tmp = values[0]; + + + for ( mm = 1; mm < blend->num_designs; mm++ ) + tmp = ADD_LONG( tmp, + FT_MulFix( *delta++, + blend->weight_vector[mm] ) ); + + *values++ = tmp; + } + + known_othersubr_result_cnt = (FT_Int)num_points; + break; + } + + case 19: + /* <idx> 1 19 callothersubr */ + /* => replace elements starting from index cvi( <idx> ) */ + /* of BuildCharArray with WeightVector */ + { + FT_Int idx; + PS_Blend blend = decoder->blend; + + + if ( arg_cnt != 1 || !blend ) + goto Unexpected_OtherSubr; + + idx = Fix2Int( top[0] ); + + if ( idx < 0 || + (FT_UInt)idx + blend->num_designs > decoder->len_buildchar ) + goto Unexpected_OtherSubr; + + ft_memcpy( &decoder->buildchar[idx], + blend->weight_vector, + blend->num_designs * + sizeof ( blend->weight_vector[0] ) ); + } + break; + + case 20: + /* <arg1> <arg2> 2 20 callothersubr pop */ + /* ==> push <arg1> + <arg2> onto T1 stack */ + if ( arg_cnt != 2 ) + goto Unexpected_OtherSubr; + + top[0] = ADD_LONG( top[0], top[1] ); + + known_othersubr_result_cnt = 1; + break; + + case 21: + /* <arg1> <arg2> 2 21 callothersubr pop */ + /* ==> push <arg1> - <arg2> onto T1 stack */ + if ( arg_cnt != 2 ) + goto Unexpected_OtherSubr; + + top[0] = SUB_LONG( top[0], top[1] ); + + known_othersubr_result_cnt = 1; + break; + + case 22: + /* <arg1> <arg2> 2 22 callothersubr pop */ + /* ==> push <arg1> * <arg2> onto T1 stack */ + if ( arg_cnt != 2 ) + goto Unexpected_OtherSubr; + + top[0] = FT_MulFix( top[0], top[1] ); + + known_othersubr_result_cnt = 1; + break; + + case 23: + /* <arg1> <arg2> 2 23 callothersubr pop */ + /* ==> push <arg1> / <arg2> onto T1 stack */ + if ( arg_cnt != 2 || top[1] == 0 ) + goto Unexpected_OtherSubr; + + top[0] = FT_DivFix( top[0], top[1] ); + + known_othersubr_result_cnt = 1; + break; + + case 24: + /* <val> <idx> 2 24 callothersubr */ + /* ==> set BuildCharArray[cvi( <idx> )] = <val> */ + { + FT_UInt idx; + PS_Blend blend = decoder->blend; + + + if ( arg_cnt != 2 || !blend ) + goto Unexpected_OtherSubr; + + idx = Fix2UInt( top[1] ); + + if ( idx >= decoder->len_buildchar ) + goto Unexpected_OtherSubr; + + decoder->buildchar[idx] = top[0]; + } + break; + + case 25: + /* <idx> 1 25 callothersubr pop */ + /* ==> push BuildCharArray[cvi( idx )] */ + /* onto T1 stack */ + { + FT_UInt idx; + PS_Blend blend = decoder->blend; + + + if ( arg_cnt != 1 || !blend ) + goto Unexpected_OtherSubr; + + idx = Fix2UInt( top[0] ); + + if ( idx >= decoder->len_buildchar ) + goto Unexpected_OtherSubr; + + top[0] = decoder->buildchar[idx]; + } + + known_othersubr_result_cnt = 1; + break; + +#if 0 + case 26: + /* <val> mark <idx> ==> set BuildCharArray[cvi( <idx> )] = <val>, */ + /* leave mark on T1 stack */ + /* <val> <idx> ==> set BuildCharArray[cvi( <idx> )] = <val> */ + XXX which routine has left its mark on the (PostScript) stack?; + break; +#endif + + case 27: + /* <res1> <res2> <val1> <val2> 4 27 callothersubr pop */ + /* ==> push <res1> onto T1 stack if <val1> <= <val2>, */ + /* otherwise push <res2> */ + if ( arg_cnt != 4 ) + goto Unexpected_OtherSubr; + + if ( top[2] > top[3] ) + top[0] = top[1]; + + known_othersubr_result_cnt = 1; + break; + + case 28: + /* 0 28 callothersubr pop */ + /* => push random value from interval [0, 1) onto stack */ + if ( arg_cnt != 0 ) + goto Unexpected_OtherSubr; + + { + FT_Fixed Rand; + + + Rand = seed; + if ( Rand >= 0x8000L ) + Rand++; + + top[0] = Rand; + + seed = FT_MulFix( seed, 0x10000L - seed ); + if ( seed == 0 ) + seed += 0x2873; + } + + known_othersubr_result_cnt = 1; + break; + + default: + if ( arg_cnt >= 0 && subr_no >= 0 ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unknown othersubr [%d %d], wish me luck\n", + arg_cnt, subr_no )); + unknown_othersubr_result_cnt = arg_cnt; + break; + } + /* fall through */ + + Unexpected_OtherSubr: + FT_ERROR(( "t1_decoder_parse_charstrings:" + " invalid othersubr [%d %d]\n", arg_cnt, subr_no )); + goto Syntax_Error; + } + + top += known_othersubr_result_cnt; + + decoder->top = top; + } + else /* general operator */ + { + FT_Int num_args = t1_args_count[op]; + + + FT_ASSERT( num_args >= 0 ); + + if ( top - decoder->stack < num_args ) + goto Stack_Underflow; + + /* XXX Operators usually take their operands from the */ + /* bottom of the stack, i.e., the operands are */ + /* decoder->stack[0], ..., decoder->stack[num_args - 1]; */ + /* only div, callsubr, and callothersubr are different. */ + /* In practice it doesn't matter (?). */ + +#ifdef FT_DEBUG_LEVEL_TRACE + + switch ( op ) + { + case op_callsubr: + case op_div: + case op_callothersubr: + case op_pop: + case op_return: + break; + + default: + if ( top - decoder->stack != num_args ) + FT_TRACE0(( "t1_decoder_parse_charstrings:" + " too much operands on the stack" + " (seen %td, expected %d)\n", + top - decoder->stack, num_args )); + break; + } + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + top -= num_args; + + switch ( op ) + { + case op_endchar: + FT_TRACE4(( " endchar\n" )); + + t1_builder_close_contour( builder ); + + /* close hints recording session */ + if ( hinter ) + { + if ( hinter->close( hinter->hints, + (FT_UInt)builder->current->n_points ) ) + goto Syntax_Error; + + /* apply hints to the loaded glyph outline now */ + error = hinter->apply( hinter->hints, + builder->current, + (PSH_Globals)builder->hints_globals, + decoder->hint_mode ); + if ( error ) + goto Fail; + } + + /* add current outline to the glyph slot */ + FT_GlyphLoader_Add( builder->loader ); + + /* the compiler should optimize away this empty loop but ... */ + +#ifdef FT_DEBUG_LEVEL_TRACE + + if ( decoder->len_buildchar > 0 ) + { + FT_UInt i; + + + FT_TRACE4(( "BuildCharArray = [ " )); + + for ( i = 0; i < decoder->len_buildchar; i++ ) + FT_TRACE4(( "%ld ", decoder->buildchar[i] )); + + FT_TRACE4(( "]\n" )); + } + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + FT_TRACE4(( "\n" )); + + /* return now! */ + return FT_Err_Ok; + + case op_hsbw: + FT_TRACE4(( " hsbw" )); + + builder->parse_state = T1_Parse_Have_Width; + + builder->left_bearing.x = ADD_LONG( builder->left_bearing.x, + top[0] ); + + builder->advance.x = top[1]; + builder->advance.y = 0; + + orig_x = x = ADD_LONG( builder->pos_x, top[0] ); + orig_y = y = builder->pos_y; + + FT_UNUSED( orig_y ); + + /* `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 ) + { + FT_TRACE4(( "\n" )); + return FT_Err_Ok; + } + + break; + + case op_seac: + return t1operator_seac( decoder, + top[0], + top[1], + top[2], + Fix2Int( top[3] ), + Fix2Int( top[4] ) ); + + case op_sbw: + FT_TRACE4(( " sbw" )); + + builder->parse_state = T1_Parse_Have_Width; + + builder->left_bearing.x = ADD_LONG( builder->left_bearing.x, + top[0] ); + builder->left_bearing.y = ADD_LONG( builder->left_bearing.y, + top[1] ); + + builder->advance.x = top[2]; + builder->advance.y = top[3]; + + x = ADD_LONG( builder->pos_x, top[0] ); + y = ADD_LONG( builder->pos_y, top[1] ); + + /* `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 ) + { + FT_TRACE4(( "\n" )); + return FT_Err_Ok; + } + + break; + + case op_closepath: + FT_TRACE4(( " closepath" )); + + /* if there is no path, `closepath' is a no-op */ + if ( builder->parse_state == T1_Parse_Have_Path || + builder->parse_state == T1_Parse_Have_Moveto ) + t1_builder_close_contour( builder ); + + builder->parse_state = T1_Parse_Have_Width; + break; + + case op_hlineto: + FT_TRACE4(( " hlineto" )); + + if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ) + goto Fail; + + x = ADD_LONG( x, top[0] ); + goto Add_Line; + + case op_hmoveto: + FT_TRACE4(( " hmoveto" )); + + x = ADD_LONG( x, top[0] ); + + if ( !decoder->flex_state ) + { + if ( builder->parse_state == T1_Parse_Start ) + goto Syntax_Error; + builder->parse_state = T1_Parse_Have_Moveto; + } + break; + + case op_hvcurveto: + FT_TRACE4(( " hvcurveto" )); + + if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) || + FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) ) + goto Fail; + + x = ADD_LONG( x, top[0] ); + t1_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, top[1] ); + y = ADD_LONG( y, top[2] ); + t1_builder_add_point( builder, x, y, 0 ); + + y = ADD_LONG( y, top[3] ); + t1_builder_add_point( builder, x, y, 1 ); + break; + + case op_rlineto: + FT_TRACE4(( " rlineto" )); + + if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ) + goto Fail; + + x = ADD_LONG( x, top[0] ); + y = ADD_LONG( y, top[1] ); + + Add_Line: + if ( FT_SET_ERROR( t1_builder_add_point1( builder, x, y ) ) ) + goto Fail; + break; + + case op_rmoveto: + FT_TRACE4(( " rmoveto" )); + + x = ADD_LONG( x, top[0] ); + y = ADD_LONG( y, top[1] ); + + if ( !decoder->flex_state ) + { + if ( builder->parse_state == T1_Parse_Start ) + goto Syntax_Error; + builder->parse_state = T1_Parse_Have_Moveto; + } + break; + + case op_rrcurveto: + FT_TRACE4(( " rrcurveto" )); + + if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) || + FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) ) + goto Fail; + + x = ADD_LONG( x, top[0] ); + y = ADD_LONG( y, top[1] ); + t1_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, top[2] ); + y = ADD_LONG( y, top[3] ); + t1_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, top[4] ); + y = ADD_LONG( y, top[5] ); + t1_builder_add_point( builder, x, y, 1 ); + break; + + case op_vhcurveto: + FT_TRACE4(( " vhcurveto" )); + + if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) || + FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) ) + goto Fail; + + y = ADD_LONG( y, top[0] ); + t1_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, top[1] ); + y = ADD_LONG( y, top[2] ); + t1_builder_add_point( builder, x, y, 0 ); + + x = ADD_LONG( x, top[3] ); + t1_builder_add_point( builder, x, y, 1 ); + break; + + case op_vlineto: + FT_TRACE4(( " vlineto" )); + + if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ) + goto Fail; + + y = ADD_LONG( y, top[0] ); + goto Add_Line; + + case op_vmoveto: + FT_TRACE4(( " vmoveto" )); + + y = ADD_LONG( y, top[0] ); + + if ( !decoder->flex_state ) + { + if ( builder->parse_state == T1_Parse_Start ) + goto Syntax_Error; + builder->parse_state = T1_Parse_Have_Moveto; + } + break; + + case op_div: + FT_TRACE4(( " div" )); + + /* if `large_int' is set, we divide unscaled numbers; */ + /* otherwise, we divide numbers in 16.16 format -- */ + /* in both cases, it is the same operation */ + *top = FT_DivFix( top[0], top[1] ); + top++; + + large_int = FALSE; + break; + + case op_callsubr: + { + FT_Int idx; + + + FT_TRACE4(( " callsubr" )); + + idx = Fix2Int( top[0] ); + + if ( decoder->subrs_hash ) + { + size_t* val = ft_hash_num_lookup( idx, + decoder->subrs_hash ); + + + if ( val ) + idx = *val; + else + idx = -1; + } + + if ( idx < 0 || idx >= decoder->num_subrs ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " invalid subrs index\n" )); + goto Syntax_Error; + } + + if ( zone - decoder->zones >= T1_MAX_SUBRS_CALLS ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " too many nested subrs\n" )); + goto Syntax_Error; + } + + zone->cursor = ip; /* save current instruction pointer */ + + zone++; + + /* The Type 1 driver stores subroutines without the seed bytes. */ + /* The CID driver stores subroutines with seed bytes. This */ + /* case is taken care of when decoder->subrs_len == 0. */ + zone->base = decoder->subrs[idx]; + + if ( decoder->subrs_len ) + zone->limit = zone->base + decoder->subrs_len[idx]; + else + { + /* We are using subroutines from a CID font. We must adjust */ + /* for the seed bytes. */ + zone->base += ( decoder->lenIV >= 0 ? decoder->lenIV : 0 ); + zone->limit = decoder->subrs[idx + 1]; + } + + zone->cursor = zone->base; + + if ( !zone->base ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " invoking empty subrs\n" )); + goto Syntax_Error; + } + + decoder->zone = zone; + ip = zone->base; + limit = zone->limit; + break; + } + + case op_pop: + FT_TRACE4(( " pop" )); + + if ( known_othersubr_result_cnt > 0 ) + { + known_othersubr_result_cnt--; + /* ignore, we pushed the operands ourselves */ + break; + } + + if ( unknown_othersubr_result_cnt == 0 ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " no more operands for othersubr\n" )); + goto Syntax_Error; + } + + unknown_othersubr_result_cnt--; + top++; /* `push' the operand to callothersubr onto the stack */ + break; + + case op_return: + FT_TRACE4(( " return" )); + + if ( zone <= decoder->zones ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unexpected return\n" )); + goto Syntax_Error; + } + + zone--; + ip = zone->cursor; + limit = zone->limit; + decoder->zone = zone; + break; + + case op_dotsection: + FT_TRACE4(( " dotsection" )); + + break; + + case op_hstem: + FT_TRACE4(( " hstem" )); + + /* record horizontal hint */ + if ( hinter ) + { + /* top[0] += builder->left_bearing.y; */ + hinter->stem( hinter->hints, 1, top ); + } + break; + + case op_hstem3: + FT_TRACE4(( " hstem3" )); + + /* record horizontal counter-controlled hints */ + if ( hinter ) + hinter->stem3( hinter->hints, 1, top ); + break; + + case op_vstem: + FT_TRACE4(( " vstem" )); + + /* record vertical hint */ + if ( hinter ) + { + top[0] = ADD_LONG( top[0], orig_x ); + hinter->stem( hinter->hints, 0, top ); + } + break; + + case op_vstem3: + FT_TRACE4(( " vstem3" )); + + /* record vertical counter-controlled hints */ + if ( hinter ) + { + FT_Pos dx = orig_x; + + + top[0] = ADD_LONG( top[0], dx ); + top[2] = ADD_LONG( top[2], dx ); + top[4] = ADD_LONG( top[4], dx ); + hinter->stem3( hinter->hints, 0, top ); + } + break; + + case op_setcurrentpoint: + FT_TRACE4(( " setcurrentpoint" )); + + /* From the T1 specification, section 6.4: */ + /* */ + /* The setcurrentpoint command is used only in */ + /* conjunction with results from OtherSubrs procedures. */ + + /* known_othersubr_result_cnt != 0 is already handled */ + /* above. */ + + /* Note, however, that both Ghostscript and Adobe */ + /* Distiller handle this situation by silently ignoring */ + /* the inappropriate `setcurrentpoint' instruction. So */ + /* we do the same. */ +#if 0 + + if ( decoder->flex_state != 1 ) + { + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unexpected `setcurrentpoint'\n" )); + goto Syntax_Error; + } + else + ... +#endif + + x = top[0]; + y = top[1]; + decoder->flex_state = 0; + break; + + case op_unknown15: + FT_TRACE4(( " opcode_15" )); + /* nothing to do except to pop the two arguments */ + break; + + default: + FT_ERROR(( "t1_decoder_parse_charstrings:" + " unhandled opcode %d\n", op )); + goto Syntax_Error; + } + + /* XXX Operators usually clear the operand stack; */ + /* only div, callsubr, callothersubr, pop, and */ + /* return are different. */ + /* In practice it doesn't matter (?). */ + + decoder->top = top; + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_TRACE4(( "\n" )); + bol = TRUE; +#endif + + } /* general operator processing */ + + } /* while ip < limit */ + + FT_TRACE4(( "..end..\n" )); + FT_TRACE4(( "\n" )); + + Fail: + return error; + + Syntax_Error: + return FT_THROW( Syntax_Error ); + + Stack_Underflow: + return FT_THROW( Stack_Underflow ); + } + + +#else /* !T1_CONFIG_OPTION_OLD_ENGINE */ + + + /************************************************************************** + * + * @Function: + * t1_decoder_parse_metrics + * + * @Description: + * Parses a given Type 1 charstrings program to extract width + * + * @Input: + * decoder :: + * The current Type 1 decoder. + * + * charstring_base :: + * The base address of the charstring stream. + * + * charstring_len :: + * The length in bytes of the charstring stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + t1_decoder_parse_metrics( T1_Decoder decoder, + FT_Byte* charstring_base, + FT_UInt charstring_len ) + { + T1_Decoder_Zone zone; + FT_Byte* ip; + FT_Byte* limit; + T1_Builder builder = &decoder->builder; + FT_Bool large_int; + +#ifdef FT_DEBUG_LEVEL_TRACE + FT_Bool bol = TRUE; +#endif + + + /* First of all, initialize the decoder */ + decoder->top = decoder->stack; + decoder->zone = decoder->zones; + zone = decoder->zones; + + builder->parse_state = T1_Parse_Start; + + zone->base = charstring_base; + limit = zone->limit = charstring_base + charstring_len; + ip = zone->cursor = zone->base; + + large_int = FALSE; + + /* now, execute loop */ + while ( ip < limit ) + { + FT_Long* top = decoder->top; + T1_Operator op = op_none; + FT_Int32 value = 0; + + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( bol ) + { + FT_TRACE5(( " (%ld)", decoder->top - decoder->stack )); + bol = FALSE; + } +#endif + + /********************************************************************** + * + * Decode operator or operand + * + */ + + /* first of all, decompress operator or value */ + switch ( *ip++ ) + { + case 1: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 14: + case 15: + case 21: + case 22: + case 30: + case 31: + goto No_Width; + + case 10: + op = op_callsubr; + break; + case 11: + op = op_return; + break; + + case 13: + op = op_hsbw; + break; + + case 12: + if ( ip >= limit ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " invalid escape (12+EOF)\n" )); + goto Syntax_Error; + } + + switch ( *ip++ ) + { + case 7: + op = op_sbw; + break; + case 12: + op = op_div; + break; + + default: + goto No_Width; + } + break; + + case 255: /* four bytes integer */ + if ( ip + 4 > limit ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " unexpected EOF in integer\n" )); + goto Syntax_Error; + } + + value = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) | + ( (FT_UInt32)ip[1] << 16 ) | + ( (FT_UInt32)ip[2] << 8 ) | + (FT_UInt32)ip[3] ); + ip += 4; + + /* According to the specification, values > 32000 or < -32000 must */ + /* be followed by a `div' operator to make the result be in the */ + /* range [-32000;32000]. We expect that the second argument of */ + /* `div' is not a large number. Additionally, we don't handle */ + /* stuff like `<large1> <large2> <num> div <num> div' or */ + /* <large1> <large2> <num> div div'. This is probably not allowed */ + /* anyway. */ + if ( value > 32000 || value < -32000 ) + { + if ( large_int ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " no `div' after large integer\n" )); + goto Syntax_Error; + } + else + large_int = TRUE; + } + else + { + if ( !large_int ) + value = (FT_Int32)( (FT_UInt32)value << 16 ); + } + + break; + + default: + if ( ip[-1] >= 32 ) + { + if ( ip[-1] < 247 ) + value = (FT_Int32)ip[-1] - 139; + else + { + if ( ++ip > limit ) + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " unexpected EOF in integer\n" )); + goto Syntax_Error; + } + + if ( ip[-2] < 251 ) + value = ( ( ip[-2] - 247 ) * 256 ) + ip[-1] + 108; + else + value = -( ( ( ip[-2] - 251 ) * 256 ) + ip[-1] + 108 ); + } + + if ( !large_int ) + value = (FT_Int32)( (FT_UInt32)value << 16 ); + } + else + { + FT_ERROR(( "t1_decoder_parse_metrics:" + " invalid byte (%d)\n", ip[-1] )); + goto Syntax_Error; + } + } + + 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 + * + */ + if ( op == op_none ) + { + if ( top - decoder->stack >= T1_MAX_CHARSTRINGS_OPERANDS ) + { + FT_ERROR(( "t1_decoder_parse_metrics: stack overflow\n" )); + goto Syntax_Error; + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( large_int ) + FT_TRACE4(( " %d", value )); + else + FT_TRACE4(( " %d", value / 65536 )); +#endif + + *top++ = value; + decoder->top = top; + } + else /* general operator */ + { + FT_Int num_args = t1_args_count[op]; + + + FT_ASSERT( num_args >= 0 ); + + if ( top - decoder->stack < num_args ) + goto Stack_Underflow; + +#ifdef FT_DEBUG_LEVEL_TRACE + + 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 */ + + top -= num_args; + + switch ( op ) + { + case op_hsbw: + FT_TRACE4(( " hsbw" )); + + builder->parse_state = T1_Parse_Have_Width; + + builder->left_bearing.x = ADD_LONG( builder->left_bearing.x, + top[0] ); + + builder->advance.x = top[1]; + builder->advance.y = 0; + + /* we only want to compute the glyph's metrics */ + /* (lsb + advance width) without loading the */ + /* rest of it; so exit immediately */ + FT_TRACE4(( "\n" )); + return FT_Err_Ok; + + case op_sbw: + FT_TRACE4(( " sbw" )); + + builder->parse_state = T1_Parse_Have_Width; + + builder->left_bearing.x = ADD_LONG( builder->left_bearing.x, + top[0] ); + builder->left_bearing.y = ADD_LONG( builder->left_bearing.y, + top[1] ); + + builder->advance.x = top[2]; + builder->advance.y = top[3]; + + /* we only want to compute the glyph's metrics */ + /* (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 */ + + FT_TRACE4(( "..end..\n" )); + FT_TRACE4(( "\n" )); + + No_Width: + FT_ERROR(( "t1_decoder_parse_metrics:" + " no width, found op %d instead\n", + ip[-1] )); + Syntax_Error: + return FT_THROW( Syntax_Error ); + + Stack_Underflow: + return FT_THROW( Stack_Underflow ); + } + +#endif /* !T1_CONFIG_OPTION_OLD_ENGINE */ + + + /* initialize T1 decoder */ + FT_LOCAL_DEF( FT_Error ) + t1_decoder_init( T1_Decoder decoder, + FT_Face face, + FT_Size size, + FT_GlyphSlot slot, + FT_Byte** glyph_names, + PS_Blend blend, + FT_Bool hinting, + FT_Render_Mode hint_mode, + T1_Decoder_Callback parse_callback ) + { + FT_ZERO( decoder ); + + /* retrieve `psnames' interface from list of current modules */ + { + FT_Service_PsCMaps psnames; + + + FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS ); + if ( !psnames ) + { + FT_ERROR(( "t1_decoder_init:" + " the `psnames' module is not available\n" )); + return FT_THROW( Unimplemented_Feature ); + } + + decoder->psnames = psnames; + } + + t1_builder_init( &decoder->builder, face, size, slot, hinting ); + + /* decoder->buildchar and decoder->len_buildchar have to be */ + /* initialized by the caller since we cannot know the length */ + /* of the BuildCharArray */ + + decoder->num_glyphs = (FT_UInt)face->num_glyphs; + decoder->glyph_names = glyph_names; + decoder->hint_mode = hint_mode; + decoder->blend = blend; + decoder->parse_callback = parse_callback; + + decoder->funcs = t1_decoder_funcs; + + return FT_Err_Ok; + } + + + /* finalize T1 decoder */ + FT_LOCAL_DEF( void ) + t1_decoder_done( T1_Decoder decoder ) + { + FT_Memory memory = decoder->builder.memory; + + + t1_builder_done( &decoder->builder ); + + if ( decoder->cf2_instance.finalizer ) + { + decoder->cf2_instance.finalizer( decoder->cf2_instance.data ); + FT_FREE( decoder->cf2_instance.data ); + } + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psaux/t1decode.h b/non-source/foreign/freetype2/src/psaux/t1decode.h new file mode 100644 index 000000000..16203b8f7 --- /dev/null +++ b/non-source/foreign/freetype2/src/psaux/t1decode.h @@ -0,0 +1,73 @@ +/**************************************************************************** + * + * t1decode.h + * + * PostScript Type 1 decoding routines (specification). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef T1DECODE_H_ +#define T1DECODE_H_ + + +#include <freetype/internal/psaux.h> +#include <freetype/internal/t1types.h> + + +FT_BEGIN_HEADER + + + FT_CALLBACK_TABLE + const T1_Decoder_FuncsRec t1_decoder_funcs; + + FT_LOCAL( FT_Int ) + t1_lookup_glyph_by_stdcharcode_ps( PS_Decoder* decoder, + FT_Int charcode ); + +#ifdef T1_CONFIG_OPTION_OLD_ENGINE + FT_LOCAL( FT_Error ) + t1_decoder_parse_glyph( T1_Decoder decoder, + FT_UInt glyph_index ); + + FT_LOCAL( FT_Error ) + t1_decoder_parse_charstrings( T1_Decoder decoder, + FT_Byte* base, + FT_UInt len ); +#else + FT_LOCAL( FT_Error ) + t1_decoder_parse_metrics( T1_Decoder decoder, + FT_Byte* charstring_base, + FT_UInt charstring_len ); +#endif + + FT_LOCAL( FT_Error ) + t1_decoder_init( T1_Decoder decoder, + FT_Face face, + FT_Size size, + FT_GlyphSlot slot, + FT_Byte** glyph_names, + PS_Blend blend, + FT_Bool hinting, + FT_Render_Mode hint_mode, + T1_Decoder_Callback parse_glyph ); + + FT_LOCAL( void ) + t1_decoder_done( T1_Decoder decoder ); + + +FT_END_HEADER + +#endif /* T1DECODE_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshalgo.c b/non-source/foreign/freetype2/src/pshinter/pshalgo.c new file mode 100644 index 000000000..967767b34 --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshalgo.c @@ -0,0 +1,2191 @@ +/**************************************************************************** + * + * pshalgo.c + * + * PostScript hinting algorithm (body). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used + * modified and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftcalc.h> +#include "pshalgo.h" + +#include "pshnterr.h" + + +#undef FT_COMPONENT +#define FT_COMPONENT pshalgo + + +#ifdef DEBUG_HINTER + PSH_Hint_Table ps_debug_hint_table = NULL; + PSH_HintFunc ps_debug_hint_func = NULL; + PSH_Glyph ps_debug_glyph = NULL; +#endif + + +#define COMPUTE_INFLEXS /* compute inflection points to optimize `S' */ + /* and similar glyphs */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** BASIC HINTS RECORDINGS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* return true if two stem hints overlap */ + static FT_Int + psh_hint_overlap( PSH_Hint hint1, + PSH_Hint hint2 ) + { + return ADD_INT( hint1->org_pos, hint1->org_len ) >= hint2->org_pos && + ADD_INT( hint2->org_pos, hint2->org_len ) >= hint1->org_pos; + } + + + /* destroy hints table */ + static void + psh_hint_table_done( PSH_Hint_Table table, + FT_Memory memory ) + { + FT_FREE( table->zones ); + table->num_zones = 0; + table->zone = NULL; + + FT_FREE( table->sort ); + FT_FREE( table->hints ); + table->num_hints = 0; + table->max_hints = 0; + table->sort_global = NULL; + } + + + /* deactivate all hints in a table */ + static void + psh_hint_table_deactivate( PSH_Hint_Table table ) + { + FT_UInt count = table->max_hints; + PSH_Hint hint = table->hints; + + + for ( ; count > 0; count--, hint++ ) + { + psh_hint_deactivate( hint ); + hint->order = -1; + } + } + + + /* internal function to record a new hint */ + static void + psh_hint_table_record( PSH_Hint_Table table, + FT_UInt idx ) + { + PSH_Hint hint = table->hints + idx; + + + if ( idx >= table->max_hints ) + { + FT_TRACE0(( "psh_hint_table_record: invalid hint index %d\n", idx )); + return; + } + + /* ignore active hints */ + if ( psh_hint_is_active( hint ) ) + return; + + psh_hint_activate( hint ); + + /* now scan the current active hint set to check */ + /* whether `hint' overlaps with another hint */ + { + PSH_Hint* sorted = table->sort_global; + FT_UInt count = table->num_hints; + PSH_Hint hint2; + + + hint->parent = NULL; + for ( ; count > 0; count--, sorted++ ) + { + hint2 = sorted[0]; + + if ( psh_hint_overlap( hint, hint2 ) ) + { + hint->parent = hint2; + break; + } + } + } + + if ( table->num_hints < table->max_hints ) + table->sort_global[table->num_hints++] = hint; + else + FT_TRACE0(( "psh_hint_table_record: too many sorted hints! BUG!\n" )); + } + + + static void + psh_hint_table_record_mask( PSH_Hint_Table table, + PS_Mask hint_mask ) + { + FT_Int mask = 0, val = 0; + FT_Byte* cursor = hint_mask->bytes; + FT_UInt idx, limit; + + + limit = hint_mask->num_bits; + + for ( idx = 0; idx < limit; idx++ ) + { + if ( mask == 0 ) + { + val = *cursor++; + mask = 0x80; + } + + if ( val & mask ) + psh_hint_table_record( table, idx ); + + mask >>= 1; + } + } + + + /* create hints table */ + static FT_Error + psh_hint_table_init( PSH_Hint_Table table, + PS_Hint_Table hints, + PS_Mask_Table hint_masks, + PS_Mask_Table counter_masks, + FT_Memory memory ) + { + FT_UInt count; + FT_Error error; + + FT_UNUSED( counter_masks ); + + + count = hints->num_hints; + + /* allocate our tables */ + if ( FT_QNEW_ARRAY( table->sort, 2 * count ) || + FT_QNEW_ARRAY( table->hints, count ) || + FT_QNEW_ARRAY( table->zones, 2 * count + 1 ) ) + goto Exit; + + table->max_hints = count; + table->sort_global = FT_OFFSET( table->sort, count ); + table->num_hints = 0; + table->num_zones = 0; + table->zone = NULL; + + /* initialize the `table->hints' array */ + { + PSH_Hint write = table->hints; + PS_Hint read = hints->hints; + + + for ( ; count > 0; count--, write++, read++ ) + { + write->org_pos = read->pos; + write->org_len = read->len; + write->flags = read->flags; + } + } + + /* we now need to determine the initial `parent' stems; first */ + /* activate the hints that are given by the initial hint masks */ + if ( hint_masks ) + { + PS_Mask mask = hint_masks->masks; + + + count = hint_masks->num_masks; + table->hint_masks = hint_masks; + + for ( ; count > 0; count--, mask++ ) + psh_hint_table_record_mask( table, mask ); + } + + /* finally, do a linear parse in case some hints were left alone */ + if ( table->num_hints != table->max_hints ) + { + FT_UInt idx; + + + FT_TRACE0(( "psh_hint_table_init: missing/incorrect hint masks\n" )); + + count = table->max_hints; + for ( idx = 0; idx < count; idx++ ) + psh_hint_table_record( table, idx ); + } + + Exit: + return error; + } + + + static void + psh_hint_table_activate_mask( PSH_Hint_Table table, + PS_Mask hint_mask ) + { + FT_Int mask = 0, val = 0; + FT_Byte* cursor = hint_mask->bytes; + FT_UInt idx, limit, count; + + + limit = hint_mask->num_bits; + count = 0; + + psh_hint_table_deactivate( table ); + + for ( idx = 0; idx < limit; idx++ ) + { + if ( mask == 0 ) + { + val = *cursor++; + mask = 0x80; + } + + if ( val & mask ) + { + PSH_Hint hint = &table->hints[idx]; + + + if ( !psh_hint_is_active( hint ) ) + { + FT_UInt count2; + +#if 0 + PSH_Hint* sort = table->sort; + PSH_Hint hint2; + + + for ( count2 = count; count2 > 0; count2--, sort++ ) + { + hint2 = sort[0]; + if ( psh_hint_overlap( hint, hint2 ) ) + FT_TRACE0(( "psh_hint_table_activate_mask:" + " found overlapping hints\n" )) + } +#else + count2 = 0; +#endif + + if ( count2 == 0 ) + { + psh_hint_activate( hint ); + if ( count < table->max_hints ) + table->sort[count++] = hint; + else + FT_TRACE0(( "psh_hint_tableactivate_mask:" + " too many active hints\n" )); + } + } + } + + mask >>= 1; + } + table->num_hints = count; + + /* now, sort the hints; they are guaranteed to not overlap */ + /* so we can compare their "org_pos" field directly */ + { + FT_UInt i1, i2; + PSH_Hint hint1, hint2; + PSH_Hint* sort = table->sort; + + + /* a simple bubble sort will do, since in 99% of cases, the hints */ + /* will be already sorted -- and the sort will be linear */ + for ( i1 = 1; i1 < count; i1++ ) + { + hint1 = sort[i1]; + /* this loop stops when i2 wraps around after reaching 0 */ + for ( i2 = i1 - 1; i2 < i1; i2-- ) + { + hint2 = sort[i2]; + + if ( hint2->org_pos < hint1->org_pos ) + break; + + sort[i2 + 1] = hint2; + sort[i2] = hint1; + } + } + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** HINTS GRID-FITTING AND OPTIMIZATION *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + +#if 1 + static FT_Pos + psh_dimension_quantize_len( PSH_Dimension dim, + FT_Pos len, + FT_Bool do_snapping ) + { + if ( len <= 64 ) + len = 64; + else + { + FT_Pos delta = len - dim->stdw.widths[0].cur; + + + if ( delta < 0 ) + delta = -delta; + + if ( delta < 40 ) + { + len = dim->stdw.widths[0].cur; + if ( len < 48 ) + len = 48; + } + + if ( len < 3 * 64 ) + { + delta = ( len & 63 ); + len &= -64; + + if ( delta < 10 ) + len += delta; + + else if ( delta < 32 ) + len += 10; + + else if ( delta < 54 ) + len += 54; + + else + len += delta; + } + else + len = FT_PIX_ROUND( len ); + } + + if ( do_snapping ) + len = FT_PIX_ROUND( len ); + + return len; + } +#endif /* 0 */ + + +#ifdef DEBUG_HINTER + + static void + ps_simple_scale( PSH_Hint_Table table, + FT_Fixed scale, + FT_Fixed delta, + FT_Int dimension ) + { + FT_UInt count; + + + for ( count = 0; count < table->max_hints; count++ ) + { + PSH_Hint hint = table->hints + count; + + + hint->cur_pos = FT_MulFix( hint->org_pos, scale ) + delta; + hint->cur_len = FT_MulFix( hint->org_len, scale ); + + if ( ps_debug_hint_func ) + ps_debug_hint_func( hint, dimension ); + } + } + +#endif /* DEBUG_HINTER */ + + + static FT_Fixed + psh_hint_snap_stem_side_delta( FT_Fixed pos, + FT_Fixed len ) + { + FT_Fixed delta1 = FT_PIX_ROUND( pos ) - pos; + FT_Fixed delta2 = FT_PIX_ROUND( pos + len ) - pos - len; + + + if ( FT_ABS( delta1 ) <= FT_ABS( delta2 ) ) + return delta1; + else + return delta2; + } + + + static void + psh_hint_align( PSH_Hint hint, + PSH_Globals globals, + FT_Int dimension, + PSH_Glyph glyph ) + { + PSH_Dimension dim = &globals->dimension[dimension]; + FT_Fixed scale = dim->scale_mult; + FT_Fixed delta = dim->scale_delta; + + + if ( !psh_hint_is_fitted( hint ) ) + { + FT_Pos pos = FT_MulFix( hint->org_pos, scale ) + delta; + FT_Pos len = FT_MulFix( hint->org_len, scale ); + + FT_Int do_snapping; + FT_Pos fit_len; + PSH_AlignmentRec align; + + + /* ignore stem alignments when requested through the hint flags */ + if ( ( dimension == 0 && !glyph->do_horz_hints ) || + ( dimension == 1 && !glyph->do_vert_hints ) ) + { + hint->cur_pos = pos; + hint->cur_len = len; + + psh_hint_set_fitted( hint ); + return; + } + + /* perform stem snapping when requested - this is necessary + * for monochrome and LCD hinting modes only + */ + do_snapping = ( dimension == 0 && glyph->do_horz_snapping ) || + ( dimension == 1 && glyph->do_vert_snapping ); + + hint->cur_len = fit_len = len; + + /* check blue zones for horizontal stems */ + align.align = PSH_BLUE_ALIGN_NONE; + align.align_bot = align.align_top = 0; + + if ( dimension == 1 ) + psh_blues_snap_stem( &globals->blues, + ADD_INT( hint->org_pos, hint->org_len ), + hint->org_pos, + &align ); + + switch ( align.align ) + { + case PSH_BLUE_ALIGN_TOP: + /* the top of the stem is aligned against a blue zone */ + hint->cur_pos = align.align_top - fit_len; + break; + + case PSH_BLUE_ALIGN_BOT: + /* the bottom of the stem is aligned against a blue zone */ + hint->cur_pos = align.align_bot; + break; + + case PSH_BLUE_ALIGN_TOP | PSH_BLUE_ALIGN_BOT: + /* both edges of the stem are aligned against blue zones */ + hint->cur_pos = align.align_bot; + hint->cur_len = align.align_top - align.align_bot; + break; + + default: + { + PSH_Hint parent = hint->parent; + + + if ( parent ) + { + FT_Pos par_org_center, par_cur_center; + FT_Pos cur_org_center, cur_delta; + + + /* ensure that parent is already fitted */ + if ( !psh_hint_is_fitted( parent ) ) + psh_hint_align( parent, globals, dimension, glyph ); + + /* keep original relation between hints, that is, use the */ + /* scaled distance between the centers of the hints to */ + /* compute the new position */ + par_org_center = parent->org_pos + ( parent->org_len >> 1 ); + par_cur_center = parent->cur_pos + ( parent->cur_len >> 1 ); + cur_org_center = hint->org_pos + ( hint->org_len >> 1 ); + + cur_delta = FT_MulFix( cur_org_center - par_org_center, scale ); + pos = par_cur_center + cur_delta - ( len >> 1 ); + } + + hint->cur_pos = pos; + hint->cur_len = fit_len; + + /* Stem adjustment tries to snap stem widths to standard + * ones. This is important to prevent unpleasant rounding + * artefacts. + */ + if ( glyph->do_stem_adjust ) + { + if ( len <= 64 ) + { + /* the stem is less than one pixel; we will center it + * around the nearest pixel center + */ + if ( len >= 32 ) + { + /* This is a special case where we also widen the stem + * and align it to the pixel grid. + * + * stem_center = pos + (len/2) + * nearest_pixel_center = FT_ROUND(stem_center-32)+32 + * new_pos = nearest_pixel_center-32 + * = FT_ROUND(stem_center-32) + * = FT_FLOOR(stem_center-32+32) + * = FT_FLOOR(stem_center) + * new_len = 64 + */ + pos = FT_PIX_FLOOR( pos + ( len >> 1 ) ); + len = 64; + } + else if ( len > 0 ) + { + /* This is a very small stem; we simply align it to the + * pixel grid, trying to find the minimum displacement. + * + * left = pos + * right = pos + len + * left_nearest_edge = ROUND(pos) + * right_nearest_edge = ROUND(right) + * + * if ( ABS(left_nearest_edge - left) <= + * ABS(right_nearest_edge - right) ) + * new_pos = left + * else + * new_pos = right + */ + FT_Pos left_nearest = FT_PIX_ROUND( pos ); + FT_Pos right_nearest = FT_PIX_ROUND( pos + len ); + FT_Pos left_disp = left_nearest - pos; + FT_Pos right_disp = right_nearest - ( pos + len ); + + + if ( left_disp < 0 ) + left_disp = -left_disp; + if ( right_disp < 0 ) + right_disp = -right_disp; + if ( left_disp <= right_disp ) + pos = left_nearest; + else + pos = right_nearest; + } + else + { + /* this is a ghost stem; we simply round it */ + pos = FT_PIX_ROUND( pos ); + } + } + else + { + len = psh_dimension_quantize_len( dim, len, 0 ); + } + } + + /* now that we have a good hinted stem width, try to position */ + /* the stem along a pixel grid integer coordinate */ + hint->cur_pos = pos + psh_hint_snap_stem_side_delta( pos, len ); + hint->cur_len = len; + } + } + + if ( do_snapping ) + { + pos = hint->cur_pos; + len = hint->cur_len; + + if ( len < 64 ) + len = 64; + else + len = FT_PIX_ROUND( len ); + + switch ( align.align ) + { + case PSH_BLUE_ALIGN_TOP: + hint->cur_pos = align.align_top - len; + hint->cur_len = len; + break; + + case PSH_BLUE_ALIGN_BOT: + hint->cur_len = len; + break; + + case PSH_BLUE_ALIGN_BOT | PSH_BLUE_ALIGN_TOP: + /* don't touch */ + break; + + + default: + hint->cur_len = len; + if ( len & 64 ) + pos = FT_PIX_FLOOR( pos + ( len >> 1 ) ) + 32; + else + pos = FT_PIX_ROUND( pos + ( len >> 1 ) ); + + hint->cur_pos = pos - ( len >> 1 ); + hint->cur_len = len; + } + } + + psh_hint_set_fitted( hint ); + +#ifdef DEBUG_HINTER + if ( ps_debug_hint_func ) + ps_debug_hint_func( hint, dimension ); +#endif + } + } + + +#if 0 /* not used for now, experimental */ + + /* + * A variant to perform "light" hinting (i.e. FT_RENDER_MODE_LIGHT) + * of stems + */ + static void + psh_hint_align_light( PSH_Hint hint, + PSH_Globals globals, + FT_Int dimension, + PSH_Glyph glyph ) + { + PSH_Dimension dim = &globals->dimension[dimension]; + FT_Fixed scale = dim->scale_mult; + FT_Fixed delta = dim->scale_delta; + + + if ( !psh_hint_is_fitted( hint ) ) + { + FT_Pos pos = FT_MulFix( hint->org_pos, scale ) + delta; + FT_Pos len = FT_MulFix( hint->org_len, scale ); + + FT_Pos fit_len; + + PSH_AlignmentRec align; + + + /* ignore stem alignments when requested through the hint flags */ + if ( ( dimension == 0 && !glyph->do_horz_hints ) || + ( dimension == 1 && !glyph->do_vert_hints ) ) + { + hint->cur_pos = pos; + hint->cur_len = len; + + psh_hint_set_fitted( hint ); + return; + } + + fit_len = len; + + hint->cur_len = fit_len; + + /* check blue zones for horizontal stems */ + align.align = PSH_BLUE_ALIGN_NONE; + align.align_bot = align.align_top = 0; + + if ( dimension == 1 ) + psh_blues_snap_stem( &globals->blues, + ADD_INT( hint->org_pos, hint->org_len ), + hint->org_pos, + &align ); + + switch ( align.align ) + { + case PSH_BLUE_ALIGN_TOP: + /* the top of the stem is aligned against a blue zone */ + hint->cur_pos = align.align_top - fit_len; + break; + + case PSH_BLUE_ALIGN_BOT: + /* the bottom of the stem is aligned against a blue zone */ + hint->cur_pos = align.align_bot; + break; + + case PSH_BLUE_ALIGN_TOP | PSH_BLUE_ALIGN_BOT: + /* both edges of the stem are aligned against blue zones */ + hint->cur_pos = align.align_bot; + hint->cur_len = align.align_top - align.align_bot; + break; + + default: + { + PSH_Hint parent = hint->parent; + + + if ( parent ) + { + FT_Pos par_org_center, par_cur_center; + FT_Pos cur_org_center, cur_delta; + + + /* ensure that parent is already fitted */ + if ( !psh_hint_is_fitted( parent ) ) + psh_hint_align_light( parent, globals, dimension, glyph ); + + par_org_center = parent->org_pos + ( parent->org_len / 2 ); + par_cur_center = parent->cur_pos + ( parent->cur_len / 2 ); + cur_org_center = hint->org_pos + ( hint->org_len / 2 ); + + cur_delta = FT_MulFix( cur_org_center - par_org_center, scale ); + pos = par_cur_center + cur_delta - ( len >> 1 ); + } + + /* Stems less than one pixel wide are easy -- we want to + * make them as dark as possible, so they must fall within + * one pixel. If the stem is split between two pixels + * then snap the edge that is nearer to the pixel boundary + * to the pixel boundary. + */ + if ( len <= 64 ) + { + if ( ( pos + len + 63 ) / 64 != pos / 64 + 1 ) + pos += psh_hint_snap_stem_side_delta ( pos, len ); + } + + /* Position stems other to minimize the amount of mid-grays. + * There are, in general, two positions that do this, + * illustrated as A) and B) below. + * + * + + + + + * + * A) |--------------------------------| + * B) |--------------------------------| + * C) |--------------------------------| + * + * Position A) (split the excess stem equally) should be better + * for stems of width N + f where f < 0.5. + * + * Position B) (split the deficiency equally) should be better + * for stems of width N + f where f > 0.5. + * + * It turns out though that minimizing the total number of lit + * pixels is also important, so position C), with one edge + * aligned with a pixel boundary is actually preferable + * to A). There are also more possible positions for C) than + * for A) or B), so it involves less distortion of the overall + * character shape. + */ + else /* len > 64 */ + { + FT_Fixed frac_len = len & 63; + FT_Fixed center = pos + ( len >> 1 ); + FT_Fixed delta_a, delta_b; + + + if ( ( len / 64 ) & 1 ) + { + delta_a = FT_PIX_FLOOR( center ) + 32 - center; + delta_b = FT_PIX_ROUND( center ) - center; + } + else + { + delta_a = FT_PIX_ROUND( center ) - center; + delta_b = FT_PIX_FLOOR( center ) + 32 - center; + } + + /* We choose between B) and C) above based on the amount + * of fractional stem width; for small amounts, choose + * C) always, for large amounts, B) always, and inbetween, + * pick whichever one involves less stem movement. + */ + if ( frac_len < 32 ) + { + pos += psh_hint_snap_stem_side_delta ( pos, len ); + } + else if ( frac_len < 48 ) + { + FT_Fixed side_delta = psh_hint_snap_stem_side_delta ( pos, + len ); + + if ( FT_ABS( side_delta ) < FT_ABS( delta_b ) ) + pos += side_delta; + else + pos += delta_b; + } + else + { + pos += delta_b; + } + } + + hint->cur_pos = pos; + } + } /* switch */ + + psh_hint_set_fitted( hint ); + +#ifdef DEBUG_HINTER + if ( ps_debug_hint_func ) + ps_debug_hint_func( hint, dimension ); +#endif + } + } + +#endif /* 0 */ + + + static void + psh_hint_table_align_hints( PSH_Hint_Table table, + PSH_Globals globals, + FT_Int dimension, + PSH_Glyph glyph ) + { + PSH_Hint hint; + FT_UInt count; + +#ifdef DEBUG_HINTER + + PSH_Dimension dim = &globals->dimension[dimension]; + FT_Fixed scale = dim->scale_mult; + FT_Fixed delta = dim->scale_delta; + + + if ( ps_debug_no_vert_hints && dimension == 0 ) + { + ps_simple_scale( table, scale, delta, dimension ); + return; + } + + if ( ps_debug_no_horz_hints && dimension == 1 ) + { + ps_simple_scale( table, scale, delta, dimension ); + return; + } + +#endif /* DEBUG_HINTER */ + + hint = table->hints; + count = table->max_hints; + + for ( ; count > 0; count--, hint++ ) + psh_hint_align( hint, globals, dimension, glyph ); + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** POINTS INTERPOLATION ROUTINES *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + +#define xxDEBUG_ZONES + + +#ifdef DEBUG_ZONES + +#include FT_CONFIG_STANDARD_LIBRARY_H + + static void + psh_print_zone( PSH_Zone zone ) + { + printf( "zone [scale,delta,min,max] = [%.5f,%.2f,%d,%d]\n", + zone->scale / 65536.0, + zone->delta / 64.0, + zone->min, + zone->max ); + } + +#endif /* DEBUG_ZONES */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** HINTER GLYPH MANAGEMENT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + +#define psh_corner_is_flat ft_corner_is_flat +#define psh_corner_orientation ft_corner_orientation + + +#ifdef COMPUTE_INFLEXS + + /* compute all inflex points in a given glyph */ + static void + psh_glyph_compute_inflections( PSH_Glyph glyph ) + { + FT_UInt n; + + + for ( n = 0; n < glyph->num_contours; n++ ) + { + PSH_Point first, start, end, before, after; + FT_Pos in_x, in_y, out_x, out_y; + FT_Int orient_prev, orient_cur; + FT_Int finished = 0; + + + /* we need at least 4 points to create an inflection point */ + if ( glyph->contours[n].count < 4 ) + continue; + + /* compute first segment in contour */ + first = glyph->contours[n].start; + + start = end = first; + do + { + end = end->next; + if ( end == first ) + goto Skip; + + in_x = end->org_u - start->org_u; + in_y = end->org_v - start->org_v; + + } while ( in_x == 0 && in_y == 0 ); + + /* extend the segment start whenever possible */ + before = start; + do + { + do + { + start = before; + before = before->prev; + if ( before == first ) + goto Skip; + + out_x = start->org_u - before->org_u; + out_y = start->org_v - before->org_v; + + } while ( out_x == 0 && out_y == 0 ); + + orient_prev = psh_corner_orientation( in_x, in_y, out_x, out_y ); + + } while ( orient_prev == 0 ); + + first = start; + in_x = out_x; + in_y = out_y; + + /* now, process all segments in the contour */ + do + { + /* first, extend current segment's end whenever possible */ + after = end; + do + { + do + { + end = after; + after = after->next; + if ( after == first ) + finished = 1; + + out_x = after->org_u - end->org_u; + out_y = after->org_v - end->org_v; + + } while ( out_x == 0 && out_y == 0 ); + + orient_cur = psh_corner_orientation( in_x, in_y, out_x, out_y ); + + } while ( orient_cur == 0 ); + + if ( ( orient_cur ^ orient_prev ) < 0 ) + { + do + { + psh_point_set_inflex( start ); + start = start->next; + } + while ( start != end ); + + psh_point_set_inflex( start ); + } + + start = end; + end = after; + orient_prev = orient_cur; + in_x = out_x; + in_y = out_y; + + } while ( !finished ); + + Skip: + ; + } + } + +#endif /* COMPUTE_INFLEXS */ + + + static void + psh_glyph_done( PSH_Glyph glyph ) + { + FT_Memory memory = glyph->memory; + + + psh_hint_table_done( &glyph->hint_tables[1], memory ); + psh_hint_table_done( &glyph->hint_tables[0], memory ); + + FT_FREE( glyph->points ); + FT_FREE( glyph->contours ); + + glyph->num_points = 0; + glyph->num_contours = 0; + + glyph->memory = NULL; + } + + + static PSH_Dir + psh_compute_dir( FT_Pos dx, + FT_Pos dy ) + { + FT_Pos ax, ay; + PSH_Dir result = PSH_DIR_NONE; + + + ax = FT_ABS( dx ); + ay = FT_ABS( dy ); + + if ( ay * 12 < ax ) + { + /* |dy| <<< |dx| means a near-horizontal segment */ + result = ( dx >= 0 ) ? PSH_DIR_RIGHT : PSH_DIR_LEFT; + } + else if ( ax * 12 < ay ) + { + /* |dx| <<< |dy| means a near-vertical segment */ + result = ( dy >= 0 ) ? PSH_DIR_UP : PSH_DIR_DOWN; + } + + return result; + } + + + /* load outline point coordinates into hinter glyph */ + static void + psh_glyph_load_points( PSH_Glyph glyph, + FT_Int dimension ) + { + FT_Vector* vec = glyph->outline->points; + PSH_Point point = glyph->points; + FT_UInt count = glyph->num_points; + + + for ( ; count > 0; count--, point++, vec++ ) + { + point->flags2 = 0; + point->hint = NULL; + if ( dimension == 0 ) + { + point->org_u = vec->x; + point->org_v = vec->y; + } + else + { + point->org_u = vec->y; + point->org_v = vec->x; + } + +#ifdef DEBUG_HINTER + point->org_x = vec->x; + point->org_y = vec->y; +#endif + + } + } + + + /* save hinted point coordinates back to outline */ + static void + psh_glyph_save_points( PSH_Glyph glyph, + FT_Int dimension ) + { + FT_UInt n; + PSH_Point point = glyph->points; + FT_Vector* vec = glyph->outline->points; + FT_Byte* tags = glyph->outline->tags; + + + for ( n = 0; n < glyph->num_points; n++ ) + { + if ( dimension == 0 ) + vec[n].x = point->cur_u; + else + vec[n].y = point->cur_u; + + if ( psh_point_is_strong( point ) ) + tags[n] |= (char)( ( dimension == 0 ) ? 32 : 64 ); + +#ifdef DEBUG_HINTER + + if ( dimension == 0 ) + { + point->cur_x = point->cur_u; + point->flags_x = point->flags2 | point->flags; + } + else + { + point->cur_y = point->cur_u; + point->flags_y = point->flags2 | point->flags; + } + +#endif + + point++; + } + } + + + static FT_Error + psh_glyph_init( PSH_Glyph glyph, + FT_Outline* outline, + PS_Hints ps_hints, + PSH_Globals globals ) + { + FT_Error error; + FT_Memory memory; + + + /* clear all fields */ + FT_ZERO( glyph ); + + memory = glyph->memory = globals->memory; + + /* allocate and setup points + contours arrays */ + if ( FT_QNEW_ARRAY( glyph->points, outline->n_points ) || + FT_QNEW_ARRAY( glyph->contours, outline->n_contours ) ) + goto Exit; + + glyph->num_points = outline->n_points; + glyph->num_contours = outline->n_contours; + + { + FT_UInt first = 0, next, n; + PSH_Point points = glyph->points; + PSH_Contour contour = glyph->contours; + + + for ( n = 0; n < glyph->num_contours; n++ ) + { + FT_UInt count; + PSH_Point point; + + + next = outline->contours[n] + 1; + count = next - first; + + contour->start = points + first; + contour->count = count; + + if ( count > 0 ) + { + point = points + first; + + point->prev = points + next - 1; + point->contour = contour; + + for ( ; count > 1; count-- ) + { + point[0].next = point + 1; + point[1].prev = point; + point++; + point->contour = contour; + } + point->next = points + first; + } + + contour++; + first = next; + } + } + + { + PSH_Point points = glyph->points; + PSH_Point point = points; + FT_Vector* vec = outline->points; + FT_UInt n; + + + for ( n = 0; n < glyph->num_points; n++, point++ ) + { + FT_Int n_prev = (FT_Int)( point->prev - points ); + FT_Int n_next = (FT_Int)( point->next - points ); + FT_Pos dxi, dyi, dxo, dyo; + + + point->flags = 0; + if ( !( outline->tags[n] & FT_CURVE_TAG_ON ) ) + psh_point_set_off( point ); + + dxi = vec[n].x - vec[n_prev].x; + dyi = vec[n].y - vec[n_prev].y; + + point->dir_in = psh_compute_dir( dxi, dyi ); + + dxo = vec[n_next].x - vec[n].x; + dyo = vec[n_next].y - vec[n].y; + + point->dir_out = psh_compute_dir( dxo, dyo ); + + /* detect smooth points */ + if ( psh_point_is_off( point ) ) + psh_point_set_smooth( point ); + + else if ( point->dir_in == point->dir_out ) + { + if ( point->dir_out != PSH_DIR_NONE || + psh_corner_is_flat( dxi, dyi, dxo, dyo ) ) + psh_point_set_smooth( point ); + } + } + } + + glyph->outline = outline; + glyph->globals = globals; + +#ifdef COMPUTE_INFLEXS + psh_glyph_load_points( glyph, 0 ); + psh_glyph_compute_inflections( glyph ); +#endif /* COMPUTE_INFLEXS */ + + /* now deal with hints tables */ + error = psh_hint_table_init( &glyph->hint_tables [0], + &ps_hints->dimension[0].hints, + &ps_hints->dimension[0].masks, + &ps_hints->dimension[0].counters, + memory ); + if ( error ) + goto Exit; + + error = psh_hint_table_init( &glyph->hint_tables [1], + &ps_hints->dimension[1].hints, + &ps_hints->dimension[1].masks, + &ps_hints->dimension[1].counters, + memory ); + if ( error ) + goto Exit; + + Exit: + return error; + } + + + /* compute all extrema in a glyph for a given dimension */ + static void + psh_glyph_compute_extrema( PSH_Glyph glyph ) + { + FT_UInt n; + + + /* first of all, compute all local extrema */ + for ( n = 0; n < glyph->num_contours; n++ ) + { + PSH_Point first = glyph->contours[n].start; + PSH_Point point, before, after; + + + if ( glyph->contours[n].count == 0 ) + continue; + + point = first; + before = point; + + do + { + before = before->prev; + if ( before == first ) + goto Skip; + + } while ( before->org_u == point->org_u ); + + first = point = before->next; + + for (;;) + { + after = point; + do + { + after = after->next; + if ( after == first ) + goto Next; + + } while ( after->org_u == point->org_u ); + + if ( before->org_u < point->org_u ) + { + if ( after->org_u < point->org_u ) + { + /* local maximum */ + goto Extremum; + } + } + else /* before->org_u > point->org_u */ + { + if ( after->org_u > point->org_u ) + { + /* local minimum */ + Extremum: + do + { + psh_point_set_extremum( point ); + point = point->next; + + } while ( point != after ); + } + } + + before = after->prev; + point = after; + + } /* for */ + + Next: + ; + } + + /* for each extremum, determine its direction along the */ + /* orthogonal axis */ + for ( n = 0; n < glyph->num_points; n++ ) + { + PSH_Point point, before, after; + + + point = &glyph->points[n]; + before = point; + after = point; + + if ( psh_point_is_extremum( point ) ) + { + do + { + before = before->prev; + if ( before == point ) + goto Skip; + + } while ( before->org_v == point->org_v ); + + do + { + after = after->next; + if ( after == point ) + goto Skip; + + } while ( after->org_v == point->org_v ); + } + + if ( before->org_v < point->org_v && + after->org_v > point->org_v ) + { + psh_point_set_positive( point ); + } + else if ( before->org_v > point->org_v && + after->org_v < point->org_v ) + { + psh_point_set_negative( point ); + } + + Skip: + ; + } + } + + + /* the min and max are based on contour orientation and fill rule */ + static void + psh_hint_table_find_strong_points( PSH_Hint_Table table, + PSH_Point point, + FT_UInt count, + FT_Int threshold, + PSH_Dir major_dir ) + { + PSH_Hint* sort = table->sort; + FT_UInt num_hints = table->num_hints; + + + for ( ; count > 0; count--, point++ ) + { + PSH_Dir point_dir; + FT_Pos org_u = point->org_u; + + + if ( psh_point_is_strong( point ) ) + continue; + + point_dir = + (PSH_Dir)( ( point->dir_in | point->dir_out ) & major_dir ); + + if ( point_dir & ( PSH_DIR_DOWN | PSH_DIR_RIGHT ) ) + { + FT_UInt nn; + + + for ( nn = 0; nn < num_hints; nn++ ) + { + PSH_Hint hint = sort[nn]; + FT_Pos d = org_u - hint->org_pos; + + + if ( d < threshold && -d < threshold ) + { + psh_point_set_strong( point ); + point->flags2 |= PSH_POINT_EDGE_MIN; + point->hint = hint; + break; + } + } + } + else if ( point_dir & ( PSH_DIR_UP | PSH_DIR_LEFT ) ) + { + FT_UInt nn; + + + for ( nn = 0; nn < num_hints; nn++ ) + { + PSH_Hint hint = sort[nn]; + FT_Pos d = org_u - hint->org_pos - hint->org_len; + + + if ( d < threshold && -d < threshold ) + { + psh_point_set_strong( point ); + point->flags2 |= PSH_POINT_EDGE_MAX; + point->hint = hint; + break; + } + } + } + +#if 1 + else if ( psh_point_is_extremum( point ) ) + { + /* treat extrema as special cases for stem edge alignment */ + FT_UInt nn, min_flag, max_flag; + + + if ( major_dir == PSH_DIR_HORIZONTAL ) + { + min_flag = PSH_POINT_POSITIVE; + max_flag = PSH_POINT_NEGATIVE; + } + else + { + min_flag = PSH_POINT_NEGATIVE; + max_flag = PSH_POINT_POSITIVE; + } + + if ( point->flags2 & min_flag ) + { + for ( nn = 0; nn < num_hints; nn++ ) + { + PSH_Hint hint = sort[nn]; + FT_Pos d = org_u - hint->org_pos; + + + if ( d < threshold && -d < threshold ) + { + point->flags2 |= PSH_POINT_EDGE_MIN; + point->hint = hint; + psh_point_set_strong( point ); + break; + } + } + } + else if ( point->flags2 & max_flag ) + { + for ( nn = 0; nn < num_hints; nn++ ) + { + PSH_Hint hint = sort[nn]; + FT_Pos d = org_u - hint->org_pos - hint->org_len; + + + if ( d < threshold && -d < threshold ) + { + point->flags2 |= PSH_POINT_EDGE_MAX; + point->hint = hint; + psh_point_set_strong( point ); + break; + } + } + } + + if ( !point->hint ) + { + for ( nn = 0; nn < num_hints; nn++ ) + { + PSH_Hint hint = sort[nn]; + + + if ( org_u >= hint->org_pos && + org_u <= ADD_INT( hint->org_pos, hint->org_len ) ) + { + point->hint = hint; + break; + } + } + } + } + +#endif /* 1 */ + } + } + + + /* the accepted shift for strong points in fractional pixels */ +#define PSH_STRONG_THRESHOLD 32 + + /* the maximum shift value in font units tuned to distinguish */ + /* between stems and serifs in URW+ font collection */ +#define PSH_STRONG_THRESHOLD_MAXIMUM 12 + + + /* find strong points in a glyph */ + static void + psh_glyph_find_strong_points( PSH_Glyph glyph, + FT_Int dimension ) + { + /* a point is `strong' if it is located on a stem edge and */ + /* has an `in' or `out' tangent parallel to the hint's direction */ + + PSH_Hint_Table table = &glyph->hint_tables[dimension]; + PS_Mask mask = table->hint_masks->masks; + FT_UInt num_masks = table->hint_masks->num_masks; + FT_UInt first = 0; + PSH_Dir major_dir = ( dimension == 0 ) ? PSH_DIR_VERTICAL + : PSH_DIR_HORIZONTAL; + PSH_Dimension dim = &glyph->globals->dimension[dimension]; + FT_Fixed scale = dim->scale_mult; + FT_Int threshold; + + + threshold = (FT_Int)FT_DivFix( PSH_STRONG_THRESHOLD, scale ); + if ( threshold > PSH_STRONG_THRESHOLD_MAXIMUM ) + threshold = PSH_STRONG_THRESHOLD_MAXIMUM; + + /* process secondary hints to `selected' points */ + if ( num_masks > 1 && glyph->num_points > 0 ) + { + /* the `endchar' op can reduce the number of points */ + first = mask->end_point > glyph->num_points + ? glyph->num_points + : mask->end_point; + mask++; + for ( ; num_masks > 1; num_masks--, mask++ ) + { + FT_UInt next = FT_MIN( mask->end_point, glyph->num_points ); + + + if ( next > first ) + { + FT_UInt count = next - first; + PSH_Point point = glyph->points + first; + + + psh_hint_table_activate_mask( table, mask ); + + psh_hint_table_find_strong_points( table, point, count, + threshold, major_dir ); + } + first = next; + } + } + + /* process primary hints for all points */ + if ( num_masks == 1 ) + { + FT_UInt count = glyph->num_points; + PSH_Point point = glyph->points; + + + psh_hint_table_activate_mask( table, table->hint_masks->masks ); + + psh_hint_table_find_strong_points( table, point, count, + threshold, major_dir ); + } + + /* now, certain points may have been attached to a hint and */ + /* not marked as strong; update their flags then */ + { + FT_UInt count = glyph->num_points; + PSH_Point point = glyph->points; + + + for ( ; count > 0; count--, point++ ) + if ( point->hint && !psh_point_is_strong( point ) ) + psh_point_set_strong( point ); + } + } + + + /* find points in a glyph which are in a blue zone and have `in' or */ + /* `out' tangents parallel to the horizontal axis */ + static void + psh_glyph_find_blue_points( PSH_Blues blues, + PSH_Glyph glyph ) + { + PSH_Blue_Table table; + PSH_Blue_Zone zone; + FT_UInt glyph_count = glyph->num_points; + FT_UInt blue_count; + PSH_Point point = glyph->points; + + + for ( ; glyph_count > 0; glyph_count--, point++ ) + { + FT_Pos y; + + + /* check tangents */ + if ( !( point->dir_in & PSH_DIR_HORIZONTAL ) && + !( point->dir_out & PSH_DIR_HORIZONTAL ) ) + continue; + + /* skip strong points */ + if ( psh_point_is_strong( point ) ) + continue; + + y = point->org_u; + + /* look up top zones */ + table = &blues->normal_top; + blue_count = table->count; + zone = table->zones; + + for ( ; blue_count > 0; blue_count--, zone++ ) + { + FT_Pos delta = y - zone->org_bottom; + + + if ( delta < -blues->blue_fuzz ) + break; + + if ( y <= zone->org_top + blues->blue_fuzz ) + if ( blues->no_overshoots || delta <= blues->blue_threshold ) + { + point->cur_u = zone->cur_bottom; + psh_point_set_strong( point ); + psh_point_set_fitted( point ); + } + } + + /* look up bottom zones */ + table = &blues->normal_bottom; + blue_count = table->count; + zone = table->zones + blue_count - 1; + + for ( ; blue_count > 0; blue_count--, zone-- ) + { + FT_Pos delta = zone->org_top - y; + + + if ( delta < -blues->blue_fuzz ) + break; + + if ( y >= zone->org_bottom - blues->blue_fuzz ) + if ( blues->no_overshoots || delta < blues->blue_threshold ) + { + point->cur_u = zone->cur_top; + psh_point_set_strong( point ); + psh_point_set_fitted( point ); + } + } + } + } + + + /* interpolate strong points with the help of hinted coordinates */ + static void + psh_glyph_interpolate_strong_points( PSH_Glyph glyph, + FT_Int dimension ) + { + PSH_Dimension dim = &glyph->globals->dimension[dimension]; + FT_Fixed scale = dim->scale_mult; + + FT_UInt count = glyph->num_points; + PSH_Point point = glyph->points; + + + for ( ; count > 0; count--, point++ ) + { + PSH_Hint hint = point->hint; + + + if ( hint ) + { + FT_Pos delta; + + + if ( psh_point_is_edge_min( point ) ) + point->cur_u = hint->cur_pos; + + else if ( psh_point_is_edge_max( point ) ) + point->cur_u = hint->cur_pos + hint->cur_len; + + else + { + delta = point->org_u - hint->org_pos; + + if ( delta <= 0 ) + point->cur_u = hint->cur_pos + FT_MulFix( delta, scale ); + + else if ( delta >= hint->org_len ) + point->cur_u = hint->cur_pos + hint->cur_len + + FT_MulFix( delta - hint->org_len, scale ); + + else /* hint->org_len > 0 */ + point->cur_u = hint->cur_pos + + FT_MulDiv( delta, hint->cur_len, + hint->org_len ); + } + psh_point_set_fitted( point ); + } + } + } + + +#define PSH_MAX_STRONG_INTERNAL 16 + + static void + psh_glyph_interpolate_normal_points( PSH_Glyph glyph, + FT_Int dimension ) + { + +#if 1 + /* first technique: a point is strong if it is a local extremum */ + + PSH_Dimension dim = &glyph->globals->dimension[dimension]; + FT_Fixed scale = dim->scale_mult; + FT_Memory memory = glyph->memory; + + PSH_Point* strongs = NULL; + PSH_Point strongs_0[PSH_MAX_STRONG_INTERNAL]; + FT_UInt num_strongs = 0; + + PSH_Point points = glyph->points; + PSH_Point points_end = points + glyph->num_points; + PSH_Point point; + + + /* first count the number of strong points */ + for ( point = points; point < points_end; point++ ) + { + if ( psh_point_is_strong( point ) ) + num_strongs++; + } + + if ( num_strongs == 0 ) /* nothing to do here */ + return; + + /* allocate an array to store a list of points, */ + /* stored in increasing org_u order */ + if ( num_strongs <= PSH_MAX_STRONG_INTERNAL ) + strongs = strongs_0; + else + { + FT_Error error; + + + if ( FT_QNEW_ARRAY( strongs, num_strongs ) ) + return; + } + + num_strongs = 0; + for ( point = points; point < points_end; point++ ) + { + PSH_Point* insert; + + + if ( !psh_point_is_strong( point ) ) + continue; + + for ( insert = strongs + num_strongs; insert > strongs; insert-- ) + { + if ( insert[-1]->org_u <= point->org_u ) + break; + + insert[0] = insert[-1]; + } + insert[0] = point; + num_strongs++; + } + + /* now try to interpolate all normal points */ + for ( point = points; point < points_end; point++ ) + { + if ( psh_point_is_strong( point ) ) + continue; + + /* sometimes, some local extrema are smooth points */ + if ( psh_point_is_smooth( point ) ) + { + if ( point->dir_in == PSH_DIR_NONE || + point->dir_in != point->dir_out ) + continue; + + if ( !psh_point_is_extremum( point ) && + !psh_point_is_inflex( point ) ) + continue; + + point->flags &= ~PSH_POINT_SMOOTH; + } + + /* find best enclosing point coordinates then interpolate */ + { + PSH_Point before, after; + FT_UInt nn; + + + for ( nn = 0; nn < num_strongs; nn++ ) + if ( strongs[nn]->org_u > point->org_u ) + break; + + if ( nn == 0 ) /* point before the first strong point */ + { + after = strongs[0]; + + point->cur_u = after->cur_u + + FT_MulFix( point->org_u - after->org_u, + scale ); + } + else + { + before = strongs[nn - 1]; + + for ( nn = num_strongs; nn > 0; nn-- ) + if ( strongs[nn - 1]->org_u < point->org_u ) + break; + + if ( nn == num_strongs ) /* point is after last strong point */ + { + before = strongs[nn - 1]; + + point->cur_u = before->cur_u + + FT_MulFix( point->org_u - before->org_u, + scale ); + } + else + { + FT_Pos u; + + + after = strongs[nn]; + + /* now interpolate point between before and after */ + u = point->org_u; + + if ( u == before->org_u ) + point->cur_u = before->cur_u; + + else if ( u == after->org_u ) + point->cur_u = after->cur_u; + + else + point->cur_u = before->cur_u + + FT_MulDiv( u - before->org_u, + after->cur_u - before->cur_u, + after->org_u - before->org_u ); + } + } + psh_point_set_fitted( point ); + } + } + + if ( strongs != strongs_0 ) + FT_FREE( strongs ); + +#endif /* 1 */ + + } + + + /* interpolate other points */ + static void + psh_glyph_interpolate_other_points( PSH_Glyph glyph, + FT_Int dimension ) + { + PSH_Dimension dim = &glyph->globals->dimension[dimension]; + FT_Fixed scale = dim->scale_mult; + FT_Fixed delta = dim->scale_delta; + PSH_Contour contour = glyph->contours; + FT_UInt num_contours = glyph->num_contours; + + + for ( ; num_contours > 0; num_contours--, contour++ ) + { + PSH_Point start = contour->start; + PSH_Point first, next, point; + FT_UInt fit_count; + + + /* count the number of strong points in this contour */ + next = start + contour->count; + fit_count = 0; + first = NULL; + + for ( point = start; point < next; point++ ) + if ( psh_point_is_fitted( point ) ) + { + if ( !first ) + first = point; + + fit_count++; + } + + /* if there are less than 2 fitted points in the contour, we */ + /* simply scale and eventually translate the contour points */ + if ( fit_count < 2 ) + { + if ( fit_count == 1 ) + delta = first->cur_u - FT_MulFix( first->org_u, scale ); + + for ( point = start; point < next; point++ ) + if ( point != first ) + point->cur_u = FT_MulFix( point->org_u, scale ) + delta; + + goto Next_Contour; + } + + /* there are more than 2 strong points in this contour; we */ + /* need to interpolate weak points between them */ + start = first; + do + { + /* skip consecutive fitted points */ + for (;;) + { + next = first->next; + if ( next == start ) + goto Next_Contour; + + if ( !psh_point_is_fitted( next ) ) + break; + + first = next; + } + + /* find next fitted point after unfitted one */ + for (;;) + { + next = next->next; + if ( psh_point_is_fitted( next ) ) + break; + } + + /* now interpolate between them */ + { + FT_Pos org_a, org_ab, cur_a, cur_ab; + FT_Pos org_c, org_ac, cur_c; + FT_Fixed scale_ab; + + + if ( first->org_u <= next->org_u ) + { + org_a = first->org_u; + cur_a = first->cur_u; + org_ab = next->org_u - org_a; + cur_ab = next->cur_u - cur_a; + } + else + { + org_a = next->org_u; + cur_a = next->cur_u; + org_ab = first->org_u - org_a; + cur_ab = first->cur_u - cur_a; + } + + scale_ab = 0x10000L; + if ( org_ab > 0 ) + scale_ab = FT_DivFix( cur_ab, org_ab ); + + point = first->next; + do + { + org_c = point->org_u; + org_ac = org_c - org_a; + + if ( org_ac <= 0 ) + { + /* on the left of the interpolation zone */ + cur_c = cur_a + FT_MulFix( org_ac, scale ); + } + else if ( org_ac >= org_ab ) + { + /* on the right on the interpolation zone */ + cur_c = cur_a + cur_ab + FT_MulFix( org_ac - org_ab, scale ); + } + else + { + /* within the interpolation zone */ + cur_c = cur_a + FT_MulFix( org_ac, scale_ab ); + } + + point->cur_u = cur_c; + + point = point->next; + + } while ( point != next ); + } + + /* keep going until all points in the contours have been processed */ + first = next; + + } while ( first != start ); + + Next_Contour: + ; + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** HIGH-LEVEL INTERFACE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + FT_Error + ps_hints_apply( PS_Hints ps_hints, + FT_Outline* outline, + PSH_Globals globals, + FT_Render_Mode hint_mode ) + { + PSH_GlyphRec glyphrec; + PSH_Glyph glyph = &glyphrec; + FT_Error error; +#ifdef DEBUG_HINTER + FT_Memory memory; +#endif + FT_Int dimension; + + + /* something to do? */ + if ( outline->n_points == 0 || outline->n_contours == 0 ) + return FT_Err_Ok; + +#ifdef DEBUG_HINTER + + memory = globals->memory; + + if ( ps_debug_glyph ) + { + psh_glyph_done( ps_debug_glyph ); + FT_FREE( ps_debug_glyph ); + } + + if ( FT_NEW( glyph ) ) + return error; + + ps_debug_glyph = glyph; + +#endif /* DEBUG_HINTER */ + + error = psh_glyph_init( glyph, outline, ps_hints, globals ); + if ( error ) + goto Exit; + + /* try to optimize the y_scale so that the top of non-capital letters + * is aligned on a pixel boundary whenever possible + */ + { + PSH_Dimension dim_x = &glyph->globals->dimension[0]; + PSH_Dimension dim_y = &glyph->globals->dimension[1]; + + FT_Fixed x_scale = dim_x->scale_mult; + FT_Fixed y_scale = dim_y->scale_mult; + + FT_Fixed old_x_scale = x_scale; + FT_Fixed old_y_scale = y_scale; + + FT_Fixed scaled = 0; + FT_Fixed fitted = 0; + + FT_Bool rescale = FALSE; + + + if ( globals->blues.normal_top.count ) + { + scaled = FT_MulFix( globals->blues.normal_top.zones->org_ref, y_scale ); + fitted = FT_PIX_ROUND( scaled ); + } + + if ( fitted != 0 && scaled != fitted ) + { + rescale = TRUE; + + y_scale = FT_MulDiv( y_scale, fitted, scaled ); + + if ( fitted < scaled ) + x_scale -= x_scale / 50; + + psh_globals_set_scale( glyph->globals, x_scale, y_scale, 0, 0 ); + } + + glyph->do_horz_hints = 1; + glyph->do_vert_hints = 1; + + glyph->do_horz_snapping = FT_BOOL( hint_mode == FT_RENDER_MODE_MONO || + hint_mode == FT_RENDER_MODE_LCD ); + + glyph->do_vert_snapping = FT_BOOL( hint_mode == FT_RENDER_MODE_MONO || + hint_mode == FT_RENDER_MODE_LCD_V ); + + glyph->do_stem_adjust = FT_BOOL( hint_mode != FT_RENDER_MODE_LIGHT ); + + for ( dimension = 0; dimension < 2; dimension++ ) + { + /* load outline coordinates into glyph */ + psh_glyph_load_points( glyph, dimension ); + + /* compute local extrema */ + psh_glyph_compute_extrema( glyph ); + + /* compute aligned stem/hints positions */ + psh_hint_table_align_hints( &glyph->hint_tables[dimension], + glyph->globals, + dimension, + glyph ); + + /* find strong points, align them, then interpolate others */ + psh_glyph_find_strong_points( glyph, dimension ); + if ( dimension == 1 ) + psh_glyph_find_blue_points( &globals->blues, glyph ); + psh_glyph_interpolate_strong_points( glyph, dimension ); + psh_glyph_interpolate_normal_points( glyph, dimension ); + psh_glyph_interpolate_other_points( glyph, dimension ); + + /* save hinted coordinates back to outline */ + psh_glyph_save_points( glyph, dimension ); + + if ( rescale ) + psh_globals_set_scale( glyph->globals, + old_x_scale, old_y_scale, 0, 0 ); + } + } + + Exit: + +#ifndef DEBUG_HINTER + psh_glyph_done( glyph ); +#endif + + return error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshalgo.h b/non-source/foreign/freetype2/src/pshinter/pshalgo.h new file mode 100644 index 000000000..fb362f061 --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshalgo.h @@ -0,0 +1,233 @@ +/**************************************************************************** + * + * pshalgo.h + * + * PostScript hinting algorithm (specification). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSHALGO_H_ +#define PSHALGO_H_ + + +#include "pshrec.h" +#include "pshglob.h" + + +FT_BEGIN_HEADER + + + /* handle to Hint structure */ + typedef struct PSH_HintRec_* PSH_Hint; + + + /* hint bit-flags */ +#define PSH_HINT_GHOST PS_HINT_FLAG_GHOST +#define PSH_HINT_BOTTOM PS_HINT_FLAG_BOTTOM +#define PSH_HINT_ACTIVE 4U +#define PSH_HINT_FITTED 8U + + +#define psh_hint_is_active( x ) ( ( (x)->flags & PSH_HINT_ACTIVE ) != 0 ) +#define psh_hint_is_ghost( x ) ( ( (x)->flags & PSH_HINT_GHOST ) != 0 ) +#define psh_hint_is_fitted( x ) ( ( (x)->flags & PSH_HINT_FITTED ) != 0 ) + +#define psh_hint_activate( x ) (x)->flags |= PSH_HINT_ACTIVE +#define psh_hint_deactivate( x ) (x)->flags &= ~PSH_HINT_ACTIVE +#define psh_hint_set_fitted( x ) (x)->flags |= PSH_HINT_FITTED + + + /* hint structure */ + typedef struct PSH_HintRec_ + { + FT_Int org_pos; + FT_Int org_len; + FT_Pos cur_pos; + FT_Pos cur_len; + FT_UInt flags; + PSH_Hint parent; + FT_Int order; + + } PSH_HintRec; + + + /* this is an interpolation zone used for strong points; */ + /* weak points are interpolated according to their strong */ + /* neighbours */ + typedef struct PSH_ZoneRec_ + { + FT_Fixed scale; + FT_Fixed delta; + FT_Pos min; + FT_Pos max; + + } PSH_ZoneRec, *PSH_Zone; + + + typedef struct PSH_Hint_TableRec_ + { + FT_UInt max_hints; + FT_UInt num_hints; + PSH_Hint hints; + PSH_Hint* sort; + PSH_Hint* sort_global; + FT_UInt num_zones; + PSH_ZoneRec* zones; + PSH_Zone zone; + PS_Mask_Table hint_masks; + PS_Mask_Table counter_masks; + + } PSH_Hint_TableRec, *PSH_Hint_Table; + + + typedef struct PSH_PointRec_* PSH_Point; + typedef struct PSH_ContourRec_* PSH_Contour; + + typedef enum PSH_Dir_ + { + PSH_DIR_NONE = 0, + PSH_DIR_UP = 1, + PSH_DIR_DOWN = 2, + PSH_DIR_VERTICAL = 1 | 2, + PSH_DIR_LEFT = 4, + PSH_DIR_RIGHT = 8, + PSH_DIR_HORIZONTAL = 4 | 8 + + } PSH_Dir; + + + /* the following bit-flags are computed once by the glyph */ + /* analyzer, for both dimensions */ +#define PSH_POINT_OFF 1U /* point is off the curve */ +#define PSH_POINT_SMOOTH 2U /* point is smooth */ +#define PSH_POINT_INFLEX 4U /* point is inflection */ + + +#define psh_point_is_smooth( p ) ( (p)->flags & PSH_POINT_SMOOTH ) +#define psh_point_is_off( p ) ( (p)->flags & PSH_POINT_OFF ) +#define psh_point_is_inflex( p ) ( (p)->flags & PSH_POINT_INFLEX ) + +#define psh_point_set_smooth( p ) (p)->flags |= PSH_POINT_SMOOTH +#define psh_point_set_off( p ) (p)->flags |= PSH_POINT_OFF +#define psh_point_set_inflex( p ) (p)->flags |= PSH_POINT_INFLEX + + + /* the following bit-flags are re-computed for each dimension */ +#define PSH_POINT_STRONG 16U /* point is strong */ +#define PSH_POINT_FITTED 32U /* point is already fitted */ +#define PSH_POINT_EXTREMUM 64U /* point is local extremum */ +#define PSH_POINT_POSITIVE 128U /* extremum has positive contour flow */ +#define PSH_POINT_NEGATIVE 256U /* extremum has negative contour flow */ +#define PSH_POINT_EDGE_MIN 512U /* point is aligned to left/bottom stem edge */ +#define PSH_POINT_EDGE_MAX 1024U /* point is aligned to top/right stem edge */ + + +#define psh_point_is_strong( p ) ( (p)->flags2 & PSH_POINT_STRONG ) +#define psh_point_is_fitted( p ) ( (p)->flags2 & PSH_POINT_FITTED ) +#define psh_point_is_extremum( p ) ( (p)->flags2 & PSH_POINT_EXTREMUM ) +#define psh_point_is_positive( p ) ( (p)->flags2 & PSH_POINT_POSITIVE ) +#define psh_point_is_negative( p ) ( (p)->flags2 & PSH_POINT_NEGATIVE ) +#define psh_point_is_edge_min( p ) ( (p)->flags2 & PSH_POINT_EDGE_MIN ) +#define psh_point_is_edge_max( p ) ( (p)->flags2 & PSH_POINT_EDGE_MAX ) + +#define psh_point_set_strong( p ) (p)->flags2 |= PSH_POINT_STRONG +#define psh_point_set_fitted( p ) (p)->flags2 |= PSH_POINT_FITTED +#define psh_point_set_extremum( p ) (p)->flags2 |= PSH_POINT_EXTREMUM +#define psh_point_set_positive( p ) (p)->flags2 |= PSH_POINT_POSITIVE +#define psh_point_set_negative( p ) (p)->flags2 |= PSH_POINT_NEGATIVE +#define psh_point_set_edge_min( p ) (p)->flags2 |= PSH_POINT_EDGE_MIN +#define psh_point_set_edge_max( p ) (p)->flags2 |= PSH_POINT_EDGE_MAX + + + typedef struct PSH_PointRec_ + { + PSH_Point prev; + PSH_Point next; + PSH_Contour contour; + FT_UInt flags; + FT_UInt flags2; + PSH_Dir dir_in; + PSH_Dir dir_out; + PSH_Hint hint; + FT_Pos org_u; + FT_Pos org_v; + FT_Pos cur_u; +#ifdef DEBUG_HINTER + FT_Pos org_x; + FT_Pos cur_x; + FT_Pos org_y; + FT_Pos cur_y; + FT_UInt flags_x; + FT_UInt flags_y; +#endif + + } PSH_PointRec; + + + typedef struct PSH_ContourRec_ + { + PSH_Point start; + FT_UInt count; + + } PSH_ContourRec; + + + typedef struct PSH_GlyphRec_ + { + FT_UInt num_points; + FT_UInt num_contours; + + PSH_Point points; + PSH_Contour contours; + + FT_Memory memory; + FT_Outline* outline; + PSH_Globals globals; + PSH_Hint_TableRec hint_tables[2]; + + FT_Bool do_horz_hints; + FT_Bool do_vert_hints; + FT_Bool do_horz_snapping; + FT_Bool do_vert_snapping; + FT_Bool do_stem_adjust; + + } PSH_GlyphRec, *PSH_Glyph; + + +#ifdef DEBUG_HINTER + extern PSH_Hint_Table ps_debug_hint_table; + + typedef void + (*PSH_HintFunc)( PSH_Hint hint, + FT_Bool vertical ); + + extern PSH_HintFunc ps_debug_hint_func; + + extern PSH_Glyph ps_debug_glyph; +#endif + + + extern FT_Error + ps_hints_apply( PS_Hints ps_hints, + FT_Outline* outline, + PSH_Globals globals, + FT_Render_Mode hint_mode ); + + +FT_END_HEADER + + +#endif /* PSHALGO_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshglob.c b/non-source/foreign/freetype2/src/pshinter/pshglob.c new file mode 100644 index 000000000..435f45838 --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshglob.c @@ -0,0 +1,795 @@ +/**************************************************************************** + * + * pshglob.c + * + * PostScript hinter global hinting management (body). + * Inspired by the new auto-hinter module. + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used + * modified and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/freetype.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftcalc.h> +#include "pshglob.h" + +#ifdef DEBUG_HINTER + PSH_Globals ps_debug_globals = NULL; +#endif + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** STANDARD WIDTHS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /* scale the widths/heights table */ + static void + psh_globals_scale_widths( PSH_Globals globals, + FT_UInt direction ) + { + PSH_Dimension dim = &globals->dimension[direction]; + PSH_Widths stdw = &dim->stdw; + FT_UInt count = stdw->count; + PSH_Width width = stdw->widths; + PSH_Width stand = width; /* standard width/height */ + FT_Fixed scale = dim->scale_mult; + + + if ( count > 0 ) + { + width->cur = FT_MulFix( width->org, scale ); + width->fit = FT_PIX_ROUND( width->cur ); + + width++; + count--; + + for ( ; count > 0; count--, width++ ) + { + FT_Pos w, dist; + + + w = FT_MulFix( width->org, scale ); + dist = w - stand->cur; + + if ( dist < 0 ) + dist = -dist; + + if ( dist < 128 ) + w = stand->cur; + + width->cur = w; + width->fit = FT_PIX_ROUND( w ); + } + } + } + + +#if 0 + + /* org_width is in font units, result in device pixels, 26.6 format */ + FT_LOCAL_DEF( FT_Pos ) + psh_dimension_snap_width( PSH_Dimension dimension, + FT_Int org_width ) + { + FT_UInt n; + FT_Pos width = FT_MulFix( org_width, dimension->scale_mult ); + FT_Pos best = 64 + 32 + 2; + FT_Pos reference = width; + + + for ( n = 0; n < dimension->stdw.count; n++ ) + { + FT_Pos w; + FT_Pos dist; + + + w = dimension->stdw.widths[n].cur; + dist = width - w; + if ( dist < 0 ) + dist = -dist; + if ( dist < best ) + { + best = dist; + reference = w; + } + } + + if ( width >= reference ) + { + width -= 0x21; + if ( width < reference ) + width = reference; + } + else + { + width += 0x21; + if ( width > reference ) + width = reference; + } + + return width; + } + +#endif /* 0 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** BLUE ZONES *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + static void + psh_blues_set_zones_0( PSH_Blues target, + FT_Bool is_others, + FT_UInt read_count, + FT_Short* read, + PSH_Blue_Table top_table, + PSH_Blue_Table bot_table ) + { + FT_UInt count_top = top_table->count; + FT_UInt count_bot = bot_table->count; + FT_Bool first = 1; + + FT_UNUSED( target ); + + + for ( ; read_count > 1; read_count -= 2 ) + { + FT_Int reference, delta; + FT_UInt count; + PSH_Blue_Zone zones, zone; + FT_Bool top; + + + /* read blue zone entry, and select target top/bottom zone */ + top = 0; + if ( first || is_others ) + { + reference = read[1]; + delta = read[0] - reference; + + zones = bot_table->zones; + count = count_bot; + first = 0; + } + else + { + reference = read[0]; + delta = read[1] - reference; + + zones = top_table->zones; + count = count_top; + top = 1; + } + + /* insert into sorted table */ + zone = zones; + for ( ; count > 0; count--, zone++ ) + { + if ( reference < zone->org_ref ) + break; + + if ( reference == zone->org_ref ) + { + FT_Int delta0 = zone->org_delta; + + + /* we have two zones on the same reference position -- */ + /* only keep the largest one */ + if ( delta < 0 ) + { + if ( delta < delta0 ) + zone->org_delta = delta; + } + else + { + if ( delta > delta0 ) + zone->org_delta = delta; + } + goto Skip; + } + } + + for ( ; count > 0; count-- ) + zone[count] = zone[count-1]; + + zone->org_ref = reference; + zone->org_delta = delta; + + if ( top ) + count_top++; + else + count_bot++; + + Skip: + read += 2; + } + + top_table->count = count_top; + bot_table->count = count_bot; + } + + + /* Re-read blue zones from the original fonts and store them into our */ + /* private structure. This function re-orders, sanitizes, and */ + /* fuzz-expands the zones as well. */ + static void + psh_blues_set_zones( PSH_Blues target, + FT_UInt count, + FT_Short* blues, + FT_UInt count_others, + FT_Short* other_blues, + FT_Int fuzz, + FT_Int family ) + { + PSH_Blue_Table top_table, bot_table; + FT_UInt count_top, count_bot; + + + if ( family ) + { + top_table = &target->family_top; + bot_table = &target->family_bottom; + } + else + { + top_table = &target->normal_top; + bot_table = &target->normal_bottom; + } + + /* read the input blue zones, and build two sorted tables */ + /* (one for the top zones, the other for the bottom zones) */ + top_table->count = 0; + bot_table->count = 0; + + /* first, the blues */ + psh_blues_set_zones_0( target, 0, + count, blues, top_table, bot_table ); + psh_blues_set_zones_0( target, 1, + count_others, other_blues, top_table, bot_table ); + + count_top = top_table->count; + count_bot = bot_table->count; + + /* sanitize top table */ + if ( count_top > 0 ) + { + PSH_Blue_Zone zone = top_table->zones; + + + for ( count = count_top; count > 0; count--, zone++ ) + { + FT_Int delta; + + + if ( count > 1 ) + { + delta = zone[1].org_ref - zone[0].org_ref; + if ( zone->org_delta > delta ) + zone->org_delta = delta; + } + + zone->org_bottom = zone->org_ref; + zone->org_top = zone->org_delta + zone->org_ref; + } + } + + /* sanitize bottom table */ + if ( count_bot > 0 ) + { + PSH_Blue_Zone zone = bot_table->zones; + + + for ( count = count_bot; count > 0; count--, zone++ ) + { + FT_Int delta; + + + if ( count > 1 ) + { + delta = zone[0].org_ref - zone[1].org_ref; + if ( zone->org_delta < delta ) + zone->org_delta = delta; + } + + zone->org_top = zone->org_ref; + zone->org_bottom = zone->org_delta + zone->org_ref; + } + } + + /* expand top and bottom tables with blue fuzz */ + { + FT_Int dim, top, bot, delta; + PSH_Blue_Zone zone; + + + zone = top_table->zones; + count = count_top; + + for ( dim = 1; dim >= 0; dim-- ) + { + if ( count > 0 ) + { + /* expand the bottom of the lowest zone normally */ + zone->org_bottom -= fuzz; + + /* expand the top and bottom of intermediate zones; */ + /* checking that the interval is smaller than the fuzz */ + top = zone->org_top; + + for ( count--; count > 0; count-- ) + { + bot = zone[1].org_bottom; + delta = bot - top; + + if ( delta / 2 < fuzz ) + zone[0].org_top = zone[1].org_bottom = top + delta / 2; + else + { + zone[0].org_top = top + fuzz; + zone[1].org_bottom = bot - fuzz; + } + + zone++; + top = zone->org_top; + } + + /* expand the top of the highest zone normally */ + zone->org_top = top + fuzz; + } + zone = bot_table->zones; + count = count_bot; + } + } + } + + + /* reset the blues table when the device transform changes */ + static void + psh_blues_scale_zones( PSH_Blues blues, + FT_Fixed scale, + FT_Pos delta ) + { + FT_UInt count; + FT_UInt num; + PSH_Blue_Table table = NULL; + + /* */ + /* Determine whether we need to suppress overshoots or */ + /* not. We simply need to compare the vertical scale */ + /* parameter to the raw bluescale value. Here is why: */ + /* */ + /* We need to suppress overshoots for all pointsizes. */ + /* At 300dpi that satisfies: */ + /* */ + /* pointsize < 240*bluescale + 0.49 */ + /* */ + /* This corresponds to: */ + /* */ + /* pixelsize < 1000*bluescale + 49/24 */ + /* */ + /* scale*EM_Size < 1000*bluescale + 49/24 */ + /* */ + /* However, for normal Type 1 fonts, EM_Size is 1000! */ + /* We thus only check: */ + /* */ + /* scale < bluescale + 49/24000 */ + /* */ + /* which we shorten to */ + /* */ + /* "scale < bluescale" */ + /* */ + /* Note that `blue_scale' is stored 1000 times its real */ + /* value, and that `scale' converts from font units to */ + /* fractional pixels. */ + /* */ + + /* 1000 / 64 = 125 / 8 */ + if ( scale >= 0x20C49BAL ) + blues->no_overshoots = FT_BOOL( scale < blues->blue_scale * 8 / 125 ); + else + blues->no_overshoots = FT_BOOL( scale * 125 < blues->blue_scale * 8 ); + + /* */ + /* The blue threshold is the font units distance under */ + /* which overshoots are suppressed due to the BlueShift */ + /* even if the scale is greater than BlueScale. */ + /* */ + /* It is the smallest distance such that */ + /* */ + /* dist <= BlueShift && dist*scale <= 0.5 pixels */ + /* */ + { + FT_Int threshold = blues->blue_shift; + + + while ( threshold > 0 && FT_MulFix( threshold, scale ) > 32 ) + threshold--; + + blues->blue_threshold = threshold; + } + + for ( num = 0; num < 4; num++ ) + { + PSH_Blue_Zone zone; + + + switch ( num ) + { + case 0: + table = &blues->normal_top; + break; + case 1: + table = &blues->normal_bottom; + break; + case 2: + table = &blues->family_top; + break; + default: + table = &blues->family_bottom; + break; + } + + zone = table->zones; + count = table->count; + for ( ; count > 0; count--, zone++ ) + { + zone->cur_top = FT_MulFix( zone->org_top, scale ) + delta; + zone->cur_bottom = FT_MulFix( zone->org_bottom, scale ) + delta; + zone->cur_ref = FT_MulFix( zone->org_ref, scale ) + delta; + zone->cur_delta = FT_MulFix( zone->org_delta, scale ); + + /* round scaled reference position */ + zone->cur_ref = FT_PIX_ROUND( zone->cur_ref ); + +#if 0 + if ( zone->cur_ref > zone->cur_top ) + zone->cur_ref -= 64; + else if ( zone->cur_ref < zone->cur_bottom ) + zone->cur_ref += 64; +#endif + } + } + + /* process the families now */ + + for ( num = 0; num < 2; num++ ) + { + PSH_Blue_Zone zone1, zone2; + FT_UInt count1, count2; + PSH_Blue_Table normal, family; + + + switch ( num ) + { + case 0: + normal = &blues->normal_top; + family = &blues->family_top; + break; + + default: + normal = &blues->normal_bottom; + family = &blues->family_bottom; + } + + zone1 = normal->zones; + count1 = normal->count; + + for ( ; count1 > 0; count1--, zone1++ ) + { + /* try to find a family zone whose reference position is less */ + /* than 1 pixel far from the current zone */ + zone2 = family->zones; + count2 = family->count; + + for ( ; count2 > 0; count2--, zone2++ ) + { + FT_Pos Delta; + + + Delta = zone1->org_ref - zone2->org_ref; + if ( Delta < 0 ) + Delta = -Delta; + + if ( FT_MulFix( Delta, scale ) < 64 ) + { + zone1->cur_top = zone2->cur_top; + zone1->cur_bottom = zone2->cur_bottom; + zone1->cur_ref = zone2->cur_ref; + zone1->cur_delta = zone2->cur_delta; + break; + } + } + } + } + } + + + /* calculate the maximum height of given blue zones */ + static FT_Short + psh_calc_max_height( FT_UInt num, + const FT_Short* values, + FT_Short cur_max ) + { + FT_UInt count; + + + for ( count = 0; count < num; count += 2 ) + { + FT_Short cur_height = values[count + 1] - values[count]; + + + if ( cur_height > cur_max ) + cur_max = cur_height; + } + + return cur_max; + } + + + FT_LOCAL_DEF( void ) + psh_blues_snap_stem( PSH_Blues blues, + FT_Int stem_top, + FT_Int stem_bot, + PSH_Alignment alignment ) + { + PSH_Blue_Table table; + FT_UInt count; + FT_Pos delta; + PSH_Blue_Zone zone; + FT_Int no_shoots; + + + alignment->align = PSH_BLUE_ALIGN_NONE; + + no_shoots = blues->no_overshoots; + + /* look up stem top in top zones table */ + table = &blues->normal_top; + count = table->count; + zone = table->zones; + + for ( ; count > 0; count--, zone++ ) + { + delta = SUB_LONG( stem_top, zone->org_bottom ); + if ( delta < -blues->blue_fuzz ) + break; + + if ( stem_top <= zone->org_top + blues->blue_fuzz ) + { + if ( no_shoots || delta <= blues->blue_threshold ) + { + alignment->align |= PSH_BLUE_ALIGN_TOP; + alignment->align_top = zone->cur_ref; + } + break; + } + } + + /* look up stem bottom in bottom zones table */ + table = &blues->normal_bottom; + count = table->count; + zone = table->zones + count-1; + + for ( ; count > 0; count--, zone-- ) + { + delta = SUB_LONG( zone->org_top, stem_bot ); + if ( delta < -blues->blue_fuzz ) + break; + + if ( stem_bot >= zone->org_bottom - blues->blue_fuzz ) + { + if ( no_shoots || delta < blues->blue_threshold ) + { + alignment->align |= PSH_BLUE_ALIGN_BOT; + alignment->align_bot = zone->cur_ref; + } + break; + } + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** GLOBAL HINTS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + static void + psh_globals_destroy( PSH_Globals globals ) + { + if ( globals ) + { + FT_Memory memory; + + + memory = globals->memory; + globals->dimension[0].stdw.count = 0; + globals->dimension[1].stdw.count = 0; + + globals->blues.normal_top.count = 0; + globals->blues.normal_bottom.count = 0; + globals->blues.family_top.count = 0; + globals->blues.family_bottom.count = 0; + + FT_FREE( globals ); + +#ifdef DEBUG_HINTER + ps_debug_globals = NULL; +#endif + } + } + + + static FT_Error + psh_globals_new( FT_Memory memory, + T1_Private* priv, + PSH_Globals *aglobals ) + { + PSH_Globals globals = NULL; + FT_Error error; + + + if ( !FT_QNEW( globals ) ) + { + FT_UInt count; + FT_Short* read; + + + globals->memory = memory; + + /* copy standard widths */ + { + PSH_Dimension dim = &globals->dimension[1]; + PSH_Width write = dim->stdw.widths; + + + write->org = priv->standard_width[0]; + write++; + + read = priv->snap_widths; + for ( count = priv->num_snap_widths; count > 0; count-- ) + { + write->org = *read; + write++; + read++; + } + + dim->stdw.count = priv->num_snap_widths + 1; + } + + /* copy standard heights */ + { + PSH_Dimension dim = &globals->dimension[0]; + PSH_Width write = dim->stdw.widths; + + + write->org = priv->standard_height[0]; + write++; + read = priv->snap_heights; + for ( count = priv->num_snap_heights; count > 0; count-- ) + { + write->org = *read; + write++; + read++; + } + + dim->stdw.count = priv->num_snap_heights + 1; + } + + /* copy blue zones */ + psh_blues_set_zones( &globals->blues, priv->num_blue_values, + priv->blue_values, priv->num_other_blues, + priv->other_blues, priv->blue_fuzz, 0 ); + + psh_blues_set_zones( &globals->blues, priv->num_family_blues, + priv->family_blues, priv->num_family_other_blues, + priv->family_other_blues, priv->blue_fuzz, 1 ); + + /* limit the BlueScale value to `1 / max_of_blue_zone_heights' */ + { + FT_Fixed max_scale; + FT_Short max_height = 1; + + + max_height = psh_calc_max_height( priv->num_blue_values, + priv->blue_values, + max_height ); + max_height = psh_calc_max_height( priv->num_other_blues, + priv->other_blues, + max_height ); + max_height = psh_calc_max_height( priv->num_family_blues, + priv->family_blues, + max_height ); + max_height = psh_calc_max_height( priv->num_family_other_blues, + priv->family_other_blues, + max_height ); + + /* BlueScale is scaled 1000 times */ + max_scale = FT_DivFix( 1000, max_height ); + globals->blues.blue_scale = priv->blue_scale < max_scale + ? priv->blue_scale + : max_scale; + } + + globals->blues.blue_shift = priv->blue_shift; + globals->blues.blue_fuzz = priv->blue_fuzz; + + globals->dimension[0].scale_mult = 0; + globals->dimension[0].scale_delta = 0; + globals->dimension[1].scale_mult = 0; + globals->dimension[1].scale_delta = 0; + +#ifdef DEBUG_HINTER + ps_debug_globals = globals; +#endif + } + + *aglobals = globals; + return error; + } + + + FT_LOCAL_DEF( void ) + psh_globals_set_scale( PSH_Globals globals, + FT_Fixed x_scale, + FT_Fixed y_scale, + FT_Fixed x_delta, + FT_Fixed y_delta ) + { + PSH_Dimension dim; + + + dim = &globals->dimension[0]; + if ( x_scale != dim->scale_mult || + x_delta != dim->scale_delta ) + { + dim->scale_mult = x_scale; + dim->scale_delta = x_delta; + + psh_globals_scale_widths( globals, 0 ); + } + + dim = &globals->dimension[1]; + if ( y_scale != dim->scale_mult || + y_delta != dim->scale_delta ) + { + dim->scale_mult = y_scale; + dim->scale_delta = y_delta; + + psh_globals_scale_widths( globals, 1 ); + psh_blues_scale_zones( &globals->blues, y_scale, y_delta ); + } + } + + + FT_LOCAL_DEF( void ) + psh_globals_funcs_init( PSH_Globals_FuncsRec* funcs ) + { + funcs->create = psh_globals_new; + funcs->set_scale = psh_globals_set_scale; + funcs->destroy = psh_globals_destroy; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshglob.h b/non-source/foreign/freetype2/src/pshinter/pshglob.h new file mode 100644 index 000000000..c5a5c9131 --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshglob.h @@ -0,0 +1,196 @@ +/**************************************************************************** + * + * pshglob.h + * + * PostScript hinter global hinting management. + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSHGLOB_H_ +#define PSHGLOB_H_ + + +#include <freetype/freetype.h> +#include <freetype/internal/pshints.h> + + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** GLOBAL HINTS INTERNALS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @constant: + * PS_GLOBALS_MAX_BLUE_ZONES + * + * @description: + * The maximum number of blue zones in a font global hints structure. + * See @PS_Globals_BluesRec. + */ +#define PS_GLOBALS_MAX_BLUE_ZONES 16 + + + /************************************************************************** + * + * @constant: + * PS_GLOBALS_MAX_STD_WIDTHS + * + * @description: + * The maximum number of standard and snap widths in either the + * horizontal or vertical direction. See @PS_Globals_WidthsRec. + */ +#define PS_GLOBALS_MAX_STD_WIDTHS 16 + + + /* standard and snap width */ + typedef struct PSH_WidthRec_ + { + FT_Int org; + FT_Pos cur; + FT_Pos fit; + + } PSH_WidthRec, *PSH_Width; + + + /* standard and snap widths table */ + typedef struct PSH_WidthsRec_ + { + FT_UInt count; + PSH_WidthRec widths[PS_GLOBALS_MAX_STD_WIDTHS]; + + } PSH_WidthsRec, *PSH_Widths; + + + typedef struct PSH_DimensionRec_ + { + PSH_WidthsRec stdw; + FT_Fixed scale_mult; + FT_Fixed scale_delta; + + } PSH_DimensionRec, *PSH_Dimension; + + + /* blue zone descriptor */ + typedef struct PSH_Blue_ZoneRec_ + { + FT_Int org_ref; + FT_Int org_delta; + FT_Int org_top; + FT_Int org_bottom; + + FT_Pos cur_ref; + FT_Pos cur_delta; + FT_Pos cur_bottom; + FT_Pos cur_top; + + } PSH_Blue_ZoneRec, *PSH_Blue_Zone; + + + typedef struct PSH_Blue_TableRec_ + { + FT_UInt count; + PSH_Blue_ZoneRec zones[PS_GLOBALS_MAX_BLUE_ZONES]; + + } PSH_Blue_TableRec, *PSH_Blue_Table; + + + /* blue zones table */ + typedef struct PSH_BluesRec_ + { + PSH_Blue_TableRec normal_top; + PSH_Blue_TableRec normal_bottom; + PSH_Blue_TableRec family_top; + PSH_Blue_TableRec family_bottom; + + FT_Fixed blue_scale; + FT_Int blue_shift; + FT_Int blue_threshold; + FT_Int blue_fuzz; + FT_Bool no_overshoots; + + } PSH_BluesRec, *PSH_Blues; + + + /* font globals. */ + /* dimension 0 => X coordinates + vertical hints/stems */ + /* dimension 1 => Y coordinates + horizontal hints/stems */ + typedef struct PSH_GlobalsRec_ + { + FT_Memory memory; + PSH_DimensionRec dimension[2]; + PSH_BluesRec blues; + + } PSH_GlobalsRec; + + +#define PSH_BLUE_ALIGN_NONE 0 +#define PSH_BLUE_ALIGN_TOP 1 +#define PSH_BLUE_ALIGN_BOT 2 + + + typedef struct PSH_AlignmentRec_ + { + int align; + FT_Pos align_top; + FT_Pos align_bot; + + } PSH_AlignmentRec, *PSH_Alignment; + + + FT_LOCAL( void ) + psh_globals_funcs_init( PSH_Globals_FuncsRec* funcs ); + + +#if 0 + /* snap a stem width to fitter coordinates. `org_width' is in font */ + /* units. The result is in device pixels (26.6 format). */ + FT_LOCAL( FT_Pos ) + psh_dimension_snap_width( PSH_Dimension dimension, + FT_Int org_width ); +#endif + + FT_LOCAL( void ) + psh_globals_set_scale( PSH_Globals globals, + FT_Fixed x_scale, + FT_Fixed y_scale, + FT_Fixed x_delta, + FT_Fixed y_delta ); + + /* snap a stem to one or two blue zones */ + FT_LOCAL( void ) + psh_blues_snap_stem( PSH_Blues blues, + FT_Int stem_top, + FT_Int stem_bot, + PSH_Alignment alignment ); + /* */ + +#ifdef DEBUG_HINTER + extern PSH_Globals ps_debug_globals; +#endif + + +FT_END_HEADER + + +#endif /* PSHGLOB_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshinter.c b/non-source/foreign/freetype2/src/pshinter/pshinter.c new file mode 100644 index 000000000..ae2b53fee --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshinter.c @@ -0,0 +1,27 @@ +/**************************************************************************** + * + * pshinter.c + * + * FreeType PostScript Hinting module + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "pshalgo.c" +#include "pshglob.c" +#include "pshmod.c" +#include "pshrec.c" + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshmod.c b/non-source/foreign/freetype2/src/pshinter/pshmod.c new file mode 100644 index 000000000..9965d5b16 --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshmod.c @@ -0,0 +1,125 @@ +/**************************************************************************** + * + * pshmod.c + * + * FreeType PostScript hinter module implementation (body). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftobjs.h> +#include "pshrec.h" +#include "pshalgo.h" +#include "pshmod.h" + + + /* the Postscript Hinter module structure */ + typedef struct PS_Hinter_Module_Rec_ + { + FT_ModuleRec root; + PS_HintsRec ps_hints; + + PSH_Globals_FuncsRec globals_funcs; + T1_Hints_FuncsRec t1_funcs; + T2_Hints_FuncsRec t2_funcs; + + } PS_Hinter_ModuleRec, *PS_Hinter_Module; + + + /* finalize module */ + FT_CALLBACK_DEF( void ) + ps_hinter_done( FT_Module module_ ) /* PS_Hinter_Module */ + { + PS_Hinter_Module module = (PS_Hinter_Module)module_; + + + module->t1_funcs.hints = NULL; + module->t2_funcs.hints = NULL; + + ps_hints_done( &module->ps_hints ); + } + + + /* initialize module, create hints recorder and the interface */ + FT_CALLBACK_DEF( FT_Error ) + ps_hinter_init( FT_Module module_ ) /* PS_Hinter_Module */ + { + PS_Hinter_Module module = (PS_Hinter_Module)module_; + + FT_Memory memory = module->root.memory; + void* ph = &module->ps_hints; + + + ps_hints_init( &module->ps_hints, memory ); + + psh_globals_funcs_init( &module->globals_funcs ); + + t1_hints_funcs_init( &module->t1_funcs ); + module->t1_funcs.hints = (T1_Hints)ph; + + t2_hints_funcs_init( &module->t2_funcs ); + module->t2_funcs.hints = (T2_Hints)ph; + + return 0; + } + + + /* returns global hints interface */ + FT_CALLBACK_DEF( PSH_Globals_Funcs ) + pshinter_get_globals_funcs( FT_Module module ) + { + return &((PS_Hinter_Module)module)->globals_funcs; + } + + + /* return Type 1 hints interface */ + FT_CALLBACK_DEF( T1_Hints_Funcs ) + pshinter_get_t1_funcs( FT_Module module ) + { + return &((PS_Hinter_Module)module)->t1_funcs; + } + + + /* return Type 2 hints interface */ + FT_CALLBACK_DEF( T2_Hints_Funcs ) + pshinter_get_t2_funcs( FT_Module module ) + { + return &((PS_Hinter_Module)module)->t2_funcs; + } + + + FT_DEFINE_PSHINTER_INTERFACE( + pshinter_interface, + + pshinter_get_globals_funcs, + pshinter_get_t1_funcs, + pshinter_get_t2_funcs + ) + + + FT_DEFINE_MODULE( + pshinter_module_class, + + 0, + sizeof ( PS_Hinter_ModuleRec ), + "pshinter", + 0x10000L, + 0x20000L, + + &pshinter_interface, /* module-specific interface */ + + (FT_Module_Constructor)ps_hinter_init, /* module_init */ + (FT_Module_Destructor) ps_hinter_done, /* module_done */ + (FT_Module_Requester) NULL /* get_interface */ + ) + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshmod.h b/non-source/foreign/freetype2/src/pshinter/pshmod.h new file mode 100644 index 000000000..62ac0a60f --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshmod.h @@ -0,0 +1,38 @@ +/**************************************************************************** + * + * pshmod.h + * + * PostScript hinter module interface (specification). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSHMOD_H_ +#define PSHMOD_H_ + + +#include <freetype/ftmodapi.h> + + +FT_BEGIN_HEADER + + + FT_DECLARE_MODULE( pshinter_module_class ) + + +FT_END_HEADER + + +#endif /* PSHMOD_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshnterr.h b/non-source/foreign/freetype2/src/pshinter/pshnterr.h new file mode 100644 index 000000000..e9641340e --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshnterr.h @@ -0,0 +1,41 @@ +/**************************************************************************** + * + * pshnterr.h + * + * PS Hinter error codes (specification only). + * + * Copyright (C) 2003-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the PSHinter error enumeration constants. + * + */ + +#ifndef PSHNTERR_H_ +#define PSHNTERR_H_ + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX PSH_Err_ +#define FT_ERR_BASE FT_Mod_Err_PShinter + +#include <freetype/fterrors.h> + +#endif /* PSHNTERR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshrec.c b/non-source/foreign/freetype2/src/pshinter/pshrec.c new file mode 100644 index 000000000..0b2b549fc --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshrec.c @@ -0,0 +1,1224 @@ +/**************************************************************************** + * + * pshrec.c + * + * FreeType PostScript hints recorder (body). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/freetype.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftcalc.h> + +#include "pshrec.h" +#include "pshalgo.h" + +#include "pshnterr.h" + +#undef FT_COMPONENT +#define FT_COMPONENT pshrec + +#ifdef DEBUG_HINTER + PS_Hints ps_debug_hints = NULL; + int ps_debug_no_horz_hints = 0; + int ps_debug_no_vert_hints = 0; +#endif + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS_HINT MANAGEMENT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* destroy hints table */ + static void + ps_hint_table_done( PS_Hint_Table table, + FT_Memory memory ) + { + FT_FREE( table->hints ); + table->num_hints = 0; + table->max_hints = 0; + } + + + /* ensure that a table can contain "count" elements */ + static FT_Error + ps_hint_table_ensure( PS_Hint_Table table, + FT_UInt count, + FT_Memory memory ) + { + FT_UInt old_max = table->max_hints; + FT_UInt new_max = count; + FT_Error error; + + + /* try to grow the table */ + new_max = FT_PAD_CEIL( new_max, 8 ); + if ( !FT_QRENEW_ARRAY( table->hints, old_max, new_max ) ) + table->max_hints = new_max; + + return error; + } + + + static FT_Error + ps_hint_table_alloc( PS_Hint_Table table, + FT_Memory memory, + PS_Hint *ahint ) + { + FT_Error error = FT_Err_Ok; + FT_UInt count; + PS_Hint hint = NULL; + + + count = table->num_hints; + count++; + + if ( count > table->max_hints ) + { + error = ps_hint_table_ensure( table, count, memory ); + if ( error ) + goto Exit; + } + + hint = table->hints + count - 1; /* initialized upstream */ + + table->num_hints = count; + + Exit: + *ahint = hint; + return error; + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS_MASK MANAGEMENT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* destroy mask */ + static void + ps_mask_done( PS_Mask mask, + FT_Memory memory ) + { + FT_FREE( mask->bytes ); + mask->num_bits = 0; + mask->max_bits = 0; + mask->end_point = 0; + } + + + /* ensure that a mask can contain "count" bits */ + static FT_Error + ps_mask_ensure( PS_Mask mask, + FT_UInt count, + FT_Memory memory ) + { + FT_UInt old_max = mask->max_bits >> 3; + FT_UInt new_max = ( count + 7 ) >> 3; + FT_Error error = FT_Err_Ok; + + + if ( new_max > old_max ) + { + new_max = FT_PAD_CEIL( new_max, 8 ); + /* added bytes are zeroed here */ + if ( !FT_RENEW_ARRAY( mask->bytes, old_max, new_max ) ) + mask->max_bits = new_max * 8; + } + return error; + } + + + /* test a bit value in a given mask */ + static FT_Int + ps_mask_test_bit( PS_Mask mask, + FT_UInt idx ) + { + if ( idx >= mask->num_bits ) + return 0; + + return mask->bytes[idx >> 3] & ( 0x80 >> ( idx & 7 ) ); + } + + + /* set a given bit, possibly grow the mask */ + static FT_Error + ps_mask_set_bit( PS_Mask mask, + FT_UInt idx, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + FT_Byte* p; + + + if ( idx >= mask->num_bits ) + { + error = ps_mask_ensure( mask, idx + 1, memory ); + if ( error ) + goto Exit; + + mask->num_bits = idx + 1; + } + + p = mask->bytes + ( idx >> 3 ); + p[0] = (FT_Byte)( p[0] | ( 0x80 >> ( idx & 7 ) ) ); + + Exit: + return error; + } + + + /* destroy mask table */ + static void + ps_mask_table_done( PS_Mask_Table table, + FT_Memory memory ) + { + FT_UInt count = table->max_masks; + PS_Mask mask = table->masks; + + + for ( ; count > 0; count--, mask++ ) + ps_mask_done( mask, memory ); + + FT_FREE( table->masks ); + table->num_masks = 0; + table->max_masks = 0; + } + + + /* ensure that a mask table can contain "count" masks */ + static FT_Error + ps_mask_table_ensure( PS_Mask_Table table, + FT_UInt count, + FT_Memory memory ) + { + FT_UInt old_max = table->max_masks; + FT_UInt new_max = count; + FT_Error error = FT_Err_Ok; + + + if ( new_max > old_max ) + { + new_max = FT_PAD_CEIL( new_max, 8 ); + if ( !FT_RENEW_ARRAY( table->masks, old_max, new_max ) ) + table->max_masks = new_max; + } + return error; + } + + + /* allocate a new mask in a table */ + static FT_Error + ps_mask_table_alloc( PS_Mask_Table table, + FT_Memory memory, + PS_Mask *amask ) + { + FT_UInt count; + FT_Error error = FT_Err_Ok; + PS_Mask mask = NULL; + + + count = table->num_masks; + count++; + + if ( count > table->max_masks ) + { + error = ps_mask_table_ensure( table, count, memory ); + if ( error ) + goto Exit; + } + + mask = table->masks + count - 1; + mask->num_bits = 0; + mask->end_point = 0; + /* reused mask must be cleared */ + if ( mask->max_bits ) + FT_MEM_ZERO( mask->bytes, mask->max_bits >> 3 ); + + table->num_masks = count; + + Exit: + *amask = mask; + return error; + } + + + /* return last hint mask in a table, create one if the table is empty */ + static FT_Error + ps_mask_table_last( PS_Mask_Table table, + FT_Memory memory, + PS_Mask *amask ) + { + FT_Error error = FT_Err_Ok; + FT_UInt count; + PS_Mask mask; + + + count = table->num_masks; + if ( count == 0 ) + { + error = ps_mask_table_alloc( table, memory, &mask ); + if ( error ) + goto Exit; + } + else + mask = table->masks + count - 1; + + Exit: + *amask = mask; + return error; + } + + + /* set a new mask to a given bit range */ + static FT_Error + ps_mask_table_set_bits( PS_Mask_Table table, + const FT_Byte* source, + FT_UInt bit_pos, + FT_UInt bit_count, + FT_Memory memory ) + { + FT_Error error; + PS_Mask mask; + + + error = ps_mask_table_last( table, memory, &mask ); + if ( error ) + goto Exit; + + error = ps_mask_ensure( mask, bit_count, memory ); + if ( error ) + goto Exit; + + mask->num_bits = bit_count; + + /* now, copy bits */ + { + FT_Byte* read = (FT_Byte*)source + ( bit_pos >> 3 ); + FT_Int rmask = 0x80 >> ( bit_pos & 7 ); + FT_Byte* write = mask->bytes; + FT_Int wmask = 0x80; + FT_Int val; + + + for ( ; bit_count > 0; bit_count-- ) + { + val = write[0] & ~wmask; + + if ( read[0] & rmask ) + val |= wmask; + + write[0] = (FT_Byte)val; + + rmask >>= 1; + if ( rmask == 0 ) + { + read++; + rmask = 0x80; + } + + wmask >>= 1; + if ( wmask == 0 ) + { + write++; + wmask = 0x80; + } + } + } + + Exit: + return error; + } + + + /* test whether two masks in a table intersect */ + static FT_Int + ps_mask_table_test_intersect( PS_Mask_Table table, + FT_UInt index1, + FT_UInt index2 ) + { + PS_Mask mask1 = table->masks + index1; + PS_Mask mask2 = table->masks + index2; + FT_Byte* p1 = mask1->bytes; + FT_Byte* p2 = mask2->bytes; + FT_UInt count1 = mask1->num_bits; + FT_UInt count2 = mask2->num_bits; + FT_UInt count; + + + count = FT_MIN( count1, count2 ); + for ( ; count >= 8; count -= 8 ) + { + if ( p1[0] & p2[0] ) + return 1; + + p1++; + p2++; + } + + if ( count == 0 ) + return 0; + + return ( p1[0] & p2[0] ) & ~( 0xFF >> count ); + } + + + /* merge two masks, used by ps_mask_table_merge_all */ + static FT_Error + ps_mask_table_merge( PS_Mask_Table table, + FT_UInt index1, + FT_UInt index2, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + + + /* swap index1 and index2 so that index1 < index2 */ + if ( index1 > index2 ) + { + FT_UInt temp; + + + temp = index1; + index1 = index2; + index2 = temp; + } + + if ( index1 < index2 && index2 < table->num_masks ) + { + /* we need to merge the bitsets of index1 and index2 with a */ + /* simple union */ + PS_Mask mask1 = table->masks + index1; + PS_Mask mask2 = table->masks + index2; + FT_UInt count1 = mask1->num_bits; + FT_UInt count2 = mask2->num_bits; + FT_UInt delta; + + + if ( count2 > 0 ) + { + FT_UInt pos; + FT_Byte* read; + FT_Byte* write; + + + /* if "count2" is greater than "count1", we need to grow the */ + /* first bitset */ + if ( count2 > count1 ) + { + error = ps_mask_ensure( mask1, count2, memory ); + if ( error ) + goto Exit; + + mask1->num_bits = count2; + } + + /* merge (unite) the bitsets */ + read = mask2->bytes; + write = mask1->bytes; + pos = ( count2 + 7 ) >> 3; + + for ( ; pos > 0; pos-- ) + { + write[0] = (FT_Byte)( write[0] | read[0] ); + write++; + read++; + } + } + + /* Now, remove "mask2" from the list. We need to keep the masks */ + /* sorted in order of importance, so move table elements. */ + mask2->num_bits = 0; + mask2->end_point = 0; + + /* number of masks to move */ + delta = table->num_masks - 1 - index2; + if ( delta > 0 ) + { + /* move to end of table for reuse */ + PS_MaskRec dummy = *mask2; + + + ft_memmove( mask2, + mask2 + 1, + delta * sizeof ( PS_MaskRec ) ); + + mask2[delta] = dummy; + } + + table->num_masks--; + } + else + FT_TRACE0(( "ps_mask_table_merge: ignoring invalid indices (%d,%d)\n", + index1, index2 )); + + Exit: + return error; + } + + + /* Try to merge all masks in a given table. This is used to merge */ + /* all counter masks into independent counter "paths". */ + /* */ + static FT_Error + ps_mask_table_merge_all( PS_Mask_Table table, + FT_Memory memory ) + { + FT_UInt index1, index2; + FT_Error error = FT_Err_Ok; + + + /* the loops stop when unsigned indices wrap around after 0 */ + for ( index1 = table->num_masks - 1; index1 < table->num_masks; index1-- ) + { + for ( index2 = index1 - 1; index2 < index1; index2-- ) + { + if ( ps_mask_table_test_intersect( table, index1, index2 ) ) + { + error = ps_mask_table_merge( table, index2, index1, memory ); + if ( error ) + goto Exit; + + break; + } + } + } + + Exit: + return error; + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS_DIMENSION MANAGEMENT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /* finalize a given dimension */ + static void + ps_dimension_done( PS_Dimension dimension, + FT_Memory memory ) + { + ps_mask_table_done( &dimension->counters, memory ); + ps_mask_table_done( &dimension->masks, memory ); + ps_hint_table_done( &dimension->hints, memory ); + } + + + /* initialize a given dimension */ + static void + ps_dimension_init( PS_Dimension dimension ) + { + dimension->hints.num_hints = 0; + dimension->masks.num_masks = 0; + dimension->counters.num_masks = 0; + } + + +#if 0 + + /* set a bit at a given index in the current hint mask */ + static FT_Error + ps_dimension_set_mask_bit( PS_Dimension dim, + FT_UInt idx, + FT_Memory memory ) + { + PS_Mask mask; + FT_Error error = FT_Err_Ok; + + + /* get last hint mask */ + error = ps_mask_table_last( &dim->masks, memory, &mask ); + if ( error ) + goto Exit; + + error = ps_mask_set_bit( mask, idx, memory ); + + Exit: + return error; + } + +#endif + + /* set the end point in a mask, called from "End" & "Reset" methods */ + static void + ps_dimension_end_mask( PS_Dimension dim, + FT_UInt end_point ) + { + FT_UInt count = dim->masks.num_masks; + + + if ( count > 0 ) + { + PS_Mask mask = dim->masks.masks + count - 1; + + + mask->end_point = end_point; + } + } + + + /* set the end point in the current mask, then create a new empty one */ + /* (called by "Reset" method) */ + static FT_Error + ps_dimension_reset_mask( PS_Dimension dim, + FT_UInt end_point, + FT_Memory memory ) + { + PS_Mask mask; + + + /* end current mask */ + ps_dimension_end_mask( dim, end_point ); + + /* allocate new one */ + return ps_mask_table_alloc( &dim->masks, memory, &mask ); + } + + + /* set a new mask, called from the "T2Stem" method */ + static FT_Error + ps_dimension_set_mask_bits( PS_Dimension dim, + const FT_Byte* source, + FT_UInt source_pos, + FT_UInt source_bits, + FT_UInt end_point, + FT_Memory memory ) + { + FT_Error error; + + + /* reset current mask, if any */ + error = ps_dimension_reset_mask( dim, end_point, memory ); + if ( error ) + goto Exit; + + /* set bits in new mask */ + error = ps_mask_table_set_bits( &dim->masks, source, + source_pos, source_bits, memory ); + + Exit: + return error; + } + + + /* add a new single stem (called from "T1Stem" method) */ + static FT_Error + ps_dimension_add_t1stem( PS_Dimension dim, + FT_Int pos, + FT_Int len, + FT_Memory memory, + FT_UInt *aindex ) + { + FT_Error error = FT_Err_Ok; + FT_UInt flags = 0; + + + /* detect ghost stem */ + if ( len < 0 ) + { + flags |= PS_HINT_FLAG_GHOST; + if ( len == -21 ) + { + flags |= PS_HINT_FLAG_BOTTOM; + pos = ADD_INT( pos, len ); + } + len = 0; + } + + /* now, lookup stem in the current hints table */ + { + PS_Mask mask; + FT_UInt idx; + FT_UInt max = dim->hints.num_hints; + PS_Hint hint = dim->hints.hints; + + + for ( idx = 0; idx < max; idx++, hint++ ) + { + if ( hint->pos == pos && hint->len == len ) + break; + } + + /* we need to create a new hint in the table */ + if ( idx >= max ) + { + error = ps_hint_table_alloc( &dim->hints, memory, &hint ); + if ( error ) + goto Exit; + + hint->pos = pos; + hint->len = len; + hint->flags = flags; + } + + /* now, store the hint in the current mask */ + error = ps_mask_table_last( &dim->masks, memory, &mask ); + if ( error ) + goto Exit; + + error = ps_mask_set_bit( mask, idx, memory ); + if ( error ) + goto Exit; + + if ( aindex ) + *aindex = idx; + } + + Exit: + return error; + } + + + /* add a "hstem3/vstem3" counter to our dimension table */ + static FT_Error + ps_dimension_add_counter( PS_Dimension dim, + FT_UInt hint1, + FT_UInt hint2, + FT_UInt hint3, + FT_Memory memory ) + { + FT_Error error = FT_Err_Ok; + FT_UInt count = dim->counters.num_masks; + PS_Mask counter = dim->counters.masks; + + + /* try to find an existing counter mask that already uses */ + /* one of these stems here */ + for ( ; count > 0; count--, counter++ ) + { + if ( ps_mask_test_bit( counter, hint1 ) || + ps_mask_test_bit( counter, hint2 ) || + ps_mask_test_bit( counter, hint3 ) ) + break; + } + + /* create a new counter when needed */ + if ( count == 0 ) + { + error = ps_mask_table_alloc( &dim->counters, memory, &counter ); + if ( error ) + goto Exit; + } + + /* now, set the bits for our hints in the counter mask */ + error = ps_mask_set_bit( counter, hint1, memory ); + if ( error ) + goto Exit; + + error = ps_mask_set_bit( counter, hint2, memory ); + if ( error ) + goto Exit; + + error = ps_mask_set_bit( counter, hint3, memory ); + if ( error ) + goto Exit; + + Exit: + return error; + } + + + /* end of recording session for a given dimension */ + static FT_Error + ps_dimension_end( PS_Dimension dim, + FT_UInt end_point, + FT_Memory memory ) + { + /* end hint mask table */ + ps_dimension_end_mask( dim, end_point ); + + /* merge all counter masks into independent "paths" */ + return ps_mask_table_merge_all( &dim->counters, memory ); + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PS_RECORDER MANAGEMENT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /* destroy hints */ + FT_LOCAL_DEF( void ) + ps_hints_done( PS_Hints hints ) + { + FT_Memory memory = hints->memory; + + + ps_dimension_done( &hints->dimension[0], memory ); + ps_dimension_done( &hints->dimension[1], memory ); + + hints->error = FT_Err_Ok; + hints->memory = NULL; + } + + + FT_LOCAL_DEF( void ) + ps_hints_init( PS_Hints hints, + FT_Memory memory ) + { + FT_ZERO( hints ); + hints->memory = memory; + } + + + /* initialize a hints for a new session */ + static void + ps_hints_open( PS_Hints hints, + PS_Hint_Type hint_type ) + { + hints->error = FT_Err_Ok; + hints->hint_type = hint_type; + + ps_dimension_init( &hints->dimension[0] ); + ps_dimension_init( &hints->dimension[1] ); + } + + + /* add one or more stems to the current hints table */ + static void + ps_hints_stem( PS_Hints hints, + FT_UInt dimension, + FT_Int count, + FT_Pos* stems ) + { + PS_Dimension dim; + + + if ( hints->error ) + return; + + /* limit "dimension" to 0..1 */ + if ( dimension > 1 ) + { + FT_TRACE0(( "ps_hints_stem: invalid dimension (%d) used\n", + dimension )); + dimension = ( dimension != 0 ); + } + + /* record the stems in the current hints/masks table */ + /* (Type 1 & 2's `hstem' or `vstem' operators) */ + dim = &hints->dimension[dimension]; + + for ( ; count > 0; count--, stems += 2 ) + { + FT_Error error; + FT_Memory memory = hints->memory; + + + error = ps_dimension_add_t1stem( dim, + (FT_Int)stems[0], + (FT_Int)stems[1], + memory, + NULL ); + if ( error ) + { + FT_ERROR(( "ps_hints_stem: could not add stem" + " (%ld,%ld) to hints table\n", stems[0], stems[1] )); + + hints->error = error; + return; + } + } + } + + + /* add one Type1 counter stem to the current hints table */ + static void + ps_hints_t1stem3( T1_Hints hints_, /* PS_Hints */ + FT_UInt dimension, + FT_Fixed* stems ) + { + PS_Hints hints = (PS_Hints)hints_; + FT_Error error = FT_Err_Ok; + + + if ( !hints->error ) + { + PS_Dimension dim; + FT_Memory memory = hints->memory; + FT_Int count; + FT_UInt idx[3]; + + + /* limit "dimension" to 0..1 */ + if ( dimension > 1 ) + { + FT_TRACE0(( "ps_hints_t1stem3: invalid dimension (%d) used\n", + dimension )); + dimension = ( dimension != 0 ); + } + + dim = &hints->dimension[dimension]; + + /* there must be 6 elements in the 'stem' array */ + if ( hints->hint_type == PS_HINT_TYPE_1 ) + { + /* add the three stems to our hints/masks table */ + for ( count = 0; count < 3; count++, stems += 2 ) + { + error = ps_dimension_add_t1stem( dim, + (FT_Int)FIXED_TO_INT( stems[0] ), + (FT_Int)FIXED_TO_INT( stems[1] ), + memory, &idx[count] ); + if ( error ) + goto Fail; + } + + /* now, add the hints to the counters table */ + error = ps_dimension_add_counter( dim, idx[0], idx[1], idx[2], + memory ); + if ( error ) + goto Fail; + } + else + { + FT_ERROR(( "ps_hints_t1stem3: called with invalid hint type\n" )); + error = FT_THROW( Invalid_Argument ); + goto Fail; + } + } + + return; + + Fail: + FT_ERROR(( "ps_hints_t1stem3: could not add counter stems to table\n" )); + hints->error = error; + } + + + /* reset hints (only with Type 1 hints) */ + static void + ps_hints_t1reset( T1_Hints hints_, /* PS_Hints */ + FT_UInt end_point ) + { + PS_Hints hints = (PS_Hints)hints_; + FT_Error error = FT_Err_Ok; + + + if ( !hints->error ) + { + FT_Memory memory = hints->memory; + + + if ( hints->hint_type == PS_HINT_TYPE_1 ) + { + error = ps_dimension_reset_mask( &hints->dimension[0], + end_point, memory ); + if ( error ) + goto Fail; + + error = ps_dimension_reset_mask( &hints->dimension[1], + end_point, memory ); + if ( error ) + goto Fail; + } + else + { + /* invalid hint type */ + error = FT_THROW( Invalid_Argument ); + goto Fail; + } + } + return; + + Fail: + hints->error = error; + } + + + /* Type2 "hintmask" operator, add a new hintmask to each direction */ + static void + ps_hints_t2mask( T2_Hints hints_, /* PS_Hints */ + FT_UInt end_point, + FT_UInt bit_count, + const FT_Byte* bytes ) + { + PS_Hints hints = (PS_Hints)hints_; + FT_Error error; + + + if ( !hints->error ) + { + PS_Dimension dim = hints->dimension; + FT_Memory memory = hints->memory; + FT_UInt count1 = dim[0].hints.num_hints; + FT_UInt count2 = dim[1].hints.num_hints; + + + /* check bit count; must be equal to current total hint count */ + if ( bit_count != count1 + count2 ) + { + FT_TRACE0(( "ps_hints_t2mask:" + " called with invalid bitcount %d (instead of %d)\n", + bit_count, count1 + count2 )); + + /* simply ignore the operator */ + return; + } + + /* set-up new horizontal and vertical hint mask now */ + error = ps_dimension_set_mask_bits( &dim[0], bytes, count2, count1, + end_point, memory ); + if ( error ) + goto Fail; + + error = ps_dimension_set_mask_bits( &dim[1], bytes, 0, count2, + end_point, memory ); + if ( error ) + goto Fail; + } + return; + + Fail: + hints->error = error; + } + + + static void + ps_hints_t2counter( T2_Hints hints_, /* PS_Hints */ + FT_UInt bit_count, + const FT_Byte* bytes ) + { + PS_Hints hints = (PS_Hints)hints_; + FT_Error error; + + + if ( !hints->error ) + { + PS_Dimension dim = hints->dimension; + FT_Memory memory = hints->memory; + FT_UInt count1 = dim[0].hints.num_hints; + FT_UInt count2 = dim[1].hints.num_hints; + + + /* check bit count, must be equal to current total hint count */ + if ( bit_count != count1 + count2 ) + { + FT_TRACE0(( "ps_hints_t2counter:" + " called with invalid bitcount %d (instead of %d)\n", + bit_count, count1 + count2 )); + + /* simply ignore the operator */ + return; + } + + /* set-up new horizontal and vertical hint mask now */ + error = ps_dimension_set_mask_bits( &dim[0], bytes, 0, count1, + 0, memory ); + if ( error ) + goto Fail; + + error = ps_dimension_set_mask_bits( &dim[1], bytes, count1, count2, + 0, memory ); + if ( error ) + goto Fail; + } + return; + + Fail: + hints->error = error; + } + + + /* end recording session */ + static FT_Error + ps_hints_close( PS_Hints hints, + FT_UInt end_point ) + { + FT_Error error; + + + error = hints->error; + if ( !error ) + { + FT_Memory memory = hints->memory; + PS_Dimension dim = hints->dimension; + + + error = ps_dimension_end( &dim[0], end_point, memory ); + if ( !error ) + { + error = ps_dimension_end( &dim[1], end_point, memory ); + } + } + +#ifdef DEBUG_HINTER + if ( !error ) + ps_debug_hints = hints; +#endif + return error; + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE 1 HINTS RECORDING INTERFACE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + static void + t1_hints_open( T1_Hints hints ) + { + ps_hints_open( (PS_Hints)hints, PS_HINT_TYPE_1 ); + } + + static FT_Error + t1_hints_close( T1_Hints hints, + FT_UInt end_point ) + { + return ps_hints_close( (PS_Hints)hints, end_point ); + } + + static void + t1_hints_stem( T1_Hints hints, + FT_UInt dimension, + FT_Fixed* coords ) + { + FT_Pos stems[2]; + + + stems[0] = FIXED_TO_INT( coords[0] ); + stems[1] = FIXED_TO_INT( coords[1] ); + + ps_hints_stem( (PS_Hints)hints, dimension, 1, stems ); + } + + + static FT_Error + t1_hints_apply( T1_Hints hints, + FT_Outline* outline, + PSH_Globals globals, + FT_Render_Mode hint_mode ) + { + return ps_hints_apply( (PS_Hints)hints, outline, globals, hint_mode ); + } + + + FT_LOCAL_DEF( void ) + t1_hints_funcs_init( T1_Hints_FuncsRec* funcs ) + { + FT_ZERO( funcs ); + + funcs->open = (T1_Hints_OpenFunc) t1_hints_open; + funcs->close = (T1_Hints_CloseFunc) t1_hints_close; + funcs->stem = (T1_Hints_SetStemFunc) t1_hints_stem; + funcs->stem3 = (T1_Hints_SetStem3Func)ps_hints_t1stem3; + funcs->reset = (T1_Hints_ResetFunc) ps_hints_t1reset; + funcs->apply = (T1_Hints_ApplyFunc) t1_hints_apply; + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** TYPE 2 HINTS RECORDING INTERFACE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + static void + t2_hints_open( T2_Hints hints ) + { + ps_hints_open( (PS_Hints)hints, PS_HINT_TYPE_2 ); + } + + + static FT_Error + t2_hints_close( T2_Hints hints, + FT_UInt end_point ) + { + return ps_hints_close( (PS_Hints)hints, end_point ); + } + + + static void + t2_hints_stems( T2_Hints hints, + FT_UInt dimension, + FT_Int count, + FT_Fixed* coords ) + { + FT_Pos stems[32], y; + FT_Int total = count, n; + + + y = 0; + while ( total > 0 ) + { + /* determine number of stems to write */ + count = total; + if ( count > 16 ) + count = 16; + + /* compute integer stem positions in font units */ + for ( n = 0; n < count * 2; n++ ) + { + y = ADD_LONG( y, coords[n] ); + stems[n] = FIXED_TO_INT( y ); + } + + /* compute lengths */ + for ( n = 0; n < count * 2; n += 2 ) + stems[n + 1] = stems[n + 1] - stems[n]; + + /* add them to the current dimension */ + ps_hints_stem( (PS_Hints)hints, dimension, count, stems ); + + total -= count; + } + } + + + static FT_Error + t2_hints_apply( T2_Hints hints, + FT_Outline* outline, + PSH_Globals globals, + FT_Render_Mode hint_mode ) + { + return ps_hints_apply( (PS_Hints)hints, outline, globals, hint_mode ); + } + + + FT_LOCAL_DEF( void ) + t2_hints_funcs_init( T2_Hints_FuncsRec* funcs ) + { + FT_ZERO( funcs ); + + funcs->open = (T2_Hints_OpenFunc) t2_hints_open; + funcs->close = (T2_Hints_CloseFunc) t2_hints_close; + funcs->stems = (T2_Hints_StemsFunc) t2_hints_stems; + funcs->hintmask = (T2_Hints_MaskFunc) ps_hints_t2mask; + funcs->counter = (T2_Hints_CounterFunc)ps_hints_t2counter; + funcs->apply = (T2_Hints_ApplyFunc) t2_hints_apply; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/pshinter/pshrec.h b/non-source/foreign/freetype2/src/pshinter/pshrec.h new file mode 100644 index 000000000..7e375af7b --- /dev/null +++ b/non-source/foreign/freetype2/src/pshinter/pshrec.h @@ -0,0 +1,171 @@ +/**************************************************************************** + * + * pshrec.h + * + * Postscript (Type1/Type2) hints recorder (specification). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /*************************************************************************** + * + * The functions defined here are called from the Type 1, CID and CFF + * font drivers to record the hints of a given character/glyph. + * + * The hints are recorded in a unified format, and are later processed + * by the `optimizer' and `fitter' to adjust the outlines to the pixel + * grid. + * + */ + + +#ifndef PSHREC_H_ +#define PSHREC_H_ + + +#include <freetype/internal/pshints.h> +#include "pshglob.h" + + +FT_BEGIN_HEADER + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** GLYPH HINTS RECORDER INTERNALS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* handle to hint record */ + typedef struct PS_HintRec_* PS_Hint; + + /* hint types */ + typedef enum PS_Hint_Type_ + { + PS_HINT_TYPE_1 = 1, + PS_HINT_TYPE_2 = 2 + + } PS_Hint_Type; + + + /* hint flags */ +#define PS_HINT_FLAG_GHOST 1U +#define PS_HINT_FLAG_BOTTOM 2U + + + /* hint descriptor */ + typedef struct PS_HintRec_ + { + FT_Int pos; + FT_Int len; + FT_UInt flags; + + } PS_HintRec; + + +#define ps_hint_is_active( x ) ( (x)->flags & PS_HINT_FLAG_ACTIVE ) +#define ps_hint_is_ghost( x ) ( (x)->flags & PS_HINT_FLAG_GHOST ) +#define ps_hint_is_bottom( x ) ( (x)->flags & PS_HINT_FLAG_BOTTOM ) + + + /* hints table descriptor */ + typedef struct PS_Hint_TableRec_ + { + FT_UInt num_hints; + FT_UInt max_hints; + PS_Hint hints; + + } PS_Hint_TableRec, *PS_Hint_Table; + + + /* hint and counter mask descriptor */ + typedef struct PS_MaskRec_ + { + FT_UInt num_bits; + FT_UInt max_bits; + FT_Byte* bytes; + FT_UInt end_point; + + } PS_MaskRec, *PS_Mask; + + + /* masks and counters table descriptor */ + typedef struct PS_Mask_TableRec_ + { + FT_UInt num_masks; + FT_UInt max_masks; + PS_Mask masks; + + } PS_Mask_TableRec, *PS_Mask_Table; + + + /* dimension-specific hints descriptor */ + typedef struct PS_DimensionRec_ + { + PS_Hint_TableRec hints; + PS_Mask_TableRec masks; + PS_Mask_TableRec counters; + + } PS_DimensionRec, *PS_Dimension; + + + /* glyph hints descriptor */ + /* dimension 0 => X coordinates + vertical hints/stems */ + /* dimension 1 => Y coordinates + horizontal hints/stems */ + typedef struct PS_HintsRec_ + { + FT_Memory memory; + FT_Error error; + FT_UInt32 magic; + PS_Hint_Type hint_type; + PS_DimensionRec dimension[2]; + + } PS_HintsRec, *PS_Hints; + + /* */ + + /* initialize hints recorder */ + FT_LOCAL( void ) + ps_hints_init( PS_Hints hints, + FT_Memory memory ); + + /* finalize hints recorder */ + FT_LOCAL( void ) + ps_hints_done( PS_Hints hints ); + + /* initialize Type1 hints recorder interface */ + FT_LOCAL( void ) + t1_hints_funcs_init( T1_Hints_FuncsRec* funcs ); + + /* initialize Type2 hints recorder interface */ + FT_LOCAL( void ) + t2_hints_funcs_init( T2_Hints_FuncsRec* funcs ); + + +#ifdef DEBUG_HINTER + extern PS_Hints ps_debug_hints; + extern int ps_debug_no_horz_hints; + extern int ps_debug_no_vert_hints; +#endif + + /* */ + + +FT_END_HEADER + + +#endif /* PSHREC_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psnames/psmodule.c b/non-source/foreign/freetype2/src/psnames/psmodule.c new file mode 100644 index 000000000..35d054d1c --- /dev/null +++ b/non-source/foreign/freetype2/src/psnames/psmodule.c @@ -0,0 +1,621 @@ +/**************************************************************************** + * + * psmodule.c + * + * psnames module implementation (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/services/svpscmap.h> + +#include "psmodule.h" + + /* + * The file `pstables.h' with its arrays and its function + * `ft_get_adobe_glyph_index' is useful for other projects also (for + * example, `pdfium' is using it). However, if used as a C++ header, + * including it in two different source files makes it necessary to use + * `extern const' for the declaration of its arrays, otherwise the data + * would be duplicated as mandated by the C++ standard. + * + * For this reason, we use `DEFINE_PS_TABLES' to guard the function + * definitions, and `DEFINE_PS_TABLES_DATA' to provide both proper array + * declarations and definitions. + */ +#include "pstables.h" +#define DEFINE_PS_TABLES +#define DEFINE_PS_TABLES_DATA +#include "pstables.h" + +#include "psnamerr.h" + + +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + +#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST + + +#define VARIANT_BIT 0x80000000UL +#define BASE_GLYPH( code ) ( (FT_UInt32)( (code) & ~VARIANT_BIT ) ) + + + /* Return the Unicode value corresponding to a given glyph. Note that */ + /* we do deal with glyph variants by detecting a non-initial dot in */ + /* the name, as in `A.swash' or `e.final'; in this case, the */ + /* VARIANT_BIT is set in the return value. */ + /* */ + FT_CALLBACK_DEF( FT_UInt32 ) + ps_unicode_value( const char* glyph_name ) + { + /* If the name begins with `uni', then the glyph name may be a */ + /* hard-coded unicode character code. */ + if ( glyph_name[0] == 'u' && + glyph_name[1] == 'n' && + glyph_name[2] == 'i' ) + { + /* determine whether the next four characters following are */ + /* hexadecimal. */ + + /* XXX: Add code to deal with ligatures, i.e. glyph names like */ + /* `uniXXXXYYYYZZZZ'... */ + + FT_Int count; + FT_UInt32 value = 0; + const char* p = glyph_name + 3; + + + for ( count = 4; count > 0; count--, p++ ) + { + char c = *p; + unsigned int d; + + + d = (unsigned char)c - '0'; + if ( d >= 10 ) + { + d = (unsigned char)c - 'A'; + if ( d >= 6 ) + d = 16; + else + d += 10; + } + + /* Exit if a non-uppercase hexadecimal character was found */ + /* -- this also catches character codes below `0' since such */ + /* negative numbers cast to `unsigned int' are far too big. */ + if ( d >= 16 ) + break; + + value = ( value << 4 ) + d; + } + + /* there must be exactly four hex digits */ + if ( count == 0 ) + { + if ( *p == '\0' ) + return value; + if ( *p == '.' ) + return (FT_UInt32)( value | VARIANT_BIT ); + } + } + + /* If the name begins with `u', followed by four to six uppercase */ + /* hexadecimal digits, it is a hard-coded unicode character code. */ + if ( glyph_name[0] == 'u' ) + { + FT_Int count; + FT_UInt32 value = 0; + const char* p = glyph_name + 1; + + + for ( count = 6; count > 0; count--, p++ ) + { + char c = *p; + unsigned int d; + + + d = (unsigned char)c - '0'; + if ( d >= 10 ) + { + d = (unsigned char)c - 'A'; + if ( d >= 6 ) + d = 16; + else + d += 10; + } + + if ( d >= 16 ) + break; + + value = ( value << 4 ) + d; + } + + if ( count <= 2 ) + { + if ( *p == '\0' ) + return value; + if ( *p == '.' ) + return (FT_UInt32)( value | VARIANT_BIT ); + } + } + + /* Look for a non-initial dot in the glyph name in order to */ + /* find variants like `A.swash', `e.final', etc. */ + { + FT_UInt32 value = 0; + const char* p = glyph_name; + + + for ( ; *p && *p != '.'; p++ ) + ; + + /* now look up the glyph in the Adobe Glyph List; */ + /* `.notdef', `.null' and the empty name are short cut */ + if ( p > glyph_name ) + { + value = (FT_UInt32)ft_get_adobe_glyph_index( glyph_name, p ); + + if ( *p == '.' ) + value |= (FT_UInt32)VARIANT_BIT; + } + + return value; + } + } + + + /* ft_qsort callback to sort the unicode map */ + FT_COMPARE_DEF( int ) + compare_uni_maps( const void* a, + const void* b ) + { + PS_UniMap* map1 = (PS_UniMap*)a; + PS_UniMap* map2 = (PS_UniMap*)b; + FT_UInt32 unicode1 = BASE_GLYPH( map1->unicode ); + FT_UInt32 unicode2 = BASE_GLYPH( map2->unicode ); + + + /* sort base glyphs before glyph variants */ + if ( unicode1 == unicode2 ) + { + if ( map1->unicode > map2->unicode ) + return 1; + else if ( map1->unicode < map2->unicode ) + return -1; + else + return 0; + } + else + { + if ( unicode1 > unicode2 ) + return 1; + else if ( unicode1 < unicode2 ) + return -1; + else + return 0; + } + } + + + /* support for extra glyphs not handled (well) in AGL; */ + /* we add extra mappings for them if necessary */ + +#define EXTRA_GLYPH_LIST_SIZE 10 + + static const FT_UInt32 ft_extra_glyph_unicodes[EXTRA_GLYPH_LIST_SIZE] = + { + /* WGL 4 */ + 0x0394, + 0x03A9, + 0x2215, + 0x00AD, + 0x02C9, + 0x03BC, + 0x2219, + 0x00A0, + /* Romanian */ + 0x021A, + 0x021B + }; + + static const char ft_extra_glyph_names[] = + { + 'D','e','l','t','a',0, + 'O','m','e','g','a',0, + 'f','r','a','c','t','i','o','n',0, + 'h','y','p','h','e','n',0, + 'm','a','c','r','o','n',0, + 'm','u',0, + 'p','e','r','i','o','d','c','e','n','t','e','r','e','d',0, + 's','p','a','c','e',0, + 'T','c','o','m','m','a','a','c','c','e','n','t',0, + 't','c','o','m','m','a','a','c','c','e','n','t',0 + }; + + static const FT_Int + ft_extra_glyph_name_offsets[EXTRA_GLYPH_LIST_SIZE] = + { + 0, + 6, + 12, + 21, + 28, + 35, + 38, + 53, + 59, + 72 + }; + + + static void + ps_check_extra_glyph_name( const char* gname, + FT_UInt glyph, + FT_UInt* extra_glyphs, + FT_UInt *states ) + { + FT_UInt n; + + + for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ ) + { + if ( ft_strcmp( ft_extra_glyph_names + + ft_extra_glyph_name_offsets[n], gname ) == 0 ) + { + if ( states[n] == 0 ) + { + /* mark this extra glyph as a candidate for the cmap */ + states[n] = 1; + extra_glyphs[n] = glyph; + } + + return; + } + } + } + + + static void + ps_check_extra_glyph_unicode( FT_UInt32 uni_char, + FT_UInt *states ) + { + FT_UInt n; + + + for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ ) + { + if ( uni_char == ft_extra_glyph_unicodes[n] ) + { + /* disable this extra glyph from being added to the cmap */ + states[n] = 2; + + return; + } + } + } + + + /* Build a table that maps Unicode values to glyph indices. */ + FT_CALLBACK_DEF( FT_Error ) + ps_unicodes_init( FT_Memory memory, + PS_Unicodes table, + FT_UInt num_glyphs, + PS_GetGlyphNameFunc get_glyph_name, + PS_FreeGlyphNameFunc free_glyph_name, + FT_Pointer glyph_data ) + { + FT_Error error; + + FT_UInt extra_glyph_list_states[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + FT_UInt extra_glyphs[EXTRA_GLYPH_LIST_SIZE]; + + + /* we first allocate the table */ + table->num_maps = 0; + + if ( !FT_QNEW_ARRAY( table->maps, num_glyphs + EXTRA_GLYPH_LIST_SIZE ) ) + { + FT_UInt n; + FT_UInt count; + PS_UniMap* map; + FT_UInt32 uni_char; + + + map = table->maps; + + for ( n = 0; n < num_glyphs; n++ ) + { + const char* gname = get_glyph_name( glyph_data, n ); + + + if ( gname && *gname ) + { + ps_check_extra_glyph_name( gname, n, + extra_glyphs, extra_glyph_list_states ); + uni_char = ps_unicode_value( gname ); + + if ( BASE_GLYPH( uni_char ) != 0 ) + { + ps_check_extra_glyph_unicode( uni_char, + extra_glyph_list_states ); + map->unicode = uni_char; + map->glyph_index = n; + map++; + } + + if ( free_glyph_name ) + free_glyph_name( glyph_data, gname ); + } + } + + for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ ) + { + if ( extra_glyph_list_states[n] == 1 ) + { + /* This glyph name has an additional representation. */ + /* Add it to the cmap. */ + + map->unicode = ft_extra_glyph_unicodes[n]; + map->glyph_index = extra_glyphs[n]; + map++; + } + } + + /* now compress the table a bit */ + count = (FT_UInt)( map - table->maps ); + + if ( count == 0 ) + { + /* No unicode chars here! */ + FT_FREE( table->maps ); + if ( !error ) + error = FT_THROW( No_Unicode_Glyph_Name ); + } + else + { + /* Reallocate if the number of used entries is much smaller. */ + if ( count < num_glyphs / 2 ) + { + FT_MEM_QRENEW_ARRAY( table->maps, + num_glyphs + EXTRA_GLYPH_LIST_SIZE, + count ); + error = FT_Err_Ok; + } + + /* Sort the table in increasing order of unicode values, */ + /* taking care of glyph variants. */ + ft_qsort( table->maps, count, sizeof ( PS_UniMap ), + compare_uni_maps ); + } + + table->num_maps = count; + } + + return error; + } + + + FT_CALLBACK_DEF( FT_UInt ) + ps_unicodes_char_index( PS_Unicodes table, + FT_UInt32 unicode ) + { + PS_UniMap *result = NULL; + PS_UniMap *min = table->maps; + PS_UniMap *max = min + table->num_maps; + PS_UniMap *mid = min + ( ( max - min ) >> 1 ); + + + /* Perform a binary search on the table. */ + while ( min < max ) + { + FT_UInt32 base_glyph; + + + if ( mid->unicode == unicode ) + { + result = mid; + break; + } + + base_glyph = BASE_GLYPH( mid->unicode ); + + if ( base_glyph == unicode ) + result = mid; /* remember match but continue search for base glyph */ + + if ( base_glyph < unicode ) + min = mid + 1; + else + max = mid; + + /* reasonable prediction in a continuous block */ + mid += unicode - base_glyph; + if ( mid >= max || mid < min ) + mid = min + ( ( max - min ) >> 1 ); + } + + if ( result ) + return result->glyph_index; + else + return 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + ps_unicodes_char_next( PS_Unicodes table, + FT_UInt32 *unicode ) + { + FT_UInt result = 0; + FT_UInt32 char_code = *unicode + 1; + + + { + FT_UInt min = 0; + FT_UInt max = table->num_maps; + FT_UInt mid = min + ( ( max - min ) >> 1 ); + PS_UniMap* map; + FT_UInt32 base_glyph; + + + while ( min < max ) + { + map = table->maps + mid; + + if ( map->unicode == char_code ) + { + result = map->glyph_index; + goto Exit; + } + + base_glyph = BASE_GLYPH( map->unicode ); + + if ( base_glyph == char_code ) + result = map->glyph_index; + + if ( base_glyph < char_code ) + min = mid + 1; + else + max = mid; + + /* reasonable prediction in a continuous block */ + mid += char_code - base_glyph; + if ( mid >= max || mid < min ) + mid = min + ( max - min ) / 2; + } + + if ( result ) + goto Exit; /* we have a variant glyph */ + + /* we didn't find it; check whether we have a map just above it */ + char_code = 0; + + if ( min < table->num_maps ) + { + map = table->maps + min; + result = map->glyph_index; + char_code = BASE_GLYPH( map->unicode ); + } + } + + Exit: + *unicode = char_code; + return result; + } + + +#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */ + + + FT_CALLBACK_DEF( const char* ) + ps_get_macintosh_name( FT_UInt name_index ) + { + if ( name_index >= FT_NUM_MAC_NAMES ) + name_index = 0; + + return ft_standard_glyph_names + ft_mac_names[name_index]; + } + + + FT_CALLBACK_DEF( const char* ) + ps_get_standard_strings( FT_UInt sid ) + { + if ( sid >= FT_NUM_SID_NAMES ) + return 0; + + return ft_standard_glyph_names + ft_sid_names[sid]; + } + + +#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST + + FT_DEFINE_SERVICE_PSCMAPSREC( + pscmaps_interface, + + ps_unicode_value, /* PS_Unicode_ValueFunc unicode_value */ + ps_unicodes_init, /* PS_Unicodes_InitFunc unicodes_init */ + ps_unicodes_char_index, /* PS_Unicodes_CharIndexFunc unicodes_char_index */ + ps_unicodes_char_next, /* PS_Unicodes_CharNextFunc unicodes_char_next */ + + ps_get_macintosh_name, /* PS_Macintosh_NameFunc macintosh_name */ + ps_get_standard_strings, /* PS_Adobe_Std_StringsFunc adobe_std_strings */ + + t1_standard_encoding, /* adobe_std_encoding */ + t1_expert_encoding /* adobe_expert_encoding */ + ) + +#else + + FT_DEFINE_SERVICE_PSCMAPSREC( + pscmaps_interface, + + NULL, /* PS_Unicode_ValueFunc unicode_value */ + NULL, /* PS_Unicodes_InitFunc unicodes_init */ + NULL, /* PS_Unicodes_CharIndexFunc unicodes_char_index */ + NULL, /* PS_Unicodes_CharNextFunc unicodes_char_next */ + + ps_get_macintosh_name, /* PS_Macintosh_NameFunc macintosh_name */ + ps_get_standard_strings, /* PS_Adobe_Std_StringsFunc adobe_std_strings */ + + t1_standard_encoding, /* adobe_std_encoding */ + t1_expert_encoding /* adobe_expert_encoding */ + ) + +#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */ + + + FT_DEFINE_SERVICEDESCREC1( + pscmaps_services, + + FT_SERVICE_ID_POSTSCRIPT_CMAPS, &pscmaps_interface ) + + + static FT_Pointer + psnames_get_service( FT_Module module, + const char* service_id ) + { + FT_UNUSED( module ); + + return ft_service_list_lookup( pscmaps_services, service_id ); + } + +#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + +#ifndef FT_CONFIG_OPTION_POSTSCRIPT_NAMES +#define PUT_PS_NAMES_SERVICE( a ) NULL +#else +#define PUT_PS_NAMES_SERVICE( a ) a +#endif + + FT_DEFINE_MODULE( + psnames_module_class, + + 0, /* this is not a font driver, nor a renderer */ + sizeof ( FT_ModuleRec ), + + "psnames", /* driver name */ + 0x10000L, /* driver version */ + 0x20000L, /* driver requires FreeType 2 or above */ + + PUT_PS_NAMES_SERVICE( + (void*)&pscmaps_interface ), /* module specific interface */ + + NULL, /* FT_Module_Constructor module_init */ + NULL, /* FT_Module_Destructor module_done */ + PUT_PS_NAMES_SERVICE( psnames_get_service ) /* FT_Module_Requester get_interface */ + ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psnames/psmodule.h b/non-source/foreign/freetype2/src/psnames/psmodule.h new file mode 100644 index 000000000..770458316 --- /dev/null +++ b/non-source/foreign/freetype2/src/psnames/psmodule.h @@ -0,0 +1,37 @@ +/**************************************************************************** + * + * psmodule.h + * + * High-level psnames module interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PSMODULE_H_ +#define PSMODULE_H_ + + +#include <freetype/ftmodapi.h> + + +FT_BEGIN_HEADER + + + FT_DECLARE_MODULE( psnames_module_class ) + + +FT_END_HEADER + +#endif /* PSMODULE_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psnames/psnamerr.h b/non-source/foreign/freetype2/src/psnames/psnamerr.h new file mode 100644 index 000000000..e123eb65e --- /dev/null +++ b/non-source/foreign/freetype2/src/psnames/psnamerr.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * + * psnamerr.h + * + * PS names module error codes (specification only). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the PS names module error enumeration + * constants. + * + */ + +#ifndef PSNAMERR_H_ +#define PSNAMERR_H_ + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX PSnames_Err_ +#define FT_ERR_BASE FT_Mod_Err_PSnames + +#include <freetype/fterrors.h> + +#endif /* PSNAMERR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psnames/psnames.c b/non-source/foreign/freetype2/src/psnames/psnames.c new file mode 100644 index 000000000..2933af1bf --- /dev/null +++ b/non-source/foreign/freetype2/src/psnames/psnames.c @@ -0,0 +1,24 @@ +/**************************************************************************** + * + * psnames.c + * + * FreeType psnames module component (body only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "psmodule.c" + + +/* END */ diff --git a/non-source/foreign/freetype2/src/psnames/pstables.h b/non-source/foreign/freetype2/src/psnames/pstables.h new file mode 100644 index 000000000..2a941b046 --- /dev/null +++ b/non-source/foreign/freetype2/src/psnames/pstables.h @@ -0,0 +1,4238 @@ +/**************************************************************************** + * + * pstables.h + * + * PostScript glyph names. + * + * Copyright (C) 2005-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /* This file has been generated automatically -- do not edit! */ + + +#ifndef DEFINE_PS_TABLES_DATA +#ifdef __cplusplus + extern "C" +#else + extern +#endif +#endif + const char ft_standard_glyph_names[3696] +#ifdef DEFINE_PS_TABLES_DATA + = + { + '.','n','u','l','l', 0, + 'n','o','n','m','a','r','k','i','n','g','r','e','t','u','r','n', 0, + 'n','o','t','e','q','u','a','l', 0, + 'i','n','f','i','n','i','t','y', 0, + 'l','e','s','s','e','q','u','a','l', 0, + 'g','r','e','a','t','e','r','e','q','u','a','l', 0, + 'p','a','r','t','i','a','l','d','i','f','f', 0, + 's','u','m','m','a','t','i','o','n', 0, + 'p','r','o','d','u','c','t', 0, + 'p','i', 0, + 'i','n','t','e','g','r','a','l', 0, + 'O','m','e','g','a', 0, + 'r','a','d','i','c','a','l', 0, + 'a','p','p','r','o','x','e','q','u','a','l', 0, + 'D','e','l','t','a', 0, + 'n','o','n','b','r','e','a','k','i','n','g','s','p','a','c','e', 0, + 'l','o','z','e','n','g','e', 0, + 'a','p','p','l','e', 0, + 'f','r','a','n','c', 0, + 'G','b','r','e','v','e', 0, + 'g','b','r','e','v','e', 0, + 'I','d','o','t','a','c','c','e','n','t', 0, + 'S','c','e','d','i','l','l','a', 0, + 's','c','e','d','i','l','l','a', 0, + 'C','a','c','u','t','e', 0, + 'c','a','c','u','t','e', 0, + 'C','c','a','r','o','n', 0, + 'c','c','a','r','o','n', 0, + 'd','c','r','o','a','t', 0, + '.','n','o','t','d','e','f', 0, + 's','p','a','c','e', 0, + 'e','x','c','l','a','m', 0, + 'q','u','o','t','e','d','b','l', 0, + 'n','u','m','b','e','r','s','i','g','n', 0, + 'd','o','l','l','a','r', 0, + 'p','e','r','c','e','n','t', 0, + 'a','m','p','e','r','s','a','n','d', 0, + 'q','u','o','t','e','r','i','g','h','t', 0, + 'p','a','r','e','n','l','e','f','t', 0, + 'p','a','r','e','n','r','i','g','h','t', 0, + 'a','s','t','e','r','i','s','k', 0, + 'p','l','u','s', 0, + 'c','o','m','m','a', 0, + 'h','y','p','h','e','n', 0, + 'p','e','r','i','o','d', 0, + 's','l','a','s','h', 0, + 'z','e','r','o', 0, + 'o','n','e', 0, + 't','w','o', 0, + 't','h','r','e','e', 0, + 'f','o','u','r', 0, + 'f','i','v','e', 0, + 's','i','x', 0, + 's','e','v','e','n', 0, + 'e','i','g','h','t', 0, + 'n','i','n','e', 0, + 'c','o','l','o','n', 0, + 's','e','m','i','c','o','l','o','n', 0, + 'l','e','s','s', 0, + 'e','q','u','a','l', 0, + 'g','r','e','a','t','e','r', 0, + 'q','u','e','s','t','i','o','n', 0, + 'a','t', 0, + 'A', 0, + 'B', 0, + 'C', 0, + 'D', 0, + 'E', 0, + 'F', 0, + 'G', 0, + 'H', 0, + 'I', 0, + 'J', 0, + 'K', 0, + 'L', 0, + 'M', 0, + 'N', 0, + 'O', 0, + 'P', 0, + 'Q', 0, + 'R', 0, + 'S', 0, + 'T', 0, + 'U', 0, + 'V', 0, + 'W', 0, + 'X', 0, + 'Y', 0, + 'Z', 0, + 'b','r','a','c','k','e','t','l','e','f','t', 0, + 'b','a','c','k','s','l','a','s','h', 0, + 'b','r','a','c','k','e','t','r','i','g','h','t', 0, + 'a','s','c','i','i','c','i','r','c','u','m', 0, + 'u','n','d','e','r','s','c','o','r','e', 0, + 'q','u','o','t','e','l','e','f','t', 0, + 'a', 0, + 'b', 0, + 'c', 0, + 'd', 0, + 'e', 0, + 'f', 0, + 'g', 0, + 'h', 0, + 'i', 0, + 'j', 0, + 'k', 0, + 'l', 0, + 'm', 0, + 'n', 0, + 'o', 0, + 'p', 0, + 'q', 0, + 'r', 0, + 's', 0, + 't', 0, + 'u', 0, + 'v', 0, + 'w', 0, + 'x', 0, + 'y', 0, + 'z', 0, + 'b','r','a','c','e','l','e','f','t', 0, + 'b','a','r', 0, + 'b','r','a','c','e','r','i','g','h','t', 0, + 'a','s','c','i','i','t','i','l','d','e', 0, + 'e','x','c','l','a','m','d','o','w','n', 0, + 'c','e','n','t', 0, + 's','t','e','r','l','i','n','g', 0, + 'f','r','a','c','t','i','o','n', 0, + 'y','e','n', 0, + 'f','l','o','r','i','n', 0, + 's','e','c','t','i','o','n', 0, + 'c','u','r','r','e','n','c','y', 0, + 'q','u','o','t','e','s','i','n','g','l','e', 0, + 'q','u','o','t','e','d','b','l','l','e','f','t', 0, + 'g','u','i','l','l','e','m','o','t','l','e','f','t', 0, + 'g','u','i','l','s','i','n','g','l','l','e','f','t', 0, + 'g','u','i','l','s','i','n','g','l','r','i','g','h','t', 0, + 'f','i', 0, + 'f','l', 0, + 'e','n','d','a','s','h', 0, + 'd','a','g','g','e','r', 0, + 'd','a','g','g','e','r','d','b','l', 0, + 'p','e','r','i','o','d','c','e','n','t','e','r','e','d', 0, + 'p','a','r','a','g','r','a','p','h', 0, + 'b','u','l','l','e','t', 0, + 'q','u','o','t','e','s','i','n','g','l','b','a','s','e', 0, + 'q','u','o','t','e','d','b','l','b','a','s','e', 0, + 'q','u','o','t','e','d','b','l','r','i','g','h','t', 0, + 'g','u','i','l','l','e','m','o','t','r','i','g','h','t', 0, + 'e','l','l','i','p','s','i','s', 0, + 'p','e','r','t','h','o','u','s','a','n','d', 0, + 'q','u','e','s','t','i','o','n','d','o','w','n', 0, + 'g','r','a','v','e', 0, + 'a','c','u','t','e', 0, + 'c','i','r','c','u','m','f','l','e','x', 0, + 't','i','l','d','e', 0, + 'm','a','c','r','o','n', 0, + 'b','r','e','v','e', 0, + 'd','o','t','a','c','c','e','n','t', 0, + 'd','i','e','r','e','s','i','s', 0, + 'r','i','n','g', 0, + 'c','e','d','i','l','l','a', 0, + 'h','u','n','g','a','r','u','m','l','a','u','t', 0, + 'o','g','o','n','e','k', 0, + 'c','a','r','o','n', 0, + 'e','m','d','a','s','h', 0, + 'A','E', 0, + 'o','r','d','f','e','m','i','n','i','n','e', 0, + 'L','s','l','a','s','h', 0, + 'O','s','l','a','s','h', 0, + 'O','E', 0, + 'o','r','d','m','a','s','c','u','l','i','n','e', 0, + 'a','e', 0, + 'd','o','t','l','e','s','s','i', 0, + 'l','s','l','a','s','h', 0, + 'o','s','l','a','s','h', 0, + 'o','e', 0, + 'g','e','r','m','a','n','d','b','l','s', 0, + 'o','n','e','s','u','p','e','r','i','o','r', 0, + 'l','o','g','i','c','a','l','n','o','t', 0, + 'm','u', 0, + 't','r','a','d','e','m','a','r','k', 0, + 'E','t','h', 0, + 'o','n','e','h','a','l','f', 0, + 'p','l','u','s','m','i','n','u','s', 0, + 'T','h','o','r','n', 0, + 'o','n','e','q','u','a','r','t','e','r', 0, + 'd','i','v','i','d','e', 0, + 'b','r','o','k','e','n','b','a','r', 0, + 'd','e','g','r','e','e', 0, + 't','h','o','r','n', 0, + 't','h','r','e','e','q','u','a','r','t','e','r','s', 0, + 't','w','o','s','u','p','e','r','i','o','r', 0, + 'r','e','g','i','s','t','e','r','e','d', 0, + 'm','i','n','u','s', 0, + 'e','t','h', 0, + 'm','u','l','t','i','p','l','y', 0, + 't','h','r','e','e','s','u','p','e','r','i','o','r', 0, + 'c','o','p','y','r','i','g','h','t', 0, + 'A','a','c','u','t','e', 0, + 'A','c','i','r','c','u','m','f','l','e','x', 0, + 'A','d','i','e','r','e','s','i','s', 0, + 'A','g','r','a','v','e', 0, + 'A','r','i','n','g', 0, + 'A','t','i','l','d','e', 0, + 'C','c','e','d','i','l','l','a', 0, + 'E','a','c','u','t','e', 0, + 'E','c','i','r','c','u','m','f','l','e','x', 0, + 'E','d','i','e','r','e','s','i','s', 0, + 'E','g','r','a','v','e', 0, + 'I','a','c','u','t','e', 0, + 'I','c','i','r','c','u','m','f','l','e','x', 0, + 'I','d','i','e','r','e','s','i','s', 0, + 'I','g','r','a','v','e', 0, + 'N','t','i','l','d','e', 0, + 'O','a','c','u','t','e', 0, + 'O','c','i','r','c','u','m','f','l','e','x', 0, + 'O','d','i','e','r','e','s','i','s', 0, + 'O','g','r','a','v','e', 0, + 'O','t','i','l','d','e', 0, + 'S','c','a','r','o','n', 0, + 'U','a','c','u','t','e', 0, + 'U','c','i','r','c','u','m','f','l','e','x', 0, + 'U','d','i','e','r','e','s','i','s', 0, + 'U','g','r','a','v','e', 0, + 'Y','a','c','u','t','e', 0, + 'Y','d','i','e','r','e','s','i','s', 0, + 'Z','c','a','r','o','n', 0, + 'a','a','c','u','t','e', 0, + 'a','c','i','r','c','u','m','f','l','e','x', 0, + 'a','d','i','e','r','e','s','i','s', 0, + 'a','g','r','a','v','e', 0, + 'a','r','i','n','g', 0, + 'a','t','i','l','d','e', 0, + 'c','c','e','d','i','l','l','a', 0, + 'e','a','c','u','t','e', 0, + 'e','c','i','r','c','u','m','f','l','e','x', 0, + 'e','d','i','e','r','e','s','i','s', 0, + 'e','g','r','a','v','e', 0, + 'i','a','c','u','t','e', 0, + 'i','c','i','r','c','u','m','f','l','e','x', 0, + 'i','d','i','e','r','e','s','i','s', 0, + 'i','g','r','a','v','e', 0, + 'n','t','i','l','d','e', 0, + 'o','a','c','u','t','e', 0, + 'o','c','i','r','c','u','m','f','l','e','x', 0, + 'o','d','i','e','r','e','s','i','s', 0, + 'o','g','r','a','v','e', 0, + 'o','t','i','l','d','e', 0, + 's','c','a','r','o','n', 0, + 'u','a','c','u','t','e', 0, + 'u','c','i','r','c','u','m','f','l','e','x', 0, + 'u','d','i','e','r','e','s','i','s', 0, + 'u','g','r','a','v','e', 0, + 'y','a','c','u','t','e', 0, + 'y','d','i','e','r','e','s','i','s', 0, + 'z','c','a','r','o','n', 0, + 'e','x','c','l','a','m','s','m','a','l','l', 0, + 'H','u','n','g','a','r','u','m','l','a','u','t','s','m','a','l','l', 0, + 'd','o','l','l','a','r','o','l','d','s','t','y','l','e', 0, + 'd','o','l','l','a','r','s','u','p','e','r','i','o','r', 0, + 'a','m','p','e','r','s','a','n','d','s','m','a','l','l', 0, + 'A','c','u','t','e','s','m','a','l','l', 0, + 'p','a','r','e','n','l','e','f','t','s','u','p','e','r','i','o','r', 0, + 'p','a','r','e','n','r','i','g','h','t','s','u','p','e','r','i','o','r', 0, + 't','w','o','d','o','t','e','n','l','e','a','d','e','r', 0, + 'o','n','e','d','o','t','e','n','l','e','a','d','e','r', 0, + 'z','e','r','o','o','l','d','s','t','y','l','e', 0, + 'o','n','e','o','l','d','s','t','y','l','e', 0, + 't','w','o','o','l','d','s','t','y','l','e', 0, + 't','h','r','e','e','o','l','d','s','t','y','l','e', 0, + 'f','o','u','r','o','l','d','s','t','y','l','e', 0, + 'f','i','v','e','o','l','d','s','t','y','l','e', 0, + 's','i','x','o','l','d','s','t','y','l','e', 0, + 's','e','v','e','n','o','l','d','s','t','y','l','e', 0, + 'e','i','g','h','t','o','l','d','s','t','y','l','e', 0, + 'n','i','n','e','o','l','d','s','t','y','l','e', 0, + 'c','o','m','m','a','s','u','p','e','r','i','o','r', 0, + 't','h','r','e','e','q','u','a','r','t','e','r','s','e','m','d','a','s','h', 0, + 'p','e','r','i','o','d','s','u','p','e','r','i','o','r', 0, + 'q','u','e','s','t','i','o','n','s','m','a','l','l', 0, + 'a','s','u','p','e','r','i','o','r', 0, + 'b','s','u','p','e','r','i','o','r', 0, + 'c','e','n','t','s','u','p','e','r','i','o','r', 0, + 'd','s','u','p','e','r','i','o','r', 0, + 'e','s','u','p','e','r','i','o','r', 0, + 'i','s','u','p','e','r','i','o','r', 0, + 'l','s','u','p','e','r','i','o','r', 0, + 'm','s','u','p','e','r','i','o','r', 0, + 'n','s','u','p','e','r','i','o','r', 0, + 'o','s','u','p','e','r','i','o','r', 0, + 'r','s','u','p','e','r','i','o','r', 0, + 's','s','u','p','e','r','i','o','r', 0, + 't','s','u','p','e','r','i','o','r', 0, + 'f','f', 0, + 'f','f','i', 0, + 'f','f','l', 0, + 'p','a','r','e','n','l','e','f','t','i','n','f','e','r','i','o','r', 0, + 'p','a','r','e','n','r','i','g','h','t','i','n','f','e','r','i','o','r', 0, + 'C','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0, + 'h','y','p','h','e','n','s','u','p','e','r','i','o','r', 0, + 'G','r','a','v','e','s','m','a','l','l', 0, + 'A','s','m','a','l','l', 0, + 'B','s','m','a','l','l', 0, + 'C','s','m','a','l','l', 0, + 'D','s','m','a','l','l', 0, + 'E','s','m','a','l','l', 0, + 'F','s','m','a','l','l', 0, + 'G','s','m','a','l','l', 0, + 'H','s','m','a','l','l', 0, + 'I','s','m','a','l','l', 0, + 'J','s','m','a','l','l', 0, + 'K','s','m','a','l','l', 0, + 'L','s','m','a','l','l', 0, + 'M','s','m','a','l','l', 0, + 'N','s','m','a','l','l', 0, + 'O','s','m','a','l','l', 0, + 'P','s','m','a','l','l', 0, + 'Q','s','m','a','l','l', 0, + 'R','s','m','a','l','l', 0, + 'S','s','m','a','l','l', 0, + 'T','s','m','a','l','l', 0, + 'U','s','m','a','l','l', 0, + 'V','s','m','a','l','l', 0, + 'W','s','m','a','l','l', 0, + 'X','s','m','a','l','l', 0, + 'Y','s','m','a','l','l', 0, + 'Z','s','m','a','l','l', 0, + 'c','o','l','o','n','m','o','n','e','t','a','r','y', 0, + 'o','n','e','f','i','t','t','e','d', 0, + 'r','u','p','i','a','h', 0, + 'T','i','l','d','e','s','m','a','l','l', 0, + 'e','x','c','l','a','m','d','o','w','n','s','m','a','l','l', 0, + 'c','e','n','t','o','l','d','s','t','y','l','e', 0, + 'L','s','l','a','s','h','s','m','a','l','l', 0, + 'S','c','a','r','o','n','s','m','a','l','l', 0, + 'Z','c','a','r','o','n','s','m','a','l','l', 0, + 'D','i','e','r','e','s','i','s','s','m','a','l','l', 0, + 'B','r','e','v','e','s','m','a','l','l', 0, + 'C','a','r','o','n','s','m','a','l','l', 0, + 'D','o','t','a','c','c','e','n','t','s','m','a','l','l', 0, + 'M','a','c','r','o','n','s','m','a','l','l', 0, + 'f','i','g','u','r','e','d','a','s','h', 0, + 'h','y','p','h','e','n','i','n','f','e','r','i','o','r', 0, + 'O','g','o','n','e','k','s','m','a','l','l', 0, + 'R','i','n','g','s','m','a','l','l', 0, + 'C','e','d','i','l','l','a','s','m','a','l','l', 0, + 'q','u','e','s','t','i','o','n','d','o','w','n','s','m','a','l','l', 0, + 'o','n','e','e','i','g','h','t','h', 0, + 't','h','r','e','e','e','i','g','h','t','h','s', 0, + 'f','i','v','e','e','i','g','h','t','h','s', 0, + 's','e','v','e','n','e','i','g','h','t','h','s', 0, + 'o','n','e','t','h','i','r','d', 0, + 't','w','o','t','h','i','r','d','s', 0, + 'z','e','r','o','s','u','p','e','r','i','o','r', 0, + 'f','o','u','r','s','u','p','e','r','i','o','r', 0, + 'f','i','v','e','s','u','p','e','r','i','o','r', 0, + 's','i','x','s','u','p','e','r','i','o','r', 0, + 's','e','v','e','n','s','u','p','e','r','i','o','r', 0, + 'e','i','g','h','t','s','u','p','e','r','i','o','r', 0, + 'n','i','n','e','s','u','p','e','r','i','o','r', 0, + 'z','e','r','o','i','n','f','e','r','i','o','r', 0, + 'o','n','e','i','n','f','e','r','i','o','r', 0, + 't','w','o','i','n','f','e','r','i','o','r', 0, + 't','h','r','e','e','i','n','f','e','r','i','o','r', 0, + 'f','o','u','r','i','n','f','e','r','i','o','r', 0, + 'f','i','v','e','i','n','f','e','r','i','o','r', 0, + 's','i','x','i','n','f','e','r','i','o','r', 0, + 's','e','v','e','n','i','n','f','e','r','i','o','r', 0, + 'e','i','g','h','t','i','n','f','e','r','i','o','r', 0, + 'n','i','n','e','i','n','f','e','r','i','o','r', 0, + 'c','e','n','t','i','n','f','e','r','i','o','r', 0, + 'd','o','l','l','a','r','i','n','f','e','r','i','o','r', 0, + 'p','e','r','i','o','d','i','n','f','e','r','i','o','r', 0, + 'c','o','m','m','a','i','n','f','e','r','i','o','r', 0, + 'A','g','r','a','v','e','s','m','a','l','l', 0, + 'A','a','c','u','t','e','s','m','a','l','l', 0, + 'A','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0, + 'A','t','i','l','d','e','s','m','a','l','l', 0, + 'A','d','i','e','r','e','s','i','s','s','m','a','l','l', 0, + 'A','r','i','n','g','s','m','a','l','l', 0, + 'A','E','s','m','a','l','l', 0, + 'C','c','e','d','i','l','l','a','s','m','a','l','l', 0, + 'E','g','r','a','v','e','s','m','a','l','l', 0, + 'E','a','c','u','t','e','s','m','a','l','l', 0, + 'E','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0, + 'E','d','i','e','r','e','s','i','s','s','m','a','l','l', 0, + 'I','g','r','a','v','e','s','m','a','l','l', 0, + 'I','a','c','u','t','e','s','m','a','l','l', 0, + 'I','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0, + 'I','d','i','e','r','e','s','i','s','s','m','a','l','l', 0, + 'E','t','h','s','m','a','l','l', 0, + 'N','t','i','l','d','e','s','m','a','l','l', 0, + 'O','g','r','a','v','e','s','m','a','l','l', 0, + 'O','a','c','u','t','e','s','m','a','l','l', 0, + 'O','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0, + 'O','t','i','l','d','e','s','m','a','l','l', 0, + 'O','d','i','e','r','e','s','i','s','s','m','a','l','l', 0, + 'O','E','s','m','a','l','l', 0, + 'O','s','l','a','s','h','s','m','a','l','l', 0, + 'U','g','r','a','v','e','s','m','a','l','l', 0, + 'U','a','c','u','t','e','s','m','a','l','l', 0, + 'U','c','i','r','c','u','m','f','l','e','x','s','m','a','l','l', 0, + 'U','d','i','e','r','e','s','i','s','s','m','a','l','l', 0, + 'Y','a','c','u','t','e','s','m','a','l','l', 0, + 'T','h','o','r','n','s','m','a','l','l', 0, + 'Y','d','i','e','r','e','s','i','s','s','m','a','l','l', 0, + '0','0','1','.','0','0','0', 0, + '0','0','1','.','0','0','1', 0, + '0','0','1','.','0','0','2', 0, + '0','0','1','.','0','0','3', 0, + 'B','l','a','c','k', 0, + 'B','o','l','d', 0, + 'B','o','o','k', 0, + 'L','i','g','h','t', 0, + 'M','e','d','i','u','m', 0, + 'R','e','g','u','l','a','r', 0, + 'R','o','m','a','n', 0, + 'S','e','m','i','b','o','l','d', 0, + } +#endif /* DEFINE_PS_TABLES_DATA */ + ; + + +#define FT_NUM_MAC_NAMES 258 + + /* Values are offsets into the `ft_standard_glyph_names' table */ + +#ifndef DEFINE_PS_TABLES_DATA +#ifdef __cplusplus + extern "C" +#else + extern +#endif +#endif + const short ft_mac_names[FT_NUM_MAC_NAMES] +#ifdef DEFINE_PS_TABLES_DATA + = + { + 253, 0, 6, 261, 267, 274, 283, 294, 301, 309, 758, 330, 340, 351, + 360, 365, 371, 378, 385, 391, 396, 400, 404, 410, 415, 420, 424, 430, + 436, 441, 447, 457, 462, 468, 476, 485, 488, 490, 492, 494, 496, 498, + 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, + 528, 530, 532, 534, 536, 538, 540, 552, 562, 575, 587, 979, 608, 610, + 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, + 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 670, 674, 685, + 1375,1392,1405,1414,1486,1512,1562,1603,1632,1610,1622,1645,1639,1652, + 1661,1690,1668,1680,1697,1726,1704,1716,1733,1740,1769,1747,1759,1776, + 1790,1819,1797,1809, 839,1263, 707, 712, 741, 881, 871,1160,1302,1346, + 1197, 985,1031, 23,1086,1108, 32,1219, 41, 51, 730,1194, 64, 76, + 86, 94, 97,1089,1118, 106,1131,1150, 966, 696,1183, 112, 734, 120, + 132, 783, 930, 945, 138,1385,1398,1529,1115,1157, 832,1079, 770, 916, + 598, 319,1246, 155,1833,1586, 721, 749, 797, 811, 826, 829, 846, 856, + 888, 903, 954,1363,1421,1356,1433,1443,1450,1457,1469,1479,1493,1500, + 163,1522,1543,1550,1572,1134, 991,1002,1008,1015,1021,1040,1045,1053, + 1066,1073,1101,1143,1536,1783,1596,1843,1253,1207,1319,1579,1826,1229, + 1270,1313,1323,1171,1290,1332,1211,1235,1276, 169, 175, 182, 189, 200, + 209, 218, 225, 232, 239, 246 + } +#endif /* DEFINE_PS_TABLES_DATA */ + ; + + +#define FT_NUM_SID_NAMES 391 + + /* Values are offsets into the `ft_standard_glyph_names' table */ + +#ifndef DEFINE_PS_TABLES_DATA +#ifdef __cplusplus + extern "C" +#else + extern +#endif +#endif + const short ft_sid_names[FT_NUM_SID_NAMES] +#ifdef DEFINE_PS_TABLES_DATA + = + { + 253, 261, 267, 274, 283, 294, 301, 309, 319, 330, 340, 351, 360, 365, + 371, 378, 385, 391, 396, 400, 404, 410, 415, 420, 424, 430, 436, 441, + 447, 457, 462, 468, 476, 485, 488, 490, 492, 494, 496, 498, 500, 502, + 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, + 532, 534, 536, 538, 540, 552, 562, 575, 587, 598, 608, 610, 612, 614, + 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, + 644, 646, 648, 650, 652, 654, 656, 658, 660, 670, 674, 685, 696, 707, + 712, 721, 730, 734, 741, 749, 758, 770, 783, 797, 811, 826, 829, 832, + 839, 846, 856, 871, 881, 888, 903, 916, 930, 945, 954, 966, 979, 985, + 991,1002,1008,1015,1021,1031,1040,1045,1053,1066,1073,1079,1086,1089, + 1101,1108,1115,1118,1131,1134,1143,1150,1157,1160,1171,1183,1194,1197, + 1207,1211,1219,1229,1235,1246,1253,1263,1270,1276,1290,1302,1313,1319, + 1323,1332,1346,1356,1363,1375,1385,1392,1398,1405,1414,1421,1433,1443, + 1450,1457,1469,1479,1486,1493,1500,1512,1522,1529,1536,1543,1550,1562, + 1572,1579,1586,1596,1603,1610,1622,1632,1639,1645,1652,1661,1668,1680, + 1690,1697,1704,1716,1726,1733,1740,1747,1759,1769,1776,1783,1790,1797, + 1809,1819,1826,1833,1843,1850,1862,1880,1895,1910,1925,1936,1954,1973, + 1988,2003,2016,2028,2040,2054,2067,2080,2092,2106,2120,2133,2147,2167, + 2182,2196,2206,2216,2229,2239,2249,2259,2269,2279,2289,2299,2309,2319, + 2329,2332,2336,2340,2358,2377,2393,2408,2419,2426,2433,2440,2447,2454, + 2461,2468,2475,2482,2489,2496,2503,2510,2517,2524,2531,2538,2545,2552, + 2559,2566,2573,2580,2587,2594,2601,2615,2625,2632,2643,2659,2672,2684, + 2696,2708,2722,2733,2744,2759,2771,2782,2797,2809,2819,2832,2850,2860, + 2873,2885,2898,2907,2917,2930,2943,2956,2968,2982,2996,3009,3022,3034, + 3046,3060,3073,3086,3098,3112,3126,3139,3152,3167,3182,3196,3208,3220, + 3237,3249,3264,3275,3283,3297,3309,3321,3338,3353,3365,3377,3394,3409, + 3418,3430,3442,3454,3471,3483,3498,3506,3518,3530,3542,3559,3574,3586, + 3597,3612,3620,3628,3636,3644,3650,3655,3660,3666,3673,3681,3687 + } +#endif /* DEFINE_PS_TABLES_DATA */ + ; + + + /* the following are indices into the SID name table */ +#ifndef DEFINE_PS_TABLES_DATA +#ifdef __cplusplus + extern "C" +#else + extern +#endif +#endif + const unsigned short t1_standard_encoding[256] +#ifdef DEFINE_PS_TABLES_DATA + = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110, + 0,111,112,113,114, 0,115,116,117,118,119,120,121,122, 0,123, + 0,124,125,126,127,128,129,130,131, 0,132,133, 0,134,135,136, + 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,138, 0,139, 0, 0, 0, 0,140,141,142,143, 0, 0, 0, 0, + 0,144, 0, 0, 0,145, 0, 0,146,147,148,149, 0, 0, 0, 0 + } +#endif /* DEFINE_PS_TABLES_DATA */ + ; + + + /* the following are indices into the SID name table */ +#ifndef DEFINE_PS_TABLES_DATA +#ifdef __cplusplus + extern "C" +#else + extern +#endif +#endif + const unsigned short t1_expert_encoding[256] +#ifdef DEFINE_PS_TABLES_DATA + = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1,229,230, 0,231,232,233,234,235,236,237,238, 13, 14, 15, 99, + 239,240,241,242,243,244,245,246,247,248, 27, 28,249,250,251,252, + 0,253,254,255,256,257, 0, 0, 0,258, 0, 0,259,260,261,262, + 0, 0,263,264,265, 0,266,109,110,267,268,269, 0,270,271,272, + 273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288, + 289,290,291,292,293,294,295,296,297,298,299,300,301,302,303, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,304,305,306, 0, 0,307,308,309,310,311, 0,312, 0, 0,313, + 0, 0,314,315, 0, 0,316,317,318, 0, 0, 0,158,155,163,319, + 320,321,322,323,324,325, 0, 0,326,150,164,169,327,328,329,330, + 331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346, + 347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362, + 363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378 + } +#endif /* DEFINE_PS_TABLES_DATA */ + ; + + + /* + * This table is a compressed version of the Adobe Glyph List (AGL), + * optimized for efficient searching. It has been generated by the + * `glnames.py' python script located in the `src/tools' directory. + * + * The lookup function to get the Unicode value for a given string + * is defined below the table. + */ + +#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST + +#ifndef DEFINE_PS_TABLES_DATA +#ifdef __cplusplus + extern "C" +#else + extern +#endif +#endif + const unsigned char ft_adobe_glyph_list[55997L] +#ifdef DEFINE_PS_TABLES_DATA + = + { + 0, 52, 0,106, 2,167, 3, 63, 4,220, 6,125, 9,143, 10, 23, + 11,137, 12,199, 14,246, 15, 87, 16,233, 17,219, 18,104, 19, 88, + 22,110, 23, 32, 23, 71, 24, 77, 27,156, 29, 73, 31,247, 32,107, + 32,222, 33, 55, 34,154, 35,218, 58, 10, 64,122, 72,188, 80,109, + 88,104, 93, 61, 98,168,106, 91,114,111,115,237,122,180,127,255, + 135,164,143,132,149,213,158,108,161,115,168,175,183,147,197,199, + 202, 25,204,166,208,209,209, 81,215, 26, 65,143, 0, 65, 0,140, + 0,175, 0,193, 1, 15, 1,147, 1,233, 1,251, 2, 7, 2, 40, + 2, 57, 2, 82, 2, 91, 2,128, 2,136, 2,154, 69,131, 0,198, + 0,150, 0,158, 0,167,225,227,245,244,101,128, 1,252,237,225, + 227,242,239,110,128, 1,226,243,237,225,236,108,128,247,230,225, + 227,245,244,101,129, 0,193, 0,185,243,237,225,236,108,128,247, + 225,226,242,229,246,101,134, 1, 2, 0,213, 0,221, 0,232, 0, + 243, 0,251, 1, 7,225,227,245,244,101,128, 30,174,227,249,242, + 233,236,236,233, 99,128, 4,208,228,239,244,226,229,236,239,119, + 128, 30,182,231,242,225,246,101,128, 30,176,232,239,239,235,225, + 226,239,246,101,128, 30,178,244,233,236,228,101,128, 30,180, 99, + 4, 1, 25, 1, 32, 1,121, 1,137,225,242,239,110,128, 1,205, + 233,242, 99, 2, 1, 40, 1, 45,236,101,128, 36,182,245,237,230, + 236,229,120,134, 0,194, 1, 66, 1, 74, 1, 85, 1, 93, 1,105, + 1,113,225,227,245,244,101,128, 30,164,228,239,244,226,229,236, + 239,119,128, 30,172,231,242,225,246,101,128, 30,166,232,239,239, + 235,225,226,239,246,101,128, 30,168,243,237,225,236,108,128,247, + 226,244,233,236,228,101,128, 30,170,245,244,101,129,246,201, 1, + 129,243,237,225,236,108,128,247,180,249,242,233,236,236,233, 99, + 128, 4, 16,100, 3, 1,155, 1,165, 1,209,226,236,231,242,225, + 246,101,128, 2, 0,233,229,242,229,243,233,115,131, 0,196, 1, + 181, 1,192, 1,201,227,249,242,233,236,236,233, 99,128, 4,210, + 237,225,227,242,239,110,128, 1,222,243,237,225,236,108,128,247, + 228,239,116, 2, 1,216, 1,224,226,229,236,239,119,128, 30,160, + 237,225,227,242,239,110,128, 1,224,231,242,225,246,101,129, 0, + 192, 1,243,243,237,225,236,108,128,247,224,232,239,239,235,225, + 226,239,246,101,128, 30,162,105, 2, 2, 13, 2, 25,229,227,249, + 242,233,236,236,233, 99,128, 4,212,238,246,229,242,244,229,228, + 226,242,229,246,101,128, 2, 2,236,240,232, 97,129, 3,145, 2, + 49,244,239,238,239,115,128, 3,134,109, 2, 2, 63, 2, 71,225, + 227,242,239,110,128, 1, 0,239,238,239,243,240,225,227,101,128, + 255, 33,239,231,239,238,229,107,128, 1, 4,242,233,238,103,131, + 0,197, 2,104, 2,112, 2,120,225,227,245,244,101,128, 1,250, + 226,229,236,239,119,128, 30, 0,243,237,225,236,108,128,247,229, + 243,237,225,236,108,128,247, 97,244,233,236,228,101,129, 0,195, + 2,146,243,237,225,236,108,128,247,227,249,226,225,242,237,229, + 238,233,225,110,128, 5, 49, 66,137, 0, 66, 2,189, 2,198, 2, + 223, 3, 3, 3, 10, 3, 22, 3, 34, 3, 46, 3, 54,227,233,242, + 227,236,101,128, 36,183,228,239,116, 2, 2,206, 2,215,225,227, + 227,229,238,116,128, 30, 2,226,229,236,239,119,128, 30, 4,101, + 3, 2,231, 2,242, 2,254,227,249,242,233,236,236,233, 99,128, + 4, 17,238,225,242,237,229,238,233,225,110,128, 5, 50,244, 97, + 128, 3,146,232,239,239,107,128, 1,129,236,233,238,229,226,229, + 236,239,119,128, 30, 6,237,239,238,239,243,240,225,227,101,128, + 255, 34,242,229,246,229,243,237,225,236,108,128,246,244,243,237, + 225,236,108,128,247, 98,244,239,240,226,225,114,128, 1,130, 67, + 137, 0, 67, 3, 85, 3,127, 3,193, 3,210, 3,224, 4,171, 4, + 188, 4,200, 4,212, 97, 3, 3, 93, 3,104, 3,111,225,242,237, + 229,238,233,225,110,128, 5, 62,227,245,244,101,128, 1, 6,242, + 239,110,129,246,202, 3,119,243,237,225,236,108,128,246,245, 99, + 3, 3,135, 3,142, 3,171,225,242,239,110,128, 1, 12,229,228, + 233,236,236, 97,130, 0,199, 3,155, 3,163,225,227,245,244,101, + 128, 30, 8,243,237,225,236,108,128,247,231,233,242, 99, 2, 3, + 179, 3,184,236,101,128, 36,184,245,237,230,236,229,120,128, 1, + 8,228,239,116,129, 1, 10, 3,201,225,227,227,229,238,116,128, + 1, 10,229,228,233,236,236,225,243,237,225,236,108,128,247,184, + 104, 4, 3,234, 3,246, 4,161, 4,165,225,225,242,237,229,238, + 233,225,110,128, 5, 73,101, 6, 4, 4, 4, 24, 4, 35, 4,103, + 4,115, 4,136,225,226,235,232,225,243,233,225,238,227,249,242, + 233,236,236,233, 99,128, 4,188,227,249,242,233,236,236,233, 99, + 128, 4, 39,100, 2, 4, 41, 4, 85,229,243,227,229,238,228,229, + 114, 2, 4, 54, 4, 74,225,226,235,232,225,243,233,225,238,227, + 249,242,233,236,236,233, 99,128, 4,190,227,249,242,233,236,236, + 233, 99,128, 4,182,233,229,242,229,243,233,243,227,249,242,233, + 236,236,233, 99,128, 4,244,232,225,242,237,229,238,233,225,110, + 128, 5, 67,235,232,225,235,225,243,243,233,225,238,227,249,242, + 233,236,236,233, 99,128, 4,203,246,229,242,244,233,227,225,236, + 243,244,242,239,235,229,227,249,242,233,236,236,233, 99,128, 4, + 184,105,128, 3,167,239,239,107,128, 1,135,233,242,227,245,237, + 230,236,229,248,243,237,225,236,108,128,246,246,237,239,238,239, + 243,240,225,227,101,128,255, 35,239,225,242,237,229,238,233,225, + 110,128, 5, 81,243,237,225,236,108,128,247, 99, 68,142, 0, 68, + 4,252, 5, 10, 5, 36, 5, 96, 5,121, 5,166, 5,173, 5,231, + 5,244, 6, 0, 6, 12, 6, 28, 6, 48, 6, 57, 90,129, 1,241, + 5, 2,227,225,242,239,110,128, 1,196, 97, 2, 5, 16, 5, 27, + 225,242,237,229,238,233,225,110,128, 5, 52,230,242,233,227,225, + 110,128, 1,137, 99, 4, 5, 46, 5, 53, 5, 62, 5, 89,225,242, + 239,110,128, 1, 14,229,228,233,236,236, 97,128, 30, 16,233,242, + 99, 2, 5, 70, 5, 75,236,101,128, 36,185,245,237,230,236,229, + 248,226,229,236,239,119,128, 30, 18,242,239,225,116,128, 1, 16, + 228,239,116, 2, 5,104, 5,113,225,227,227,229,238,116,128, 30, + 10,226,229,236,239,119,128, 30, 12,101, 3, 5,129, 5,140, 5, + 150,227,249,242,233,236,236,233, 99,128, 4, 20,233,227,239,240, + 244,233, 99,128, 3,238,236,244, 97,129, 34, 6, 5,158,231,242, + 229,229,107,128, 3,148,232,239,239,107,128, 1,138,105, 2, 5, + 179, 5,218,229,242,229,243,233,115,131,246,203, 5,194, 5,202, + 5,210,193,227,245,244,101,128,246,204,199,242,225,246,101,128, + 246,205,243,237,225,236,108,128,247,168,231,225,237,237,225,231, + 242,229,229,107,128, 3,220,234,229,227,249,242,233,236,236,233, + 99,128, 4, 2,236,233,238,229,226,229,236,239,119,128, 30, 14, + 237,239,238,239,243,240,225,227,101,128,255, 36,239,244,225,227, + 227,229,238,244,243,237,225,236,108,128,246,247,115, 2, 6, 34, + 6, 41,236,225,243,104,128, 1, 16,237,225,236,108,128,247,100, + 244,239,240,226,225,114,128, 1,139,122,131, 1,242, 6, 67, 6, + 75, 6,112,227,225,242,239,110,128, 1,197,101, 2, 6, 81, 6, + 101,225,226,235,232,225,243,233,225,238,227,249,242,233,236,236, + 233, 99,128, 4,224,227,249,242,233,236,236,233, 99,128, 4, 5, + 232,229,227,249,242,233,236,236,233, 99,128, 4, 15, 69,146, 0, + 69, 6,165, 6,183, 6,191, 7, 89, 7,153, 7,165, 7,183, 7, + 211, 8, 7, 8, 36, 8, 94, 8,169, 8,189, 8,208, 8,248, 9, + 44, 9,109, 9,115,225,227,245,244,101,129, 0,201, 6,175,243, + 237,225,236,108,128,247,233,226,242,229,246,101,128, 1, 20, 99, + 5, 6,203, 6,210, 6,224, 6,236, 7, 79,225,242,239,110,128, + 1, 26,229,228,233,236,236,225,226,242,229,246,101,128, 30, 28, + 232,225,242,237,229,238,233,225,110,128, 5, 53,233,242, 99, 2, + 6,244, 6,249,236,101,128, 36,186,245,237,230,236,229,120,135, + 0,202, 7, 16, 7, 24, 7, 32, 7, 43, 7, 51, 7, 63, 7, 71, + 225,227,245,244,101,128, 30,190,226,229,236,239,119,128, 30, 24, + 228,239,244,226,229,236,239,119,128, 30,198,231,242,225,246,101, + 128, 30,192,232,239,239,235,225,226,239,246,101,128, 30,194,243, + 237,225,236,108,128,247,234,244,233,236,228,101,128, 30,196,249, + 242,233,236,236,233, 99,128, 4, 4,100, 3, 7, 97, 7,107, 7, + 127,226,236,231,242,225,246,101,128, 2, 4,233,229,242,229,243, + 233,115,129, 0,203, 7,119,243,237,225,236,108,128,247,235,239, + 116,130, 1, 22, 7,136, 7,145,225,227,227,229,238,116,128, 1, + 22,226,229,236,239,119,128, 30,184,230,227,249,242,233,236,236, + 233, 99,128, 4, 36,231,242,225,246,101,129, 0,200, 7,175,243, + 237,225,236,108,128,247,232,104, 2, 7,189, 7,200,225,242,237, + 229,238,233,225,110,128, 5, 55,239,239,235,225,226,239,246,101, + 128, 30,186,105, 3, 7,219, 7,230, 7,245,231,232,244,242,239, + 237,225,110,128, 33,103,238,246,229,242,244,229,228,226,242,229, + 246,101,128, 2, 6,239,244,233,230,233,229,228,227,249,242,233, + 236,236,233, 99,128, 4,100,108, 2, 8, 13, 8, 24,227,249,242, + 233,236,236,233, 99,128, 4, 27,229,246,229,238,242,239,237,225, + 110,128, 33,106,109, 3, 8, 44, 8, 72, 8, 83,225,227,242,239, + 110,130, 1, 18, 8, 56, 8, 64,225,227,245,244,101,128, 30, 22, + 231,242,225,246,101,128, 30, 20,227,249,242,233,236,236,233, 99, + 128, 4, 28,239,238,239,243,240,225,227,101,128,255, 37,110, 4, + 8,104, 8,115, 8,135, 8,154,227,249,242,233,236,236,233, 99, + 128, 4, 29,228,229,243,227,229,238,228,229,242,227,249,242,233, + 236,236,233, 99,128, 4,162,103,129, 1, 74, 8,141,232,229,227, + 249,242,233,236,236,233, 99,128, 4,164,232,239,239,235,227,249, + 242,233,236,236,233, 99,128, 4,199,111, 2, 8,175, 8,183,231, + 239,238,229,107,128, 1, 24,240,229,110,128, 1,144,240,243,233, + 236,239,110,129, 3,149, 8,200,244,239,238,239,115,128, 3,136, + 114, 2, 8,214, 8,225,227,249,242,233,236,236,233, 99,128, 4, + 32,229,246,229,242,243,229,100,129, 1,142, 8,237,227,249,242, + 233,236,236,233, 99,128, 4, 45,115, 4, 9, 2, 9, 13, 9, 33, + 9, 37,227,249,242,233,236,236,233, 99,128, 4, 33,228,229,243, + 227,229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4, + 170,104,128, 1,169,237,225,236,108,128,247,101,116, 3, 9, 52, + 9, 78, 9, 92, 97,130, 3,151, 9, 60, 9, 70,242,237,229,238, + 233,225,110,128, 5, 56,244,239,238,239,115,128, 3,137,104,129, + 0,208, 9, 84,243,237,225,236,108,128,247,240,233,236,228,101, + 129, 30,188, 9,101,226,229,236,239,119,128, 30, 26,245,242,111, + 128, 32,172,250,104,130, 1,183, 9,124, 9,132,227,225,242,239, + 110,128, 1,238,242,229,246,229,242,243,229,100,128, 1,184, 70, + 136, 0, 70, 9,163, 9,172, 9,184, 9,212, 9,219, 9,248, 10, + 4, 10, 15,227,233,242,227,236,101,128, 36,187,228,239,244,225, + 227,227,229,238,116,128, 30, 30,101, 2, 9,190, 9,202,232,225, + 242,237,229,238,233,225,110,128, 5, 86,233,227,239,240,244,233, + 99,128, 3,228,232,239,239,107,128, 1,145,105, 2, 9,225, 9, + 238,244,225,227,249,242,233,236,236,233, 99,128, 4,114,246,229, + 242,239,237,225,110,128, 33,100,237,239,238,239,243,240,225,227, + 101,128,255, 38,239,245,242,242,239,237,225,110,128, 33, 99,243, + 237,225,236,108,128,247,102, 71,140, 0, 71, 10, 51, 10, 61, 10, + 107, 10,115, 10,176, 10,193, 10,205, 11, 39, 11, 52, 11, 65, 11, + 90, 11,107,194,243,241,245,225,242,101,128, 51,135, 97, 3, 10, + 69, 10, 76, 10, 94,227,245,244,101,128, 1,244,237,237, 97,129, + 3,147, 10, 84,225,230,242,233,227,225,110,128, 1,148,238,231, + 233,225,227,239,240,244,233, 99,128, 3,234,226,242,229,246,101, + 128, 1, 30, 99, 4, 10,125, 10,132, 10,141, 10,163,225,242,239, + 110,128, 1,230,229,228,233,236,236, 97,128, 1, 34,233,242, 99, + 2, 10,149, 10,154,236,101,128, 36,188,245,237,230,236,229,120, + 128, 1, 28,239,237,237,225,225,227,227,229,238,116,128, 1, 34, + 228,239,116,129, 1, 32, 10,184,225,227,227,229,238,116,128, 1, + 32,229,227,249,242,233,236,236,233, 99,128, 4, 19,104, 3, 10, + 213, 10,226, 11, 33,225,228,225,242,237,229,238,233,225,110,128, + 5, 66,101, 3, 10,234, 10,255, 11, 16,237,233,228,228,236,229, + 232,239,239,235,227,249,242,233,236,236,233, 99,128, 4,148,243, + 244,242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,146, + 245,240,244,245,242,238,227,249,242,233,236,236,233, 99,128, 4, + 144,239,239,107,128, 1,147,233,237,225,242,237,229,238,233,225, + 110,128, 5, 51,234,229,227,249,242,233,236,236,233, 99,128, 4, + 3,109, 2, 11, 71, 11, 79,225,227,242,239,110,128, 30, 32,239, + 238,239,243,240,225,227,101,128,255, 39,242,225,246,101,129,246, + 206, 11, 99,243,237,225,236,108,128,247, 96,115, 2, 11,113, 11, + 129,237,225,236,108,129,247,103, 11,122,232,239,239,107,128, 2, + 155,244,242,239,235,101,128, 1,228, 72,140, 0, 72, 11,165, 11, + 190, 11,198, 11,208, 12, 17, 12, 40, 12, 77, 12,117, 12,129, 12, + 157, 12,165, 12,189,177,184, 53, 3, 11,175, 11,180, 11,185,179, + 51,128, 37,207,180, 51,128, 37,170,181, 49,128, 37,171,178,178, + 176,183, 51,128, 37,161,208,243,241,245,225,242,101,128, 51,203, + 97, 3, 11,216, 11,236, 12, 0,225,226,235,232,225,243,233,225, + 238,227,249,242,233,236,236,233, 99,128, 4,168,228,229,243,227, + 229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,178, + 242,228,243,233,231,238,227,249,242,233,236,236,233, 99,128, 4, + 42, 98, 2, 12, 23, 12, 28,225,114,128, 1, 38,242,229,246,229, + 226,229,236,239,119,128, 30, 42, 99, 2, 12, 46, 12, 55,229,228, + 233,236,236, 97,128, 30, 40,233,242, 99, 2, 12, 63, 12, 68,236, + 101,128, 36,189,245,237,230,236,229,120,128, 1, 36,100, 2, 12, + 83, 12, 93,233,229,242,229,243,233,115,128, 30, 38,239,116, 2, + 12,100, 12,109,225,227,227,229,238,116,128, 30, 34,226,229,236, + 239,119,128, 30, 36,237,239,238,239,243,240,225,227,101,128,255, + 40,111, 2, 12,135, 12,146,225,242,237,229,238,233,225,110,128, + 5, 64,242,233,227,239,240,244,233, 99,128, 3,232,243,237,225, + 236,108,128,247,104,245,238,231,225,242,245,237,236,225,245,116, + 129,246,207, 12,181,243,237,225,236,108,128,246,248,250,243,241, + 245,225,242,101,128, 51,144, 73,146, 0, 73, 12,239, 12,251, 12, + 255, 13, 11, 13, 29, 13, 37, 13, 94, 13,181, 13,214, 13,224, 13, + 242, 13,254, 14, 48, 14, 86, 14, 99, 14,166, 14,187, 14,205,193, + 227,249,242,233,236,236,233, 99,128, 4, 47, 74,128, 1, 50,213, + 227,249,242,233,236,236,233, 99,128, 4, 46,225,227,245,244,101, + 129, 0,205, 13, 21,243,237,225,236,108,128,247,237,226,242,229, + 246,101,128, 1, 44, 99, 3, 13, 45, 13, 52, 13, 84,225,242,239, + 110,128, 1,207,233,242, 99, 2, 13, 60, 13, 65,236,101,128, 36, + 190,245,237,230,236,229,120,129, 0,206, 13, 76,243,237,225,236, + 108,128,247,238,249,242,233,236,236,233, 99,128, 4, 6,100, 3, + 13,102, 13,112, 13,155,226,236,231,242,225,246,101,128, 2, 8, + 233,229,242,229,243,233,115,131, 0,207, 13,128, 13,136, 13,147, + 225,227,245,244,101,128, 30, 46,227,249,242,233,236,236,233, 99, + 128, 4,228,243,237,225,236,108,128,247,239,239,116,130, 1, 48, + 13,164, 13,173,225,227,227,229,238,116,128, 1, 48,226,229,236, + 239,119,128, 30,202,101, 2, 13,187, 13,203,226,242,229,246,229, + 227,249,242,233,236,236,233, 99,128, 4,214,227,249,242,233,236, + 236,233, 99,128, 4, 21,230,242,225,235,244,245,114,128, 33, 17, + 231,242,225,246,101,129, 0,204, 13,234,243,237,225,236,108,128, + 247,236,232,239,239,235,225,226,239,246,101,128, 30,200,105, 3, + 14, 6, 14, 17, 14, 32,227,249,242,233,236,236,233, 99,128, 4, + 24,238,246,229,242,244,229,228,226,242,229,246,101,128, 2, 10, + 243,232,239,242,244,227,249,242,233,236,236,233, 99,128, 4, 25, + 109, 2, 14, 54, 14, 75,225,227,242,239,110,129, 1, 42, 14, 64, + 227,249,242,233,236,236,233, 99,128, 4,226,239,238,239,243,240, + 225,227,101,128,255, 41,238,233,225,242,237,229,238,233,225,110, + 128, 5, 59,111, 3, 14,107, 14,118, 14,126,227,249,242,233,236, + 236,233, 99,128, 4, 1,231,239,238,229,107,128, 1, 46,244, 97, + 131, 3,153, 14,137, 14,147, 14,158,225,230,242,233,227,225,110, + 128, 1,150,228,233,229,242,229,243,233,115,128, 3,170,244,239, + 238,239,115,128, 3,138,115, 2, 14,172, 14,179,237,225,236,108, + 128,247,105,244,242,239,235,101,128, 1,151,244,233,236,228,101, + 129, 1, 40, 14,197,226,229,236,239,119,128, 30, 44,250,232,233, + 244,243, 97, 2, 14,216, 14,227,227,249,242,233,236,236,233, 99, + 128, 4,116,228,226,236,231,242,225,246,229,227,249,242,233,236, + 236,233, 99,128, 4,118, 74,134, 0, 74, 15, 6, 15, 18, 15, 41, + 15, 53, 15, 67, 15, 79,225,225,242,237,229,238,233,225,110,128, + 5, 65,227,233,242, 99, 2, 15, 27, 15, 32,236,101,128, 36,191, + 245,237,230,236,229,120,128, 1, 52,229,227,249,242,233,236,236, + 233, 99,128, 4, 8,232,229,232,225,242,237,229,238,233,225,110, + 128, 5, 75,237,239,238,239,243,240,225,227,101,128,255, 42,243, + 237,225,236,108,128,247,106, 75,140, 0, 75, 15,115, 15,125, 15, + 135, 16, 18, 16, 65, 16, 76, 16,106, 16,143, 16,156, 16,168, 16, + 180, 16,208,194,243,241,245,225,242,101,128, 51,133,203,243,241, + 245,225,242,101,128, 51,205, 97, 7, 15,151, 15,169, 15,191, 15, + 211, 15,226, 15,232, 15,249,226,225,243,232,235,233,242,227,249, + 242,233,236,236,233, 99,128, 4,160, 99, 2, 15,175, 15,181,245, + 244,101,128, 30, 48,249,242,233,236,236,233, 99,128, 4, 26,228, + 229,243,227,229,238,228,229,242,227,249,242,233,236,236,233, 99, + 128, 4,154,232,239,239,235,227,249,242,233,236,236,233, 99,128, + 4,195,240,240, 97,128, 3,154,243,244,242,239,235,229,227,249, + 242,233,236,236,233, 99,128, 4,158,246,229,242,244,233,227,225, + 236,243,244,242,239,235,229,227,249,242,233,236,236,233, 99,128, + 4,156, 99, 4, 16, 28, 16, 35, 16, 44, 16, 52,225,242,239,110, + 128, 1,232,229,228,233,236,236, 97,128, 1, 54,233,242,227,236, + 101,128, 36,192,239,237,237,225,225,227,227,229,238,116,128, 1, + 54,228,239,244,226,229,236,239,119,128, 30, 50,101, 2, 16, 82, + 16, 94,232,225,242,237,229,238,233,225,110,128, 5, 84,238,225, + 242,237,229,238,233,225,110,128, 5, 63,104, 3, 16,114, 16,126, + 16,137,225,227,249,242,233,236,236,233, 99,128, 4, 37,229,233, + 227,239,240,244,233, 99,128, 3,230,239,239,107,128, 1,152,234, + 229,227,249,242,233,236,236,233, 99,128, 4, 12,236,233,238,229, + 226,229,236,239,119,128, 30, 52,237,239,238,239,243,240,225,227, + 101,128,255, 43,239,240,240, 97, 2, 16,189, 16,200,227,249,242, + 233,236,236,233, 99,128, 4,128,231,242,229,229,107,128, 3,222, + 115, 2, 16,214, 16,226,233,227,249,242,233,236,236,233, 99,128, + 4,110,237,225,236,108,128,247,107, 76,138, 0, 76, 17, 1, 17, + 5, 17, 9, 17, 29, 17, 95, 17,133, 17,147, 17,165, 17,177, 17, + 189, 74,128, 1,199, 76,128,246,191, 97, 2, 17, 15, 17, 22,227, + 245,244,101,128, 1, 57,237,226,228, 97,128, 3,155, 99, 4, 17, + 39, 17, 46, 17, 55, 17, 82,225,242,239,110,128, 1, 61,229,228, + 233,236,236, 97,128, 1, 59,233,242, 99, 2, 17, 63, 17, 68,236, + 101,128, 36,193,245,237,230,236,229,248,226,229,236,239,119,128, + 30, 60,239,237,237,225,225,227,227,229,238,116,128, 1, 59,228, + 239,116,130, 1, 63, 17,105, 17,114,225,227,227,229,238,116,128, + 1, 63,226,229,236,239,119,129, 30, 54, 17,124,237,225,227,242, + 239,110,128, 30, 56,233,247,238,225,242,237,229,238,233,225,110, + 128, 5, 60,106,129, 1,200, 17,153,229,227,249,242,233,236,236, + 233, 99,128, 4, 9,236,233,238,229,226,229,236,239,119,128, 30, + 58,237,239,238,239,243,240,225,227,101,128,255, 44,115, 2, 17, + 195, 17,212,236,225,243,104,129, 1, 65, 17,204,243,237,225,236, + 108,128,246,249,237,225,236,108,128,247,108, 77,137, 0, 77, 17, + 241, 17,251, 18, 24, 18, 33, 18, 58, 18, 71, 18, 83, 18, 91, 18, + 100,194,243,241,245,225,242,101,128, 51,134,225, 99, 2, 18, 2, + 18, 18,242,239,110,129,246,208, 18, 10,243,237,225,236,108,128, + 247,175,245,244,101,128, 30, 62,227,233,242,227,236,101,128, 36, + 194,228,239,116, 2, 18, 41, 18, 50,225,227,227,229,238,116,128, + 30, 64,226,229,236,239,119,128, 30, 66,229,238,225,242,237,229, + 238,233,225,110,128, 5, 68,237,239,238,239,243,240,225,227,101, + 128,255, 45,243,237,225,236,108,128,247,109,244,245,242,238,229, + 100,128, 1,156,117,128, 3,156, 78,141, 0, 78, 18,134, 18,138, + 18,146, 18,212, 18,237, 18,248, 19, 3, 19, 21, 19, 33, 19, 45, + 19, 58, 19, 66, 19, 84, 74,128, 1,202,225,227,245,244,101,128, + 1, 67, 99, 4, 18,156, 18,163, 18,172, 18,199,225,242,239,110, + 128, 1, 71,229,228,233,236,236, 97,128, 1, 69,233,242, 99, 2, + 18,180, 18,185,236,101,128, 36,195,245,237,230,236,229,248,226, + 229,236,239,119,128, 30, 74,239,237,237,225,225,227,227,229,238, + 116,128, 1, 69,228,239,116, 2, 18,220, 18,229,225,227,227,229, + 238,116,128, 30, 68,226,229,236,239,119,128, 30, 70,232,239,239, + 235,236,229,230,116,128, 1,157,233,238,229,242,239,237,225,110, + 128, 33,104,106,129, 1,203, 19, 9,229,227,249,242,233,236,236, + 233, 99,128, 4, 10,236,233,238,229,226,229,236,239,119,128, 30, + 72,237,239,238,239,243,240,225,227,101,128,255, 46,239,247,225, + 242,237,229,238,233,225,110,128, 5, 70,243,237,225,236,108,128, + 247,110,244,233,236,228,101,129, 0,209, 19, 76,243,237,225,236, + 108,128,247,241,117,128, 3,157, 79,141, 0, 79, 19,118, 19,132, + 19,150, 19,203, 20, 78, 20,152, 20,187, 21, 48, 21, 69, 21,213, + 21,223, 21,254, 22, 53, 69,129, 1, 82, 19,124,243,237,225,236, + 108,128,246,250,225,227,245,244,101,129, 0,211, 19,142,243,237, + 225,236,108,128,247,243, 98, 2, 19,156, 19,196,225,242,242,229, + 100, 2, 19,166, 19,177,227,249,242,233,236,236,233, 99,128, 4, + 232,228,233,229,242,229,243,233,243,227,249,242,233,236,236,233, + 99,128, 4,234,242,229,246,101,128, 1, 78, 99, 4, 19,213, 19, + 220, 19,235, 20, 68,225,242,239,110,128, 1,209,229,238,244,229, + 242,229,228,244,233,236,228,101,128, 1,159,233,242, 99, 2, 19, + 243, 19,248,236,101,128, 36,196,245,237,230,236,229,120,134, 0, + 212, 20, 13, 20, 21, 20, 32, 20, 40, 20, 52, 20, 60,225,227,245, + 244,101,128, 30,208,228,239,244,226,229,236,239,119,128, 30,216, + 231,242,225,246,101,128, 30,210,232,239,239,235,225,226,239,246, + 101,128, 30,212,243,237,225,236,108,128,247,244,244,233,236,228, + 101,128, 30,214,249,242,233,236,236,233, 99,128, 4, 30,100, 3, + 20, 86, 20,109, 20,142,226,108, 2, 20, 93, 20,101,225,227,245, + 244,101,128, 1, 80,231,242,225,246,101,128, 2, 12,233,229,242, + 229,243,233,115,130, 0,214, 20,123, 20,134,227,249,242,233,236, + 236,233, 99,128, 4,230,243,237,225,236,108,128,247,246,239,244, + 226,229,236,239,119,128, 30,204,103, 2, 20,158, 20,170,239,238, + 229,235,243,237,225,236,108,128,246,251,242,225,246,101,129, 0, + 210, 20,179,243,237,225,236,108,128,247,242,104, 4, 20,197, 20, + 208, 20,212, 21, 34,225,242,237,229,238,233,225,110,128, 5, 85, + 109,128, 33, 38,111, 2, 20,218, 20,228,239,235,225,226,239,246, + 101,128, 30,206,242,110,133, 1,160, 20,243, 20,251, 21, 6, 21, + 14, 21, 26,225,227,245,244,101,128, 30,218,228,239,244,226,229, + 236,239,119,128, 30,226,231,242,225,246,101,128, 30,220,232,239, + 239,235,225,226,239,246,101,128, 30,222,244,233,236,228,101,128, + 30,224,245,238,231,225,242,245,237,236,225,245,116,128, 1, 80, + 105,129, 1,162, 21, 54,238,246,229,242,244,229,228,226,242,229, + 246,101,128, 2, 14,109, 4, 21, 79, 21,107, 21,184, 21,202,225, + 227,242,239,110,130, 1, 76, 21, 91, 21, 99,225,227,245,244,101, + 128, 30, 82,231,242,225,246,101,128, 30, 80,229,231, 97,132, 33, + 38, 21,121, 21,132, 21,140, 21,156,227,249,242,233,236,236,233, + 99,128, 4, 96,231,242,229,229,107,128, 3,169,242,239,245,238, + 228,227,249,242,233,236,236,233, 99,128, 4,122,116, 2, 21,162, + 21,177,233,244,236,239,227,249,242,233,236,236,233, 99,128, 4, + 124,239,238,239,115,128, 3,143,233,227,242,239,110,129, 3,159, + 21,194,244,239,238,239,115,128, 3,140,239,238,239,243,240,225, + 227,101,128,255, 47,238,229,242,239,237,225,110,128, 33, 96,111, + 2, 21,229, 21,248,231,239,238,229,107,129, 1,234, 21,239,237, + 225,227,242,239,110,128, 1,236,240,229,110,128, 1,134,115, 3, + 22, 6, 22, 33, 22, 40,236,225,243,104,130, 0,216, 22, 17, 22, + 25,225,227,245,244,101,128, 1,254,243,237,225,236,108,128,247, + 248,237,225,236,108,128,247,111,244,242,239,235,229,225,227,245, + 244,101,128, 1,254,116, 2, 22, 59, 22, 70,227,249,242,233,236, + 236,233, 99,128, 4,126,233,236,228,101,131, 0,213, 22, 83, 22, + 91, 22,102,225,227,245,244,101,128, 30, 76,228,233,229,242,229, + 243,233,115,128, 30, 78,243,237,225,236,108,128,247,245, 80,136, + 0, 80, 22,130, 22,138, 22,147, 22,159, 22,211, 22,227, 22,246, + 23, 2,225,227,245,244,101,128, 30, 84,227,233,242,227,236,101, + 128, 36,197,228,239,244,225,227,227,229,238,116,128, 30, 86,101, + 3, 22,167, 22,178, 22,190,227,249,242,233,236,236,233, 99,128, + 4, 31,232,225,242,237,229,238,233,225,110,128, 5, 74,237,233, + 228,228,236,229,232,239,239,235,227,249,242,233,236,236,233, 99, + 128, 4,166,104, 2, 22,217, 22,221,105,128, 3,166,239,239,107, + 128, 1,164,105,129, 3,160, 22,233,247,242,225,242,237,229,238, + 233,225,110,128, 5, 83,237,239,238,239,243,240,225,227,101,128, + 255, 48,115, 2, 23, 8, 23, 25,105,129, 3,168, 23, 14,227,249, + 242,233,236,236,233, 99,128, 4,112,237,225,236,108,128,247,112, + 81,131, 0, 81, 23, 42, 23, 51, 23, 63,227,233,242,227,236,101, + 128, 36,198,237,239,238,239,243,240,225,227,101,128,255, 49,243, + 237,225,236,108,128,247,113, 82,138, 0, 82, 23, 95, 23,119, 23, + 166, 23,217, 23,230, 23,240, 23,245, 24, 19, 24, 31, 24, 43, 97, + 2, 23,101, 23,112,225,242,237,229,238,233,225,110,128, 5, 76, + 227,245,244,101,128, 1, 84, 99, 4, 23,129, 23,136, 23,145, 23, + 153,225,242,239,110,128, 1, 88,229,228,233,236,236, 97,128, 1, + 86,233,242,227,236,101,128, 36,199,239,237,237,225,225,227,227, + 229,238,116,128, 1, 86,100, 2, 23,172, 23,182,226,236,231,242, + 225,246,101,128, 2, 16,239,116, 2, 23,189, 23,198,225,227,227, + 229,238,116,128, 30, 88,226,229,236,239,119,129, 30, 90, 23,208, + 237,225,227,242,239,110,128, 30, 92,229,232,225,242,237,229,238, + 233,225,110,128, 5, 80,230,242,225,235,244,245,114,128, 33, 28, + 232,111,128, 3,161,233,110, 2, 23,252, 24, 5,231,243,237,225, + 236,108,128,246,252,246,229,242,244,229,228,226,242,229,246,101, + 128, 2, 18,236,233,238,229,226,229,236,239,119,128, 30, 94,237, + 239,238,239,243,240,225,227,101,128,255, 50,243,237,225,236,108, + 129,247,114, 24, 53,233,238,246,229,242,244,229,100,129, 2,129, + 24, 66,243,245,240,229,242,233,239,114,128, 2,182, 83,139, 0, + 83, 24,103, 26, 17, 26, 55, 26,182, 26,221, 26,250, 27, 84, 27, + 105, 27,117, 27,135, 27,143, 70, 6, 24,117, 24,209, 24,241, 25, + 77, 25,119, 25,221, 48, 9, 24,137, 24,145, 24,153, 24,161, 24, + 169, 24,177, 24,185, 24,193, 24,201,177,176,176,176, 48,128, 37, + 12,178,176,176,176, 48,128, 37, 20,179,176,176,176, 48,128, 37, + 16,180,176,176,176, 48,128, 37, 24,181,176,176,176, 48,128, 37, + 60,182,176,176,176, 48,128, 37, 44,183,176,176,176, 48,128, 37, + 52,184,176,176,176, 48,128, 37, 28,185,176,176,176, 48,128, 37, + 36, 49, 3, 24,217, 24,225, 24,233,176,176,176,176, 48,128, 37, + 0,177,176,176,176, 48,128, 37, 2,185,176,176,176, 48,128, 37, + 97, 50, 9, 25, 5, 25, 13, 25, 21, 25, 29, 25, 37, 25, 45, 25, + 53, 25, 61, 25, 69,176,176,176,176, 48,128, 37, 98,177,176,176, + 176, 48,128, 37, 86,178,176,176,176, 48,128, 37, 85,179,176,176, + 176, 48,128, 37, 99,180,176,176,176, 48,128, 37, 81,181,176,176, + 176, 48,128, 37, 87,182,176,176,176, 48,128, 37, 93,183,176,176, + 176, 48,128, 37, 92,184,176,176,176, 48,128, 37, 91, 51, 4, 25, + 87, 25, 95, 25,103, 25,111,182,176,176,176, 48,128, 37, 94,183, + 176,176,176, 48,128, 37, 95,184,176,176,176, 48,128, 37, 90,185, + 176,176,176, 48,128, 37, 84, 52, 10, 25,141, 25,149, 25,157, 25, + 165, 25,173, 25,181, 25,189, 25,197, 25,205, 25,213,176,176,176, + 176, 48,128, 37,105,177,176,176,176, 48,128, 37,102,178,176,176, + 176, 48,128, 37, 96,179,176,176,176, 48,128, 37, 80,180,176,176, + 176, 48,128, 37,108,181,176,176,176, 48,128, 37,103,182,176,176, + 176, 48,128, 37,104,183,176,176,176, 48,128, 37,100,184,176,176, + 176, 48,128, 37,101,185,176,176,176, 48,128, 37, 89, 53, 5, 25, + 233, 25,241, 25,249, 26, 1, 26, 9,176,176,176,176, 48,128, 37, + 88,177,176,176,176, 48,128, 37, 82,178,176,176,176, 48,128, 37, + 83,179,176,176,176, 48,128, 37,107,180,176,176,176, 48,128, 37, + 106, 97, 2, 26, 23, 26, 44,227,245,244,101,129, 1, 90, 26, 32, + 228,239,244,225,227,227,229,238,116,128, 30,100,237,240,233,231, + 242,229,229,107,128, 3,224, 99, 5, 26, 67, 26, 98, 26,107, 26, + 147, 26,169,225,242,239,110,130, 1, 96, 26, 78, 26, 90,228,239, + 244,225,227,227,229,238,116,128, 30,102,243,237,225,236,108,128, + 246,253,229,228,233,236,236, 97,128, 1, 94,232,247, 97,130, 1, + 143, 26,117, 26,128,227,249,242,233,236,236,233, 99,128, 4,216, + 228,233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99, + 128, 4,218,233,242, 99, 2, 26,155, 26,160,236,101,128, 36,200, + 245,237,230,236,229,120,128, 1, 92,239,237,237,225,225,227,227, + 229,238,116,128, 2, 24,228,239,116, 2, 26,190, 26,199,225,227, + 227,229,238,116,128, 30, 96,226,229,236,239,119,129, 30, 98, 26, + 209,228,239,244,225,227,227,229,238,116,128, 30,104,101, 2, 26, + 227, 26,239,232,225,242,237,229,238,233,225,110,128, 5, 77,246, + 229,238,242,239,237,225,110,128, 33,102,104, 5, 27, 6, 27, 34, + 27, 48, 27, 59, 27, 72, 97, 2, 27, 12, 27, 23,225,242,237,229, + 238,233,225,110,128, 5, 71,227,249,242,233,236,236,233, 99,128, + 4, 40,227,232,225,227,249,242,233,236,236,233, 99,128, 4, 41, + 229,233,227,239,240,244,233, 99,128, 3,226,232,225,227,249,242, + 233,236,236,233, 99,128, 4,186,233,237,225,227,239,240,244,233, + 99,128, 3,236,105, 2, 27, 90, 27, 96,231,237, 97,128, 3,163, + 248,242,239,237,225,110,128, 33,101,237,239,238,239,243,240,225, + 227,101,128,255, 51,239,230,244,243,233,231,238,227,249,242,233, + 236,236,233, 99,128, 4, 44,243,237,225,236,108,128,247,115,244, + 233,231,237,225,231,242,229,229,107,128, 3,218, 84,141, 0, 84, + 27,186, 27,191, 27,197, 28, 7, 28, 32, 28, 96, 28,147, 28,177, + 28,189, 28,201, 28,246, 29, 6, 29, 46,225,117,128, 3,164,226, + 225,114,128, 1,102, 99, 4, 27,207, 27,214, 27,223, 27,250,225, + 242,239,110,128, 1,100,229,228,233,236,236, 97,128, 1, 98,233, + 242, 99, 2, 27,231, 27,236,236,101,128, 36,201,245,237,230,236, + 229,248,226,229,236,239,119,128, 30,112,239,237,237,225,225,227, + 227,229,238,116,128, 1, 98,228,239,116, 2, 28, 15, 28, 24,225, + 227,227,229,238,116,128, 30,106,226,229,236,239,119,128, 30,108, + 101, 4, 28, 42, 28, 53, 28, 73, 28, 82,227,249,242,233,236,236, + 233, 99,128, 4, 34,228,229,243,227,229,238,228,229,242,227,249, + 242,233,236,236,233, 99,128, 4,172,238,242,239,237,225,110,128, + 33,105,244,243,229,227,249,242,233,236,236,233, 99,128, 4,180, + 104, 3, 28,104, 28,110, 28,136,229,244, 97,128, 3,152,111, 2, + 28,116, 28,121,239,107,128, 1,172,242,110,129, 0,222, 28,128, + 243,237,225,236,108,128,247,254,242,229,229,242,239,237,225,110, + 128, 33, 98,105, 2, 28,153, 28,164,236,228,229,243,237,225,236, + 108,128,246,254,247,238,225,242,237,229,238,233,225,110,128, 5, + 79,236,233,238,229,226,229,236,239,119,128, 30,110,237,239,238, + 239,243,240,225,227,101,128,255, 52,111, 2, 28,207, 28,218,225, + 242,237,229,238,233,225,110,128, 5, 57,238,101, 3, 28,227, 28, + 234, 28,240,230,233,246,101,128, 1,188,243,233,120,128, 1,132, + 244,247,111,128, 1,167,242,229,244,242,239,230,236,229,248,232, + 239,239,107,128, 1,174,115, 3, 29, 14, 29, 26, 29, 39,229,227, + 249,242,233,236,236,233, 99,128, 4, 38,232,229,227,249,242,233, + 236,236,233, 99,128, 4, 11,237,225,236,108,128,247,116,119, 2, + 29, 52, 29, 64,229,236,246,229,242,239,237,225,110,128, 33,107, + 239,242,239,237,225,110,128, 33, 97, 85,142, 0, 85, 29,105, 29, + 123, 29,131, 29,198, 30, 69, 30, 87, 30,198, 30,214, 30,226, 31, + 21, 31, 30, 31,142, 31,149, 31,219,225,227,245,244,101,129, 0, + 218, 29,115,243,237,225,236,108,128,247,250,226,242,229,246,101, + 128, 1,108, 99, 3, 29,139, 29,146, 29,188,225,242,239,110,128, + 1,211,233,242, 99, 2, 29,154, 29,159,236,101,128, 36,202,245, + 237,230,236,229,120,130, 0,219, 29,172, 29,180,226,229,236,239, + 119,128, 30,118,243,237,225,236,108,128,247,251,249,242,233,236, + 236,233, 99,128, 4, 35,100, 3, 29,206, 29,229, 30, 59,226,108, + 2, 29,213, 29,221,225,227,245,244,101,128, 1,112,231,242,225, + 246,101,128, 2, 20,233,229,242,229,243,233,115,134, 0,220, 29, + 251, 30, 3, 30, 11, 30, 34, 30, 42, 30, 51,225,227,245,244,101, + 128, 1,215,226,229,236,239,119,128, 30,114, 99, 2, 30, 17, 30, + 24,225,242,239,110,128, 1,217,249,242,233,236,236,233, 99,128, + 4,240,231,242,225,246,101,128, 1,219,237,225,227,242,239,110, + 128, 1,213,243,237,225,236,108,128,247,252,239,244,226,229,236, + 239,119,128, 30,228,231,242,225,246,101,129, 0,217, 30, 79,243, + 237,225,236,108,128,247,249,104, 2, 30, 93, 30,171,111, 2, 30, + 99, 30,109,239,235,225,226,239,246,101,128, 30,230,242,110,133, + 1,175, 30,124, 30,132, 30,143, 30,151, 30,163,225,227,245,244, + 101,128, 30,232,228,239,244,226,229,236,239,119,128, 30,240,231, + 242,225,246,101,128, 30,234,232,239,239,235,225,226,239,246,101, + 128, 30,236,244,233,236,228,101,128, 30,238,245,238,231,225,242, + 245,237,236,225,245,116,129, 1,112, 30,187,227,249,242,233,236, + 236,233, 99,128, 4,242,233,238,246,229,242,244,229,228,226,242, + 229,246,101,128, 2, 22,235,227,249,242,233,236,236,233, 99,128, + 4,120,109, 2, 30,232, 31, 10,225,227,242,239,110,130, 1,106, + 30,244, 30,255,227,249,242,233,236,236,233, 99,128, 4,238,228, + 233,229,242,229,243,233,115,128, 30,122,239,238,239,243,240,225, + 227,101,128,255, 53,239,231,239,238,229,107,128, 1,114,240,243, + 233,236,239,110,133, 3,165, 31, 49, 31, 53, 31, 90, 31,121, 31, + 134, 49,128, 3,210, 97, 2, 31, 59, 31, 81,227,245,244,229,232, + 239,239,235,243,249,237,226,239,236,231,242,229,229,107,128, 3, + 211,230,242,233,227,225,110,128, 1,177,228,233,229,242,229,243, + 233,115,129, 3,171, 31,103,232,239,239,235,243,249,237,226,239, + 236,231,242,229,229,107,128, 3,212,232,239,239,235,243,249,237, + 226,239,108,128, 3,210,244,239,238,239,115,128, 3,142,242,233, + 238,103,128, 1,110,115, 3, 31,157, 31,172, 31,179,232,239,242, + 244,227,249,242,233,236,236,233, 99,128, 4, 14,237,225,236,108, + 128,247,117,244,242,225,233,231,232,116, 2, 31,191, 31,202,227, + 249,242,233,236,236,233, 99,128, 4,174,243,244,242,239,235,229, + 227,249,242,233,236,236,233, 99,128, 4,176,244,233,236,228,101, + 130, 1,104, 31,231, 31,239,225,227,245,244,101,128, 30,120,226, + 229,236,239,119,128, 30,116, 86,136, 0, 86, 32, 11, 32, 20, 32, + 31, 32, 60, 32, 67, 32, 79, 32, 91, 32, 99,227,233,242,227,236, + 101,128, 36,203,228,239,244,226,229,236,239,119,128, 30,126,101, + 2, 32, 37, 32, 48,227,249,242,233,236,236,233, 99,128, 4, 18, + 247,225,242,237,229,238,233,225,110,128, 5, 78,232,239,239,107, + 128, 1,178,237,239,238,239,243,240,225,227,101,128,255, 54,239, + 225,242,237,229,238,233,225,110,128, 5, 72,243,237,225,236,108, + 128,247,118,244,233,236,228,101,128, 30,124, 87,134, 0, 87, 32, + 123, 32,131, 32,154, 32,194, 32,202, 32,214,225,227,245,244,101, + 128, 30,130,227,233,242, 99, 2, 32,140, 32,145,236,101,128, 36, + 204,245,237,230,236,229,120,128, 1,116,100, 2, 32,160, 32,170, + 233,229,242,229,243,233,115,128, 30,132,239,116, 2, 32,177, 32, + 186,225,227,227,229,238,116,128, 30,134,226,229,236,239,119,128, + 30,136,231,242,225,246,101,128, 30,128,237,239,238,239,243,240, + 225,227,101,128,255, 55,243,237,225,236,108,128,247,119, 88,134, + 0, 88, 32,238, 32,247, 33, 18, 33, 31, 33, 35, 33, 47,227,233, + 242,227,236,101,128, 36,205,100, 2, 32,253, 33, 7,233,229,242, + 229,243,233,115,128, 30,140,239,244,225,227,227,229,238,116,128, + 30,138,229,232,225,242,237,229,238,233,225,110,128, 5, 61,105, + 128, 3,158,237,239,238,239,243,240,225,227,101,128,255, 56,243, + 237,225,236,108,128,247,120, 89,139, 0, 89, 33, 81, 33,116, 33, + 139, 33,189, 33,228, 33,236, 33,253, 34, 40, 34, 52, 34, 60, 34, + 68, 97, 2, 33, 87, 33,104,227,245,244,101,129, 0,221, 33, 96, + 243,237,225,236,108,128,247,253,244,227,249,242,233,236,236,233, + 99,128, 4, 98,227,233,242, 99, 2, 33,125, 33,130,236,101,128, + 36,206,245,237,230,236,229,120,128, 1,118,100, 2, 33,145, 33, + 165,233,229,242,229,243,233,115,129, 1,120, 33,157,243,237,225, + 236,108,128,247,255,239,116, 2, 33,172, 33,181,225,227,227,229, + 238,116,128, 30,142,226,229,236,239,119,128, 30,244,229,114, 2, + 33,196, 33,208,233,227,249,242,233,236,236,233, 99,128, 4, 43, + 245,228,233,229,242,229,243,233,243,227,249,242,233,236,236,233, + 99,128, 4,248,231,242,225,246,101,128, 30,242,232,239,239,107, + 129, 1,179, 33,245,225,226,239,246,101,128, 30,246,105, 3, 34, + 5, 34, 16, 34, 27,225,242,237,229,238,233,225,110,128, 5, 69, + 227,249,242,233,236,236,233, 99,128, 4, 7,247,238,225,242,237, + 229,238,233,225,110,128, 5, 82,237,239,238,239,243,240,225,227, + 101,128,255, 57,243,237,225,236,108,128,247,121,244,233,236,228, + 101,128, 30,248,245,115, 2, 34, 75, 34,113,226,233,103, 2, 34, + 83, 34, 94,227,249,242,233,236,236,233, 99,128, 4,106,233,239, + 244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128, 4, + 108,236,233,244,244,236,101, 2, 34,124, 34,135,227,249,242,233, + 236,236,233, 99,128, 4,102,233,239,244,233,230,233,229,228,227, + 249,242,233,236,236,233, 99,128, 4,104, 90,136, 0, 90, 34,174, + 34,198, 34,243, 35, 14, 35, 81, 35,173, 35,185, 35,197, 97, 2, + 34,180, 34,191,225,242,237,229,238,233,225,110,128, 5, 54,227, + 245,244,101,128, 1,121, 99, 2, 34,204, 34,221,225,242,239,110, + 129, 1,125, 34,213,243,237,225,236,108,128,246,255,233,242, 99, + 2, 34,229, 34,234,236,101,128, 36,207,245,237,230,236,229,120, + 128, 30,144,228,239,116,130, 1,123, 34,253, 35, 6,225,227,227, + 229,238,116,128, 1,123,226,229,236,239,119,128, 30,146,101, 3, + 35, 22, 35, 33, 35, 76,227,249,242,233,236,236,233, 99,128, 4, + 23,100, 2, 35, 39, 35, 58,229,243,227,229,238,228,229,242,227, + 249,242,233,236,236,233, 99,128, 4,152,233,229,242,229,243,233, + 243,227,249,242,233,236,236,233, 99,128, 4,222,244, 97,128, 3, + 150,232,101, 4, 35, 92, 35,103, 35,119, 35,130,225,242,237,229, + 238,233,225,110,128, 5, 58,226,242,229,246,229,227,249,242,233, + 236,236,233, 99,128, 4,193,227,249,242,233,236,236,233, 99,128, + 4, 22,100, 2, 35,136, 35,155,229,243,227,229,238,228,229,242, + 227,249,242,233,236,236,233, 99,128, 4,150,233,229,242,229,243, + 233,243,227,249,242,233,236,236,233, 99,128, 4,220,236,233,238, + 229,226,229,236,239,119,128, 30,148,237,239,238,239,243,240,225, + 227,101,128,255, 58,115, 2, 35,203, 35,210,237,225,236,108,128, + 247,122,244,242,239,235,101,128, 1,181, 97,158, 0, 97, 36, 26, + 38,154, 39, 4, 39, 68, 39,132, 39,196, 40, 4, 40, 68, 40,126, + 40,190, 41, 70, 41,217, 42,137, 42,237, 43, 17, 49,192, 49,229, + 50, 0, 50,225, 51, 7, 52, 96, 52,168, 53,123, 53,132, 54, 5, + 56, 13, 57, 3, 57, 50, 57,201, 57,215, 49,138, 39, 1, 36, 50, + 36,114, 36,154, 36,218, 37, 26, 37, 90, 37,154, 37,218, 38, 26, + 38, 90, 48,138, 39, 33, 36, 74, 36, 78, 36, 82, 36, 86, 36, 90, + 36, 94, 36, 98, 36,102, 36,106, 36,110, 48,128, 39, 94, 49,128, + 39, 97, 50,128, 39, 98, 51,128, 39, 99, 52,128, 39,100, 53,128, + 39, 16, 54,128, 39,101, 55,128, 39,102, 56,128, 39,103, 57,128, + 38, 96, 49,134, 38, 27, 36,130, 36,134, 36,138, 36,142, 36,146, + 36,150, 48,128, 38,101, 49,128, 38,102, 50,128, 38, 99, 55,128, + 39, 9, 56,128, 39, 8, 57,128, 39, 7, 50,138, 38, 30, 36,178, + 36,182, 36,186, 36,190, 36,194, 36,198, 36,202, 36,206, 36,210, + 36,214, 48,128, 36, 96, 49,128, 36, 97, 50,128, 36, 98, 51,128, + 36, 99, 52,128, 36,100, 53,128, 36,101, 54,128, 36,102, 55,128, + 36,103, 56,128, 36,104, 57,128, 36,105, 51,138, 39, 12, 36,242, + 36,246, 36,250, 36,254, 37, 2, 37, 6, 37, 10, 37, 14, 37, 18, + 37, 22, 48,128, 39,118, 49,128, 39,119, 50,128, 39,120, 51,128, + 39,121, 52,128, 39,122, 53,128, 39,123, 54,128, 39,124, 55,128, + 39,125, 56,128, 39,126, 57,128, 39,127, 52,138, 39, 13, 37, 50, + 37, 54, 37, 58, 37, 62, 37, 66, 37, 70, 37, 74, 37, 78, 37, 82, + 37, 86, 48,128, 39,128, 49,128, 39,129, 50,128, 39,130, 51,128, + 39,131, 52,128, 39,132, 53,128, 39,133, 54,128, 39,134, 55,128, + 39,135, 56,128, 39,136, 57,128, 39,137, 53,138, 39, 14, 37,114, + 37,118, 37,122, 37,126, 37,130, 37,134, 37,138, 37,142, 37,146, + 37,150, 48,128, 39,138, 49,128, 39,139, 50,128, 39,140, 51,128, + 39,141, 52,128, 39,142, 53,128, 39,143, 54,128, 39,144, 55,128, + 39,145, 56,128, 39,146, 57,128, 39,147, 54,138, 39, 15, 37,178, + 37,182, 37,186, 37,190, 37,194, 37,198, 37,202, 37,206, 37,210, + 37,214, 48,128, 39,148, 49,128, 33,146, 50,128, 39,163, 51,128, + 33,148, 52,128, 33,149, 53,128, 39,153, 54,128, 39,155, 55,128, + 39,156, 56,128, 39,157, 57,128, 39,158, 55,138, 39, 17, 37,242, + 37,246, 37,250, 37,254, 38, 2, 38, 6, 38, 10, 38, 14, 38, 18, + 38, 22, 48,128, 39,159, 49,128, 39,160, 50,128, 39,161, 51,128, + 39,162, 52,128, 39,164, 53,128, 39,165, 54,128, 39,166, 55,128, + 39,167, 56,128, 39,168, 57,128, 39,169, 56,138, 39, 18, 38, 50, + 38, 54, 38, 58, 38, 62, 38, 66, 38, 70, 38, 74, 38, 78, 38, 82, + 38, 86, 48,128, 39,171, 49,128, 39,173, 50,128, 39,175, 51,128, + 39,178, 52,128, 39,179, 53,128, 39,181, 54,128, 39,184, 55,128, + 39,186, 56,128, 39,187, 57,128, 39,188, 57,138, 39, 19, 38,114, + 38,118, 38,122, 38,126, 38,130, 38,134, 38,138, 38,142, 38,146, + 38,150, 48,128, 39,189, 49,128, 39,190, 50,128, 39,154, 51,128, + 39,170, 52,128, 39,182, 53,128, 39,185, 54,128, 39,152, 55,128, + 39,180, 56,128, 39,183, 57,128, 39,172, 50,138, 39, 2, 38,178, + 38,224, 38,228, 38,232, 38,236, 38,240, 38,244, 38,248, 38,252, + 39, 0, 48,135, 39, 20, 38,196, 38,200, 38,204, 38,208, 38,212, + 38,216, 38,220, 48,128, 39,174, 49,128, 39,177, 50,128, 39, 3, + 51,128, 39, 80, 52,128, 39, 82, 53,128, 39,110, 54,128, 39,112, + 49,128, 39, 21, 50,128, 39, 22, 51,128, 39, 23, 52,128, 39, 24, + 53,128, 39, 25, 54,128, 39, 26, 55,128, 39, 27, 56,128, 39, 28, + 57,128, 39, 34, 51,138, 39, 4, 39, 28, 39, 32, 39, 36, 39, 40, + 39, 44, 39, 48, 39, 52, 39, 56, 39, 60, 39, 64, 48,128, 39, 35, + 49,128, 39, 36, 50,128, 39, 37, 51,128, 39, 38, 52,128, 39, 39, + 53,128, 38, 5, 54,128, 39, 41, 55,128, 39, 42, 56,128, 39, 43, + 57,128, 39, 44, 52,138, 38, 14, 39, 92, 39, 96, 39,100, 39,104, + 39,108, 39,112, 39,116, 39,120, 39,124, 39,128, 48,128, 39, 45, + 49,128, 39, 46, 50,128, 39, 47, 51,128, 39, 48, 52,128, 39, 49, + 53,128, 39, 50, 54,128, 39, 51, 55,128, 39, 52, 56,128, 39, 53, + 57,128, 39, 54, 53,138, 39, 6, 39,156, 39,160, 39,164, 39,168, + 39,172, 39,176, 39,180, 39,184, 39,188, 39,192, 48,128, 39, 55, + 49,128, 39, 56, 50,128, 39, 57, 51,128, 39, 58, 52,128, 39, 59, + 53,128, 39, 60, 54,128, 39, 61, 55,128, 39, 62, 56,128, 39, 63, + 57,128, 39, 64, 54,138, 39, 29, 39,220, 39,224, 39,228, 39,232, + 39,236, 39,240, 39,244, 39,248, 39,252, 40, 0, 48,128, 39, 65, + 49,128, 39, 66, 50,128, 39, 67, 51,128, 39, 68, 52,128, 39, 69, + 53,128, 39, 70, 54,128, 39, 71, 55,128, 39, 72, 56,128, 39, 73, + 57,128, 39, 74, 55,138, 39, 30, 40, 28, 40, 32, 40, 36, 40, 40, + 40, 44, 40, 48, 40, 52, 40, 56, 40, 60, 40, 64, 48,128, 39, 75, + 49,128, 37,207, 50,128, 39, 77, 51,128, 37,160, 52,128, 39, 79, + 53,128, 39, 81, 54,128, 37,178, 55,128, 37,188, 56,128, 37,198, + 57,128, 39, 86, 56,137, 39, 31, 40, 90, 40, 94, 40, 98, 40,102, + 40,106, 40,110, 40,114, 40,118, 40,122, 49,128, 37,215, 50,128, + 39, 88, 51,128, 39, 89, 52,128, 39, 90, 53,128, 39,111, 54,128, + 39,113, 55,128, 39,114, 56,128, 39,115, 57,128, 39,104, 57,138, + 39, 32, 40,150, 40,154, 40,158, 40,162, 40,166, 40,170, 40,174, + 40,178, 40,182, 40,186, 48,128, 39,105, 49,128, 39,108, 50,128, + 39,109, 51,128, 39,106, 52,128, 39,107, 53,128, 39,116, 54,128, + 39,117, 55,128, 39, 91, 56,128, 39, 92, 57,128, 39, 93, 97, 7, + 40,206, 40,216, 40,223, 40,230, 40,255, 41, 15, 41, 26,226,229, + 238,231,225,236,105,128, 9,134,227,245,244,101,128, 0,225,228, + 229,246, 97,128, 9, 6,231,117, 2, 40,237, 40,246,234,225,242, + 225,244,105,128, 10,134,242,237,245,235,232,105,128, 10, 6,237, + 225,244,242,225,231,245,242,237,245,235,232,105,128, 10, 62,242, + 245,243,241,245,225,242,101,128, 51, 3,246,239,247,229,236,243, + 233,231,110, 3, 41, 42, 41, 52, 41, 59,226,229,238,231,225,236, + 105,128, 9,190,228,229,246, 97,128, 9, 62,231,245,234,225,242, + 225,244,105,128, 10,190, 98, 4, 41, 80, 41,121, 41,130, 41,140, + 226,242,229,246,233,225,244,233,239,110, 2, 41, 95, 41,110,237, + 225,242,235,225,242,237,229,238,233,225,110,128, 5, 95,243,233, + 231,238,228,229,246, 97,128, 9,112,229,238,231,225,236,105,128, + 9,133,239,240,239,237,239,230,111,128, 49, 26,242,229,246,101, + 134, 1, 3, 41,159, 41,167, 41,178, 41,189, 41,197, 41,209,225, + 227,245,244,101,128, 30,175,227,249,242,233,236,236,233, 99,128, + 4,209,228,239,244,226,229,236,239,119,128, 30,183,231,242,225, + 246,101,128, 30,177,232,239,239,235,225,226,239,246,101,128, 30, + 179,244,233,236,228,101,128, 30,181, 99, 4, 41,227, 41,234, 42, + 57, 42,127,225,242,239,110,128, 1,206,233,242, 99, 2, 41,242, + 41,247,236,101,128, 36,208,245,237,230,236,229,120,133, 0,226, + 42, 10, 42, 18, 42, 29, 42, 37, 42, 49,225,227,245,244,101,128, + 30,165,228,239,244,226,229,236,239,119,128, 30,173,231,242,225, + 246,101,128, 30,167,232,239,239,235,225,226,239,246,101,128, 30, + 169,244,233,236,228,101,128, 30,171,245,244,101,133, 0,180, 42, + 73, 42, 84, 42,101, 42,108, 42,117,226,229,236,239,247,227,237, + 98,128, 3, 23, 99, 2, 42, 90, 42, 95,237, 98,128, 3, 1,239, + 237, 98,128, 3, 1,228,229,246, 97,128, 9, 84,236,239,247,237, + 239,100,128, 2,207,244,239,238,229,227,237, 98,128, 3, 65,249, + 242,233,236,236,233, 99,128, 4, 48,100, 5, 42,149, 42,159, 42, + 173, 42,179, 42,213,226,236,231,242,225,246,101,128, 2, 1,228, + 225,235,231,245,242,237,245,235,232,105,128, 10,113,229,246, 97, + 128, 9, 5,233,229,242,229,243,233,115,130, 0,228, 42,193, 42, + 204,227,249,242,233,236,236,233, 99,128, 4,211,237,225,227,242, + 239,110,128, 1,223,239,116, 2, 42,220, 42,228,226,229,236,239, + 119,128, 30,161,237,225,227,242,239,110,128, 1,225,101,131, 0, + 230, 42,247, 42,255, 43, 8,225,227,245,244,101,128, 1,253,235, + 239,242,229,225,110,128, 49, 80,237,225,227,242,239,110,128, 1, + 227,230,233,105, 6, 43, 33, 43, 53, 45,246, 45,252, 46, 11, 49, + 111, 48, 2, 43, 39, 43, 46,176,178,176, 56,128, 32, 21,184,185, + 180, 49,128, 32,164,177, 48, 3, 43, 62, 45, 86, 45,221, 48, 9, + 43, 82, 43,102, 43,164, 43,226, 44, 32, 44, 94, 44,156, 44,218, + 45, 24, 49, 3, 43, 90, 43, 94, 43, 98, 55,128, 4, 16, 56,128, + 4, 17, 57,128, 4, 18, 50, 10, 43,124, 43,128, 43,132, 43,136, + 43,140, 43,144, 43,148, 43,152, 43,156, 43,160, 48,128, 4, 19, + 49,128, 4, 20, 50,128, 4, 21, 51,128, 4, 1, 52,128, 4, 22, + 53,128, 4, 23, 54,128, 4, 24, 55,128, 4, 25, 56,128, 4, 26, + 57,128, 4, 27, 51, 10, 43,186, 43,190, 43,194, 43,198, 43,202, + 43,206, 43,210, 43,214, 43,218, 43,222, 48,128, 4, 28, 49,128, + 4, 29, 50,128, 4, 30, 51,128, 4, 31, 52,128, 4, 32, 53,128, + 4, 33, 54,128, 4, 34, 55,128, 4, 35, 56,128, 4, 36, 57,128, + 4, 37, 52, 10, 43,248, 43,252, 44, 0, 44, 4, 44, 8, 44, 12, + 44, 16, 44, 20, 44, 24, 44, 28, 48,128, 4, 38, 49,128, 4, 39, + 50,128, 4, 40, 51,128, 4, 41, 52,128, 4, 42, 53,128, 4, 43, + 54,128, 4, 44, 55,128, 4, 45, 56,128, 4, 46, 57,128, 4, 47, + 53, 10, 44, 54, 44, 58, 44, 62, 44, 66, 44, 70, 44, 74, 44, 78, + 44, 82, 44, 86, 44, 90, 48,128, 4,144, 49,128, 4, 2, 50,128, + 4, 3, 51,128, 4, 4, 52,128, 4, 5, 53,128, 4, 6, 54,128, + 4, 7, 55,128, 4, 8, 56,128, 4, 9, 57,128, 4, 10, 54, 10, + 44,116, 44,120, 44,124, 44,128, 44,132, 44,136, 44,140, 44,144, + 44,148, 44,152, 48,128, 4, 11, 49,128, 4, 12, 50,128, 4, 14, + 51,128,246,196, 52,128,246,197, 53,128, 4, 48, 54,128, 4, 49, + 55,128, 4, 50, 56,128, 4, 51, 57,128, 4, 52, 55, 10, 44,178, + 44,182, 44,186, 44,190, 44,194, 44,198, 44,202, 44,206, 44,210, + 44,214, 48,128, 4, 53, 49,128, 4, 81, 50,128, 4, 54, 51,128, + 4, 55, 52,128, 4, 56, 53,128, 4, 57, 54,128, 4, 58, 55,128, + 4, 59, 56,128, 4, 60, 57,128, 4, 61, 56, 10, 44,240, 44,244, + 44,248, 44,252, 45, 0, 45, 4, 45, 8, 45, 12, 45, 16, 45, 20, + 48,128, 4, 62, 49,128, 4, 63, 50,128, 4, 64, 51,128, 4, 65, + 52,128, 4, 66, 53,128, 4, 67, 54,128, 4, 68, 55,128, 4, 69, + 56,128, 4, 70, 57,128, 4, 71, 57, 10, 45, 46, 45, 50, 45, 54, + 45, 58, 45, 62, 45, 66, 45, 70, 45, 74, 45, 78, 45, 82, 48,128, + 4, 72, 49,128, 4, 73, 50,128, 4, 74, 51,128, 4, 75, 52,128, + 4, 76, 53,128, 4, 77, 54,128, 4, 78, 55,128, 4, 79, 56,128, + 4,145, 57,128, 4, 82, 49, 4, 45, 96, 45,158, 45,163, 45,189, + 48, 10, 45,118, 45,122, 45,126, 45,130, 45,134, 45,138, 45,142, + 45,146, 45,150, 45,154, 48,128, 4, 83, 49,128, 4, 84, 50,128, + 4, 85, 51,128, 4, 86, 52,128, 4, 87, 53,128, 4, 88, 54,128, + 4, 89, 55,128, 4, 90, 56,128, 4, 91, 57,128, 4, 92,177, 48, + 128, 4, 94, 52, 4, 45,173, 45,177, 45,181, 45,185, 53,128, 4, + 15, 54,128, 4, 98, 55,128, 4,114, 56,128, 4,116, 57, 5, 45, + 201, 45,205, 45,209, 45,213, 45,217, 50,128,246,198, 51,128, 4, + 95, 52,128, 4, 99, 53,128, 4,115, 54,128, 4,117, 56, 2, 45, + 227, 45,241, 51, 2, 45,233, 45,237, 49,128,246,199, 50,128,246, + 200,180, 54,128, 4,217,178,185, 57,128, 32, 14,179, 48, 2, 46, + 3, 46, 7, 48,128, 32, 15, 49,128, 32, 13,181, 55, 7, 46, 28, + 46, 98, 47,163, 47,240, 48,197, 49, 34, 49,105, 51, 2, 46, 34, + 46, 48, 56, 2, 46, 40, 46, 44, 49,128, 6,106, 56,128, 6, 12, + 57, 8, 46, 66, 46, 70, 46, 74, 46, 78, 46, 82, 46, 86, 46, 90, + 46, 94, 50,128, 6, 96, 51,128, 6, 97, 52,128, 6, 98, 53,128, + 6, 99, 54,128, 6,100, 55,128, 6,101, 56,128, 6,102, 57,128, + 6,103, 52, 7, 46,114, 46,146, 46,208, 47, 14, 47, 46, 47,102, + 47,158, 48, 5, 46,126, 46,130, 46,134, 46,138, 46,142, 48,128, + 6,104, 49,128, 6,105, 51,128, 6, 27, 55,128, 6, 31, 57,128, + 6, 33, 49, 10, 46,168, 46,172, 46,176, 46,180, 46,184, 46,188, + 46,192, 46,196, 46,200, 46,204, 48,128, 6, 34, 49,128, 6, 35, + 50,128, 6, 36, 51,128, 6, 37, 52,128, 6, 38, 53,128, 6, 39, + 54,128, 6, 40, 55,128, 6, 41, 56,128, 6, 42, 57,128, 6, 43, + 50, 10, 46,230, 46,234, 46,238, 46,242, 46,246, 46,250, 46,254, + 47, 2, 47, 6, 47, 10, 48,128, 6, 44, 49,128, 6, 45, 50,128, + 6, 46, 51,128, 6, 47, 52,128, 6, 48, 53,128, 6, 49, 54,128, + 6, 50, 55,128, 6, 51, 56,128, 6, 52, 57,128, 6, 53, 51, 5, + 47, 26, 47, 30, 47, 34, 47, 38, 47, 42, 48,128, 6, 54, 49,128, + 6, 55, 50,128, 6, 56, 51,128, 6, 57, 52,128, 6, 58, 52, 9, + 47, 66, 47, 70, 47, 74, 47, 78, 47, 82, 47, 86, 47, 90, 47, 94, + 47, 98, 48,128, 6, 64, 49,128, 6, 65, 50,128, 6, 66, 51,128, + 6, 67, 52,128, 6, 68, 53,128, 6, 69, 54,128, 6, 70, 56,128, + 6, 72, 57,128, 6, 73, 53, 9, 47,122, 47,126, 47,130, 47,134, + 47,138, 47,142, 47,146, 47,150, 47,154, 48,128, 6, 74, 49,128, + 6, 75, 50,128, 6, 76, 51,128, 6, 77, 52,128, 6, 78, 53,128, + 6, 79, 54,128, 6, 80, 55,128, 6, 81, 56,128, 6, 82,183, 48, + 128, 6, 71, 53, 3, 47,171, 47,203, 47,235, 48, 5, 47,183, 47, + 187, 47,191, 47,195, 47,199, 53,128, 6,164, 54,128, 6,126, 55, + 128, 6,134, 56,128, 6,152, 57,128, 6,175, 49, 5, 47,215, 47, + 219, 47,223, 47,227, 47,231, 49,128, 6,121, 50,128, 6,136, 51, + 128, 6,145, 52,128, 6,186, 57,128, 6,210,179, 52,128, 6,213, + 54, 7, 48, 0, 48, 5, 48, 10, 48, 15, 48, 53, 48,115, 48,177, + 179, 54,128, 32,170,180, 53,128, 5,190,181, 56,128, 5,195, 54, + 6, 48, 29, 48, 33, 48, 37, 48, 41, 48, 45, 48, 49, 52,128, 5, + 208, 53,128, 5,209, 54,128, 5,210, 55,128, 5,211, 56,128, 5, + 212, 57,128, 5,213, 55, 10, 48, 75, 48, 79, 48, 83, 48, 87, 48, + 91, 48, 95, 48, 99, 48,103, 48,107, 48,111, 48,128, 5,214, 49, + 128, 5,215, 50,128, 5,216, 51,128, 5,217, 52,128, 5,218, 53, + 128, 5,219, 54,128, 5,220, 55,128, 5,221, 56,128, 5,222, 57, + 128, 5,223, 56, 10, 48,137, 48,141, 48,145, 48,149, 48,153, 48, + 157, 48,161, 48,165, 48,169, 48,173, 48,128, 5,224, 49,128, 5, + 225, 50,128, 5,226, 51,128, 5,227, 52,128, 5,228, 53,128, 5, + 229, 54,128, 5,230, 55,128, 5,231, 56,128, 5,232, 57,128, 5, + 233, 57, 3, 48,185, 48,189, 48,193, 48,128, 5,234, 52,128,251, + 42, 53,128,251, 43, 55, 4, 48,207, 48,221, 48,241, 48,246, 48, + 2, 48,213, 48,217, 48,128,251, 75, 53,128,251, 31, 49, 3, 48, + 229, 48,233, 48,237, 54,128, 5,240, 55,128, 5,241, 56,128, 5, + 242,178, 51,128,251, 53, 57, 7, 49, 6, 49, 10, 49, 14, 49, 18, + 49, 22, 49, 26, 49, 30, 51,128, 5,180, 52,128, 5,181, 53,128, + 5,182, 54,128, 5,187, 55,128, 5,184, 56,128, 5,183, 57,128, + 5,176, 56, 3, 49, 42, 49, 86, 49, 91, 48, 7, 49, 58, 49, 62, + 49, 66, 49, 70, 49, 74, 49, 78, 49, 82, 48,128, 5,178, 49,128, + 5,177, 50,128, 5,179, 51,128, 5,194, 52,128, 5,193, 54,128, + 5,185, 55,128, 5,188,179, 57,128, 5,189, 52, 2, 49, 97, 49, + 101, 49,128, 5,191, 50,128, 5,192,185,178, 57,128, 2,188, 54, + 3, 49,119, 49,178, 49,185, 49, 4, 49,129, 49,145, 49,151, 49, + 172, 50, 2, 49,135, 49,140,180, 56,128, 33, 5,184, 57,128, 33, + 19,179,181, 50,128, 33, 22,181, 55, 3, 49,160, 49,164, 49,168, + 51,128, 32, 44, 52,128, 32, 45, 53,128, 32, 46,182,182, 52,128, + 32, 12,179,177,182, 55,128, 6,109,180,185,179, 55,128, 2,189, + 103, 2, 49,198, 49,205,242,225,246,101,128, 0,224,117, 2, 49, + 211, 49,220,234,225,242,225,244,105,128, 10,133,242,237,245,235, + 232,105,128, 10, 5,104, 2, 49,235, 49,245,233,242,225,231,225, + 238, 97,128, 48, 66,239,239,235,225,226,239,246,101,128, 30,163, + 105, 7, 50, 16, 50, 41, 50, 48, 50, 60, 50, 85, 50,101, 50,181, + 98, 2, 50, 22, 50, 31,229,238,231,225,236,105,128, 9,144,239, + 240,239,237,239,230,111,128, 49, 30,228,229,246, 97,128, 9, 16, + 229,227,249,242,233,236,236,233, 99,128, 4,213,231,117, 2, 50, + 67, 50, 76,234,225,242,225,244,105,128, 10,144,242,237,245,235, + 232,105,128, 10, 16,237,225,244,242,225,231,245,242,237,245,235, + 232,105,128, 10, 72,110, 5, 50,113, 50,122, 50,136, 50,152, 50, + 167,225,242,225,226,233, 99,128, 6, 57,230,233,238,225,236,225, + 242,225,226,233, 99,128,254,202,233,238,233,244,233,225,236,225, + 242,225,226,233, 99,128,254,203,237,229,228,233,225,236,225,242, + 225,226,233, 99,128,254,204,246,229,242,244,229,228,226,242,229, + 246,101,128, 2, 3,246,239,247,229,236,243,233,231,110, 3, 50, + 197, 50,207, 50,214,226,229,238,231,225,236,105,128, 9,200,228, + 229,246, 97,128, 9, 72,231,245,234,225,242,225,244,105,128, 10, + 200,107, 2, 50,231, 50,255,225,244,225,235,225,238, 97,129, 48, + 162, 50,243,232,225,236,230,247,233,228,244,104,128,255,113,239, + 242,229,225,110,128, 49, 79,108, 3, 51, 15, 52, 71, 52, 80,101, + 2, 51, 21, 52, 66,102,136, 5,208, 51, 41, 51, 50, 51, 65, 51, + 79, 51,168, 51,182, 52, 37, 52, 51,225,242,225,226,233, 99,128, + 6, 39,228,225,231,229,243,232,232,229,226,242,229,119,128,251, + 48,230,233,238,225,236,225,242,225,226,233, 99,128,254,142,104, + 2, 51, 85, 51,160,225,237,250, 97, 2, 51, 94, 51,127,225,226, + 239,246,101, 2, 51,104, 51,113,225,242,225,226,233, 99,128, 6, + 35,230,233,238,225,236,225,242,225,226,233, 99,128,254,132,226, + 229,236,239,119, 2, 51,137, 51,146,225,242,225,226,233, 99,128, + 6, 37,230,233,238,225,236,225,242,225,226,233, 99,128,254,136, + 229,226,242,229,119,128, 5,208,236,225,237,229,228,232,229,226, + 242,229,119,128,251, 79,237, 97, 2, 51,189, 51,225,228,228,225, + 225,226,239,246,101, 2, 51,202, 51,211,225,242,225,226,233, 99, + 128, 6, 34,230,233,238,225,236,225,242,225,226,233, 99,128,254, + 130,235,243,245,242, 97, 4, 51,239, 51,248, 52, 6, 52, 22,225, + 242,225,226,233, 99,128, 6, 73,230,233,238,225,236,225,242,225, + 226,233, 99,128,254,240,233,238,233,244,233,225,236,225,242,225, + 226,233, 99,128,254,243,237,229,228,233,225,236,225,242,225,226, + 233, 99,128,254,244,240,225,244,225,232,232,229,226,242,229,119, + 128,251, 46,241,225,237,225,244,243,232,229,226,242,229,119,128, + 251, 47,240,104,128, 33, 53,236,229,241,245,225,108,128, 34, 76, + 240,232, 97,129, 3,177, 52, 88,244,239,238,239,115,128, 3,172, + 109, 4, 52,106, 52,114, 52,125, 52,159,225,227,242,239,110,128, + 1, 1,239,238,239,243,240,225,227,101,128,255, 65,240,229,242, + 243,225,238,100,130, 0, 38, 52,139, 52,151,237,239,238,239,243, + 240,225,227,101,128,255, 6,243,237,225,236,108,128,247, 38,243, + 241,245,225,242,101,128, 51,194,110, 4, 52,178, 52,189, 53, 55, + 53, 65,226,239,240,239,237,239,230,111,128, 49, 34,103, 4, 52, + 199, 52,210, 52,224, 53, 47,226,239,240,239,237,239,230,111,128, + 49, 36,235,232,225,238,235,232,245,244,232,225,105,128, 14, 90, + 236,101,131, 34, 32, 52,235, 53, 32, 53, 39,226,242,225,227,235, + 229,116, 2, 52,247, 53, 11,236,229,230,116,129, 48, 8, 53, 0, + 246,229,242,244,233,227,225,108,128,254, 63,242,233,231,232,116, + 129, 48, 9, 53, 21,246,229,242,244,233,227,225,108,128,254, 64, + 236,229,230,116,128, 35, 41,242,233,231,232,116,128, 35, 42,243, + 244,242,239,109,128, 33, 43,239,244,229,236,229,233, 97,128, 3, + 135,117, 2, 53, 71, 53, 83,228,225,244,244,225,228,229,246, 97, + 128, 9, 82,243,246,225,242, 97, 3, 53, 95, 53,105, 53,112,226, + 229,238,231,225,236,105,128, 9,130,228,229,246, 97,128, 9, 2, + 231,245,234,225,242,225,244,105,128, 10,130,239,231,239,238,229, + 107,128, 1, 5,112, 3, 53,140, 53,164, 53,194, 97, 2, 53,146, + 53,158,225,244,239,243,241,245,225,242,101,128, 51, 0,242,229, + 110,128, 36,156,239,243,244,242,239,240,232,101, 2, 53,177, 53, + 188,225,242,237,229,238,233,225,110,128, 5, 90,237,239,100,128, + 2,188,112, 2, 53,200, 53,205,236,101,128,248,255,242,111, 2, + 53,212, 53,220,225,227,232,229,115,128, 34, 80,120, 2, 53,226, + 53,246,229,241,245,225,108,129, 34, 72, 53,236,239,242,233,237, + 225,231,101,128, 34, 82,233,237,225,244,229,236,249,229,241,245, + 225,108,128, 34, 69,114, 4, 54, 15, 54, 42, 54, 46, 54, 91,225, + 229, 97, 2, 54, 23, 54, 33,229,235,239,242,229,225,110,128, 49, + 142,235,239,242,229,225,110,128, 49,141, 99,128, 35, 18,105, 2, + 54, 52, 54, 66,231,232,244,232,225,236,230,242,233,238,103,128, + 30,154,238,103,130, 0,229, 54, 75, 54, 83,225,227,245,244,101, + 128, 1,251,226,229,236,239,119,128, 30, 1,242,239,119, 8, 54, + 111, 54,118, 54,247, 55, 57, 55,107, 55,162, 55,185, 56, 4,226, + 239,244,104,128, 33,148,100, 3, 54,126, 54,165, 54,212,225,243, + 104, 4, 54,138, 54,145, 54,152, 54,160,228,239,247,110,128, 33, + 227,236,229,230,116,128, 33,224,242,233,231,232,116,128, 33,226, + 245,112,128, 33,225,226,108, 5, 54,178, 54,185, 54,192, 54,199, + 54,207,226,239,244,104,128, 33,212,228,239,247,110,128, 33,211, + 236,229,230,116,128, 33,208,242,233,231,232,116,128, 33,210,245, + 112,128, 33,209,239,247,110,131, 33,147, 54,224, 54,231, 54,239, + 236,229,230,116,128, 33,153,242,233,231,232,116,128, 33,152,247, + 232,233,244,101,128, 33,233,104, 2, 54,253, 55, 48,229,225,100, + 4, 55, 9, 55, 19, 55, 29, 55, 40,228,239,247,238,237,239,100, + 128, 2,197,236,229,230,244,237,239,100,128, 2,194,242,233,231, + 232,244,237,239,100,128, 2,195,245,240,237,239,100,128, 2,196, + 239,242,233,250,229,120,128,248,231,236,229,230,116,131, 33,144, + 55, 70, 55, 87, 55, 99,228,226,108,129, 33,208, 55, 78,243,244, + 242,239,235,101,128, 33,205,239,246,229,242,242,233,231,232,116, + 128, 33,198,247,232,233,244,101,128, 33,230,242,233,231,232,116, + 132, 33,146, 55,123, 55,135, 55,143, 55,154,228,226,236,243,244, + 242,239,235,101,128, 33,207,232,229,225,246,121,128, 39,158,239, + 246,229,242,236,229,230,116,128, 33,196,247,232,233,244,101,128, + 33,232,244,225, 98, 2, 55,170, 55,177,236,229,230,116,128, 33, + 228,242,233,231,232,116,128, 33,229,245,112,132, 33,145, 55,198, + 55,226, 55,244, 55,252,100, 2, 55,204, 55,216,110,129, 33,149, + 55,210,226,243,101,128, 33,168,239,247,238,226,225,243,101,128, + 33,168,236,229,230,116,129, 33,150, 55,235,239,230,228,239,247, + 110,128, 33,197,242,233,231,232,116,128, 33,151,247,232,233,244, + 101,128, 33,231,246,229,242,244,229,120,128,248,230,115, 5, 56, + 25, 56,101, 56,146, 56,229, 56,239, 99, 2, 56, 31, 56, 83,233, + 105, 2, 56, 38, 56, 61,227,233,242,227,245,109,129, 0, 94, 56, + 49,237,239,238,239,243,240,225,227,101,128,255, 62,244,233,236, + 228,101,129, 0,126, 56, 71,237,239,238,239,243,240,225,227,101, + 128,255, 94,242,233,240,116,129, 2, 81, 56, 92,244,245,242,238, + 229,100,128, 2, 82,237,225,236,108, 2, 56,110, 56,121,232,233, + 242,225,231,225,238, 97,128, 48, 65,235,225,244,225,235,225,238, + 97,129, 48,161, 56,134,232,225,236,230,247,233,228,244,104,128, + 255,103,244,229,242,233,115, 2, 56,156, 56,225,107,131, 0, 42, + 56,166, 56,194, 56,217, 97, 2, 56,172, 56,186,236,244,239,238, + 229,225,242,225,226,233, 99,128, 6,109,242,225,226,233, 99,128, + 6,109,109, 2, 56,200, 56,206,225,244,104,128, 34, 23,239,238, + 239,243,240,225,227,101,128,255, 10,243,237,225,236,108,128,254, + 97,109,128, 32, 66,245,240,229,242,233,239,114,128,246,233,249, + 237,240,244,239,244,233,227,225,236,236,249,229,241,245,225,108, + 128, 34, 67,116,132, 0, 64, 57, 15, 57, 22, 57, 34, 57, 42,233, + 236,228,101,128, 0,227,237,239,238,239,243,240,225,227,101,128, + 255, 32,243,237,225,236,108,128,254,107,245,242,238,229,100,128, + 2, 80,117, 6, 57, 64, 57, 89, 57, 96, 57,121, 57,141, 57,157, + 98, 2, 57, 70, 57, 79,229,238,231,225,236,105,128, 9,148,239, + 240,239,237,239,230,111,128, 49, 32,228,229,246, 97,128, 9, 20, + 231,117, 2, 57,103, 57,112,234,225,242,225,244,105,128, 10,148, + 242,237,245,235,232,105,128, 10, 20,236,229,238,231,244,232,237, + 225,242,235,226,229,238,231,225,236,105,128, 9,215,237,225,244, + 242,225,231,245,242,237,245,235,232,105,128, 10, 76,246,239,247, + 229,236,243,233,231,110, 3, 57,173, 57,183, 57,190,226,229,238, + 231,225,236,105,128, 9,204,228,229,246, 97,128, 9, 76,231,245, + 234,225,242,225,244,105,128, 10,204,246,225,231,242,225,232,225, + 228,229,246, 97,128, 9, 61,121, 2, 57,221, 57,233,226,225,242, + 237,229,238,233,225,110,128, 5, 97,233,110,130, 5,226, 57,242, + 58, 1,225,236,244,239,238,229,232,229,226,242,229,119,128,251, + 32,232,229,226,242,229,119,128, 5,226, 98,144, 0, 98, 58, 46, + 58,181, 58,192, 58,201, 58,226, 60, 11, 60, 73, 60,146, 62, 72, + 62, 84, 62,127, 62,135, 62,145, 64, 15, 64, 39, 64, 48, 97, 7, + 58, 62, 58, 72, 58, 96, 58,103, 58,128, 58,152, 58,163,226,229, + 238,231,225,236,105,128, 9,172,227,235,243,236,225,243,104,129, + 0, 92, 58, 84,237,239,238,239,243,240,225,227,101,128,255, 60, + 228,229,246, 97,128, 9, 44,231,117, 2, 58,110, 58,119,234,225, + 242,225,244,105,128, 10,172,242,237,245,235,232,105,128, 10, 44, + 104, 2, 58,134, 58,144,233,242,225,231,225,238, 97,128, 48,112, + 244,244,232,225,105,128, 14, 63,235,225,244,225,235,225,238, 97, + 128, 48,208,114,129, 0,124, 58,169,237,239,238,239,243,240,225, + 227,101,128,255, 92,226,239,240,239,237,239,230,111,128, 49, 5, + 227,233,242,227,236,101,128, 36,209,228,239,116, 2, 58,209, 58, + 218,225,227,227,229,238,116,128, 30, 3,226,229,236,239,119,128, + 30, 5,101, 6, 58,240, 59, 5, 59, 28, 59,170, 59,181, 59,193, + 225,237,229,228,243,233,248,244,229,229,238,244,232,238,239,244, + 229,115,128, 38,108, 99, 2, 59, 11, 59, 18,225,245,243,101,128, + 34, 53,249,242,233,236,236,233, 99,128, 4, 49,104, 5, 59, 40, + 59, 49, 59, 63, 59, 93, 59,152,225,242,225,226,233, 99,128, 6, + 40,230,233,238,225,236,225,242,225,226,233, 99,128,254,144,105, + 2, 59, 69, 59, 84,238,233,244,233,225,236,225,242,225,226,233, + 99,128,254,145,242,225,231,225,238, 97,128, 48,121,237,101, 2, + 59,100, 59,113,228,233,225,236,225,242,225,226,233, 99,128,254, + 146,229,237,105, 2, 59,121, 59,136,238,233,244,233,225,236,225, + 242,225,226,233, 99,128,252,159,243,239,236,225,244,229,228,225, + 242,225,226,233, 99,128,252, 8,238,239,239,238,230,233,238,225, + 236,225,242,225,226,233, 99,128,252,109,235,225,244,225,235,225, + 238, 97,128, 48,217,238,225,242,237,229,238,233,225,110,128, 5, + 98,116,132, 5,209, 59,205, 59,225, 59,245, 59,254, 97,129, 3, + 178, 59,211,243,249,237,226,239,236,231,242,229,229,107,128, 3, + 208,228,225,231,229,243,104,129,251, 49, 59,236,232,229,226,242, + 229,119,128,251, 49,232,229,226,242,229,119,128, 5,209,242,225, + 230,229,232,229,226,242,229,119,128,251, 76,104, 2, 60, 17, 60, + 67, 97, 3, 60, 25, 60, 35, 60, 42,226,229,238,231,225,236,105, + 128, 9,173,228,229,246, 97,128, 9, 45,231,117, 2, 60, 49, 60, + 58,234,225,242,225,244,105,128, 10,173,242,237,245,235,232,105, + 128, 10, 45,239,239,107,128, 2, 83,105, 5, 60, 85, 60, 96, 60, + 107, 60,121, 60,135,232,233,242,225,231,225,238, 97,128, 48,115, + 235,225,244,225,235,225,238, 97,128, 48,211,236,225,226,233,225, + 236,227,236,233,227,107,128, 2,152,238,228,233,231,245,242,237, + 245,235,232,105,128, 10, 2,242,245,243,241,245,225,242,101,128, + 51, 49,108, 3, 60,154, 62, 55, 62, 66, 97, 2, 60,160, 62, 50, + 227,107, 6, 60,175, 60,184, 60,221, 61,114, 61,169, 61,221,227, + 233,242,227,236,101,128, 37,207,100, 2, 60,190, 60,199,233,225, + 237,239,238,100,128, 37,198,239,247,238,240,239,233,238,244,233, + 238,231,244,242,233,225,238,231,236,101,128, 37,188,108, 2, 60, + 227, 61, 74,101, 2, 60,233, 61, 13,230,244,240,239,233,238,244, + 233,238,103, 2, 60,248, 61, 2,240,239,233,238,244,229,114,128, + 37,196,244,242,233,225,238,231,236,101,128, 37,192,238,244,233, + 227,245,236,225,242,226,242,225,227,235,229,116, 2, 61, 33, 61, + 53,236,229,230,116,129, 48, 16, 61, 42,246,229,242,244,233,227, + 225,108,128,254, 59,242,233,231,232,116,129, 48, 17, 61, 63,246, + 229,242,244,233,227,225,108,128,254, 60,239,247,229,114, 2, 61, + 83, 61, 98,236,229,230,244,244,242,233,225,238,231,236,101,128, + 37,227,242,233,231,232,244,244,242,233,225,238,231,236,101,128, + 37,226,114, 2, 61,120, 61,131,229,227,244,225,238,231,236,101, + 128, 37,172,233,231,232,244,240,239,233,238,244,233,238,103, 2, + 61,148, 61,158,240,239,233,238,244,229,114,128, 37,186,244,242, + 233,225,238,231,236,101,128, 37,182,115, 3, 61,177, 61,207, 61, + 215,109, 2, 61,183, 61,195,225,236,236,243,241,245,225,242,101, + 128, 37,170,233,236,233,238,231,230,225,227,101,128, 38, 59,241, + 245,225,242,101,128, 37,160,244,225,114,128, 38, 5,245,240,112, + 2, 61,229, 62, 11,229,114, 2, 61,236, 61,251,236,229,230,244, + 244,242,233,225,238,231,236,101,128, 37,228,242,233,231,232,244, + 244,242,233,225,238,231,236,101,128, 37,229,239,233,238,244,233, + 238,103, 2, 62, 23, 62, 39,243,237,225,236,236,244,242,233,225, + 238,231,236,101,128, 37,180,244,242,233,225,238,231,236,101,128, + 37,178,238,107,128, 36, 35,233,238,229,226,229,236,239,119,128, + 30, 7,239,227,107,128, 37,136,237,239,238,239,243,240,225,227, + 101,128,255, 66,111, 3, 62, 92, 62,105, 62,116,226,225,233,237, + 225,233,244,232,225,105,128, 14, 26,232,233,242,225,231,225,238, + 97,128, 48,124,235,225,244,225,235,225,238, 97,128, 48,220,240, + 225,242,229,110,128, 36,157,241,243,241,245,225,242,101,128, 51, + 195,114, 4, 62,155, 63,149, 63,222, 64, 5,225, 99, 2, 62,162, + 63, 56,101, 3, 62,170, 62,175, 62,243,229,120,128,248,244,236, + 229,230,116,133, 0,123, 62,192, 62,197, 62,219, 62,227, 62,232, + 226,116,128,248,243,109, 2, 62,203, 62,208,233,100,128,248,242, + 239,238,239,243,240,225,227,101,128,255, 91,243,237,225,236,108, + 128,254, 91,244,112,128,248,241,246,229,242,244,233,227,225,108, + 128,254, 55,242,233,231,232,116,133, 0,125, 63, 5, 63, 10, 63, + 32, 63, 40, 63, 45,226,116,128,248,254,109, 2, 63, 16, 63, 21, + 233,100,128,248,253,239,238,239,243,240,225,227,101,128,255, 93, + 243,237,225,236,108,128,254, 92,244,112,128,248,252,246,229,242, + 244,233,227,225,108,128,254, 56,235,229,116, 2, 63, 64, 63,106, + 236,229,230,116,132, 0, 91, 63, 79, 63, 84, 63, 89, 63,101,226, + 116,128,248,240,229,120,128,248,239,237,239,238,239,243,240,225, + 227,101,128,255, 59,244,112,128,248,238,242,233,231,232,116,132, + 0, 93, 63,122, 63,127, 63,132, 63,144,226,116,128,248,251,229, + 120,128,248,250,237,239,238,239,243,240,225,227,101,128,255, 61, + 244,112,128,248,249,229,246,101,131, 2,216, 63,161, 63,172, 63, + 178,226,229,236,239,247,227,237, 98,128, 3, 46,227,237, 98,128, + 3, 6,233,238,246,229,242,244,229,100, 3, 63,193, 63,204, 63, + 210,226,229,236,239,247,227,237, 98,128, 3, 47,227,237, 98,128, + 3, 17,228,239,245,226,236,229,227,237, 98,128, 3, 97,233,228, + 231,101, 2, 63,231, 63,242,226,229,236,239,247,227,237, 98,128, + 3, 42,233,238,246,229,242,244,229,228,226,229,236,239,247,227, + 237, 98,128, 3, 58,239,235,229,238,226,225,114,128, 0,166,115, + 2, 64, 21, 64, 29,244,242,239,235,101,128, 1,128,245,240,229, + 242,233,239,114,128,246,234,244,239,240,226,225,114,128, 1,131, + 117, 3, 64, 56, 64, 67, 64, 78,232,233,242,225,231,225,238, 97, + 128, 48,118,235,225,244,225,235,225,238, 97,128, 48,214,236,108, + 2, 64, 85, 64,115,229,116,130, 32, 34, 64, 94, 64,104,233,238, + 246,229,242,243,101,128, 37,216,239,240,229,242,225,244,239,114, + 128, 34, 25,243,229,249,101,128, 37,206, 99,143, 0, 99, 64,156, + 65,105, 65,116, 65,180, 65,211, 66, 48, 67,215, 68,199, 69, 43, + 69, 92, 72, 84, 72, 92, 72,102, 72,114, 72,147, 97, 9, 64,176, + 64,187, 64,197, 64,204, 64,211, 64,236, 64,246, 65, 42, 65, 51, + 225,242,237,229,238,233,225,110,128, 5,110,226,229,238,231,225, + 236,105,128, 9,154,227,245,244,101,128, 1, 7,228,229,246, 97, + 128, 9, 26,231,117, 2, 64,218, 64,227,234,225,242,225,244,105, + 128, 10,154,242,237,245,235,232,105,128, 10, 26,236,243,241,245, + 225,242,101,128, 51,136,238,228,242,225,226,233,238,228,117, 4, + 65, 8, 65, 18, 65, 24, 65, 31,226,229,238,231,225,236,105,128, + 9,129,227,237, 98,128, 3, 16,228,229,246, 97,128, 9, 1,231, + 245,234,225,242,225,244,105,128, 10,129,240,243,236,239,227,107, + 128, 33,234,114, 3, 65, 59, 65, 65, 65, 91,229,239,102,128, 33, + 5,239,110,130, 2,199, 65, 74, 65, 85,226,229,236,239,247,227, + 237, 98,128, 3, 44,227,237, 98,128, 3, 12,242,233,225,231,229, + 242,229,244,245,242,110,128, 33,181,226,239,240,239,237,239,230, + 111,128, 49, 24, 99, 4, 65,126, 65,133, 65,152, 65,174,225,242, + 239,110,128, 1, 13,229,228,233,236,236, 97,129, 0,231, 65,144, + 225,227,245,244,101,128, 30, 9,233,242, 99, 2, 65,160, 65,165, + 236,101,128, 36,210,245,237,230,236,229,120,128, 1, 9,245,242, + 108,128, 2, 85,100, 2, 65,186, 65,202,239,116,129, 1, 11, 65, + 193,225,227,227,229,238,116,128, 1, 11,243,241,245,225,242,101, + 128, 51,197,101, 2, 65,217, 65,233,228,233,236,236, 97,129, 0, + 184, 65,227,227,237, 98,128, 3, 39,238,116,132, 0,162, 65,246, + 66, 14, 66, 26, 66, 37,105, 2, 65,252, 66, 4,231,242,225,228, + 101,128, 33, 3,238,230,229,242,233,239,114,128,246,223,237,239, + 238,239,243,240,225,227,101,128,255,224,239,236,228,243,244,249, + 236,101,128,247,162,243,245,240,229,242,233,239,114,128,246,224, + 104, 5, 66, 60, 66,123, 66,134, 67, 62, 67,154, 97, 4, 66, 70, + 66, 81, 66, 91, 66, 98,225,242,237,229,238,233,225,110,128, 5, + 121,226,229,238,231,225,236,105,128, 9,155,228,229,246, 97,128, + 9, 27,231,117, 2, 66,105, 66,114,234,225,242,225,244,105,128, + 10,155,242,237,245,235,232,105,128, 10, 27,226,239,240,239,237, + 239,230,111,128, 49, 20,101, 6, 66,148, 66,168, 66,192, 67, 4, + 67, 16, 67, 37,225,226,235,232,225,243,233,225,238,227,249,242, + 233,236,236,233, 99,128, 4,189, 99, 2, 66,174, 66,182,235,237, + 225,242,107,128, 39, 19,249,242,233,236,236,233, 99,128, 4, 71, + 100, 2, 66,198, 66,242,229,243,227,229,238,228,229,114, 2, 66, + 211, 66,231,225,226,235,232,225,243,233,225,238,227,249,242,233, + 236,236,233, 99,128, 4,191,227,249,242,233,236,236,233, 99,128, + 4,183,233,229,242,229,243,233,243,227,249,242,233,236,236,233, + 99,128, 4,245,232,225,242,237,229,238,233,225,110,128, 5,115, + 235,232,225,235,225,243,243,233,225,238,227,249,242,233,236,236, + 233, 99,128, 4,204,246,229,242,244,233,227,225,236,243,244,242, + 239,235,229,227,249,242,233,236,236,233, 99,128, 4,185,105,129, + 3,199, 67, 68,229,245,227,104, 4, 67, 81, 67,116, 67,131, 67, + 140, 97, 2, 67, 87, 67,102,227,233,242,227,236,229,235,239,242, + 229,225,110,128, 50,119,240,225,242,229,238,235,239,242,229,225, + 110,128, 50, 23,227,233,242,227,236,229,235,239,242,229,225,110, + 128, 50,105,235,239,242,229,225,110,128, 49, 74,240,225,242,229, + 238,235,239,242,229,225,110,128, 50, 9,111, 2, 67,160, 67,210, + 227,104, 3, 67,169, 67,191, 67,201,225,110, 2, 67,176, 67,184, + 231,244,232,225,105,128, 14, 10,244,232,225,105,128, 14, 8,233, + 238,231,244,232,225,105,128, 14, 9,239,229,244,232,225,105,128, + 14, 12,239,107,128, 1,136,105, 2, 67,221, 68, 67,229,245, 99, + 5, 67,235, 68, 14, 68, 29, 68, 38, 68, 52, 97, 2, 67,241, 68, + 0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,118, + 240,225,242,229,238,235,239,242,229,225,110,128, 50, 22,227,233, + 242,227,236,229,235,239,242,229,225,110,128, 50,104,235,239,242, + 229,225,110,128, 49, 72,240,225,242,229,238,235,239,242,229,225, + 110,128, 50, 8,245,240,225,242,229,238,235,239,242,229,225,110, + 128, 50, 28,242, 99, 2, 68, 74, 68,169,236,101,132, 37,203, 68, + 87, 68, 98, 68,103, 68,127,237,245,236,244,233,240,236,121,128, + 34,151,239,116,128, 34,153,112, 2, 68,109, 68,115,236,245,115, + 128, 34,149,239,243,244,225,236,237,225,242,107,128, 48, 54,247, + 233,244,104, 2, 68,136, 68,152,236,229,230,244,232,225,236,230, + 226,236,225,227,107,128, 37,208,242,233,231,232,244,232,225,236, + 230,226,236,225,227,107,128, 37,209,245,237,230,236,229,120,130, + 2,198, 68,182, 68,193,226,229,236,239,247,227,237, 98,128, 3, + 45,227,237, 98,128, 3, 2,108, 3, 68,207, 68,213, 69, 11,229, + 225,114,128, 35, 39,233,227,107, 4, 68,225, 68,236, 68,245, 68, + 255,225,236,246,229,239,236,225,114,128, 1,194,228,229,238,244, + 225,108,128, 1,192,236,225,244,229,242,225,108,128, 1,193,242, + 229,244,242,239,230,236,229,120,128, 1,195,245, 98,129, 38, 99, + 69, 18,243,245,233,116, 2, 69, 27, 69, 35,226,236,225,227,107, + 128, 38, 99,247,232,233,244,101,128, 38,103,109, 3, 69, 51, 69, + 65, 69, 76,227,245,226,229,228,243,241,245,225,242,101,128, 51, + 164,239,238,239,243,240,225,227,101,128,255, 67,243,241,245,225, + 242,229,228,243,241,245,225,242,101,128, 51,160,111, 8, 69,110, + 69,121, 69,208, 70,150, 71,179, 71,210, 72, 61, 72, 70,225,242, + 237,229,238,233,225,110,128, 5,129,236,239,110,131, 0, 58, 69, + 133, 69,158, 69,177,237,239,110, 2, 69,141, 69,149,229,244,225, + 242,121,128, 32,161,239,243,240,225,227,101,128,255, 26,115, 2, + 69,164, 69,170,233,231,110,128, 32,161,237,225,236,108,128,254, + 85,244,242,233,225,238,231,245,236,225,114, 2, 69,192, 69,202, + 232,225,236,230,237,239,100,128, 2,209,237,239,100,128, 2,208, + 109, 2, 69,214, 70,143,237, 97,134, 0, 44, 69,231, 70, 39, 70, + 50, 70, 62, 70, 92, 70,115, 97, 3, 69,239, 70, 9, 70, 17,226, + 239,246,101, 2, 69,248, 69,254,227,237, 98,128, 3, 19,242,233, + 231,232,244,227,237, 98,128, 3, 21,227,227,229,238,116,128,246, + 195,114, 2, 70, 23, 70, 30,225,226,233, 99,128, 6, 12,237,229, + 238,233,225,110,128, 5, 93,233,238,230,229,242,233,239,114,128, + 246,225,237,239,238,239,243,240,225,227,101,128,255, 12,242,229, + 246,229,242,243,229,100, 2, 70, 75, 70, 86,225,226,239,246,229, + 227,237, 98,128, 3, 20,237,239,100,128, 2,189,115, 2, 70, 98, + 70,105,237,225,236,108,128,254, 80,245,240,229,242,233,239,114, + 128,246,226,244,245,242,238,229,100, 2, 70,126, 70,137,225,226, + 239,246,229,227,237, 98,128, 3, 18,237,239,100,128, 2,187,240, + 225,243,115,128, 38, 60,110, 2, 70,156, 70,165,231,242,245,229, + 238,116,128, 34, 69,116, 2, 70,171, 70,185,239,245,242,233,238, + 244,229,231,242,225,108,128, 34, 46,242,239,108,142, 35, 3, 70, + 219, 70,225, 70,240, 70,255, 71, 43, 71, 88, 71,102, 71,107, 71, + 112, 71,117, 71,123, 71,128, 71,169, 71,174,193,195, 75,128, 0, + 6, 66, 2, 70,231, 70,236,197, 76,128, 0, 7, 83,128, 0, 8, + 67, 2, 70,246, 70,251,193, 78,128, 0, 24, 82,128, 0, 13, 68, + 3, 71, 7, 71, 33, 71, 38, 67, 4, 71, 17, 71, 21, 71, 25, 71, + 29, 49,128, 0, 17, 50,128, 0, 18, 51,128, 0, 19, 52,128, 0, + 20,197, 76,128, 0,127,204, 69,128, 0, 16, 69, 5, 71, 55, 71, + 59, 71, 64, 71, 69, 71, 74, 77,128, 0, 25,206, 81,128, 0, 5, + 207, 84,128, 0, 4,211, 67,128, 0, 27, 84, 2, 71, 80, 71, 84, + 66,128, 0, 23, 88,128, 0, 3, 70, 2, 71, 94, 71, 98, 70,128, + 0, 12, 83,128, 0, 28,199, 83,128, 0, 29,200, 84,128, 0, 9, + 204, 70,128, 0, 10,206,193, 75,128, 0, 21,210, 83,128, 0, 30, + 83, 5, 71,140, 71,144, 71,154, 71,159, 71,164, 73,128, 0, 15, + 79,129, 0, 14, 71,150, 84,128, 0, 2,212, 88,128, 0, 1,213, + 66,128, 0, 26,217, 78,128, 0, 22,213, 83,128, 0, 31,214, 84, + 128, 0, 11,240,249,242,233,231,232,116,129, 0,169, 71,191,115, + 2, 71,197, 71,203,225,238,115,128,248,233,229,242,233,102,128, + 246,217,114, 2, 71,216, 72, 44,238,229,242,226,242,225,227,235, + 229,116, 2, 71,231, 72, 9,236,229,230,116,130, 48, 12, 71,242, + 71,254,232,225,236,230,247,233,228,244,104,128,255, 98,246,229, + 242,244,233,227,225,108,128,254, 65,242,233,231,232,116,130, 48, + 13, 72, 21, 72, 33,232,225,236,230,247,233,228,244,104,128,255, + 99,246,229,242,244,233,227,225,108,128,254, 66,240,239,242,225, + 244,233,239,238,243,241,245,225,242,101,128, 51,127,243,241,245, + 225,242,101,128, 51,199,246,229,242,235,231,243,241,245,225,242, + 101,128, 51,198,240,225,242,229,110,128, 36,158,242,245,250,229, + 233,242,111,128, 32,162,243,244,242,229,244,227,232,229,100,128, + 2,151,245,114, 2, 72,121, 72,139,236,121, 2, 72,128, 72,134, + 225,238,100,128, 34,207,239,114,128, 34,206,242,229,238,227,121, + 128, 0,164,249,114, 4, 72,158, 72,166, 72,173, 72,181,194,242, + 229,246,101,128,246,209,198,236,229,120,128,246,210,226,242,229, + 246,101,128,246,212,230,236,229,120,128,246,213,100,146, 0,100, + 72,228, 74,110, 75,134, 75,194, 76,114, 77, 68, 77,130, 78, 59, + 78, 72, 78, 81, 78,107, 78,132, 78,141, 79,208, 79,216, 79,227, + 79,247, 80, 19, 97, 11, 72,252, 73, 7, 73, 17, 73, 89, 73,152, + 73,163, 73,174, 73,243, 74, 49, 74, 55, 74, 85,225,242,237,229, + 238,233,225,110,128, 5,100,226,229,238,231,225,236,105,128, 9, + 166,100, 5, 73, 29, 73, 38, 73, 44, 73, 58, 73, 74,225,242,225, + 226,233, 99,128, 6, 54,229,246, 97,128, 9, 38,230,233,238,225, + 236,225,242,225,226,233, 99,128,254,190,233,238,233,244,233,225, + 236,225,242,225,226,233, 99,128,254,191,237,229,228,233,225,236, + 225,242,225,226,233, 99,128,254,192,103, 3, 73, 97, 73,114, 73, + 128,229,243,104,129, 5,188, 73,105,232,229,226,242,229,119,128, + 5,188,231,229,114,129, 32, 32, 73,122,228,226,108,128, 32, 33, + 117, 2, 73,134, 73,143,234,225,242,225,244,105,128, 10,166,242, + 237,245,235,232,105,128, 10, 38,232,233,242,225,231,225,238, 97, + 128, 48, 96,235,225,244,225,235,225,238, 97,128, 48,192,108, 3, + 73,182, 73,191, 73,229,225,242,225,226,233, 99,128, 6, 47,229, + 116,130, 5,211, 73,200, 73,220,228,225,231,229,243,104,129,251, + 51, 73,211,232,229,226,242,229,119,128,251, 51,232,229,226,242, + 229,119,128, 5,211,230,233,238,225,236,225,242,225,226,233, 99, + 128,254,170,237,237, 97, 3, 73,253, 74, 6, 74, 18,225,242,225, + 226,233, 99,128, 6, 79,236,239,247,225,242,225,226,233, 99,128, + 6, 79,244,225,238, 97, 2, 74, 27, 74, 41,236,244,239,238,229, + 225,242,225,226,233, 99,128, 6, 76,242,225,226,233, 99,128, 6, + 76,238,228, 97,128, 9,100,242,231, 97, 2, 74, 63, 74, 72,232, + 229,226,242,229,119,128, 5,167,236,229,230,244,232,229,226,242, + 229,119,128, 5,167,243,233,225,240,238,229,245,237,225,244,225, + 227,249,242,233,236,236,233,227,227,237, 98,128, 4,133, 98, 3, + 74,118, 75,115, 75,125,108, 9, 74,138, 74,146, 75, 3, 75, 11, + 75, 27, 75, 38, 75, 56, 75, 70, 75, 81,199,242,225,246,101,128, + 246,211, 97, 2, 74,152, 74,209,238,231,236,229,226,242,225,227, + 235,229,116, 2, 74,168, 74,188,236,229,230,116,129, 48, 10, 74, + 177,246,229,242,244,233,227,225,108,128,254, 61,242,233,231,232, + 116,129, 48, 11, 74,198,246,229,242,244,233,227,225,108,128,254, + 62,114, 2, 74,215, 74,236,227,232,233,238,246,229,242,244,229, + 228,226,229,236,239,247,227,237, 98,128, 3, 43,242,239,119, 2, + 74,244, 74,251,236,229,230,116,128, 33,212,242,233,231,232,116, + 128, 33,210,228,225,238,228, 97,128, 9,101,231,242,225,246,101, + 129,246,214, 75, 21,227,237, 98,128, 3, 15,233,238,244,229,231, + 242,225,108,128, 34, 44,236,239,247,236,233,238,101,129, 32, 23, + 75, 50,227,237, 98,128, 3, 51,239,246,229,242,236,233,238,229, + 227,237, 98,128, 3, 63,240,242,233,237,229,237,239,100,128, 2, + 186,246,229,242,244,233,227,225,108, 2, 75, 94, 75,100,226,225, + 114,128, 32, 22,236,233,238,229,225,226,239,246,229,227,237, 98, + 128, 3, 14,239,240,239,237,239,230,111,128, 49, 9,243,241,245, + 225,242,101,128, 51,200, 99, 4, 75,144, 75,151, 75,160, 75,187, + 225,242,239,110,128, 1, 15,229,228,233,236,236, 97,128, 30, 17, + 233,242, 99, 2, 75,168, 75,173,236,101,128, 36,211,245,237,230, + 236,229,248,226,229,236,239,119,128, 30, 19,242,239,225,116,128, + 1, 17,100, 4, 75,204, 76, 29, 76, 39, 76, 90, 97, 4, 75,214, + 75,224, 75,231, 76, 0,226,229,238,231,225,236,105,128, 9,161, + 228,229,246, 97,128, 9, 33,231,117, 2, 75,238, 75,247,234,225, + 242,225,244,105,128, 10,161,242,237,245,235,232,105,128, 10, 33, + 108, 2, 76, 6, 76, 15,225,242,225,226,233, 99,128, 6,136,230, + 233,238,225,236,225,242,225,226,233, 99,128,251,137,228,232,225, + 228,229,246, 97,128, 9, 92,232, 97, 3, 76, 48, 76, 58, 76, 65, + 226,229,238,231,225,236,105,128, 9,162,228,229,246, 97,128, 9, + 34,231,117, 2, 76, 72, 76, 81,234,225,242,225,244,105,128, 10, + 162,242,237,245,235,232,105,128, 10, 34,239,116, 2, 76, 97, 76, + 106,225,227,227,229,238,116,128, 30, 11,226,229,236,239,119,128, + 30, 13,101, 8, 76,132, 76,185, 76,192, 76,217, 76,227, 76,238, + 77, 27, 77, 63, 99, 2, 76,138, 76,175,233,237,225,236,243,229, + 240,225,242,225,244,239,114, 2, 76,156, 76,165,225,242,225,226, + 233, 99,128, 6,107,240,229,242,243,233,225,110,128, 6,107,249, + 242,233,236,236,233, 99,128, 4, 52,231,242,229,101,128, 0,176, + 232,105, 2, 76,199, 76,208,232,229,226,242,229,119,128, 5,173, + 242,225,231,225,238, 97,128, 48,103,233,227,239,240,244,233, 99, + 128, 3,239,235,225,244,225,235,225,238, 97,128, 48,199,108, 2, + 76,244, 77, 11,229,244,101, 2, 76,252, 77, 3,236,229,230,116, + 128, 35, 43,242,233,231,232,116,128, 35, 38,244, 97,129, 3,180, + 77, 18,244,245,242,238,229,100,128, 1,141,238,239,237,233,238, + 225,244,239,242,237,233,238,245,243,239,238,229,238,245,237,229, + 242,225,244,239,242,226,229,238,231,225,236,105,128, 9,248,250, + 104,128, 2,164,104, 2, 77, 74, 77,124, 97, 3, 77, 82, 77, 92, + 77, 99,226,229,238,231,225,236,105,128, 9,167,228,229,246, 97, + 128, 9, 39,231,117, 2, 77,106, 77,115,234,225,242,225,244,105, + 128, 10,167,242,237,245,235,232,105,128, 10, 39,239,239,107,128, + 2, 87,105, 6, 77,144, 77,193, 77,253, 78, 8, 78, 19, 78, 29, + 97, 2, 77,150, 77,172,236,249,244,233,235,225,244,239,238,239, + 115,129, 3,133, 77,166,227,237, 98,128, 3, 68,237,239,238,100, + 129, 38,102, 77,181,243,245,233,244,247,232,233,244,101,128, 38, + 98,229,242,229,243,233,115,133, 0,168, 77,212, 77,220, 77,231, + 77,237, 77,245,225,227,245,244,101,128,246,215,226,229,236,239, + 247,227,237, 98,128, 3, 36,227,237, 98,128, 3, 8,231,242,225, + 246,101,128,246,216,244,239,238,239,115,128, 3,133,232,233,242, + 225,231,225,238, 97,128, 48, 98,235,225,244,225,235,225,238, 97, + 128, 48,194,244,244,239,237,225,242,107,128, 48, 3,246,105, 2, + 78, 36, 78, 47,228,101,129, 0,247, 78, 43,115,128, 34, 35,243, + 233,239,238,243,236,225,243,104,128, 34, 21,234,229,227,249,242, + 233,236,236,233, 99,128, 4, 82,235,243,232,225,228,101,128, 37, + 147,108, 2, 78, 87, 78, 98,233,238,229,226,229,236,239,119,128, + 30, 15,243,241,245,225,242,101,128, 51,151,109, 2, 78,113, 78, + 121,225,227,242,239,110,128, 1, 17,239,238,239,243,240,225,227, + 101,128,255, 68,238,226,236,239,227,107,128, 37,132,111, 10, 78, + 163, 78,175, 78,185, 78,196, 78,207, 79, 23, 79, 28, 79, 39, 79, + 154, 79,180,227,232,225,228,225,244,232,225,105,128, 14, 14,228, + 229,235,244,232,225,105,128, 14, 20,232,233,242,225,231,225,238, + 97,128, 48,105,235,225,244,225,235,225,238, 97,128, 48,201,236, + 236,225,114,132, 0, 36, 78,222, 78,233, 78,245, 79, 0,233,238, + 230,229,242,233,239,114,128,246,227,237,239,238,239,243,240,225, + 227,101,128,255, 4,239,236,228,243,244,249,236,101,128,247, 36, + 115, 2, 79, 6, 79, 13,237,225,236,108,128,254,105,245,240,229, + 242,233,239,114,128,246,228,238,103,128, 32,171,242,245,243,241, + 245,225,242,101,128, 51, 38,116, 6, 79, 53, 79, 70, 79, 92, 79, + 103, 79,135, 79,142,225,227,227,229,238,116,129, 2,217, 79, 64, + 227,237, 98,128, 3, 7,226,229,236,239,247, 99, 2, 79, 81, 79, + 86,237, 98,128, 3, 35,239,237, 98,128, 3, 35,235,225,244,225, + 235,225,238, 97,128, 48,251,236,229,243,115, 2, 79,112, 79,116, + 105,128, 1, 49,106,129,246,190, 79,122,243,244,242,239,235,229, + 232,239,239,107,128, 2,132,237,225,244,104,128, 34,197,244,229, + 228,227,233,242,227,236,101,128, 37,204,245,226,236,229,249,239, + 228,240,225,244,225,104,129,251, 31, 79,171,232,229,226,242,229, + 119,128,251, 31,247,238,244,225,227,107, 2, 79,191, 79,202,226, + 229,236,239,247,227,237, 98,128, 3, 30,237,239,100,128, 2,213, + 240,225,242,229,110,128, 36,159,243,245,240,229,242,233,239,114, + 128,246,235,116, 2, 79,233, 79,239,225,233,108,128, 2, 86,239, + 240,226,225,114,128, 1,140,117, 2, 79,253, 80, 8,232,233,242, + 225,231,225,238, 97,128, 48,101,235,225,244,225,235,225,238, 97, + 128, 48,197,122,132, 1,243, 80, 31, 80, 40, 80, 59, 80, 96,225, + 236,244,239,238,101,128, 2,163, 99, 2, 80, 46, 80, 53,225,242, + 239,110,128, 1,198,245,242,108,128, 2,165,101, 2, 80, 65, 80, + 85,225,226,235,232,225,243,233,225,238,227,249,242,233,236,236, + 233, 99,128, 4,225,227,249,242,233,236,236,233, 99,128, 4, 85, + 232,229,227,249,242,233,236,236,233, 99,128, 4, 95,101,151, 0, + 101, 80,159, 80,178, 80,212, 81,186, 81,248, 82, 25, 82, 37, 82, + 60, 82,113, 83,225, 84, 27, 84,129, 84,245, 85,124, 85,199, 85, + 230, 86, 36, 86, 89, 87, 24, 87,157, 87,177, 87,221, 88, 56, 97, + 2, 80,165, 80,172,227,245,244,101,128, 0,233,242,244,104,128, + 38, 65, 98, 3, 80,186, 80,195, 80,205,229,238,231,225,236,105, + 128, 9,143,239,240,239,237,239,230,111,128, 49, 28,242,229,246, + 101,128, 1, 21, 99, 5, 80,224, 81, 41, 81, 55, 81, 87, 81,176, + 97, 2, 80,230, 81, 35,238,228,242, 97, 3, 80,241, 80,248, 81, + 3,228,229,246, 97,128, 9, 13,231,245,234,225,242,225,244,105, + 128, 10,141,246,239,247,229,236,243,233,231,110, 2, 81, 17, 81, + 24,228,229,246, 97,128, 9, 69,231,245,234,225,242,225,244,105, + 128, 10,197,242,239,110,128, 1, 27,229,228,233,236,236,225,226, + 242,229,246,101,128, 30, 29,104, 2, 81, 61, 81, 72,225,242,237, + 229,238,233,225,110,128, 5,101,249,233,247,238,225,242,237,229, + 238,233,225,110,128, 5,135,233,242, 99, 2, 81, 95, 81,100,236, + 101,128, 36,212,245,237,230,236,229,120,134, 0,234, 81,121, 81, + 129, 81,137, 81,148, 81,156, 81,168,225,227,245,244,101,128, 30, + 191,226,229,236,239,119,128, 30, 25,228,239,244,226,229,236,239, + 119,128, 30,199,231,242,225,246,101,128, 30,193,232,239,239,235, + 225,226,239,246,101,128, 30,195,244,233,236,228,101,128, 30,197, + 249,242,233,236,236,233, 99,128, 4, 84,100, 4, 81,196, 81,206, + 81,212, 81,222,226,236,231,242,225,246,101,128, 2, 5,229,246, + 97,128, 9, 15,233,229,242,229,243,233,115,128, 0,235,239,116, + 130, 1, 23, 81,231, 81,240,225,227,227,229,238,116,128, 1, 23, + 226,229,236,239,119,128, 30,185,101, 2, 81,254, 82, 9,231,245, + 242,237,245,235,232,105,128, 10, 15,237,225,244,242,225,231,245, + 242,237,245,235,232,105,128, 10, 71,230,227,249,242,233,236,236, + 233, 99,128, 4, 68,103, 2, 82, 43, 82, 50,242,225,246,101,128, + 0,232,245,234,225,242,225,244,105,128, 10,143,104, 4, 82, 70, + 82, 81, 82, 92, 82,102,225,242,237,229,238,233,225,110,128, 5, + 103,226,239,240,239,237,239,230,111,128, 49, 29,233,242,225,231, + 225,238, 97,128, 48, 72,239,239,235,225,226,239,246,101,128, 30, + 187,105, 4, 82,123, 82,134, 83,192, 83,207,226,239,240,239,237, + 239,230,111,128, 49, 31,231,232,116,142, 0, 56, 82,168, 82,177, + 82,187, 82,217, 82,224, 83, 6, 83, 31, 83, 76, 83,110, 83,122, + 83,133, 83,166, 83,174, 83,185,225,242,225,226,233, 99,128, 6, + 104,226,229,238,231,225,236,105,128, 9,238,227,233,242,227,236, + 101,129, 36,103, 82,198,233,238,246,229,242,243,229,243,225,238, + 243,243,229,242,233,102,128, 39,145,228,229,246, 97,128, 9,110, + 229,229,110, 2, 82,232, 82,241,227,233,242,227,236,101,128, 36, + 113,112, 2, 82,247, 82,254,225,242,229,110,128, 36,133,229,242, + 233,239,100,128, 36,153,231,117, 2, 83, 13, 83, 22,234,225,242, + 225,244,105,128, 10,238,242,237,245,235,232,105,128, 10,110,104, + 2, 83, 37, 83, 63, 97, 2, 83, 43, 83, 54,227,235,225,242,225, + 226,233, 99,128, 6,104,238,231,250,232,239,117,128, 48, 40,238, + 239,244,229,226,229,225,237,229,100,128, 38,107,105, 2, 83, 82, + 83,100,228,229,239,231,242,225,240,232,233,227,240,225,242,229, + 110,128, 50, 39,238,230,229,242,233,239,114,128, 32,136,237,239, + 238,239,243,240,225,227,101,128,255, 24,239,236,228,243,244,249, + 236,101,128,247, 56,112, 2, 83,139, 83,146,225,242,229,110,128, + 36,123,229,114, 2, 83,153, 83,159,233,239,100,128, 36,143,243, + 233,225,110,128, 6,248,242,239,237,225,110,128, 33,119,243,245, + 240,229,242,233,239,114,128, 32,120,244,232,225,105,128, 14, 88, + 238,246,229,242,244,229,228,226,242,229,246,101,128, 2, 7,239, + 244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128, 4, + 101,107, 2, 83,231, 83,255,225,244,225,235,225,238, 97,129, 48, + 168, 83,243,232,225,236,230,247,233,228,244,104,128,255,116,111, + 2, 84, 5, 84, 20,238,235,225,242,231,245,242,237,245,235,232, + 105,128, 10,116,242,229,225,110,128, 49, 84,108, 3, 84, 35, 84, + 46, 84,107,227,249,242,233,236,236,233, 99,128, 4, 59,101, 2, + 84, 52, 84, 59,237,229,238,116,128, 34, 8,246,229,110, 3, 84, + 69, 84, 78, 84, 99,227,233,242,227,236,101,128, 36,106,112, 2, + 84, 84, 84, 91,225,242,229,110,128, 36,126,229,242,233,239,100, + 128, 36,146,242,239,237,225,110,128, 33,122,236,233,240,243,233, + 115,129, 32, 38, 84,118,246,229,242,244,233,227,225,108,128, 34, + 238,109, 5, 84,141, 84,169, 84,180, 84,200, 84,211,225,227,242, + 239,110,130, 1, 19, 84,153, 84,161,225,227,245,244,101,128, 30, + 23,231,242,225,246,101,128, 30, 21,227,249,242,233,236,236,233, + 99,128, 4, 60,228,225,243,104,129, 32, 20, 84,189,246,229,242, + 244,233,227,225,108,128,254, 49,239,238,239,243,240,225,227,101, + 128,255, 69,112, 2, 84,217, 84,237,232,225,243,233,243,237,225, + 242,235,225,242,237,229,238,233,225,110,128, 5, 91,244,249,243, + 229,116,128, 34, 5,110, 6, 85, 3, 85, 14, 85, 25, 85, 69, 85, + 101, 85,116,226,239,240,239,237,239,230,111,128, 49, 35,227,249, + 242,233,236,236,233, 99,128, 4, 61,100, 2, 85, 31, 85, 50,225, + 243,104,129, 32, 19, 85, 39,246,229,242,244,233,227,225,108,128, + 254, 50,229,243,227,229,238,228,229,242,227,249,242,233,236,236, + 233, 99,128, 4,163,103,130, 1, 75, 85, 77, 85, 88,226,239,240, + 239,237,239,230,111,128, 49, 37,232,229,227,249,242,233,236,236, + 233, 99,128, 4,165,232,239,239,235,227,249,242,233,236,236,233, + 99,128, 4,200,243,240,225,227,101,128, 32, 2,111, 3, 85,132, + 85,140, 85,149,231,239,238,229,107,128, 1, 25,235,239,242,229, + 225,110,128, 49, 83,240,229,110,130, 2, 91, 85,159, 85,168,227, + 236,239,243,229,100,128, 2,154,242,229,246,229,242,243,229,100, + 130, 2, 92, 85,183, 85,192,227,236,239,243,229,100,128, 2, 94, + 232,239,239,107,128, 2, 93,112, 2, 85,205, 85,212,225,242,229, + 110,128, 36,160,243,233,236,239,110,129, 3,181, 85,222,244,239, + 238,239,115,128, 3,173,241,117, 2, 85,237, 86, 25,225,108,130, + 0, 61, 85,246, 86, 2,237,239,238,239,243,240,225,227,101,128, + 255, 29,115, 2, 86, 8, 86, 15,237,225,236,108,128,254,102,245, + 240,229,242,233,239,114,128, 32,124,233,246,225,236,229,238,227, + 101,128, 34, 97,114, 3, 86, 44, 86, 55, 86, 66,226,239,240,239, + 237,239,230,111,128, 49, 38,227,249,242,233,236,236,233, 99,128, + 4, 64,229,246,229,242,243,229,100,129, 2, 88, 86, 78,227,249, + 242,233,236,236,233, 99,128, 4, 77,115, 6, 86,103, 86,114, 86, + 134, 86,215, 87, 4, 87, 14,227,249,242,233,236,236,233, 99,128, + 4, 65,228,229,243,227,229,238,228,229,242,227,249,242,233,236, + 236,233, 99,128, 4,171,104,132, 2,131, 86,146, 86,153, 86,184, + 86,199,227,245,242,108,128, 2,134,239,242,116, 2, 86,161, 86, + 168,228,229,246, 97,128, 9, 14,246,239,247,229,236,243,233,231, + 238,228,229,246, 97,128, 9, 70,242,229,246,229,242,243,229,228, + 236,239,239,112,128, 1,170,243,241,245,225,244,242,229,246,229, + 242,243,229,100,128, 2,133,237,225,236,108, 2, 86,224, 86,235, + 232,233,242,225,231,225,238, 97,128, 48, 71,235,225,244,225,235, + 225,238, 97,129, 48,167, 86,248,232,225,236,230,247,233,228,244, + 104,128,255,106,244,233,237,225,244,229,100,128, 33, 46,245,240, + 229,242,233,239,114,128,246,236,116, 5, 87, 36, 87, 62, 87, 66, + 87, 83, 87,149, 97,130, 3,183, 87, 44, 87, 54,242,237,229,238, + 233,225,110,128, 5,104,244,239,238,239,115,128, 3,174,104,128, + 0,240,233,236,228,101,129, 30,189, 87, 75,226,229,236,239,119, + 128, 30, 27,238,225,232,244, 97, 3, 87, 95, 87,127, 87,136,230, + 239,245,235,104, 2, 87,105, 87,114,232,229,226,242,229,119,128, + 5,145,236,229,230,244,232,229,226,242,229,119,128, 5,145,232, + 229,226,242,229,119,128, 5,145,236,229,230,244,232,229,226,242, + 229,119,128, 5,145,245,242,238,229,100,128, 1,221,117, 2, 87, + 163, 87,172,235,239,242,229,225,110,128, 49, 97,242,111,128, 32, + 172,246,239,247,229,236,243,233,231,110, 3, 87,193, 87,203, 87, + 210,226,229,238,231,225,236,105,128, 9,199,228,229,246, 97,128, + 9, 71,231,245,234,225,242,225,244,105,128, 10,199,120, 2, 87, + 227, 88, 44,227,236,225,109,132, 0, 33, 87,242, 87,253, 88, 24, + 88, 36,225,242,237,229,238,233,225,110,128, 5, 92,100, 2, 88, + 3, 88, 8,226,108,128, 32, 60,239,247,110,129, 0,161, 88, 16, + 243,237,225,236,108,128,247,161,237,239,238,239,243,240,225,227, + 101,128,255, 1,243,237,225,236,108,128,247, 33,233,243,244,229, + 238,244,233,225,108,128, 34, 3,250,104,131, 2,146, 88, 67, 88, + 86, 88, 97, 99, 2, 88, 73, 88, 80,225,242,239,110,128, 1,239, + 245,242,108,128, 2,147,242,229,246,229,242,243,229,100,128, 1, + 185,244,225,233,108,128, 1,186,102,140, 0,102, 88,132, 88,214, + 88,225, 88,234, 88,246, 89, 93, 89,109, 91,117, 91,130, 91,156, + 93, 33, 93, 41, 97, 4, 88,142, 88,149, 88,160, 88,171,228,229, + 246, 97,128, 9, 94,231,245,242,237,245,235,232,105,128, 10, 94, + 232,242,229,238,232,229,233,116,128, 33, 9,244,232, 97, 3, 88, + 181, 88,190, 88,202,225,242,225,226,233, 99,128, 6, 78,236,239, + 247,225,242,225,226,233, 99,128, 6, 78,244,225,238,225,242,225, + 226,233, 99,128, 6, 75,226,239,240,239,237,239,230,111,128, 49, + 8,227,233,242,227,236,101,128, 36,213,228,239,244,225,227,227, + 229,238,116,128, 30, 31,101, 3, 88,254, 89, 76, 89, 86,104, 4, + 89, 8, 89, 31, 89, 45, 89, 61,225,114, 2, 89, 15, 89, 22,225, + 226,233, 99,128, 6, 65,237,229,238,233,225,110,128, 5,134,230, + 233,238,225,236,225,242,225,226,233, 99,128,254,210,233,238,233, + 244,233,225,236,225,242,225,226,233, 99,128,254,211,237,229,228, + 233,225,236,225,242,225,226,233, 99,128,254,212,233,227,239,240, + 244,233, 99,128, 3,229,237,225,236,101,128, 38, 64,102,130,251, + 0, 89,101, 89,105,105,128,251, 3,108,128,251, 4,105,136,251, + 1, 89,129, 89,169, 89,180, 89,202, 90, 68, 90, 85, 90, 93, 90, + 106,230,244,229,229,110, 2, 89,139, 89,148,227,233,242,227,236, + 101,128, 36,110,112, 2, 89,154, 89,161,225,242,229,110,128, 36, + 130,229,242,233,239,100,128, 36,150,231,245,242,229,228,225,243, + 104,128, 32, 18,236,236,229,100, 2, 89,189, 89,195,226,239,120, + 128, 37,160,242,229,227,116,128, 37,172,238,225,108, 5, 89,216, + 89,255, 90, 16, 90, 33, 90, 49,235,225,102,130, 5,218, 89,226, + 89,246,228,225,231,229,243,104,129,251, 58, 89,237,232,229,226, + 242,229,119,128,251, 58,232,229,226,242,229,119,128, 5,218,237, + 229,109,129, 5,221, 90, 7,232,229,226,242,229,119,128, 5,221, + 238,245,110,129, 5,223, 90, 24,232,229,226,242,229,119,128, 5, + 223,240,101,129, 5,227, 90, 40,232,229,226,242,229,119,128, 5, + 227,244,243,225,228,105,129, 5,229, 90, 59,232,229,226,242,229, + 119,128, 5,229,242,243,244,244,239,238,229,227,232,233,238,229, + 243,101,128, 2,201,243,232,229,249,101,128, 37,201,244,225,227, + 249,242,233,236,236,233, 99,128, 4,115,246,101,142, 0, 53, 90, + 139, 90,148, 90,158, 90,188, 90,195, 90,205, 90,230, 91, 1, 91, + 35, 91, 47, 91, 58, 91, 91, 91, 99, 91,110,225,242,225,226,233, + 99,128, 6,101,226,229,238,231,225,236,105,128, 9,235,227,233, + 242,227,236,101,129, 36,100, 90,169,233,238,246,229,242,243,229, + 243,225,238,243,243,229,242,233,102,128, 39,142,228,229,246, 97, + 128, 9,107,229,233,231,232,244,232,115,128, 33, 93,231,117, 2, + 90,212, 90,221,234,225,242,225,244,105,128, 10,235,242,237,245, + 235,232,105,128, 10,107,232, 97, 2, 90,237, 90,248,227,235,225, + 242,225,226,233, 99,128, 6,101,238,231,250,232,239,117,128, 48, + 37,105, 2, 91, 7, 91, 25,228,229,239,231,242,225,240,232,233, + 227,240,225,242,229,110,128, 50, 36,238,230,229,242,233,239,114, + 128, 32,133,237,239,238,239,243,240,225,227,101,128,255, 21,239, + 236,228,243,244,249,236,101,128,247, 53,112, 2, 91, 64, 91, 71, + 225,242,229,110,128, 36,120,229,114, 2, 91, 78, 91, 84,233,239, + 100,128, 36,140,243,233,225,110,128, 6,245,242,239,237,225,110, + 128, 33,116,243,245,240,229,242,233,239,114,128, 32,117,244,232, + 225,105,128, 14, 85,108,129,251, 2, 91,123,239,242,233,110,128, + 1,146,109, 2, 91,136, 91,147,239,238,239,243,240,225,227,101, + 128,255, 70,243,241,245,225,242,101,128, 51,153,111, 4, 91,166, + 91,188, 91,200, 91,207,230, 97, 2, 91,173, 91,181,238,244,232, + 225,105,128, 14, 31,244,232,225,105,128, 14, 29,238,231,237,225, + 238,244,232,225,105,128, 14, 79,242,225,236,108,128, 34, 0,245, + 114,142, 0, 52, 91,240, 91,249, 92, 3, 92, 33, 92, 40, 92, 65, + 92, 92, 92,126, 92,138, 92,157, 92,168, 92,201, 92,209, 92,220, + 225,242,225,226,233, 99,128, 6,100,226,229,238,231,225,236,105, + 128, 9,234,227,233,242,227,236,101,129, 36, 99, 92, 14,233,238, + 246,229,242,243,229,243,225,238,243,243,229,242,233,102,128, 39, + 141,228,229,246, 97,128, 9,106,231,117, 2, 92, 47, 92, 56,234, + 225,242,225,244,105,128, 10,234,242,237,245,235,232,105,128, 10, + 106,232, 97, 2, 92, 72, 92, 83,227,235,225,242,225,226,233, 99, + 128, 6,100,238,231,250,232,239,117,128, 48, 36,105, 2, 92, 98, + 92,116,228,229,239,231,242,225,240,232,233,227,240,225,242,229, + 110,128, 50, 35,238,230,229,242,233,239,114,128, 32,132,237,239, + 238,239,243,240,225,227,101,128,255, 20,238,245,237,229,242,225, + 244,239,242,226,229,238,231,225,236,105,128, 9,247,239,236,228, + 243,244,249,236,101,128,247, 52,112, 2, 92,174, 92,181,225,242, + 229,110,128, 36,119,229,114, 2, 92,188, 92,194,233,239,100,128, + 36,139,243,233,225,110,128, 6,244,242,239,237,225,110,128, 33, + 115,243,245,240,229,242,233,239,114,128, 32,116,116, 2, 92,226, + 93, 8,229,229,110, 2, 92,234, 92,243,227,233,242,227,236,101, + 128, 36,109,112, 2, 92,249, 93, 0,225,242,229,110,128, 36,129, + 229,242,233,239,100,128, 36,149,104, 2, 93, 14, 93, 19,225,105, + 128, 14, 84,244,239,238,229,227,232,233,238,229,243,101,128, 2, + 203,240,225,242,229,110,128, 36,161,242, 97, 2, 93, 48, 93, 56, + 227,244,233,239,110,128, 32, 68,238, 99,128, 32,163,103,144, 0, + 103, 93, 97, 94, 43, 94, 66, 94,127, 94,144, 95, 65, 96, 58, 96, + 143, 96,156, 97, 14, 97, 39, 97, 67, 97, 89, 98, 34, 98, 56, 98, + 158, 97, 9, 93,117, 93,127, 93,134, 93,141, 93,205, 93,230, 93, + 241, 93,252, 94, 30,226,229,238,231,225,236,105,128, 9,151,227, + 245,244,101,128, 1,245,228,229,246, 97,128, 9, 23,102, 4, 93, + 151, 93,160, 93,174, 93,190,225,242,225,226,233, 99,128, 6,175, + 230,233,238,225,236,225,242,225,226,233, 99,128,251,147,233,238, + 233,244,233,225,236,225,242,225,226,233, 99,128,251,148,237,229, + 228,233,225,236,225,242,225,226,233, 99,128,251,149,231,117, 2, + 93,212, 93,221,234,225,242,225,244,105,128, 10,151,242,237,245, + 235,232,105,128, 10, 23,232,233,242,225,231,225,238, 97,128, 48, + 76,235,225,244,225,235,225,238, 97,128, 48,172,237,237, 97,130, + 3,179, 94, 6, 94, 19,236,225,244,233,238,243,237,225,236,108, + 128, 2, 99,243,245,240,229,242,233,239,114,128, 2,224,238,231, + 233,225,227,239,240,244,233, 99,128, 3,235, 98, 2, 94, 49, 94, + 59,239,240,239,237,239,230,111,128, 49, 13,242,229,246,101,128, + 1, 31, 99, 4, 94, 76, 94, 83, 94, 92, 94,114,225,242,239,110, + 128, 1,231,229,228,233,236,236, 97,128, 1, 35,233,242, 99, 2, + 94,100, 94,105,236,101,128, 36,214,245,237,230,236,229,120,128, + 1, 29,239,237,237,225,225,227,227,229,238,116,128, 1, 35,228, + 239,116,129, 1, 33, 94,135,225,227,227,229,238,116,128, 1, 33, + 101, 6, 94,158, 94,169, 94,180, 94,191, 94,210, 95, 56,227,249, + 242,233,236,236,233, 99,128, 4, 51,232,233,242,225,231,225,238, + 97,128, 48, 82,235,225,244,225,235,225,238, 97,128, 48,178,239, + 237,229,244,242,233,227,225,236,236,249,229,241,245,225,108,128, + 34, 81,114, 3, 94,218, 95, 11, 95, 21,229,243,104, 3, 94,228, + 94,243, 94,252,225,227,227,229,238,244,232,229,226,242,229,119, + 128, 5,156,232,229,226,242,229,119,128, 5,243,237,245,241,228, + 225,237,232,229,226,242,229,119,128, 5,157,237,225,238,228,226, + 236,115,128, 0,223,243,232,225,249,233,109, 2, 95, 32, 95, 47, + 225,227,227,229,238,244,232,229,226,242,229,119,128, 5,158,232, + 229,226,242,229,119,128, 5,244,244,225,237,225,242,107,128, 48, + 19,104, 5, 95, 77, 95,210, 96, 17, 96, 42, 96, 48, 97, 4, 95, + 87, 95, 97, 95,120, 95,145,226,229,238,231,225,236,105,128, 9, + 152,100, 2, 95,103, 95,114,225,242,237,229,238,233,225,110,128, + 5,114,229,246, 97,128, 9, 24,231,117, 2, 95,127, 95,136,234, + 225,242,225,244,105,128, 10,152,242,237,245,235,232,105,128, 10, + 24,233,110, 4, 95,156, 95,165, 95,179, 95,195,225,242,225,226, + 233, 99,128, 6, 58,230,233,238,225,236,225,242,225,226,233, 99, + 128,254,206,233,238,233,244,233,225,236,225,242,225,226,233, 99, + 128,254,207,237,229,228,233,225,236,225,242,225,226,233, 99,128, + 254,208,101, 3, 95,218, 95,239, 96, 0,237,233,228,228,236,229, + 232,239,239,235,227,249,242,233,236,236,233, 99,128, 4,149,243, + 244,242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,147, + 245,240,244,245,242,238,227,249,242,233,236,236,233, 99,128, 4, + 145,232, 97, 2, 96, 24, 96, 31,228,229,246, 97,128, 9, 90,231, + 245,242,237,245,235,232,105,128, 10, 90,239,239,107,128, 2, 96, + 250,243,241,245,225,242,101,128, 51,147,105, 3, 96, 66, 96, 77, + 96, 88,232,233,242,225,231,225,238, 97,128, 48, 78,235,225,244, + 225,235,225,238, 97,128, 48,174,109, 2, 96, 94, 96,105,225,242, + 237,229,238,233,225,110,128, 5, 99,229,108,130, 5,210, 96,114, + 96,134,228,225,231,229,243,104,129,251, 50, 96,125,232,229,226, + 242,229,119,128,251, 50,232,229,226,242,229,119,128, 5,210,234, + 229,227,249,242,233,236,236,233, 99,128, 4, 83,236,239,244,244, + 225,108, 2, 96,167, 96,184,233,238,246,229,242,244,229,228,243, + 244,242,239,235,101,128, 1,190,243,244,239,112,132, 2,148, 96, + 199, 96,210, 96,216, 96,248,233,238,246,229,242,244,229,100,128, + 2,150,237,239,100,128, 2,192,242,229,246,229,242,243,229,100, + 130, 2,149, 96,231, 96,237,237,239,100,128, 2,193,243,245,240, + 229,242,233,239,114,128, 2,228,243,244,242,239,235,101,129, 2, + 161, 97, 3,242,229,246,229,242,243,229,100,128, 2,162,109, 2, + 97, 20, 97, 28,225,227,242,239,110,128, 30, 33,239,238,239,243, + 240,225,227,101,128,255, 71,111, 2, 97, 45, 97, 56,232,233,242, + 225,231,225,238, 97,128, 48, 84,235,225,244,225,235,225,238, 97, + 128, 48,180,240, 97, 2, 97, 74, 97, 80,242,229,110,128, 36,162, + 243,241,245,225,242,101,128, 51,172,114, 2, 97, 95, 97,192, 97, + 2, 97,101, 97,109,228,233,229,238,116,128, 34, 7,246,101,134, + 0, 96, 97,126, 97,137, 97,154, 97,161, 97,170, 97,182,226,229, + 236,239,247,227,237, 98,128, 3, 22, 99, 2, 97,143, 97,148,237, + 98,128, 3, 0,239,237, 98,128, 3, 0,228,229,246, 97,128, 9, + 83,236,239,247,237,239,100,128, 2,206,237,239,238,239,243,240, + 225,227,101,128,255, 64,244,239,238,229,227,237, 98,128, 3, 64, + 229,225,244,229,114,132, 0, 62, 97,208, 97,227, 97,239, 98, 26, + 229,241,245,225,108,129, 34,101, 97,218,239,242,236,229,243,115, + 128, 34,219,237,239,238,239,243,240,225,227,101,128,255, 30,111, + 2, 97,245, 98, 15,114, 2, 97,251, 98, 8,229,241,245,233,246, + 225,236,229,238,116,128, 34,115,236,229,243,115,128, 34,119,246, + 229,242,229,241,245,225,108,128, 34,103,243,237,225,236,108,128, + 254,101,115, 2, 98, 40, 98, 48,227,242,233,240,116,128, 2, 97, + 244,242,239,235,101,128, 1,229,117, 4, 98, 66, 98, 77, 98,134, + 98,145,232,233,242,225,231,225,238, 97,128, 48, 80,233,108, 2, + 98, 84, 98,109,236,229,237,239,116, 2, 98, 94, 98,101,236,229, + 230,116,128, 0,171,242,233,231,232,116,128, 0,187,243,233,238, + 231,108, 2, 98,119, 98,126,236,229,230,116,128, 32, 57,242,233, + 231,232,116,128, 32, 58,235,225,244,225,235,225,238, 97,128, 48, + 176,242,225,237,245,243,241,245,225,242,101,128, 51, 24,249,243, + 241,245,225,242,101,128, 51,201,104,144, 0,104, 98,204,101, 90, + 101,125,101,162,101,202,103, 90,103,110,104, 75,104, 87,104, 99, + 105,167,105,175,105,186,105,195,106, 19,106, 23, 97, 13, 98,232, + 99, 15, 99, 25, 99, 55, 99, 80, 99,158, 99,170, 99,195, 99,210, + 99,239, 99,252,100, 54,100, 63, 97, 2, 98,238, 99, 1,226,235, + 232,225,243,233,225,238,227,249,242,233,236,236,233, 99,128, 4, + 169,236,244,239,238,229,225,242,225,226,233, 99,128, 6,193,226, + 229,238,231,225,236,105,128, 9,185,228,101, 2, 99, 32, 99, 50, + 243,227,229,238,228,229,242,227,249,242,233,236,236,233, 99,128, + 4,179,246, 97,128, 9, 57,231,117, 2, 99, 62, 99, 71,234,225, + 242,225,244,105,128, 10,185,242,237,245,235,232,105,128, 10, 57, + 104, 4, 99, 90, 99, 99, 99,113, 99,143,225,242,225,226,233, 99, + 128, 6, 45,230,233,238,225,236,225,242,225,226,233, 99,128,254, + 162,105, 2, 99,119, 99,134,238,233,244,233,225,236,225,242,225, + 226,233, 99,128,254,163,242,225,231,225,238, 97,128, 48,111,237, + 229,228,233,225,236,225,242,225,226,233, 99,128,254,164,233,244, + 245,243,241,245,225,242,101,128, 51, 42,235,225,244,225,235,225, + 238, 97,129, 48,207, 99,183,232,225,236,230,247,233,228,244,104, + 128,255,138,236,225,238,244,231,245,242,237,245,235,232,105,128, + 10, 77,237,250, 97, 2, 99,218, 99,227,225,242,225,226,233, 99, + 128, 6, 33,236,239,247,225,242,225,226,233, 99,128, 6, 33,238, + 231,245,236,230,233,236,236,229,114,128, 49,100,114, 2,100, 2, + 100, 18,228,243,233,231,238,227,249,242,233,236,236,233, 99,128, + 4, 74,240,239,239,110, 2,100, 27,100, 40,236,229,230,244,226, + 225,242,226,245,112,128, 33,188,242,233,231,232,244,226,225,242, + 226,245,112,128, 33,192,243,241,245,225,242,101,128, 51,202,244, + 225,102, 3,100, 73,100,165,101, 0,240,225,244,225,104,134, 5, + 178,100, 93,100, 98,100,112,100,121,100,136,100,152,177, 54,128, + 5,178, 50, 2,100,104,100,108, 51,128, 5,178,102,128, 5,178, + 232,229,226,242,229,119,128, 5,178,238,225,242,242,239,247,232, + 229,226,242,229,119,128, 5,178,241,245,225,242,244,229,242,232, + 229,226,242,229,119,128, 5,178,247,233,228,229,232,229,226,242, + 229,119,128, 5,178,241,225,237,225,244,115,135, 5,179,100,188, + 100,193,100,198,100,203,100,212,100,227,100,243,177, 98,128, 5, + 179,178, 56,128, 5,179,179, 52,128, 5,179,232,229,226,242,229, + 119,128, 5,179,238,225,242,242,239,247,232,229,226,242,229,119, + 128, 5,179,241,245,225,242,244,229,242,232,229,226,242,229,119, + 128, 5,179,247,233,228,229,232,229,226,242,229,119,128, 5,179, + 243,229,231,239,108,135, 5,177,101, 22,101, 27,101, 32,101, 37, + 101, 46,101, 61,101, 77,177, 55,128, 5,177,178, 52,128, 5,177, + 179, 48,128, 5,177,232,229,226,242,229,119,128, 5,177,238,225, + 242,242,239,247,232,229,226,242,229,119,128, 5,177,241,245,225, + 242,244,229,242,232,229,226,242,229,119,128, 5,177,247,233,228, + 229,232,229,226,242,229,119,128, 5,177, 98, 3,101, 98,101,103, + 101,113,225,114,128, 1, 39,239,240,239,237,239,230,111,128, 49, + 15,242,229,246,229,226,229,236,239,119,128, 30, 43, 99, 2,101, + 131,101,140,229,228,233,236,236, 97,128, 30, 41,233,242, 99, 2, + 101,148,101,153,236,101,128, 36,215,245,237,230,236,229,120,128, + 1, 37,100, 2,101,168,101,178,233,229,242,229,243,233,115,128, + 30, 39,239,116, 2,101,185,101,194,225,227,227,229,238,116,128, + 30, 35,226,229,236,239,119,128, 30, 37,101,136, 5,212,101,222, + 101,255,102, 19,102,248,103, 8,103, 53,103, 62,103, 75,225,242, + 116,129, 38,101,101,230,243,245,233,116, 2,101,239,101,247,226, + 236,225,227,107,128, 38,101,247,232,233,244,101,128, 38, 97,228, + 225,231,229,243,104,129,251, 52,102, 10,232,229,226,242,229,119, + 128,251, 52,104, 6,102, 33,102, 61,102, 69,102,119,102,165,102, + 214, 97, 2,102, 39,102, 53,236,244,239,238,229,225,242,225,226, + 233, 99,128, 6,193,242,225,226,233, 99,128, 6, 71,229,226,242, + 229,119,128, 5,212,230,233,238,225,236, 97, 2,102, 80,102,111, + 236,116, 2,102, 87,102, 99,239,238,229,225,242,225,226,233, 99, + 128,251,167,244,247,239,225,242,225,226,233, 99,128,254,234,242, + 225,226,233, 99,128,254,234,232,225,237,250,225,225,226,239,246, + 101, 2,102,134,102,148,230,233,238,225,236,225,242,225,226,233, + 99,128,251,165,233,243,239,236,225,244,229,228,225,242,225,226, + 233, 99,128,251,164,105, 2,102,171,102,205,238,233,244,233,225, + 236, 97, 2,102,183,102,197,236,244,239,238,229,225,242,225,226, + 233, 99,128,251,168,242,225,226,233, 99,128,254,235,242,225,231, + 225,238, 97,128, 48,120,237,229,228,233,225,236, 97, 2,102,226, + 102,240,236,244,239,238,229,225,242,225,226,233, 99,128,251,169, + 242,225,226,233, 99,128,254,236,233,243,229,233,229,242,225,243, + 241,245,225,242,101,128, 51,123,107, 2,103, 14,103, 38,225,244, + 225,235,225,238, 97,129, 48,216,103, 26,232,225,236,230,247,233, + 228,244,104,128,255,141,245,244,225,225,242,245,243,241,245,225, + 242,101,128, 51, 54,238,231,232,239,239,107,128, 2,103,242,245, + 244,245,243,241,245,225,242,101,128, 51, 57,116,129, 5,215,103, + 81,232,229,226,242,229,119,128, 5,215,232,239,239,107,129, 2, + 102,103, 99,243,245,240,229,242,233,239,114,128, 2,177,105, 4, + 103,120,103,205,103,216,103,241,229,245,104, 4,103,132,103,167, + 103,182,103,191, 97, 2,103,138,103,153,227,233,242,227,236,229, + 235,239,242,229,225,110,128, 50,123,240,225,242,229,238,235,239, + 242,229,225,110,128, 50, 27,227,233,242,227,236,229,235,239,242, + 229,225,110,128, 50,109,235,239,242,229,225,110,128, 49, 78,240, + 225,242,229,238,235,239,242,229,225,110,128, 50, 13,232,233,242, + 225,231,225,238, 97,128, 48,114,235,225,244,225,235,225,238, 97, + 129, 48,210,103,229,232,225,236,230,247,233,228,244,104,128,255, + 139,242,233,113,134, 5,180,104, 3,104, 8,104, 22,104, 31,104, + 46,104, 62,177, 52,128, 5,180, 50, 2,104, 14,104, 18, 49,128, + 5,180,100,128, 5,180,232,229,226,242,229,119,128, 5,180,238, + 225,242,242,239,247,232,229,226,242,229,119,128, 5,180,241,245, + 225,242,244,229,242,232,229,226,242,229,119,128, 5,180,247,233, + 228,229,232,229,226,242,229,119,128, 5,180,236,233,238,229,226, + 229,236,239,119,128, 30,150,237,239,238,239,243,240,225,227,101, + 128,255, 72,111, 9,104,119,104,130,104,154,104,179,105, 11,105, + 24,105,110,105,150,105,161,225,242,237,229,238,233,225,110,128, + 5,112,232,105, 2,104,137,104,145,240,244,232,225,105,128, 14, + 43,242,225,231,225,238, 97,128, 48,123,235,225,244,225,235,225, + 238, 97,129, 48,219,104,167,232,225,236,230,247,233,228,244,104, + 128,255,142,236,225,109,135, 5,185,104,199,104,204,104,209,104, + 214,104,223,104,238,104,254,177, 57,128, 5,185,178, 54,128, 5, + 185,179, 50,128, 5,185,232,229,226,242,229,119,128, 5,185,238, + 225,242,242,239,247,232,229,226,242,229,119,128, 5,185,241,245, + 225,242,244,229,242,232,229,226,242,229,119,128, 5,185,247,233, + 228,229,232,229,226,242,229,119,128, 5,185,238,239,235,232,245, + 235,244,232,225,105,128, 14, 46,111, 2,105, 30,105,100,107, 4, + 105, 40,105, 52,105, 58,105, 80,225,226,239,246,229,227,239,237, + 98,128, 3, 9,227,237, 98,128, 3, 9,240,225,236,225,244,225, + 236,233,250,229,228,226,229,236,239,247,227,237, 98,128, 3, 33, + 242,229,244,242,239,230,236,229,248,226,229,236,239,247,227,237, + 98,128, 3, 34,238,243,241,245,225,242,101,128, 51, 66,114, 2, + 105,116,105,143,105, 2,105,122,105,131,227,239,240,244,233, 99, + 128, 3,233,250,239,238,244,225,236,226,225,114,128, 32, 21,238, + 227,237, 98,128, 3, 27,244,243,240,242,233,238,231,115,128, 38, + 104,245,243,101,128, 35, 2,240,225,242,229,110,128, 36,163,243, + 245,240,229,242,233,239,114,128, 2,176,244,245,242,238,229,100, + 128, 2,101,117, 4,105,205,105,216,105,229,105,254,232,233,242, + 225,231,225,238, 97,128, 48,117,233,233,244,239,243,241,245,225, + 242,101,128, 51, 51,235,225,244,225,235,225,238, 97,129, 48,213, + 105,242,232,225,236,230,247,233,228,244,104,128,255,140,238,231, + 225,242,245,237,236,225,245,116,129, 2,221,106, 13,227,237, 98, + 128, 3, 11,118,128, 1,149,249,240,232,229,110,132, 0, 45,106, + 39,106, 50,106, 62,106, 85,233,238,230,229,242,233,239,114,128, + 246,229,237,239,238,239,243,240,225,227,101,128,255, 13,115, 2, + 106, 68,106, 75,237,225,236,108,128,254, 99,245,240,229,242,233, + 239,114,128,246,230,244,247,111,128, 32, 16,105,149, 0,105,106, + 137,106,160,106,194,106,241,110,123,110,243,111, 24,111, 51,111, + 213,111,217,111,255,112, 21,112,105,113, 14,113, 89,113, 97,113, + 110,113,197,113,254,114, 26,114, 70,225, 99, 2,106,144,106,150, + 245,244,101,128, 0,237,249,242,233,236,236,233, 99,128, 4, 79, + 98, 3,106,168,106,177,106,187,229,238,231,225,236,105,128, 9, + 135,239,240,239,237,239,230,111,128, 49, 39,242,229,246,101,128, + 1, 45, 99, 3,106,202,106,209,106,231,225,242,239,110,128, 1, + 208,233,242, 99, 2,106,217,106,222,236,101,128, 36,216,245,237, + 230,236,229,120,128, 0,238,249,242,233,236,236,233, 99,128, 4, + 86,100, 4,106,251,107, 5,110, 80,110,113,226,236,231,242,225, + 246,101,128, 2, 9,101, 2,107, 11,110, 75,239,231,242,225,240, + 104, 7,107, 32,107, 46,107, 59,109,244,110, 19,110, 32,110, 44, + 229,225,242,244,232,227,233,242,227,236,101,128, 50,143,230,233, + 242,229,227,233,242,227,236,101,128, 50,139,233, 99, 14,107, 90, + 107,106,107,205,108, 3,108, 69,108, 98,108,114,108,171,108,220, + 108,232,109, 3,109, 70,109,208,109,237,225,236,236,233,225,238, + 227,229,240,225,242,229,110,128, 50, 63, 99, 4,107,116,107,127, + 107,141,107,148,225,236,236,240,225,242,229,110,128, 50, 58,229, + 238,244,242,229,227,233,242,227,236,101,128, 50,165,236,239,243, + 101,128, 48, 6,111, 3,107,156,107,171,107,191,237,237, 97,129, + 48, 1,107,164,236,229,230,116,128,255,100,238,231,242,225,244, + 245,236,225,244,233,239,238,240,225,242,229,110,128, 50, 55,242, + 242,229,227,244,227,233,242,227,236,101,128, 50,163,101, 3,107, + 213,107,225,107,242,225,242,244,232,240,225,242,229,110,128, 50, + 47,238,244,229,242,240,242,233,243,229,240,225,242,229,110,128, + 50, 61,248,227,229,236,236,229,238,244,227,233,242,227,236,101, + 128, 50,157,102, 2,108, 9,108, 24,229,243,244,233,246,225,236, + 240,225,242,229,110,128, 50, 64,105, 2,108, 30,108, 59,238,225, + 238,227,233,225,108, 2,108, 42,108, 51,227,233,242,227,236,101, + 128, 50,150,240,225,242,229,110,128, 50, 54,242,229,240,225,242, + 229,110,128, 50, 43,104, 2,108, 75,108, 86,225,246,229,240,225, + 242,229,110,128, 50, 50,233,231,232,227,233,242,227,236,101,128, + 50,164,233,244,229,242,225,244,233,239,238,237,225,242,107,128, + 48, 5,108, 3,108,122,108,148,108,160,225,226,239,114, 2,108, + 131,108,140,227,233,242,227,236,101,128, 50,152,240,225,242,229, + 110,128, 50, 56,229,230,244,227,233,242,227,236,101,128, 50,167, + 239,247,227,233,242,227,236,101,128, 50,166,109, 2,108,177,108, + 209,101, 2,108,183,108,198,228,233,227,233,238,229,227,233,242, + 227,236,101,128, 50,169,244,225,236,240,225,242,229,110,128, 50, + 46,239,239,238,240,225,242,229,110,128, 50, 42,238,225,237,229, + 240,225,242,229,110,128, 50, 52,112, 2,108,238,108,246,229,242, + 233,239,100,128, 48, 2,242,233,238,244,227,233,242,227,236,101, + 128, 50,158,114, 2,109, 9,109, 57,101, 3,109, 17,109, 28,109, + 43,225,227,232,240,225,242,229,110,128, 50, 67,240,242,229,243, + 229,238,244,240,225,242,229,110,128, 50, 57,243,239,245,242,227, + 229,240,225,242,229,110,128, 50, 62,233,231,232,244,227,233,242, + 227,236,101,128, 50,168,115, 5,109, 82,109,111,109,125,109,150, + 109,178,101, 2,109, 88,109,101,227,242,229,244,227,233,242,227, + 236,101,128, 50,153,236,230,240,225,242,229,110,128, 50, 66,239, + 227,233,229,244,249,240,225,242,229,110,128, 50, 51,112, 2,109, + 131,109,137,225,227,101,128, 48, 0,229,227,233,225,236,240,225, + 242,229,110,128, 50, 53,116, 2,109,156,109,167,239,227,235,240, + 225,242,229,110,128, 50, 49,245,228,249,240,225,242,229,110,128, + 50, 59,117, 2,109,184,109,193,238,240,225,242,229,110,128, 50, + 48,240,229,242,246,233,243,229,240,225,242,229,110,128, 50, 60, + 119, 2,109,214,109,226,225,244,229,242,240,225,242,229,110,128, + 50, 44,239,239,228,240,225,242,229,110,128, 50, 45,250,229,242, + 111,128, 48, 7,109, 2,109,250,110, 7,229,244,225,236,227,233, + 242,227,236,101,128, 50,142,239,239,238,227,233,242,227,236,101, + 128, 50,138,238,225,237,229,227,233,242,227,236,101,128, 50,148, + 243,245,238,227,233,242,227,236,101,128, 50,144,119, 2,110, 50, + 110, 63,225,244,229,242,227,233,242,227,236,101,128, 50,140,239, + 239,228,227,233,242,227,236,101,128, 50,141,246, 97,128, 9, 7, + 233,229,242,229,243,233,115,130, 0,239,110, 94,110,102,225,227, + 245,244,101,128, 30, 47,227,249,242,233,236,236,233, 99,128, 4, + 229,239,244,226,229,236,239,119,128, 30,203,101, 3,110,131,110, + 147,110,158,226,242,229,246,229,227,249,242,233,236,236,233, 99, + 128, 4,215,227,249,242,233,236,236,233, 99,128, 4, 53,245,238, + 103, 4,110,170,110,205,110,220,110,229, 97, 2,110,176,110,191, + 227,233,242,227,236,229,235,239,242,229,225,110,128, 50,117,240, + 225,242,229,238,235,239,242,229,225,110,128, 50, 21,227,233,242, + 227,236,229,235,239,242,229,225,110,128, 50,103,235,239,242,229, + 225,110,128, 49, 71,240,225,242,229,238,235,239,242,229,225,110, + 128, 50, 7,103, 2,110,249,111, 0,242,225,246,101,128, 0,236, + 117, 2,111, 6,111, 15,234,225,242,225,244,105,128, 10,135,242, + 237,245,235,232,105,128, 10, 7,104, 2,111, 30,111, 40,233,242, + 225,231,225,238, 97,128, 48, 68,239,239,235,225,226,239,246,101, + 128, 30,201,105, 8,111, 69,111, 79,111, 90,111, 97,111,122,111, + 138,111,153,111,169,226,229,238,231,225,236,105,128, 9,136,227, + 249,242,233,236,236,233, 99,128, 4, 56,228,229,246, 97,128, 9, + 8,231,117, 2,111,104,111,113,234,225,242,225,244,105,128, 10, + 136,242,237,245,235,232,105,128, 10, 8,237,225,244,242,225,231, + 245,242,237,245,235,232,105,128, 10, 64,238,246,229,242,244,229, + 228,226,242,229,246,101,128, 2, 11,243,232,239,242,244,227,249, + 242,233,236,236,233, 99,128, 4, 57,246,239,247,229,236,243,233, + 231,110, 3,111,185,111,195,111,202,226,229,238,231,225,236,105, + 128, 9,192,228,229,246, 97,128, 9, 64,231,245,234,225,242,225, + 244,105,128, 10,192,106,128, 1, 51,107, 2,111,223,111,247,225, + 244,225,235,225,238, 97,129, 48,164,111,235,232,225,236,230,247, + 233,228,244,104,128,255,114,239,242,229,225,110,128, 49, 99,108, + 2,112, 5,112, 10,228,101,128, 2,220,245,249,232,229,226,242, + 229,119,128, 5,172,109, 2,112, 27,112, 94, 97, 3,112, 35,112, + 55,112, 80,227,242,239,110,129, 1, 43,112, 44,227,249,242,233, + 236,236,233, 99,128, 4,227,231,229,239,242,225,240,240,242,239, + 248,233,237,225,244,229,236,249,229,241,245,225,108,128, 34, 83, + 244,242,225,231,245,242,237,245,235,232,105,128, 10, 63,239,238, + 239,243,240,225,227,101,128,255, 73,110, 5,112,117,112,127,112, + 136,112,148,112,232,227,242,229,237,229,238,116,128, 34, 6,230, + 233,238,233,244,121,128, 34, 30,233,225,242,237,229,238,233,225, + 110,128, 5,107,116, 2,112,154,112,222,101, 2,112,160,112,211, + 231,242,225,108,131, 34, 43,112,173,112,191,112,196, 98, 2,112, + 179,112,187,239,244,244,239,109,128, 35, 33,116,128, 35, 33,229, + 120,128,248,245,116, 2,112,202,112,207,239,112,128, 35, 32,112, + 128, 35, 32,242,243,229,227,244,233,239,110,128, 34, 41,233,243, + 241,245,225,242,101,128, 51, 5,118, 3,112,240,112,249,113, 2, + 226,245,236,236,229,116,128, 37,216,227,233,242,227,236,101,128, + 37,217,243,237,233,236,229,230,225,227,101,128, 38, 59,111, 3, + 113, 22,113, 33,113, 41,227,249,242,233,236,236,233, 99,128, 4, + 81,231,239,238,229,107,128, 1, 47,244, 97,131, 3,185,113, 52, + 113, 73,113, 81,228,233,229,242,229,243,233,115,129, 3,202,113, + 65,244,239,238,239,115,128, 3,144,236,225,244,233,110,128, 2, + 105,244,239,238,239,115,128, 3,175,240,225,242,229,110,128, 36, + 164,242,233,231,245,242,237,245,235,232,105,128, 10,114,115, 4, + 113,120,113,165,113,179,113,187,237,225,236,108, 2,113,129,113, + 140,232,233,242,225,231,225,238, 97,128, 48, 67,235,225,244,225, + 235,225,238, 97,129, 48,163,113,153,232,225,236,230,247,233,228, + 244,104,128,255,104,243,232,225,242,226,229,238,231,225,236,105, + 128, 9,250,244,242,239,235,101,128, 2,104,245,240,229,242,233, + 239,114,128,246,237,116, 2,113,203,113,237,229,242,225,244,233, + 239,110, 2,113,215,113,226,232,233,242,225,231,225,238, 97,128, + 48,157,235,225,244,225,235,225,238, 97,128, 48,253,233,236,228, + 101,129, 1, 41,113,246,226,229,236,239,119,128, 30, 45,117, 2, + 114, 4,114, 15,226,239,240,239,237,239,230,111,128, 49, 41,227, + 249,242,233,236,236,233, 99,128, 4, 78,246,239,247,229,236,243, + 233,231,110, 3,114, 42,114, 52,114, 59,226,229,238,231,225,236, + 105,128, 9,191,228,229,246, 97,128, 9, 63,231,245,234,225,242, + 225,244,105,128, 10,191,250,232,233,244,243, 97, 2,114, 81,114, + 92,227,249,242,233,236,236,233, 99,128, 4,117,228,226,236,231, + 242,225,246,229,227,249,242,233,236,236,233, 99,128, 4,119,106, + 138, 0,106,114,135,114,198,114,209,115, 3,115, 19,115,132,115, + 201,115,206,115,218,115,226, 97, 4,114,145,114,156,114,166,114, + 173,225,242,237,229,238,233,225,110,128, 5,113,226,229,238,231, + 225,236,105,128, 9,156,228,229,246, 97,128, 9, 28,231,117, 2, + 114,180,114,189,234,225,242,225,244,105,128, 10,156,242,237,245, + 235,232,105,128, 10, 28,226,239,240,239,237,239,230,111,128, 49, + 16, 99, 3,114,217,114,224,114,246,225,242,239,110,128, 1,240, + 233,242, 99, 2,114,232,114,237,236,101,128, 36,217,245,237,230, + 236,229,120,128, 1, 53,242,239,243,243,229,228,244,225,233,108, + 128, 2,157,228,239,244,236,229,243,243,243,244,242,239,235,101, + 128, 2, 95,101, 3,115, 27,115, 38,115,103,227,249,242,233,236, + 236,233, 99,128, 4, 88,229,109, 4,115, 49,115, 58,115, 72,115, + 88,225,242,225,226,233, 99,128, 6, 44,230,233,238,225,236,225, + 242,225,226,233, 99,128,254,158,233,238,233,244,233,225,236,225, + 242,225,226,233, 99,128,254,159,237,229,228,233,225,236,225,242, + 225,226,233, 99,128,254,160,104, 2,115,109,115,118,225,242,225, + 226,233, 99,128, 6,152,230,233,238,225,236,225,242,225,226,233, + 99,128,251,139,104, 2,115,138,115,188, 97, 3,115,146,115,156, + 115,163,226,229,238,231,225,236,105,128, 9,157,228,229,246, 97, + 128, 9, 29,231,117, 2,115,170,115,179,234,225,242,225,244,105, + 128, 10,157,242,237,245,235,232,105,128, 10, 29,229,232,225,242, + 237,229,238,233,225,110,128, 5,123,233,115,128, 48, 4,237,239, + 238,239,243,240,225,227,101,128,255, 74,240,225,242,229,110,128, + 36,165,243,245,240,229,242,233,239,114,128, 2,178,107,146, 0, + 107,116, 21,118,110,118,121,118,183,118,194,119, 28,119, 42,120, + 150,121, 90,121,103,121,129,121,178,122, 60,122, 82,122, 95,122, + 118,122,160,122,170, 97, 12,116, 47,116, 79,116,101,116,131,116, + 245,117, 14,117, 44,117, 69,117,175,117,189,118, 56,118, 85, 98, + 2,116, 53,116, 70,225,243,232,235,233,242,227,249,242,233,236, + 236,233, 99,128, 4,161,229,238,231,225,236,105,128, 9,149, 99, + 2,116, 85,116, 91,245,244,101,128, 30, 49,249,242,233,236,236, + 233, 99,128, 4, 58,228,101, 2,116,108,116,126,243,227,229,238, + 228,229,242,227,249,242,233,236,236,233, 99,128, 4,155,246, 97, + 128, 9, 21,102,135, 5,219,116,149,116,158,116,178,116,192,116, + 201,116,217,116,232,225,242,225,226,233, 99,128, 6, 67,228,225, + 231,229,243,104,129,251, 59,116,169,232,229,226,242,229,119,128, + 251, 59,230,233,238,225,236,225,242,225,226,233, 99,128,254,218, + 232,229,226,242,229,119,128, 5,219,233,238,233,244,233,225,236, + 225,242,225,226,233, 99,128,254,219,237,229,228,233,225,236,225, + 242,225,226,233, 99,128,254,220,242,225,230,229,232,229,226,242, + 229,119,128,251, 77,231,117, 2,116,252,117, 5,234,225,242,225, + 244,105,128, 10,149,242,237,245,235,232,105,128, 10, 21,104, 2, + 117, 20,117, 30,233,242,225,231,225,238, 97,128, 48, 75,239,239, + 235,227,249,242,233,236,236,233, 99,128, 4,196,235,225,244,225, + 235,225,238, 97,129, 48,171,117, 57,232,225,236,230,247,233,228, + 244,104,128,255,118,112, 2,117, 75,117, 96,240, 97,129, 3,186, + 117, 82,243,249,237,226,239,236,231,242,229,229,107,128, 3,240, + 249,229,239,245,110, 3,117,108,117,122,117,156,237,233,229,245, + 237,235,239,242,229,225,110,128, 49,113,112, 2,117,128,117,143, + 232,233,229,245,240,232,235,239,242,229,225,110,128, 49,132,233, + 229,245,240,235,239,242,229,225,110,128, 49,120,243,243,225,238, + 231,240,233,229,245,240,235,239,242,229,225,110,128, 49,121,242, + 239,242,233,233,243,241,245,225,242,101,128, 51, 13,115, 5,117, + 201,117,245,118, 4,118, 12,118, 40,232,233,228,225,225,245,244, + 111, 2,117,214,117,223,225,242,225,226,233, 99,128, 6, 64,238, + 239,243,233,228,229,226,229,225,242,233,238,231,225,242,225,226, + 233, 99,128, 6, 64,237,225,236,236,235,225,244,225,235,225,238, + 97,128, 48,245,241,245,225,242,101,128, 51,132,242, 97, 2,118, + 19,118, 28,225,242,225,226,233, 99,128, 6, 80,244,225,238,225, + 242,225,226,233, 99,128, 6, 77,244,242,239,235,229,227,249,242, + 233,236,236,233, 99,128, 4,159,244,225,232,233,242,225,240,242, + 239,236,239,238,231,237,225,242,235,232,225,236,230,247,233,228, + 244,104,128,255,112,246,229,242,244,233,227,225,236,243,244,242, + 239,235,229,227,249,242,233,236,236,233, 99,128, 4,157,226,239, + 240,239,237,239,230,111,128, 49, 14, 99, 4,118,131,118,153,118, + 162,118,170, 97, 2,118,137,118,147,236,243,241,245,225,242,101, + 128, 51,137,242,239,110,128, 1,233,229,228,233,236,236, 97,128, + 1, 55,233,242,227,236,101,128, 36,218,239,237,237,225,225,227, + 227,229,238,116,128, 1, 55,228,239,244,226,229,236,239,119,128, + 30, 51,101, 4,118,204,118,231,119, 0,119, 12,104, 2,118,210, + 118,221,225,242,237,229,238,233,225,110,128, 5,132,233,242,225, + 231,225,238, 97,128, 48, 81,235,225,244,225,235,225,238, 97,129, + 48,177,118,244,232,225,236,230,247,233,228,244,104,128,255,121, + 238,225,242,237,229,238,233,225,110,128, 5,111,243,237,225,236, + 236,235,225,244,225,235,225,238, 97,128, 48,246,231,242,229,229, + 238,236,225,238,228,233, 99,128, 1, 56,104, 6,119, 56,119,185, + 119,196,119,221,120, 52,120,140, 97, 5,119, 68,119, 78,119, 89, + 119, 96,119,121,226,229,238,231,225,236,105,128, 9,150,227,249, + 242,233,236,236,233, 99,128, 4, 69,228,229,246, 97,128, 9, 22, + 231,117, 2,119,103,119,112,234,225,242,225,244,105,128, 10,150, + 242,237,245,235,232,105,128, 10, 22,104, 4,119,131,119,140,119, + 154,119,170,225,242,225,226,233, 99,128, 6, 46,230,233,238,225, + 236,225,242,225,226,233, 99,128,254,166,233,238,233,244,233,225, + 236,225,242,225,226,233, 99,128,254,167,237,229,228,233,225,236, + 225,242,225,226,233, 99,128,254,168,229,233,227,239,240,244,233, + 99,128, 3,231,232, 97, 2,119,203,119,210,228,229,246, 97,128, + 9, 89,231,245,242,237,245,235,232,105,128, 10, 89,233,229,245, + 235,104, 4,119,235,120, 14,120, 29,120, 38, 97, 2,119,241,120, + 0,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,120, + 240,225,242,229,238,235,239,242,229,225,110,128, 50, 24,227,233, + 242,227,236,229,235,239,242,229,225,110,128, 50,106,235,239,242, + 229,225,110,128, 49, 75,240,225,242,229,238,235,239,242,229,225, + 110,128, 50, 10,111, 4,120, 62,120,111,120,121,120,126,235,104, + 4,120, 73,120, 82,120, 91,120,101,225,233,244,232,225,105,128, + 14, 2,239,238,244,232,225,105,128, 14, 5,245,225,244,244,232, + 225,105,128, 14, 3,247,225,233,244,232,225,105,128, 14, 4,237, + 245,244,244,232,225,105,128, 14, 91,239,107,128, 1,153,242,225, + 235,232,225,238,231,244,232,225,105,128, 14, 6,250,243,241,245, + 225,242,101,128, 51,145,105, 4,120,160,120,171,120,196,120,245, + 232,233,242,225,231,225,238, 97,128, 48, 77,235,225,244,225,235, + 225,238, 97,129, 48,173,120,184,232,225,236,230,247,233,228,244, + 104,128,255,119,242,111, 3,120,205,120,220,120,236,231,245,242, + 225,237,245,243,241,245,225,242,101,128, 51, 21,237,229,229,244, + 239,242,245,243,241,245,225,242,101,128, 51, 22,243,241,245,225, + 242,101,128, 51, 20,249,229,239,107, 5,121, 4,121, 39,121, 54, + 121, 63,121, 77, 97, 2,121, 10,121, 25,227,233,242,227,236,229, + 235,239,242,229,225,110,128, 50,110,240,225,242,229,238,235,239, + 242,229,225,110,128, 50, 14,227,233,242,227,236,229,235,239,242, + 229,225,110,128, 50, 96,235,239,242,229,225,110,128, 49, 49,240, + 225,242,229,238,235,239,242,229,225,110,128, 50, 0,243,233,239, + 243,235,239,242,229,225,110,128, 49, 51,234,229,227,249,242,233, + 236,236,233, 99,128, 4, 92,108, 2,121,109,121,120,233,238,229, + 226,229,236,239,119,128, 30, 53,243,241,245,225,242,101,128, 51, + 152,109, 3,121,137,121,151,121,162,227,245,226,229,228,243,241, + 245,225,242,101,128, 51,166,239,238,239,243,240,225,227,101,128, + 255, 75,243,241,245,225,242,229,228,243,241,245,225,242,101,128, + 51,162,111, 5,121,190,121,216,121,254,122, 10,122, 24,104, 2, + 121,196,121,206,233,242,225,231,225,238, 97,128, 48, 83,237,243, + 241,245,225,242,101,128, 51,192,235, 97, 2,121,223,121,231,233, + 244,232,225,105,128, 14, 1,244,225,235,225,238, 97,129, 48,179, + 121,242,232,225,236,230,247,233,228,244,104,128,255,122,239,240, + 239,243,241,245,225,242,101,128, 51, 30,240,240,225,227,249,242, + 233,236,236,233, 99,128, 4,129,114, 2,122, 30,122, 50,229,225, + 238,243,244,225,238,228,225,242,228,243,249,237,226,239,108,128, + 50,127,239,238,233,243,227,237, 98,128, 3, 67,240, 97, 2,122, + 67,122, 73,242,229,110,128, 36,166,243,241,245,225,242,101,128, + 51,170,243,233,227,249,242,233,236,236,233, 99,128, 4,111,116, + 2,122,101,122,110,243,241,245,225,242,101,128, 51,207,245,242, + 238,229,100,128, 2,158,117, 2,122,124,122,135,232,233,242,225, + 231,225,238, 97,128, 48, 79,235,225,244,225,235,225,238, 97,129, + 48,175,122,148,232,225,236,230,247,233,228,244,104,128,255,120, + 246,243,241,245,225,242,101,128, 51,184,247,243,241,245,225,242, + 101,128, 51,190,108,146, 0,108,122,220,124,247,125, 20,125, 86, + 125,124,126, 20,126, 29,126, 45,126, 69,126, 87,126,205,126,246, + 127,125,127,133,127,166,127,175,127,183,127,245, 97, 7,122,236, + 122,246,122,253,123, 4,123, 29,123, 45,124,235,226,229,238,231, + 225,236,105,128, 9,178,227,245,244,101,128, 1, 58,228,229,246, + 97,128, 9, 50,231,117, 2,123, 11,123, 20,234,225,242,225,244, + 105,128, 10,178,242,237,245,235,232,105,128, 10, 50,235,235,232, + 225,238,231,249,225,239,244,232,225,105,128, 14, 69,109, 10,123, + 67,124, 6,124, 23,124, 61,124, 75,124, 94,124,110,124,130,124, + 150,124,173, 97, 2,123, 73,123,254,236,229,102, 4,123, 85,123, + 99,123,191,123,208,230,233,238,225,236,225,242,225,226,233, 99, + 128,254,252,232,225,237,250, 97, 2,123,109,123,150,225,226,239, + 246,101, 2,123,119,123,133,230,233,238,225,236,225,242,225,226, + 233, 99,128,254,248,233,243,239,236,225,244,229,228,225,242,225, + 226,233, 99,128,254,247,226,229,236,239,119, 2,123,160,123,174, + 230,233,238,225,236,225,242,225,226,233, 99,128,254,250,233,243, + 239,236,225,244,229,228,225,242,225,226,233, 99,128,254,249,233, + 243,239,236,225,244,229,228,225,242,225,226,233, 99,128,254,251, + 237,225,228,228,225,225,226,239,246,101, 2,123,223,123,237,230, + 233,238,225,236,225,242,225,226,233, 99,128,254,246,233,243,239, + 236,225,244,229,228,225,242,225,226,233, 99,128,254,245,242,225, + 226,233, 99,128, 6, 68,226,228, 97,129, 3,187,124, 14,243,244, + 242,239,235,101,128, 1,155,229,100,130, 5,220,124, 32,124, 52, + 228,225,231,229,243,104,129,251, 60,124, 43,232,229,226,242,229, + 119,128,251, 60,232,229,226,242,229,119,128, 5,220,230,233,238, + 225,236,225,242,225,226,233, 99,128,254,222,232,225,232,233,238, + 233,244,233,225,236,225,242,225,226,233, 99,128,252,202,233,238, + 233,244,233,225,236,225,242,225,226,233, 99,128,254,223,234,229, + 229,237,233,238,233,244,233,225,236,225,242,225,226,233, 99,128, + 252,201,235,232,225,232,233,238,233,244,233,225,236,225,242,225, + 226,233, 99,128,252,203,236,225,237,232,229,232,233,243,239,236, + 225,244,229,228,225,242,225,226,233, 99,128,253,242,237,101, 2, + 124,180,124,193,228,233,225,236,225,242,225,226,233, 99,128,254, + 224,229,109, 2,124,200,124,219,232,225,232,233,238,233,244,233, + 225,236,225,242,225,226,233, 99,128,253,136,233,238,233,244,233, + 225,236,225,242,225,226,233, 99,128,252,204,242,231,229,227,233, + 242,227,236,101,128, 37,239, 98, 3,124,255,125, 4,125, 10,225, + 114,128, 1,154,229,236,116,128, 2,108,239,240,239,237,239,230, + 111,128, 49, 12, 99, 4,125, 30,125, 37,125, 46,125, 73,225,242, + 239,110,128, 1, 62,229,228,233,236,236, 97,128, 1, 60,233,242, + 99, 2,125, 54,125, 59,236,101,128, 36,219,245,237,230,236,229, + 248,226,229,236,239,119,128, 30, 61,239,237,237,225,225,227,227, + 229,238,116,128, 1, 60,228,239,116,130, 1, 64,125, 96,125,105, + 225,227,227,229,238,116,128, 1, 64,226,229,236,239,119,129, 30, + 55,125,115,237,225,227,242,239,110,128, 30, 57,101, 3,125,132, + 125,170,126, 15,230,116, 2,125,139,125,155,225,238,231,236,229, + 225,226,239,246,229,227,237, 98,128, 3, 26,244,225,227,235,226, + 229,236,239,247,227,237, 98,128, 3, 24,243,115,132, 0, 60,125, + 183,125,205,125,217,126, 7,229,241,245,225,108,129, 34,100,125, + 193,239,242,231,242,229,225,244,229,114,128, 34,218,237,239,238, + 239,243,240,225,227,101,128,255, 28,111, 2,125,223,125,252,114, + 2,125,229,125,242,229,241,245,233,246,225,236,229,238,116,128, + 34,114,231,242,229,225,244,229,114,128, 34,118,246,229,242,229, + 241,245,225,108,128, 34,102,243,237,225,236,108,128,254,100,250, + 104,128, 2,110,230,226,236,239,227,107,128, 37,140,232,239,239, + 235,242,229,244,242,239,230,236,229,120,128, 2,109,105, 2,126, + 51,126, 56,242, 97,128, 32,164,247,238,225,242,237,229,238,233, + 225,110,128, 5,108,106,129, 1,201,126, 75,229,227,249,242,233, + 236,236,233, 99,128, 4, 89,108,132,246,192,126, 99,126,123,126, + 134,126,143, 97, 2,126,105,126,112,228,229,246, 97,128, 9, 51, + 231,245,234,225,242,225,244,105,128, 10,179,233,238,229,226,229, + 236,239,119,128, 30, 59,236,225,228,229,246, 97,128, 9, 52,246, + 239,227,225,236,233, 99, 3,126,157,126,167,126,174,226,229,238, + 231,225,236,105,128, 9,225,228,229,246, 97,128, 9, 97,246,239, + 247,229,236,243,233,231,110, 2,126,188,126,198,226,229,238,231, + 225,236,105,128, 9,227,228,229,246, 97,128, 9, 99,109, 3,126, + 213,126,226,126,237,233,228,228,236,229,244,233,236,228,101,128, + 2,107,239,238,239,243,240,225,227,101,128,255, 76,243,241,245, + 225,242,101,128, 51,208,111, 6,127, 4,127, 16,127, 58,127, 69, + 127, 75,127,117,227,232,245,236,225,244,232,225,105,128, 14, 44, + 231,233,227,225,108, 3,127, 28,127, 34,127, 53,225,238,100,128, + 34, 39,238,239,116,129, 0,172,127, 42,242,229,246,229,242,243, + 229,100,128, 35, 16,239,114,128, 34, 40,236,233,238,231,244,232, + 225,105,128, 14, 37,238,231,115,128, 1,127,247,236,233,238,101, + 2,127, 85,127,108, 99, 2,127, 91,127,103,229,238,244,229,242, + 236,233,238,101,128,254, 78,237, 98,128, 3, 50,228,225,243,232, + 229,100,128,254, 77,250,229,238,231,101,128, 37,202,240,225,242, + 229,110,128, 36,167,115, 3,127,141,127,148,127,156,236,225,243, + 104,128, 1, 66,241,245,225,242,101,128, 33, 19,245,240,229,242, + 233,239,114,128,246,238,244,243,232,225,228,101,128, 37,145,245, + 244,232,225,105,128, 14, 38,246,239,227,225,236,233, 99, 3,127, + 197,127,207,127,214,226,229,238,231,225,236,105,128, 9,140,228, + 229,246, 97,128, 9, 12,246,239,247,229,236,243,233,231,110, 2, + 127,228,127,238,226,229,238,231,225,236,105,128, 9,226,228,229, + 246, 97,128, 9, 98,248,243,241,245,225,242,101,128, 51,211,109, + 144, 0,109,128, 35,130,144,130,169,130,196,130,221,132, 18,132, + 40,133, 95,133,125,133,174,134, 25,134, 47,134, 72,134, 81,135, + 108,135,136, 97, 12,128, 61,128, 71,128,135,128,142,128,167,128, + 215,130, 51,130, 76,130, 81,130, 95,130,107,130,112,226,229,238, + 231,225,236,105,128, 9,174, 99, 2,128, 77,128,129,242,239,110, + 132, 0,175,128, 91,128,102,128,108,128,117,226,229,236,239,247, + 227,237, 98,128, 3, 49,227,237, 98,128, 3, 4,236,239,247,237, + 239,100,128, 2,205,237,239,238,239,243,240,225,227,101,128,255, + 227,245,244,101,128, 30, 63,228,229,246, 97,128, 9, 46,231,117, + 2,128,149,128,158,234,225,242,225,244,105,128, 10,174,242,237, + 245,235,232,105,128, 10, 46,104, 2,128,173,128,205,225,240,225, + 235,104, 2,128,183,128,192,232,229,226,242,229,119,128, 5,164, + 236,229,230,244,232,229,226,242,229,119,128, 5,164,233,242,225, + 231,225,238, 97,128, 48,126,105, 5,128,227,129, 40,129,103,129, + 133,130, 39,227,232,225,244,244,225,247, 97, 3,128,242,129, 17, + 129, 24,236,239,119, 2,128,250,129, 5,236,229,230,244,244,232, + 225,105,128,248,149,242,233,231,232,244,244,232,225,105,128,248, + 148,244,232,225,105,128, 14, 75,245,240,240,229,242,236,229,230, + 244,244,232,225,105,128,248,147,229,107, 3,129, 49,129, 80,129, + 87,236,239,119, 2,129, 57,129, 68,236,229,230,244,244,232,225, + 105,128,248,140,242,233,231,232,244,244,232,225,105,128,248,139, + 244,232,225,105,128, 14, 72,245,240,240,229,242,236,229,230,244, + 244,232,225,105,128,248,138,232,225,238,225,235,225,116, 2,129, + 115,129,126,236,229,230,244,244,232,225,105,128,248,132,244,232, + 225,105,128, 14, 49,116, 3,129,141,129,169,129,232,225,233,235, + 232,117, 2,129,151,129,162,236,229,230,244,244,232,225,105,128, + 248,137,244,232,225,105,128, 14, 71,232,111, 3,129,178,129,209, + 129,216,236,239,119, 2,129,186,129,197,236,229,230,244,244,232, + 225,105,128,248,143,242,233,231,232,244,244,232,225,105,128,248, + 142,244,232,225,105,128, 14, 73,245,240,240,229,242,236,229,230, + 244,244,232,225,105,128,248,141,242,105, 3,129,241,130, 16,130, + 23,236,239,119, 2,129,249,130, 4,236,229,230,244,244,232,225, + 105,128,248,146,242,233,231,232,244,244,232,225,105,128,248,145, + 244,232,225,105,128, 14, 74,245,240,240,229,242,236,229,230,244, + 244,232,225,105,128,248,144,249,225,237,239,235,244,232,225,105, + 128, 14, 70,235,225,244,225,235,225,238, 97,129, 48,222,130, 64, + 232,225,236,230,247,233,228,244,104,128,255,143,236,101,128, 38, + 66,238,243,249,239,238,243,241,245,225,242,101,128, 51, 71,241, + 225,230,232,229,226,242,229,119,128, 5,190,242,115,128, 38, 66, + 115, 2,130,118,130,136,239,242,225,227,233,242,227,236,229,232, + 229,226,242,229,119,128, 5,175,241,245,225,242,101,128, 51,131, + 98, 2,130,150,130,160,239,240,239,237,239,230,111,128, 49, 7, + 243,241,245,225,242,101,128, 51,212, 99, 2,130,175,130,183,233, + 242,227,236,101,128, 36,220,245,226,229,228,243,241,245,225,242, + 101,128, 51,165,228,239,116, 2,130,204,130,213,225,227,227,229, + 238,116,128, 30, 65,226,229,236,239,119,128, 30, 67,101, 7,130, + 237,131,108,131,119,131,134,131,159,131,196,131,208,101, 2,130, + 243,131, 95,109, 4,130,253,131, 6,131, 20,131, 36,225,242,225, + 226,233, 99,128, 6, 69,230,233,238,225,236,225,242,225,226,233, + 99,128,254,226,233,238,233,244,233,225,236,225,242,225,226,233, + 99,128,254,227,237,101, 2,131, 43,131, 56,228,233,225,236,225, + 242,225,226,233, 99,128,254,228,229,237,105, 2,131, 64,131, 79, + 238,233,244,233,225,236,225,242,225,226,233, 99,128,252,209,243, + 239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 72,244, + 239,242,245,243,241,245,225,242,101,128, 51, 77,232,233,242,225, + 231,225,238, 97,128, 48,129,233,250,233,229,242,225,243,241,245, + 225,242,101,128, 51,126,235,225,244,225,235,225,238, 97,129, 48, + 225,131,147,232,225,236,230,247,233,228,244,104,128,255,146,109, + 130, 5,222,131,167,131,187,228,225,231,229,243,104,129,251, 62, + 131,178,232,229,226,242,229,119,128,251, 62,232,229,226,242,229, + 119,128, 5,222,238,225,242,237,229,238,233,225,110,128, 5,116, + 242,235,232, 97, 3,131,219,131,228,132, 5,232,229,226,242,229, + 119,128, 5,165,235,229,230,245,236, 97, 2,131,239,131,248,232, + 229,226,242,229,119,128, 5,166,236,229,230,244,232,229,226,242, + 229,119,128, 5,166,236,229,230,244,232,229,226,242,229,119,128, + 5,165,104, 2,132, 24,132, 30,239,239,107,128, 2,113,250,243, + 241,245,225,242,101,128, 51,146,105, 6,132, 54,132, 91,132,228, + 132,239,133, 8,133, 65,228,100, 2,132, 61,132, 86,236,229,228, + 239,244,235,225,244,225,235,225,238,225,232,225,236,230,247,233, + 228,244,104,128,255,101,239,116,128, 0,183,229,245,109, 5,132, + 105,132,140,132,155,132,164,132,215, 97, 2,132,111,132,126,227, + 233,242,227,236,229,235,239,242,229,225,110,128, 50,114,240,225, + 242,229,238,235,239,242,229,225,110,128, 50, 18,227,233,242,227, + 236,229,235,239,242,229,225,110,128, 50,100,235,239,242,229,225, + 110,128, 49, 65,112, 2,132,170,132,202, 97, 2,132,176,132,190, + 238,243,233,239,243,235,239,242,229,225,110,128, 49,112,242,229, + 238,235,239,242,229,225,110,128, 50, 4,233,229,245,240,235,239, + 242,229,225,110,128, 49,110,243,233,239,243,235,239,242,229,225, + 110,128, 49,111,232,233,242,225,231,225,238, 97,128, 48,127,235, + 225,244,225,235,225,238, 97,129, 48,223,132,252,232,225,236,230, + 247,233,228,244,104,128,255,144,238,117, 2,133, 15,133, 60,115, + 132, 34, 18,133, 27,133, 38,133, 47,133, 53,226,229,236,239,247, + 227,237, 98,128, 3, 32,227,233,242,227,236,101,128, 34,150,237, + 239,100,128, 2,215,240,236,245,115,128, 34, 19,244,101,128, 32, + 50,242,105, 2,133, 72,133, 86,226,225,225,242,245,243,241,245, + 225,242,101,128, 51, 74,243,241,245,225,242,101,128, 51, 73,108, + 2,133,101,133,116,239,238,231,236,229,231,244,245,242,238,229, + 100,128, 2,112,243,241,245,225,242,101,128, 51,150,109, 3,133, + 133,133,147,133,158,227,245,226,229,228,243,241,245,225,242,101, + 128, 51,163,239,238,239,243,240,225,227,101,128,255, 77,243,241, + 245,225,242,229,228,243,241,245,225,242,101,128, 51,159,111, 5, + 133,186,133,212,133,237,133,247,134, 0,104, 2,133,192,133,202, + 233,242,225,231,225,238, 97,128, 48,130,237,243,241,245,225,242, + 101,128, 51,193,235,225,244,225,235,225,238, 97,129, 48,226,133, + 225,232,225,236,230,247,233,228,244,104,128,255,147,236,243,241, + 245,225,242,101,128, 51,214,237,225,244,232,225,105,128, 14, 33, + 246,229,242,243,243,241,245,225,242,101,129, 51,167,134, 15,228, + 243,241,245,225,242,101,128, 51,168,240, 97, 2,134, 32,134, 38, + 242,229,110,128, 36,168,243,241,245,225,242,101,128, 51,171,115, + 2,134, 53,134, 62,243,241,245,225,242,101,128, 51,179,245,240, + 229,242,233,239,114,128,246,239,244,245,242,238,229,100,128, 2, + 111,117,141, 0,181,134,111,134,115,134,125,134,149,134,159,134, + 181,134,192,134,217,134,240,134,250,135, 24,135, 88,135, 98, 49, + 128, 0,181,225,243,241,245,225,242,101,128, 51,130,227,104, 2, + 134,132,134,142,231,242,229,225,244,229,114,128, 34,107,236,229, + 243,115,128, 34,106,230,243,241,245,225,242,101,128, 51,140,103, + 2,134,165,134,172,242,229,229,107,128, 3,188,243,241,245,225, + 242,101,128, 51,141,232,233,242,225,231,225,238, 97,128, 48,128, + 235,225,244,225,235,225,238, 97,129, 48,224,134,205,232,225,236, + 230,247,233,228,244,104,128,255,145,108, 2,134,223,134,232,243, + 241,245,225,242,101,128, 51,149,244,233,240,236,121,128, 0,215, + 237,243,241,245,225,242,101,128, 51,155,238,225,104, 2,135, 2, + 135, 11,232,229,226,242,229,119,128, 5,163,236,229,230,244,232, + 229,226,242,229,119,128, 5,163,115, 2,135, 30,135, 79,233, 99, + 3,135, 39,135, 56,135, 67,225,236,238,239,244,101,129, 38,106, + 135, 50,228,226,108,128, 38,107,230,236,225,244,243,233,231,110, + 128, 38,109,243,232,225,242,240,243,233,231,110,128, 38,111,243, + 241,245,225,242,101,128, 51,178,246,243,241,245,225,242,101,128, + 51,182,247,243,241,245,225,242,101,128, 51,188,118, 2,135,114, + 135,127,237,229,231,225,243,241,245,225,242,101,128, 51,185,243, + 241,245,225,242,101,128, 51,183,119, 2,135,142,135,155,237,229, + 231,225,243,241,245,225,242,101,128, 51,191,243,241,245,225,242, + 101,128, 51,189,110,150, 0,110,135,212,136, 90,136,114,136,180, + 136,205,137, 7,137, 17,137, 84,137,127,139,161,139,179,139,204, + 139,235,140, 5,140, 70,142, 52,142, 60,142, 85,142, 93,143, 61, + 143, 71,143, 81, 97, 8,135,230,135,250,136, 1,136, 8,136, 33, + 136, 44,136, 69,136, 81, 98, 2,135,236,135,245,229,238,231,225, + 236,105,128, 9,168,236, 97,128, 34, 7,227,245,244,101,128, 1, + 68,228,229,246, 97,128, 9, 40,231,117, 2,136, 15,136, 24,234, + 225,242,225,244,105,128, 10,168,242,237,245,235,232,105,128, 10, + 40,232,233,242,225,231,225,238, 97,128, 48,106,235,225,244,225, + 235,225,238, 97,129, 48,202,136, 57,232,225,236,230,247,233,228, + 244,104,128,255,133,240,239,243,244,242,239,240,232,101,128, 1, + 73,243,241,245,225,242,101,128, 51,129, 98, 2,136, 96,136,106, + 239,240,239,237,239,230,111,128, 49, 11,243,240,225,227,101,128, + 0,160, 99, 4,136,124,136,131,136,140,136,167,225,242,239,110, + 128, 1, 72,229,228,233,236,236, 97,128, 1, 70,233,242, 99, 2, + 136,148,136,153,236,101,128, 36,221,245,237,230,236,229,248,226, + 229,236,239,119,128, 30, 75,239,237,237,225,225,227,227,229,238, + 116,128, 1, 70,228,239,116, 2,136,188,136,197,225,227,227,229, + 238,116,128, 30, 69,226,229,236,239,119,128, 30, 71,101, 3,136, + 213,136,224,136,249,232,233,242,225,231,225,238, 97,128, 48,109, + 235,225,244,225,235,225,238, 97,129, 48,205,136,237,232,225,236, + 230,247,233,228,244,104,128,255,136,247,243,232,229,241,229,236, + 243,233,231,110,128, 32,170,230,243,241,245,225,242,101,128, 51, + 139,103, 2,137, 23,137, 73, 97, 3,137, 31,137, 41,137, 48,226, + 229,238,231,225,236,105,128, 9,153,228,229,246, 97,128, 9, 25, + 231,117, 2,137, 55,137, 64,234,225,242,225,244,105,128, 10,153, + 242,237,245,235,232,105,128, 10, 25,239,238,231,245,244,232,225, + 105,128, 14, 7,104, 2,137, 90,137,100,233,242,225,231,225,238, + 97,128, 48,147,239,239,107, 2,137,108,137,115,236,229,230,116, + 128, 2,114,242,229,244,242,239,230,236,229,120,128, 2,115,105, + 4,137,137,138, 50,138, 61,138,119,229,245,110, 7,137,155,137, + 190,137,222,137,236,137,245,138, 22,138, 35, 97, 2,137,161,137, + 176,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,111, + 240,225,242,229,238,235,239,242,229,225,110,128, 50, 15,227,105, + 2,137,197,137,209,229,245,227,235,239,242,229,225,110,128, 49, + 53,242,227,236,229,235,239,242,229,225,110,128, 50, 97,232,233, + 229,245,232,235,239,242,229,225,110,128, 49, 54,235,239,242,229, + 225,110,128, 49, 52,240, 97, 2,137,252,138, 10,238,243,233,239, + 243,235,239,242,229,225,110,128, 49,104,242,229,238,235,239,242, + 229,225,110,128, 50, 1,243,233,239,243,235,239,242,229,225,110, + 128, 49,103,244,233,235,229,245,244,235,239,242,229,225,110,128, + 49,102,232,233,242,225,231,225,238, 97,128, 48,107,107, 2,138, + 67,138, 91,225,244,225,235,225,238, 97,129, 48,203,138, 79,232, + 225,236,230,247,233,228,244,104,128,255,134,232,225,232,233,116, + 2,138,101,138,112,236,229,230,244,244,232,225,105,128,248,153, + 244,232,225,105,128, 14, 77,238,101,141, 0, 57,138,150,138,159, + 138,169,138,199,138,206,138,231,139, 2,139, 36,139, 48,139, 59, + 139, 92,139,100,139,111,225,242,225,226,233, 99,128, 6,105,226, + 229,238,231,225,236,105,128, 9,239,227,233,242,227,236,101,129, + 36,104,138,180,233,238,246,229,242,243,229,243,225,238,243,243, + 229,242,233,102,128, 39,146,228,229,246, 97,128, 9,111,231,117, + 2,138,213,138,222,234,225,242,225,244,105,128, 10,239,242,237, + 245,235,232,105,128, 10,111,232, 97, 2,138,238,138,249,227,235, + 225,242,225,226,233, 99,128, 6,105,238,231,250,232,239,117,128, + 48, 41,105, 2,139, 8,139, 26,228,229,239,231,242,225,240,232, + 233,227,240,225,242,229,110,128, 50, 40,238,230,229,242,233,239, + 114,128, 32,137,237,239,238,239,243,240,225,227,101,128,255, 25, + 239,236,228,243,244,249,236,101,128,247, 57,112, 2,139, 65,139, + 72,225,242,229,110,128, 36,124,229,114, 2,139, 79,139, 85,233, + 239,100,128, 36,144,243,233,225,110,128, 6,249,242,239,237,225, + 110,128, 33,120,243,245,240,229,242,233,239,114,128, 32,121,116, + 2,139,117,139,155,229,229,110, 2,139,125,139,134,227,233,242, + 227,236,101,128, 36,114,112, 2,139,140,139,147,225,242,229,110, + 128, 36,134,229,242,233,239,100,128, 36,154,232,225,105,128, 14, + 89,106,129, 1,204,139,167,229,227,249,242,233,236,236,233, 99, + 128, 4, 90,235,225,244,225,235,225,238, 97,129, 48,243,139,192, + 232,225,236,230,247,233,228,244,104,128,255,157,108, 2,139,210, + 139,224,229,231,242,233,231,232,244,236,239,238,103,128, 1,158, + 233,238,229,226,229,236,239,119,128, 30, 73,109, 2,139,241,139, + 252,239,238,239,243,240,225,227,101,128,255, 78,243,241,245,225, + 242,101,128, 51,154,110, 2,140, 11,140, 61, 97, 3,140, 19,140, + 29,140, 36,226,229,238,231,225,236,105,128, 9,163,228,229,246, + 97,128, 9, 35,231,117, 2,140, 43,140, 52,234,225,242,225,244, + 105,128, 10,163,242,237,245,235,232,105,128, 10, 35,238,225,228, + 229,246, 97,128, 9, 41,111, 6,140, 84,140, 95,140,120,140,161, + 141,113,142, 40,232,233,242,225,231,225,238, 97,128, 48,110,235, + 225,244,225,235,225,238, 97,129, 48,206,140,108,232,225,236,230, + 247,233,228,244,104,128,255,137,110, 3,140,128,140,144,140,153, + 226,242,229,225,235,233,238,231,243,240,225,227,101,128, 0,160, + 229,238,244,232,225,105,128, 14, 19,245,244,232,225,105,128, 14, + 25,239,110, 7,140,178,140,187,140,201,140,235,140,251,141, 36, + 141, 95,225,242,225,226,233, 99,128, 6, 70,230,233,238,225,236, + 225,242,225,226,233, 99,128,254,230,231,232,245,238,238, 97, 2, + 140,212,140,221,225,242,225,226,233, 99,128, 6,186,230,233,238, + 225,236,225,242,225,226,233, 99,128,251,159,233,238,233,244,233, + 225,236,225,242,225,226,233, 99,128,254,231,234,229,229,237,105, + 2,141, 5,141, 20,238,233,244,233,225,236,225,242,225,226,233, + 99,128,252,210,243,239,236,225,244,229,228,225,242,225,226,233, + 99,128,252, 75,237,101, 2,141, 43,141, 56,228,233,225,236,225, + 242,225,226,233, 99,128,254,232,229,237,105, 2,141, 64,141, 79, + 238,233,244,233,225,236,225,242,225,226,233, 99,128,252,213,243, + 239,236,225,244,229,228,225,242,225,226,233, 99,128,252, 78,238, + 239,239,238,230,233,238,225,236,225,242,225,226,233, 99,128,252, + 141,116, 7,141,129,141,140,141,169,141,204,141,216,141,236,142, + 6,227,239,238,244,225,233,238,115,128, 34, 12,101, 2,141,146, + 141,162,236,229,237,229,238,116,129, 34, 9,141,157,239,102,128, + 34, 9,241,245,225,108,128, 34, 96,231,242,229,225,244,229,114, + 129, 34,111,141,181,238,239,114, 2,141,189,141,197,229,241,245, + 225,108,128, 34,113,236,229,243,115,128, 34,121,233,228,229,238, + 244,233,227,225,108,128, 34, 98,236,229,243,115,129, 34,110,141, + 225,238,239,242,229,241,245,225,108,128, 34,112,112, 2,141,242, + 141,252,225,242,225,236,236,229,108,128, 34, 38,242,229,227,229, + 228,229,115,128, 34,128,243,117, 3,142, 15,142, 22,142, 31,226, + 243,229,116,128, 34,132,227,227,229,229,228,115,128, 34,129,240, + 229,242,243,229,116,128, 34,133,247,225,242,237,229,238,233,225, + 110,128, 5,118,240,225,242,229,110,128, 36,169,115, 2,142, 66, + 142, 75,243,241,245,225,242,101,128, 51,177,245,240,229,242,233, + 239,114,128, 32,127,244,233,236,228,101,128, 0,241,117,132, 3, + 189,142,105,142,116,142,197,143, 24,232,233,242,225,231,225,238, + 97,128, 48,108,107, 2,142,122,142,146,225,244,225,235,225,238, + 97,129, 48,204,142,134,232,225,236,230,247,233,228,244,104,128, + 255,135,244, 97, 3,142,155,142,165,142,172,226,229,238,231,225, + 236,105,128, 9,188,228,229,246, 97,128, 9, 60,231,117, 2,142, + 179,142,188,234,225,242,225,244,105,128, 10,188,242,237,245,235, + 232,105,128, 10, 60,109, 2,142,203,142,237,226,229,242,243,233, + 231,110,130, 0, 35,142,217,142,229,237,239,238,239,243,240,225, + 227,101,128,255, 3,243,237,225,236,108,128,254, 95,229,114, 2, + 142,244,143, 20,225,236,243,233,231,110, 2,142,255,143, 7,231, + 242,229,229,107,128, 3,116,236,239,247,229,242,231,242,229,229, + 107,128, 3,117,111,128, 33, 22,110,130, 5,224,143, 32,143, 52, + 228,225,231,229,243,104,129,251, 64,143, 43,232,229,226,242,229, + 119,128,251, 64,232,229,226,242,229,119,128, 5,224,246,243,241, + 245,225,242,101,128, 51,181,247,243,241,245,225,242,101,128, 51, + 187,249, 97, 3,143, 90,143,100,143,107,226,229,238,231,225,236, + 105,128, 9,158,228,229,246, 97,128, 9, 30,231,117, 2,143,114, + 143,123,234,225,242,225,244,105,128, 10,158,242,237,245,235,232, + 105,128, 10, 30,111,147, 0,111,143,174,143,196,144, 18,144,188, + 145, 4,145, 19,145, 59,145,182,145,203,145,241,145,252,146,174, + 148, 8,148, 72,148,105,148,151,149, 24,149, 71,149, 83, 97, 2, + 143,180,143,187,227,245,244,101,128, 0,243,238,231,244,232,225, + 105,128, 14, 45, 98, 4,143,206,143,248,144, 1,144, 11,225,242, + 242,229,100,130, 2,117,143,218,143,229,227,249,242,233,236,236, + 233, 99,128, 4,233,228,233,229,242,229,243,233,243,227,249,242, + 233,236,236,233, 99,128, 4,235,229,238,231,225,236,105,128, 9, + 147,239,240,239,237,239,230,111,128, 49, 27,242,229,246,101,128, + 1, 79, 99, 3,144, 26,144, 99,144,178, 97, 2,144, 32,144, 93, + 238,228,242, 97, 3,144, 43,144, 50,144, 61,228,229,246, 97,128, + 9, 17,231,245,234,225,242,225,244,105,128, 10,145,246,239,247, + 229,236,243,233,231,110, 2,144, 75,144, 82,228,229,246, 97,128, + 9, 73,231,245,234,225,242,225,244,105,128, 10,201,242,239,110, + 128, 1,210,233,242, 99, 2,144,107,144,112,236,101,128, 36,222, + 245,237,230,236,229,120,133, 0,244,144,131,144,139,144,150,144, + 158,144,170,225,227,245,244,101,128, 30,209,228,239,244,226,229, + 236,239,119,128, 30,217,231,242,225,246,101,128, 30,211,232,239, + 239,235,225,226,239,246,101,128, 30,213,244,233,236,228,101,128, + 30,215,249,242,233,236,236,233, 99,128, 4, 62,100, 4,144,198, + 144,221,144,227,144,250,226,108, 2,144,205,144,213,225,227,245, + 244,101,128, 1, 81,231,242,225,246,101,128, 2, 13,229,246, 97, + 128, 9, 19,233,229,242,229,243,233,115,129, 0,246,144,239,227, + 249,242,233,236,236,233, 99,128, 4,231,239,244,226,229,236,239, + 119,128, 30,205,101,129, 1, 83,145, 10,235,239,242,229,225,110, + 128, 49, 90,103, 3,145, 27,145, 42,145, 49,239,238,229,107,129, + 2,219,145, 36,227,237, 98,128, 3, 40,242,225,246,101,128, 0, + 242,245,234,225,242,225,244,105,128, 10,147,104, 4,145, 69,145, + 80,145, 90,145,168,225,242,237,229,238,233,225,110,128, 5,133, + 233,242,225,231,225,238, 97,128, 48, 74,111, 2,145, 96,145,106, + 239,235,225,226,239,246,101,128, 30,207,242,110,133, 1,161,145, + 121,145,129,145,140,145,148,145,160,225,227,245,244,101,128, 30, + 219,228,239,244,226,229,236,239,119,128, 30,227,231,242,225,246, + 101,128, 30,221,232,239,239,235,225,226,239,246,101,128, 30,223, + 244,233,236,228,101,128, 30,225,245,238,231,225,242,245,237,236, + 225,245,116,128, 1, 81,105,129, 1,163,145,188,238,246,229,242, + 244,229,228,226,242,229,246,101,128, 2, 15,107, 2,145,209,145, + 233,225,244,225,235,225,238, 97,129, 48,170,145,221,232,225,236, + 230,247,233,228,244,104,128,255,117,239,242,229,225,110,128, 49, + 87,236,229,232,229,226,242,229,119,128, 5,171,109, 6,146, 10, + 146, 38,146, 45,146,134,146,145,146,163,225,227,242,239,110,130, + 1, 77,146, 22,146, 30,225,227,245,244,101,128, 30, 83,231,242, + 225,246,101,128, 30, 81,228,229,246, 97,128, 9, 80,229,231, 97, + 133, 3,201,146, 61,146, 65,146, 76,146, 90,146,106, 49,128, 3, + 214,227,249,242,233,236,236,233, 99,128, 4, 97,236,225,244,233, + 238,227,236,239,243,229,100,128, 2,119,242,239,245,238,228,227, + 249,242,233,236,236,233, 99,128, 4,123,116, 2,146,112,146,127, + 233,244,236,239,227,249,242,233,236,236,233, 99,128, 4,125,239, + 238,239,115,128, 3,206,231,245,234,225,242,225,244,105,128, 10, + 208,233,227,242,239,110,129, 3,191,146,155,244,239,238,239,115, + 128, 3,204,239,238,239,243,240,225,227,101,128,255, 79,238,101, + 145, 0, 49,146,213,146,222,146,232,147, 6,147, 31,147, 40,147, + 49,147, 74,147,108,147,142,147,154,147,173,147,184,147,217,147, + 227,147,235,147,246,225,242,225,226,233, 99,128, 6, 97,226,229, + 238,231,225,236,105,128, 9,231,227,233,242,227,236,101,129, 36, + 96,146,243,233,238,246,229,242,243,229,243,225,238,243,243,229, + 242,233,102,128, 39,138,100, 2,147, 12,147, 18,229,246, 97,128, + 9,103,239,244,229,238,236,229,225,228,229,114,128, 32, 36,229, + 233,231,232,244,104,128, 33, 91,230,233,244,244,229,100,128,246, + 220,231,117, 2,147, 56,147, 65,234,225,242,225,244,105,128, 10, + 231,242,237,245,235,232,105,128, 10,103,232, 97, 3,147, 83,147, + 94,147, 99,227,235,225,242,225,226,233, 99,128, 6, 97,236,102, + 128, 0,189,238,231,250,232,239,117,128, 48, 33,105, 2,147,114, + 147,132,228,229,239,231,242,225,240,232,233,227,240,225,242,229, + 110,128, 50, 32,238,230,229,242,233,239,114,128, 32,129,237,239, + 238,239,243,240,225,227,101,128,255, 17,238,245,237,229,242,225, + 244,239,242,226,229,238,231,225,236,105,128, 9,244,239,236,228, + 243,244,249,236,101,128,247, 49,112, 2,147,190,147,197,225,242, + 229,110,128, 36,116,229,114, 2,147,204,147,210,233,239,100,128, + 36,136,243,233,225,110,128, 6,241,241,245,225,242,244,229,114, + 128, 0,188,242,239,237,225,110,128, 33,112,243,245,240,229,242, + 233,239,114,128, 0,185,244,104, 2,147,253,148, 2,225,105,128, + 14, 81,233,242,100,128, 33, 83,111, 3,148, 16,148, 50,148, 66, + 103, 2,148, 22,148, 40,239,238,229,107,129, 1,235,148, 31,237, + 225,227,242,239,110,128, 1,237,245,242,237,245,235,232,105,128, + 10, 19,237,225,244,242,225,231,245,242,237,245,235,232,105,128, + 10, 75,240,229,110,128, 2, 84,112, 3,148, 80,148, 87,148, 98, + 225,242,229,110,128, 36,170,229,238,226,245,236,236,229,116,128, + 37,230,244,233,239,110,128, 35, 37,114, 2,148,111,148,140,100, + 2,148,117,148,128,230,229,237,233,238,233,238,101,128, 0,170, + 237,225,243,227,245,236,233,238,101,128, 0,186,244,232,239,231, + 239,238,225,108,128, 34, 31,115, 5,148,163,148,195,148,212,149, + 1,149, 14,232,239,242,116, 2,148,172,148,179,228,229,246, 97, + 128, 9, 18,246,239,247,229,236,243,233,231,238,228,229,246, 97, + 128, 9, 74,236,225,243,104,129, 0,248,148,204,225,227,245,244, + 101,128, 1,255,237,225,236,108, 2,148,221,148,232,232,233,242, + 225,231,225,238, 97,128, 48, 73,235,225,244,225,235,225,238, 97, + 129, 48,169,148,245,232,225,236,230,247,233,228,244,104,128,255, + 107,244,242,239,235,229,225,227,245,244,101,128, 1,255,245,240, + 229,242,233,239,114,128,246,240,116, 2,149, 30,149, 41,227,249, + 242,233,236,236,233, 99,128, 4,127,233,236,228,101,130, 0,245, + 149, 52,149, 60,225,227,245,244,101,128, 30, 77,228,233,229,242, + 229,243,233,115,128, 30, 79,245,226,239,240,239,237,239,230,111, + 128, 49, 33,118, 2,149, 89,149,170,229,114, 2,149, 96,149,162, + 236,233,238,101,131, 32, 62,149,109,149,132,149,155, 99, 2,149, + 115,149,127,229,238,244,229,242,236,233,238,101,128,254, 74,237, + 98,128, 3, 5,100, 2,149,138,149,146,225,243,232,229,100,128, + 254, 73,226,236,247,225,246,121,128,254, 76,247,225,246,121,128, + 254, 75,243,227,239,242,101,128, 0,175,239,247,229,236,243,233, + 231,110, 3,149,185,149,195,149,202,226,229,238,231,225,236,105, + 128, 9,203,228,229,246, 97,128, 9, 75,231,245,234,225,242,225, + 244,105,128, 10,203,112,145, 0,112,149,251,152,123,152,134,152, + 143,152,155,154, 80,154, 90,155, 82,156,101,156,191,156,217,157, + 92,157,100,158, 2,158, 60,158, 88,158, 98, 97, 14,150, 25,150, + 57,150, 67,150, 74,150, 81,150,129,150,140,150,154,150,165,150, + 212,150,226,151,238,152, 21,152,111, 97, 2,150, 31,150, 43,237, + 240,243,243,241,245,225,242,101,128, 51,128,243,229,238,244,239, + 243,241,245,225,242,101,128, 51, 43,226,229,238,231,225,236,105, + 128, 9,170,227,245,244,101,128, 30, 85,228,229,246, 97,128, 9, + 42,103, 2,150, 87,150,105,101, 2,150, 93,150,100,228,239,247, + 110,128, 33,223,245,112,128, 33,222,117, 2,150,111,150,120,234, + 225,242,225,244,105,128, 10,170,242,237,245,235,232,105,128, 10, + 42,232,233,242,225,231,225,238, 97,128, 48,113,233,249,225,238, + 238,239,233,244,232,225,105,128, 14, 47,235,225,244,225,235,225, + 238, 97,128, 48,209,108, 2,150,171,150,196,225,244,225,236,233, + 250,225,244,233,239,238,227,249,242,233,236,236,233,227,227,237, + 98,128, 4,132,239,227,232,235,225,227,249,242,233,236,236,233, + 99,128, 4,192,238,243,233,239,243,235,239,242,229,225,110,128, + 49,127,114, 3,150,234,150,255,151,227, 97, 2,150,240,150,248, + 231,242,225,240,104,128, 0,182,236,236,229,108,128, 34, 37,229, + 110, 2,151, 6,151,116,236,229,230,116,136, 0, 40,151, 29,151, + 44,151, 49,151, 54,151, 65,151, 77,151,100,151,105,225,236,244, + 239,238,229,225,242,225,226,233, 99,128,253, 62,226,116,128,248, + 237,229,120,128,248,236,233,238,230,229,242,233,239,114,128, 32, + 141,237,239,238,239,243,240,225,227,101,128,255, 8,115, 2,151, + 83,151, 90,237,225,236,108,128,254, 89,245,240,229,242,233,239, + 114,128, 32,125,244,112,128,248,235,246,229,242,244,233,227,225, + 108,128,254, 53,242,233,231,232,116,136, 0, 41,151,140,151,155, + 151,160,151,165,151,176,151,188,151,211,151,216,225,236,244,239, + 238,229,225,242,225,226,233, 99,128,253, 63,226,116,128,248,248, + 229,120,128,248,247,233,238,230,229,242,233,239,114,128, 32,142, + 237,239,238,239,243,240,225,227,101,128,255, 9,115, 2,151,194, + 151,201,237,225,236,108,128,254, 90,245,240,229,242,233,239,114, + 128, 32,126,244,112,128,248,246,246,229,242,244,233,227,225,108, + 128,254, 54,244,233,225,236,228,233,230,102,128, 34, 2,115, 3, + 151,246,152, 1,152, 13,229,241,232,229,226,242,229,119,128, 5, + 192,232,244,225,232,229,226,242,229,119,128, 5,153,241,245,225, + 242,101,128, 51,169,244,225,104,134, 5,183,152, 39,152, 53,152, + 58,152, 67,152, 82,152, 98, 49, 2,152, 45,152, 49, 49,128, 5, + 183,100,128, 5,183,178, 97,128, 5,183,232,229,226,242,229,119, + 128, 5,183,238,225,242,242,239,247,232,229,226,242,229,119,128, + 5,183,241,245,225,242,244,229,242,232,229,226,242,229,119,128, + 5,183,247,233,228,229,232,229,226,242,229,119,128, 5,183,250, + 229,242,232,229,226,242,229,119,128, 5,161,226,239,240,239,237, + 239,230,111,128, 49, 6,227,233,242,227,236,101,128, 36,223,228, + 239,244,225,227,227,229,238,116,128, 30, 87,101,137, 5,228,152, + 177,152,188,152,208,152,220,152,240,153, 86,153, 97,153,118,154, + 73,227,249,242,233,236,236,233, 99,128, 4, 63,228,225,231,229, + 243,104,129,251, 68,152,199,232,229,226,242,229,119,128,251, 68, + 229,250,233,243,241,245,225,242,101,128, 51, 59,230,233,238,225, + 236,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 67, + 104, 5,152,252,153, 19,153, 27,153, 41,153, 71,225,114, 2,153, + 3,153, 10,225,226,233, 99,128, 6,126,237,229,238,233,225,110, + 128, 5,122,229,226,242,229,119,128, 5,228,230,233,238,225,236, + 225,242,225,226,233, 99,128,251, 87,105, 2,153, 47,153, 62,238, + 233,244,233,225,236,225,242,225,226,233, 99,128,251, 88,242,225, + 231,225,238, 97,128, 48,122,237,229,228,233,225,236,225,242,225, + 226,233, 99,128,251, 89,235,225,244,225,235,225,238, 97,128, 48, + 218,237,233,228,228,236,229,232,239,239,235,227,249,242,233,236, + 236,233, 99,128, 4,167,114, 5,153,130,153,142,153,184,154, 49, + 154, 62,225,230,229,232,229,226,242,229,119,128,251, 78,227,229, + 238,116,131, 0, 37,153,155,153,164,153,176,225,242,225,226,233, + 99,128, 6,106,237,239,238,239,243,240,225,227,101,128,255, 5, + 243,237,225,236,108,128,254,106,105, 2,153,190,154, 31,239,100, + 134, 0, 46,153,207,153,218,153,229,153,241,153,252,154, 8,225, + 242,237,229,238,233,225,110,128, 5,137,227,229,238,244,229,242, + 229,100,128, 0,183,232,225,236,230,247,233,228,244,104,128,255, + 97,233,238,230,229,242,233,239,114,128,246,231,237,239,238,239, + 243,240,225,227,101,128,255, 14,115, 2,154, 14,154, 21,237,225, + 236,108,128,254, 82,245,240,229,242,233,239,114,128,246,232,243, + 240,239,237,229,238,233,231,242,229,229,235,227,237, 98,128, 3, + 66,240,229,238,228,233,227,245,236,225,114,128, 34,165,244,232, + 239,245,243,225,238,100,128, 32, 48,243,229,244, 97,128, 32,167, + 230,243,241,245,225,242,101,128, 51,138,104, 3,154, 98,154,148, + 155, 29, 97, 3,154,106,154,116,154,123,226,229,238,231,225,236, + 105,128, 9,171,228,229,246, 97,128, 9, 43,231,117, 2,154,130, + 154,139,234,225,242,225,244,105,128, 10,171,242,237,245,235,232, + 105,128, 10, 43,105,133, 3,198,154,162,154,166,154,252,155, 4, + 155, 15, 49,128, 3,213,229,245,240,104, 4,154,179,154,214,154, + 229,154,238, 97, 2,154,185,154,200,227,233,242,227,236,229,235, + 239,242,229,225,110,128, 50,122,240,225,242,229,238,235,239,242, + 229,225,110,128, 50, 26,227,233,242,227,236,229,235,239,242,229, + 225,110,128, 50,108,235,239,242,229,225,110,128, 49, 77,240,225, + 242,229,238,235,239,242,229,225,110,128, 50, 12,236,225,244,233, + 110,128, 2,120,238,244,232,245,244,232,225,105,128, 14, 58,243, + 249,237,226,239,236,231,242,229,229,107,128, 3,213,111, 3,155, + 37,155, 42,155, 68,239,107,128, 1,165,240,104, 2,155, 49,155, + 58,225,238,244,232,225,105,128, 14, 30,245,238,231,244,232,225, + 105,128, 14, 28,243,225,237,240,232,225,239,244,232,225,105,128, + 14, 32,105,133, 3,192,155, 96,156, 52,156, 63,156, 74,156, 88, + 229,245,112, 6,155,112,155,147,155,179,155,207,155,221,156, 17, + 97, 2,155,118,155,133,227,233,242,227,236,229,235,239,242,229, + 225,110,128, 50,115,240,225,242,229,238,235,239,242,229,225,110, + 128, 50, 19,227,105, 2,155,154,155,166,229,245,227,235,239,242, + 229,225,110,128, 49,118,242,227,236,229,235,239,242,229,225,110, + 128, 50,101,107, 2,155,185,155,199,233,249,229,239,235,235,239, + 242,229,225,110,128, 49,114,239,242,229,225,110,128, 49, 66,240, + 225,242,229,238,235,239,242,229,225,110,128, 50, 5,243,233,239, + 115, 2,155,230,156, 2,107, 2,155,236,155,250,233,249,229,239, + 235,235,239,242,229,225,110,128, 49,116,239,242,229,225,110,128, + 49, 68,244,233,235,229,245,244,235,239,242,229,225,110,128, 49, + 117,116, 2,156, 23,156, 38,232,233,229,245,244,232,235,239,242, + 229,225,110,128, 49,119,233,235,229,245,244,235,239,242,229,225, + 110,128, 49,115,232,233,242,225,231,225,238, 97,128, 48,116,235, + 225,244,225,235,225,238, 97,128, 48,212,243,249,237,226,239,236, + 231,242,229,229,107,128, 3,214,247,242,225,242,237,229,238,233, + 225,110,128, 5,131,236,245,115,132, 0, 43,156,115,156,126,156, + 135,156,168,226,229,236,239,247,227,237, 98,128, 3, 31,227,233, + 242,227,236,101,128, 34,149,109, 2,156,141,156,148,233,238,245, + 115,128, 0,177,111, 2,156,154,156,158,100,128, 2,214,238,239, + 243,240,225,227,101,128,255, 11,115, 2,156,174,156,181,237,225, + 236,108,128,254, 98,245,240,229,242,233,239,114,128, 32,122,109, + 2,156,197,156,208,239,238,239,243,240,225,227,101,128,255, 80, + 243,241,245,225,242,101,128, 51,216,111, 5,156,229,156,240,157, + 51,157, 62,157, 72,232,233,242,225,231,225,238, 97,128, 48,125, + 233,238,244,233,238,231,233,238,228,229,120, 4,157, 4,157, 16, + 157, 28,157, 41,228,239,247,238,247,232,233,244,101,128, 38, 31, + 236,229,230,244,247,232,233,244,101,128, 38, 28,242,233,231,232, + 244,247,232,233,244,101,128, 38, 30,245,240,247,232,233,244,101, + 128, 38, 29,235,225,244,225,235,225,238, 97,128, 48,221,240,236, + 225,244,232,225,105,128, 14, 27,243,244,225,236,237,225,242,107, + 129, 48, 18,157, 85,230,225,227,101,128, 48, 32,240,225,242,229, + 110,128, 36,171,114, 3,157,108,157,134,157,159,101, 2,157,114, + 157,122,227,229,228,229,115,128, 34,122,243,227,242,233,240,244, + 233,239,110,128, 33, 30,233,237,101, 2,157,142,157,148,237,239, + 100,128, 2,185,242,229,246,229,242,243,229,100,128, 32, 53,111, + 4,157,169,157,176,157,186,157,199,228,245,227,116,128, 34, 15, + 234,229,227,244,233,246,101,128, 35, 5,236,239,238,231,229,228, + 235,225,238, 97,128, 48,252,112, 2,157,205,157,242,101, 2,157, + 211,157,218,236,236,239,114,128, 35, 24,242,243,117, 2,157,226, + 157,233,226,243,229,116,128, 34,130,240,229,242,243,229,116,128, + 34,131,239,242,244,233,239,110,129, 34, 55,157,253,225,108,128, + 34, 29,115, 2,158, 8,158, 51,105,130, 3,200,158, 16,158, 27, + 227,249,242,233,236,236,233, 99,128, 4,113,236,233,240,238,229, + 245,237,225,244,225,227,249,242,233,236,236,233,227,227,237, 98, + 128, 4,134,243,241,245,225,242,101,128, 51,176,117, 2,158, 66, + 158, 77,232,233,242,225,231,225,238, 97,128, 48,119,235,225,244, + 225,235,225,238, 97,128, 48,215,246,243,241,245,225,242,101,128, + 51,180,247,243,241,245,225,242,101,128, 51,186,113,136, 0,113, + 158,128,159,177,159,188,159,197,159,204,159,216,159,254,160, 6, + 97, 4,158,138,158,161,158,225,159,160,100, 2,158,144,158,150, + 229,246, 97,128, 9, 88,237,225,232,229,226,242,229,119,128, 5, + 168,102, 4,158,171,158,180,158,194,158,210,225,242,225,226,233, + 99,128, 6, 66,230,233,238,225,236,225,242,225,226,233, 99,128, + 254,214,233,238,233,244,233,225,236,225,242,225,226,233, 99,128, + 254,215,237,229,228,233,225,236,225,242,225,226,233, 99,128,254, + 216,237,225,244,115,136, 5,184,158,248,159, 12,159, 26,159, 31, + 159, 36,159, 45,159, 60,159,147, 49, 3,159, 0,159, 4,159, 8, + 48,128, 5,184, 97,128, 5,184, 99,128, 5,184, 50, 2,159, 18, + 159, 22, 55,128, 5,184, 57,128, 5,184,179, 51,128, 5,184,228, + 101,128, 5,184,232,229,226,242,229,119,128, 5,184,238,225,242, + 242,239,247,232,229,226,242,229,119,128, 5,184,113, 2,159, 66, + 159,132,225,244,225,110, 4,159, 79,159, 88,159,103,159,119,232, + 229,226,242,229,119,128, 5,184,238,225,242,242,239,247,232,229, + 226,242,229,119,128, 5,184,241,245,225,242,244,229,242,232,229, + 226,242,229,119,128, 5,184,247,233,228,229,232,229,226,242,229, + 119,128, 5,184,245,225,242,244,229,242,232,229,226,242,229,119, + 128, 5,184,247,233,228,229,232,229,226,242,229,119,128, 5,184, + 242,238,229,249,240,225,242,225,232,229,226,242,229,119,128, 5, + 159,226,239,240,239,237,239,230,111,128, 49, 17,227,233,242,227, + 236,101,128, 36,224,232,239,239,107,128, 2,160,237,239,238,239, + 243,240,225,227,101,128,255, 81,239,102,130, 5,231,159,225,159, + 245,228,225,231,229,243,104,129,251, 71,159,236,232,229,226,242, + 229,119,128,251, 71,232,229,226,242,229,119,128, 5,231,240,225, + 242,229,110,128, 36,172,117, 4,160, 16,160, 28,160,117,160,204, + 225,242,244,229,242,238,239,244,101,128, 38,105,226,245,244,115, + 135, 5,187,160, 49,160, 54,160, 59,160, 64,160, 73,160, 88,160, + 104,177, 56,128, 5,187,178, 53,128, 5,187,179, 49,128, 5,187, + 232,229,226,242,229,119,128, 5,187,238,225,242,242,239,247,232, + 229,226,242,229,119,128, 5,187,241,245,225,242,244,229,242,232, + 229,226,242,229,119,128, 5,187,247,233,228,229,232,229,226,242, + 229,119,128, 5,187,229,243,244,233,239,110,133, 0, 63,160,136, + 160,159,160,176,160,184,160,196,225,114, 2,160,143,160,150,225, + 226,233, 99,128, 6, 31,237,229,238,233,225,110,128, 5, 94,228, + 239,247,110,129, 0,191,160,168,243,237,225,236,108,128,247,191, + 231,242,229,229,107,128, 3,126,237,239,238,239,243,240,225,227, + 101,128,255, 31,243,237,225,236,108,128,247, 63,239,244,101, 4, + 160,216,161, 31,161, 51,161, 80,228,226,108,133, 0, 34,160,232, + 160,239,160,246,161, 2,161, 23,226,225,243,101,128, 32, 30,236, + 229,230,116,128, 32, 28,237,239,238,239,243,240,225,227,101,128, + 255, 2,240,242,233,237,101,129, 48, 30,161, 12,242,229,246,229, + 242,243,229,100,128, 48, 29,242,233,231,232,116,128, 32, 29,236, + 229,230,116,129, 32, 24,161, 40,242,229,246,229,242,243,229,100, + 128, 32, 27,114, 2,161, 57,161, 67,229,246,229,242,243,229,100, + 128, 32, 27,233,231,232,116,129, 32, 25,161, 76,110,128, 1, 73, + 243,233,238,231,108, 2,161, 90,161, 97,226,225,243,101,128, 32, + 26,101,129, 0, 39,161,103,237,239,238,239,243,240,225,227,101, + 128,255, 7,114,145, 0,114,161,153,162,157,162,168,162,215,163, + 10,164, 27,164, 51,164,146,166,180,166,217,166,229,167, 27,167, + 35,167,197,167,208,167,243,168, 87, 97, 11,161,177,161,188,161, + 198,161,205,162, 14,162, 30,162, 55,162, 66,162, 91,162,114,162, + 151,225,242,237,229,238,233,225,110,128, 5,124,226,229,238,231, + 225,236,105,128, 9,176,227,245,244,101,128, 1, 85,100, 4,161, + 215,161,221,161,235,162, 5,229,246, 97,128, 9, 48,233,227,225, + 108,129, 34, 26,161,230,229,120,128,248,229,239,246,229,242,243, + 243,241,245,225,242,101,129, 51,174,161,251,228,243,241,245,225, + 242,101,128, 51,175,243,241,245,225,242,101,128, 51,173,230,101, + 129, 5,191,162, 21,232,229,226,242,229,119,128, 5,191,231,117, + 2,162, 37,162, 46,234,225,242,225,244,105,128, 10,176,242,237, + 245,235,232,105,128, 10, 48,232,233,242,225,231,225,238, 97,128, + 48,137,235,225,244,225,235,225,238, 97,129, 48,233,162, 79,232, + 225,236,230,247,233,228,244,104,128,255,151,236,239,247,229,242, + 228,233,225,231,239,238,225,236,226,229,238,231,225,236,105,128, + 9,241,109, 2,162,120,162,143,233,228,228,236,229,228,233,225, + 231,239,238,225,236,226,229,238,231,225,236,105,128, 9,240,243, + 232,239,242,110,128, 2,100,244,233,111,128, 34, 54,226,239,240, + 239,237,239,230,111,128, 49, 22, 99, 4,162,178,162,185,162,194, + 162,202,225,242,239,110,128, 1, 89,229,228,233,236,236, 97,128, + 1, 87,233,242,227,236,101,128, 36,225,239,237,237,225,225,227, + 227,229,238,116,128, 1, 87,100, 2,162,221,162,231,226,236,231, + 242,225,246,101,128, 2, 17,239,116, 2,162,238,162,247,225,227, + 227,229,238,116,128, 30, 89,226,229,236,239,119,129, 30, 91,163, + 1,237,225,227,242,239,110,128, 30, 93,101, 6,163, 24,163, 69, + 163,104,163,159,163,184,163,217,102, 2,163, 30,163, 43,229,242, + 229,238,227,229,237,225,242,107,128, 32, 59,236,229,248,243,117, + 2,163, 53,163, 60,226,243,229,116,128, 34,134,240,229,242,243, + 229,116,128, 34,135,231,233,243,244,229,114, 2,163, 80,163, 85, + 229,100,128, 0,174,115, 2,163, 91,163, 97,225,238,115,128,248, + 232,229,242,233,102,128,246,218,104, 3,163,112,163,135,163,149, + 225,114, 2,163,119,163,126,225,226,233, 99,128, 6, 49,237,229, + 238,233,225,110,128, 5,128,230,233,238,225,236,225,242,225,226, + 233, 99,128,254,174,233,242,225,231,225,238, 97,128, 48,140,235, + 225,244,225,235,225,238, 97,129, 48,236,163,172,232,225,236,230, + 247,233,228,244,104,128,255,154,243,104,130, 5,232,163,193,163, + 208,228,225,231,229,243,232,232,229,226,242,229,119,128,251, 72, + 232,229,226,242,229,119,128, 5,232,118, 3,163,225,163,238,164, + 14,229,242,243,229,228,244,233,236,228,101,128, 34, 61,233, 97, + 2,163,245,163,254,232,229,226,242,229,119,128, 5,151,237,245, + 231,242,225,243,232,232,229,226,242,229,119,128, 5,151,236,239, + 231,233,227,225,236,238,239,116,128, 35, 16,230,233,243,232,232, + 239,239,107,129, 2,126,164, 40,242,229,246,229,242,243,229,100, + 128, 2,127,104, 2,164, 57,164, 80, 97, 2,164, 63,164, 73,226, + 229,238,231,225,236,105,128, 9,221,228,229,246, 97,128, 9, 93, + 111,131, 3,193,164, 90,164,119,164,133,239,107,129, 2,125,164, + 97,244,245,242,238,229,100,129, 2,123,164,108,243,245,240,229, + 242,233,239,114,128, 2,181,243,249,237,226,239,236,231,242,229, + 229,107,128, 3,241,244,233,227,232,239,239,235,237,239,100,128, + 2,222,105, 6,164,160,165,204,165,250,166, 5,166, 30,166,166, + 229,245,108, 9,164,182,164,217,164,232,164,246,165, 36,165, 50, + 165,136,165,149,165,184, 97, 2,164,188,164,203,227,233,242,227, + 236,229,235,239,242,229,225,110,128, 50,113,240,225,242,229,238, + 235,239,242,229,225,110,128, 50, 17,227,233,242,227,236,229,235, + 239,242,229,225,110,128, 50, 99,232,233,229,245,232,235,239,242, + 229,225,110,128, 49, 64,107, 2,164,252,165, 28,233,249,229,239, + 107, 2,165, 6,165, 15,235,239,242,229,225,110,128, 49, 58,243, + 233,239,243,235,239,242,229,225,110,128, 49,105,239,242,229,225, + 110,128, 49, 57,237,233,229,245,237,235,239,242,229,225,110,128, + 49, 59,112, 3,165, 58,165, 90,165,105, 97, 2,165, 64,165, 78, + 238,243,233,239,243,235,239,242,229,225,110,128, 49,108,242,229, + 238,235,239,242,229,225,110,128, 50, 3,232,233,229,245,240,232, + 235,239,242,229,225,110,128, 49, 63,233,229,245,112, 2,165,114, + 165,123,235,239,242,229,225,110,128, 49, 60,243,233,239,243,235, + 239,242,229,225,110,128, 49,107,243,233,239,243,235,239,242,229, + 225,110,128, 49, 61,116, 2,165,155,165,170,232,233,229,245,244, + 232,235,239,242,229,225,110,128, 49, 62,233,235,229,245,244,235, + 239,242,229,225,110,128, 49,106,249,229,239,242,233,238,232,233, + 229,245,232,235,239,242,229,225,110,128, 49,109,231,232,116, 2, + 165,212,165,220,225,238,231,236,101,128, 34, 31,116, 2,165,226, + 165,240,225,227,235,226,229,236,239,247,227,237, 98,128, 3, 25, + 242,233,225,238,231,236,101,128, 34,191,232,233,242,225,231,225, + 238, 97,128, 48,138,235,225,244,225,235,225,238, 97,129, 48,234, + 166, 18,232,225,236,230,247,233,228,244,104,128,255,152,110, 2, + 166, 36,166,152,103,131, 2,218,166, 46,166, 57,166, 63,226,229, + 236,239,247,227,237, 98,128, 3, 37,227,237, 98,128, 3, 10,232, + 225,236,102, 2,166, 72,166,118,236,229,230,116,131, 2,191,166, + 85,166, 96,166,107,225,242,237,229,238,233,225,110,128, 5, 89, + 226,229,236,239,247,227,237, 98,128, 3, 28,227,229,238,244,229, + 242,229,100,128, 2,211,242,233,231,232,116,130, 2,190,166,130, + 166,141,226,229,236,239,247,227,237, 98,128, 3, 57,227,229,238, + 244,229,242,229,100,128, 2,210,246,229,242,244,229,228,226,242, + 229,246,101,128, 2, 19,244,244,239,242,245,243,241,245,225,242, + 101,128, 51, 81,108, 2,166,186,166,197,233,238,229,226,229,236, + 239,119,128, 30, 95,239,238,231,236,229,103,129, 2,124,166,208, + 244,245,242,238,229,100,128, 2,122,237,239,238,239,243,240,225, + 227,101,128,255, 82,111, 3,166,237,166,248,167, 17,232,233,242, + 225,231,225,238, 97,128, 48,141,235,225,244,225,235,225,238, 97, + 129, 48,237,167, 5,232,225,236,230,247,233,228,244,104,128,255, + 155,242,245,225,244,232,225,105,128, 14, 35,240,225,242,229,110, + 128, 36,173,114, 3,167, 43,167, 79,167,109, 97, 3,167, 51,167, + 61,167, 68,226,229,238,231,225,236,105,128, 9,220,228,229,246, + 97,128, 9, 49,231,245,242,237,245,235,232,105,128, 10, 92,229, + 104, 2,167, 86,167, 95,225,242,225,226,233, 99,128, 6,145,230, + 233,238,225,236,225,242,225,226,233, 99,128,251,141,246,239,227, + 225,236,233, 99, 4,167,125,167,135,167,142,167,153,226,229,238, + 231,225,236,105,128, 9,224,228,229,246, 97,128, 9, 96,231,245, + 234,225,242,225,244,105,128, 10,224,246,239,247,229,236,243,233, + 231,110, 3,167,169,167,179,167,186,226,229,238,231,225,236,105, + 128, 9,196,228,229,246, 97,128, 9, 68,231,245,234,225,242,225, + 244,105,128, 10,196,243,245,240,229,242,233,239,114,128,246,241, + 116, 2,167,214,167,222,226,236,239,227,107,128, 37,144,245,242, + 238,229,100,129, 2,121,167,232,243,245,240,229,242,233,239,114, + 128, 2,180,117, 4,167,253,168, 8,168, 33,168, 80,232,233,242, + 225,231,225,238, 97,128, 48,139,235,225,244,225,235,225,238, 97, + 129, 48,235,168, 21,232,225,236,230,247,233,228,244,104,128,255, + 153,112, 2,168, 39,168, 74,229,101, 2,168, 46,168, 60,237,225, + 242,235,226,229,238,231,225,236,105,128, 9,242,243,233,231,238, + 226,229,238,231,225,236,105,128, 9,243,233,225,104,128,246,221, + 244,232,225,105,128, 14, 36,246,239,227,225,236,233, 99, 4,168, + 103,168,113,168,120,168,131,226,229,238,231,225,236,105,128, 9, + 139,228,229,246, 97,128, 9, 11,231,245,234,225,242,225,244,105, + 128, 10,139,246,239,247,229,236,243,233,231,110, 3,168,147,168, + 157,168,164,226,229,238,231,225,236,105,128, 9,195,228,229,246, + 97,128, 9, 67,231,245,234,225,242,225,244,105,128, 10,195,115, + 147, 0,115,168,217,170,187,170,198,171, 68,171,107,174, 49,174, + 60,176,203,179, 85,179,131,179,158,180, 93,180,160,181,193,181, + 203,182,133,182,206,183,120,183,130, 97, 9,168,237,168,247,169, + 12,169, 84,169,109,169,120,169,145,169,177,169,217,226,229,238, + 231,225,236,105,128, 9,184,227,245,244,101,129, 1, 91,169, 0, + 228,239,244,225,227,227,229,238,116,128, 30,101,100, 5,169, 24, + 169, 33,169, 39,169, 53,169, 69,225,242,225,226,233, 99,128, 6, + 53,229,246, 97,128, 9, 56,230,233,238,225,236,225,242,225,226, + 233, 99,128,254,186,233,238,233,244,233,225,236,225,242,225,226, + 233, 99,128,254,187,237,229,228,233,225,236,225,242,225,226,233, + 99,128,254,188,231,117, 2,169, 91,169,100,234,225,242,225,244, + 105,128, 10,184,242,237,245,235,232,105,128, 10, 56,232,233,242, + 225,231,225,238, 97,128, 48, 85,235,225,244,225,235,225,238, 97, + 129, 48,181,169,133,232,225,236,230,247,233,228,244,104,128,255, + 123,236,236,225,236,236,225,232,239,245,225,236,225,249,232,229, + 247,225,243,225,236,236,225,237,225,242,225,226,233, 99,128,253, + 250,237,229,235,104,130, 5,225,169,188,169,208,228,225,231,229, + 243,104,129,251, 65,169,199,232,229,226,242,229,119,128,251, 65, + 232,229,226,242,229,119,128, 5,225,242, 97, 5,169,230,170, 48, + 170, 56,170,106,170,114, 97, 5,169,242,169,250,170, 2,170, 33, + 170, 41,225,244,232,225,105,128, 14, 50,229,244,232,225,105,128, + 14, 65,233,237,225,233,109, 2,170, 12,170, 23,225,236,225,233, + 244,232,225,105,128, 14, 68,245,225,238,244,232,225,105,128, 14, + 67,237,244,232,225,105,128, 14, 51,244,232,225,105,128, 14, 48, + 229,244,232,225,105,128, 14, 64,105, 3,170, 64,170, 88,170, 99, + 105, 2,170, 70,170, 81,236,229,230,244,244,232,225,105,128,248, + 134,244,232,225,105,128, 14, 53,236,229,230,244,244,232,225,105, + 128,248,133,244,232,225,105,128, 14, 52,239,244,232,225,105,128, + 14, 66,117, 3,170,122,170,172,170,179,101, 3,170,130,170,154, + 170,165,101, 2,170,136,170,147,236,229,230,244,244,232,225,105, + 128,248,136,244,232,225,105,128, 14, 55,236,229,230,244,244,232, + 225,105,128,248,135,244,232,225,105,128, 14, 54,244,232,225,105, + 128, 14, 56,245,244,232,225,105,128, 14, 57,226,239,240,239,237, + 239,230,111,128, 49, 25, 99, 5,170,210,170,231,170,240,171, 33, + 171, 55,225,242,239,110,129, 1, 97,170,219,228,239,244,225,227, + 227,229,238,116,128, 30,103,229,228,233,236,236, 97,128, 1, 95, + 232,247, 97,131, 2, 89,170,252,171, 7,171, 26,227,249,242,233, + 236,236,233, 99,128, 4,217,228,233,229,242,229,243,233,243,227, + 249,242,233,236,236,233, 99,128, 4,219,232,239,239,107,128, 2, + 90,233,242, 99, 2,171, 41,171, 46,236,101,128, 36,226,245,237, + 230,236,229,120,128, 1, 93,239,237,237,225,225,227,227,229,238, + 116,128, 2, 25,228,239,116, 2,171, 76,171, 85,225,227,227,229, + 238,116,128, 30, 97,226,229,236,239,119,129, 30, 99,171, 95,228, + 239,244,225,227,227,229,238,116,128, 30,105,101, 9,171,127,171, + 143,171,178,171,243,172, 90,172,117,172,142,172,223,172,250,225, + 231,245,236,236,226,229,236,239,247,227,237, 98,128, 3, 60, 99, + 2,171,149,171,171,239,238,100,129, 32, 51,171,157,244,239,238, + 229,227,232,233,238,229,243,101,128, 2,202,244,233,239,110,128, + 0,167,229,110, 4,171,189,171,198,171,212,171,228,225,242,225, + 226,233, 99,128, 6, 51,230,233,238,225,236,225,242,225,226,233, + 99,128,254,178,233,238,233,244,233,225,236,225,242,225,226,233, + 99,128,254,179,237,229,228,233,225,236,225,242,225,226,233, 99, + 128,254,180,231,239,108,135, 5,182,172, 7,172, 21,172, 26,172, + 35,172, 50,172, 66,172, 77, 49, 2,172, 13,172, 17, 51,128, 5, + 182,102,128, 5,182,178, 99,128, 5,182,232,229,226,242,229,119, + 128, 5,182,238,225,242,242,239,247,232,229,226,242,229,119,128, + 5,182,241,245,225,242,244,229,242,232,229,226,242,229,119,128, + 5,182,244,225,232,229,226,242,229,119,128, 5,146,247,233,228, + 229,232,229,226,242,229,119,128, 5,182,104, 2,172, 96,172,107, + 225,242,237,229,238,233,225,110,128, 5,125,233,242,225,231,225, + 238, 97,128, 48, 91,235,225,244,225,235,225,238, 97,129, 48,187, + 172,130,232,225,236,230,247,233,228,244,104,128,255,126,237,105, + 2,172,149,172,192,227,239,236,239,110,131, 0, 59,172,163,172, + 172,172,184,225,242,225,226,233, 99,128, 6, 27,237,239,238,239, + 243,240,225,227,101,128,255, 27,243,237,225,236,108,128,254, 84, + 246,239,233,227,229,228,237,225,242,235,235,225,238, 97,129, 48, + 156,172,211,232,225,236,230,247,233,228,244,104,128,255,159,238, + 116, 2,172,230,172,240,233,243,241,245,225,242,101,128, 51, 34, + 239,243,241,245,225,242,101,128, 51, 35,246,229,110,142, 0, 55, + 173, 28,173, 37,173, 47,173, 77,173, 84,173, 94,173,119,173,146, + 173,180,173,192,173,203,173,236,173,244,173,255,225,242,225,226, + 233, 99,128, 6,103,226,229,238,231,225,236,105,128, 9,237,227, + 233,242,227,236,101,129, 36,102,173, 58,233,238,246,229,242,243, + 229,243,225,238,243,243,229,242,233,102,128, 39,144,228,229,246, + 97,128, 9,109,229,233,231,232,244,232,115,128, 33, 94,231,117, + 2,173,101,173,110,234,225,242,225,244,105,128, 10,237,242,237, + 245,235,232,105,128, 10,109,232, 97, 2,173,126,173,137,227,235, + 225,242,225,226,233, 99,128, 6,103,238,231,250,232,239,117,128, + 48, 39,105, 2,173,152,173,170,228,229,239,231,242,225,240,232, + 233,227,240,225,242,229,110,128, 50, 38,238,230,229,242,233,239, + 114,128, 32,135,237,239,238,239,243,240,225,227,101,128,255, 23, + 239,236,228,243,244,249,236,101,128,247, 55,112, 2,173,209,173, + 216,225,242,229,110,128, 36,122,229,114, 2,173,223,173,229,233, + 239,100,128, 36,142,243,233,225,110,128, 6,247,242,239,237,225, + 110,128, 33,118,243,245,240,229,242,233,239,114,128, 32,119,116, + 2,174, 5,174, 43,229,229,110, 2,174, 13,174, 22,227,233,242, + 227,236,101,128, 36,112,112, 2,174, 28,174, 35,225,242,229,110, + 128, 36,132,229,242,233,239,100,128, 36,152,232,225,105,128, 14, + 87,230,244,232,249,240,232,229,110,128, 0,173,104, 7,174, 76, + 175, 50,175, 61,175, 75,176, 20,176, 33,176,197, 97, 6,174, 90, + 174,101,174,111,174,122,175, 9,175, 34,225,242,237,229,238,233, + 225,110,128, 5,119,226,229,238,231,225,236,105,128, 9,182,227, + 249,242,233,236,236,233, 99,128, 4, 72,100, 2,174,128,174,224, + 228, 97, 4,174,139,174,148,174,179,174,193,225,242,225,226,233, + 99,128, 6, 81,228,225,237,237, 97, 2,174,158,174,167,225,242, + 225,226,233, 99,128,252, 97,244,225,238,225,242,225,226,233, 99, + 128,252, 94,230,225,244,232,225,225,242,225,226,233, 99,128,252, + 96,235,225,243,242, 97, 2,174,203,174,212,225,242,225,226,233, + 99,128,252, 98,244,225,238,225,242,225,226,233, 99,128,252, 95, + 101,132, 37,146,174,236,174,243,174,251,175, 4,228,225,242,107, + 128, 37,147,236,233,231,232,116,128, 37,145,237,229,228,233,245, + 109,128, 37,146,246, 97,128, 9, 54,231,117, 2,175, 16,175, 25, + 234,225,242,225,244,105,128, 10,182,242,237,245,235,232,105,128, + 10, 54,236,243,232,229,236,229,244,232,229,226,242,229,119,128, + 5,147,226,239,240,239,237,239,230,111,128, 49, 21,227,232,225, + 227,249,242,233,236,236,233, 99,128, 4, 73,101, 4,175, 85,175, + 150,175,160,175,177,229,110, 4,175, 96,175,105,175,119,175,135, + 225,242,225,226,233, 99,128, 6, 52,230,233,238,225,236,225,242, + 225,226,233, 99,128,254,182,233,238,233,244,233,225,236,225,242, + 225,226,233, 99,128,254,183,237,229,228,233,225,236,225,242,225, + 226,233, 99,128,254,184,233,227,239,240,244,233, 99,128, 3,227, + 241,229,108,129, 32,170,175,168,232,229,226,242,229,119,128, 32, + 170,246, 97,134, 5,176,175,194,175,209,175,223,175,232,175,247, + 176, 7, 49, 2,175,200,175,205,177, 53,128, 5,176, 53,128, 5, + 176, 50, 2,175,215,175,219, 50,128, 5,176,101,128, 5,176,232, + 229,226,242,229,119,128, 5,176,238,225,242,242,239,247,232,229, + 226,242,229,119,128, 5,176,241,245,225,242,244,229,242,232,229, + 226,242,229,119,128, 5,176,247,233,228,229,232,229,226,242,229, + 119,128, 5,176,232,225,227,249,242,233,236,236,233, 99,128, 4, + 187,105, 2,176, 39,176, 50,237,225,227,239,240,244,233, 99,128, + 3,237,110,131, 5,233,176, 60,176,143,176,152,100, 2,176, 66, + 176,132,225,231,229,243,104,130,251, 73,176, 78,176, 87,232,229, + 226,242,229,119,128,251, 73,115, 2,176, 93,176,113,232,233,238, + 228,239,116,129,251, 44,176,104,232,229,226,242,229,119,128,251, + 44,233,238,228,239,116,129,251, 45,176,123,232,229,226,242,229, + 119,128,251, 45,239,244,232,229,226,242,229,119,128, 5,193,232, + 229,226,242,229,119,128, 5,233,115, 2,176,158,176,178,232,233, + 238,228,239,116,129,251, 42,176,169,232,229,226,242,229,119,128, + 251, 42,233,238,228,239,116,129,251, 43,176,188,232,229,226,242, + 229,119,128,251, 43,239,239,107,128, 2,130,105, 8,176,221,177, + 9,177, 20,177, 45,177, 75,177, 83,177, 96,178, 11,231,237, 97, + 131, 3,195,176,233,176,237,176,245, 49,128, 3,194,230,233,238, + 225,108,128, 3,194,236,245,238,225,244,229,243,249,237,226,239, + 236,231,242,229,229,107,128, 3,242,232,233,242,225,231,225,238, + 97,128, 48, 87,235,225,244,225,235,225,238, 97,129, 48,183,177, + 33,232,225,236,230,247,233,228,244,104,128,255,124,236,245,113, + 2,177, 53,177, 62,232,229,226,242,229,119,128, 5,189,236,229, + 230,244,232,229,226,242,229,119,128, 5,189,237,233,236,225,114, + 128, 34, 60,238,228,239,244,232,229,226,242,229,119,128, 5,194, + 239,115, 6,177,111,177,146,177,178,177,206,177,220,177,252, 97, + 2,177,117,177,132,227,233,242,227,236,229,235,239,242,229,225, + 110,128, 50,116,240,225,242,229,238,235,239,242,229,225,110,128, + 50, 20,227,105, 2,177,153,177,165,229,245,227,235,239,242,229, + 225,110,128, 49,126,242,227,236,229,235,239,242,229,225,110,128, + 50,102,107, 2,177,184,177,198,233,249,229,239,235,235,239,242, + 229,225,110,128, 49,122,239,242,229,225,110,128, 49, 69,238,233, + 229,245,238,235,239,242,229,225,110,128, 49,123,112, 2,177,226, + 177,239,225,242,229,238,235,239,242,229,225,110,128, 50, 6,233, + 229,245,240,235,239,242,229,225,110,128, 49,125,244,233,235,229, + 245,244,235,239,242,229,225,110,128, 49,124,120,141, 0, 54,178, + 41,178, 50,178, 60,178, 90,178, 97,178,122,178,149,178,183,178, + 195,178,206,178,239,178,247,179, 2,225,242,225,226,233, 99,128, + 6,102,226,229,238,231,225,236,105,128, 9,236,227,233,242,227, + 236,101,129, 36,101,178, 71,233,238,246,229,242,243,229,243,225, + 238,243,243,229,242,233,102,128, 39,143,228,229,246, 97,128, 9, + 108,231,117, 2,178,104,178,113,234,225,242,225,244,105,128, 10, + 236,242,237,245,235,232,105,128, 10,108,232, 97, 2,178,129,178, + 140,227,235,225,242,225,226,233, 99,128, 6,102,238,231,250,232, + 239,117,128, 48, 38,105, 2,178,155,178,173,228,229,239,231,242, + 225,240,232,233,227,240,225,242,229,110,128, 50, 37,238,230,229, + 242,233,239,114,128, 32,134,237,239,238,239,243,240,225,227,101, + 128,255, 22,239,236,228,243,244,249,236,101,128,247, 54,112, 2, + 178,212,178,219,225,242,229,110,128, 36,121,229,114, 2,178,226, + 178,232,233,239,100,128, 36,141,243,233,225,110,128, 6,246,242, + 239,237,225,110,128, 33,117,243,245,240,229,242,233,239,114,128, + 32,118,116, 2,179, 8,179, 79,229,229,110, 2,179, 16,179, 58, + 99, 2,179, 22,179, 30,233,242,227,236,101,128, 36,111,245,242, + 242,229,238,227,249,228,229,238,239,237,233,238,225,244,239,242, + 226,229,238,231,225,236,105,128, 9,249,112, 2,179, 64,179, 71, + 225,242,229,110,128, 36,131,229,242,233,239,100,128, 36,151,232, + 225,105,128, 14, 86,108, 2,179, 91,179,111,225,243,104,129, 0, + 47,179, 99,237,239,238,239,243,240,225,227,101,128,255, 15,239, + 238,103,129, 1,127,179,119,228,239,244,225,227,227,229,238,116, + 128, 30,155,109, 2,179,137,179,147,233,236,229,230,225,227,101, + 128, 38, 58,239,238,239,243,240,225,227,101,128,255, 83,111, 6, + 179,172,179,222,179,233,180, 2,180, 47,180, 58,102, 2,179,178, + 179,192,240,225,243,245,241,232,229,226,242,229,119,128, 5,195, + 116, 2,179,198,179,207,232,249,240,232,229,110,128, 0,173,243, + 233,231,238,227,249,242,233,236,236,233, 99,128, 4, 76,232,233, + 242,225,231,225,238, 97,128, 48, 93,235,225,244,225,235,225,238, + 97,129, 48,189,179,246,232,225,236,230,247,233,228,244,104,128, + 255,127,236,233,228,245,115, 2,180, 12,180, 29,236,239,238,231, + 239,246,229,242,236,225,249,227,237, 98,128, 3, 56,243,232,239, + 242,244,239,246,229,242,236,225,249,227,237, 98,128, 3, 55,242, + 245,243,233,244,232,225,105,128, 14, 41,115, 3,180, 66,180, 76, + 180, 84,225,236,225,244,232,225,105,128, 14, 40,239,244,232,225, + 105,128, 14, 11,245,225,244,232,225,105,128, 14, 42,240, 97, 3, + 180,102,180,122,180,154,227,101,129, 0, 32,180,109,232,225,227, + 235,225,242,225,226,233, 99,128, 0, 32,228,101,129, 38, 96,180, + 129,243,245,233,116, 2,180,138,180,146,226,236,225,227,107,128, + 38, 96,247,232,233,244,101,128, 38,100,242,229,110,128, 36,174, + 241,245,225,242,101, 11,180,188,180,199,180,213,180,238,180,255, + 181, 25,181, 40,181, 73,181,100,181,156,181,171,226,229,236,239, + 247,227,237, 98,128, 3, 59, 99, 2,180,205,180,209, 99,128, 51, + 196,109,128, 51,157,228,233,225,231,239,238,225,236,227,242,239, + 243,243,232,225,244,227,232,230,233,236,108,128, 37,169,232,239, + 242,233,250,239,238,244,225,236,230,233,236,108,128, 37,164,107, + 2,181, 5,181, 9,103,128, 51,143,109,129, 51,158,181, 15,227, + 225,240,233,244,225,108,128, 51,206,108, 2,181, 31,181, 35,110, + 128, 51,209,239,103,128, 51,210,109, 4,181, 50,181, 54,181, 59, + 181, 63,103,128, 51,142,233,108,128, 51,213,109,128, 51,156,243, + 241,245,225,242,229,100,128, 51,161,239,242,244,232,239,231,239, + 238,225,236,227,242,239,243,243,232,225,244,227,232,230,233,236, + 108,128, 37,166,245,240,240,229,114, 2,181,110,181,133,236,229, + 230,244,244,239,236,239,247,229,242,242,233,231,232,244,230,233, + 236,108,128, 37,167,242,233,231,232,244,244,239,236,239,247,229, + 242,236,229,230,244,230,233,236,108,128, 37,168,246,229,242,244, + 233,227,225,236,230,233,236,108,128, 37,165,247,232,233,244,229, + 247,233,244,232,243,237,225,236,236,226,236,225,227,107,128, 37, + 163,242,243,241,245,225,242,101,128, 51,219,115, 2,181,209,182, + 123, 97, 4,181,219,181,229,181,236,181,247,226,229,238,231,225, + 236,105,128, 9,183,228,229,246, 97,128, 9, 55,231,245,234,225, + 242,225,244,105,128, 10,183,238,103, 8,182, 10,182, 24,182, 38, + 182, 52,182, 67,182, 81,182, 95,182,108,227,233,229,245,227,235, + 239,242,229,225,110,128, 49, 73,232,233,229,245,232,235,239,242, + 229,225,110,128, 49,133,233,229,245,238,231,235,239,242,229,225, + 110,128, 49,128,235,233,249,229,239,235,235,239,242,229,225,110, + 128, 49, 50,238,233,229,245,238,235,239,242,229,225,110,128, 49, + 101,240,233,229,245,240,235,239,242,229,225,110,128, 49, 67,243, + 233,239,243,235,239,242,229,225,110,128, 49, 70,244,233,235,229, + 245,244,235,239,242,229,225,110,128, 49, 56,245,240,229,242,233, + 239,114,128,246,242,116, 2,182,139,182,162,229,242,236,233,238, + 103,129, 0,163,182,150,237,239,238,239,243,240,225,227,101,128, + 255,225,242,239,235,101, 2,182,171,182,188,236,239,238,231,239, + 246,229,242,236,225,249,227,237, 98,128, 3, 54,243,232,239,242, + 244,239,246,229,242,236,225,249,227,237, 98,128, 3, 53,117, 7, + 182,222,182,254,183, 20,183, 31,183, 72,183, 82,183, 86,226,243, + 229,116,130, 34,130,182,233,182,244,238,239,244,229,241,245,225, + 108,128, 34,138,239,242,229,241,245,225,108,128, 34,134, 99, 2, + 183, 4,183, 12,227,229,229,228,115,128, 34,123,232,244,232,225, + 116,128, 34, 11,232,233,242,225,231,225,238, 97,128, 48, 89,107, + 2,183, 37,183, 61,225,244,225,235,225,238, 97,129, 48,185,183, + 49,232,225,236,230,247,233,228,244,104,128,255,125,245,238,225, + 242,225,226,233, 99,128, 6, 82,237,237,225,244,233,239,110,128, + 34, 17,110,128, 38, 60,240,229,242,243,229,116,130, 34,131,183, + 99,183,110,238,239,244,229,241,245,225,108,128, 34,139,239,242, + 229,241,245,225,108,128, 34,135,246,243,241,245,225,242,101,128, + 51,220,249,239,245,247,225,229,242,225,243,241,245,225,242,101, + 128, 51,124,116,144, 0,116,183,183,184,192,184,213,185,100,185, + 140,187,188,191, 70,192,145,192,157,192,169,193,202,193,227,194, + 57,194,237,195,165,195,255, 97, 10,183,205,183,215,183,236,183, + 243,184, 12,184, 90,184,107,184,132,184,146,184,150,226,229,238, + 231,225,236,105,128, 9,164,227,107, 2,183,222,183,229,228,239, + 247,110,128, 34,164,236,229,230,116,128, 34,163,228,229,246, 97, + 128, 9, 36,231,117, 2,183,250,184, 3,234,225,242,225,244,105, + 128, 10,164,242,237,245,235,232,105,128, 10, 36,104, 4,184, 22, + 184, 31,184, 45,184, 75,225,242,225,226,233, 99,128, 6, 55,230, + 233,238,225,236,225,242,225,226,233, 99,128,254,194,105, 2,184, + 51,184, 66,238,233,244,233,225,236,225,242,225,226,233, 99,128, + 254,195,242,225,231,225,238, 97,128, 48, 95,237,229,228,233,225, + 236,225,242,225,226,233, 99,128,254,196,233,243,249,239,245,229, + 242,225,243,241,245,225,242,101,128, 51,125,235,225,244,225,235, + 225,238, 97,129, 48,191,184,120,232,225,236,230,247,233,228,244, + 104,128,255,128,244,247,229,229,236,225,242,225,226,233, 99,128, + 6, 64,117,128, 3,196,118,130, 5,234,184,158,184,183,228,225, + 231,229,115,129,251, 74,184,168,104,129,251, 74,184,174,232,229, + 226,242,229,119,128,251, 74,232,229,226,242,229,119,128, 5,234, + 98, 2,184,198,184,203,225,114,128, 1,103,239,240,239,237,239, + 230,111,128, 49, 10, 99, 6,184,227,184,234,184,241,184,250,185, + 60,185, 87,225,242,239,110,128, 1,101,227,245,242,108,128, 2, + 168,229,228,233,236,236, 97,128, 1, 99,232,229,104, 4,185, 6, + 185, 15,185, 29,185, 45,225,242,225,226,233, 99,128, 6,134,230, + 233,238,225,236,225,242,225,226,233, 99,128,251,123,233,238,233, + 244,233,225,236,225,242,225,226,233, 99,128,251,124,237,229,228, + 233,225,236,225,242,225,226,233, 99,128,251,125,233,242, 99, 2, + 185, 68,185, 73,236,101,128, 36,227,245,237,230,236,229,248,226, + 229,236,239,119,128, 30,113,239,237,237,225,225,227,227,229,238, + 116,128, 1, 99,100, 2,185,106,185,116,233,229,242,229,243,233, + 115,128, 30,151,239,116, 2,185,123,185,132,225,227,227,229,238, + 116,128, 30,107,226,229,236,239,119,128, 30,109,101, 9,185,160, + 185,171,185,191,186,201,186,226,187, 34,187,101,187,106,187,158, + 227,249,242,233,236,236,233, 99,128, 4, 66,228,229,243,227,229, + 238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,173,104, + 7,185,207,185,216,185,230,186, 14,186, 44,186, 85,186,183,225, + 242,225,226,233, 99,128, 6, 42,230,233,238,225,236,225,242,225, + 226,233, 99,128,254,150,232,225,232,105, 2,185,239,185,254,238, + 233,244,233,225,236,225,242,225,226,233, 99,128,252,162,243,239, + 236,225,244,229,228,225,242,225,226,233, 99,128,252, 12,105, 2, + 186, 20,186, 35,238,233,244,233,225,236,225,242,225,226,233, 99, + 128,254,151,242,225,231,225,238, 97,128, 48,102,234,229,229,237, + 105, 2,186, 54,186, 69,238,233,244,233,225,236,225,242,225,226, + 233, 99,128,252,161,243,239,236,225,244,229,228,225,242,225,226, + 233, 99,128,252, 11,109, 2,186, 91,186,125,225,242,226,245,244, + 97, 2,186,102,186,111,225,242,225,226,233, 99,128, 6, 41,230, + 233,238,225,236,225,242,225,226,233, 99,128,254,148,101, 2,186, + 131,186,144,228,233,225,236,225,242,225,226,233, 99,128,254,152, + 229,237,105, 2,186,152,186,167,238,233,244,233,225,236,225,242, + 225,226,233, 99,128,252,164,243,239,236,225,244,229,228,225,242, + 225,226,233, 99,128,252, 14,238,239,239,238,230,233,238,225,236, + 225,242,225,226,233, 99,128,252,115,235,225,244,225,235,225,238, + 97,129, 48,198,186,214,232,225,236,230,247,233,228,244,104,128, + 255,131,108, 2,186,232,186,251,229,240,232,239,238,101,129, 33, + 33,186,243,226,236,225,227,107,128, 38, 14,233,243,232, 97, 2, + 187, 4,187, 19,231,229,228,239,236,225,232,229,226,242,229,119, + 128, 5,160,241,229,244,225,238,225,232,229,226,242,229,119,128, + 5,169,110, 4,187, 44,187, 53,187, 72,187, 93,227,233,242,227, + 236,101,128, 36,105,233,228,229,239,231,242,225,240,232,233,227, + 240,225,242,229,110,128, 50, 41,112, 2,187, 78,187, 85,225,242, + 229,110,128, 36,125,229,242,233,239,100,128, 36,145,242,239,237, + 225,110,128, 33,121,243,104,128, 2,167,116,131, 5,216,187,116, + 187,136,187,145,228,225,231,229,243,104,129,251, 56,187,127,232, + 229,226,242,229,119,128,251, 56,232,229,226,242,229,119,128, 5, + 216,243,229,227,249,242,233,236,236,233, 99,128, 4,181,246,233, + 114, 2,187,166,187,175,232,229,226,242,229,119,128, 5,155,236, + 229,230,244,232,229,226,242,229,119,128, 5,155,104, 6,187,202, + 188, 98,188,220,189, 96,190, 3,191, 60, 97, 5,187,214,187,224, + 187,231,188, 0,188, 29,226,229,238,231,225,236,105,128, 9,165, + 228,229,246, 97,128, 9, 37,231,117, 2,187,238,187,247,234,225, + 242,225,244,105,128, 10,165,242,237,245,235,232,105,128, 10, 37, + 108, 2,188, 6,188, 15,225,242,225,226,233, 99,128, 6, 48,230, + 233,238,225,236,225,242,225,226,233, 99,128,254,172,238,244,232, + 225,235,232,225,116, 3,188, 44,188, 75,188, 82,236,239,119, 2, + 188, 52,188, 63,236,229,230,244,244,232,225,105,128,248,152,242, + 233,231,232,244,244,232,225,105,128,248,151,244,232,225,105,128, + 14, 76,245,240,240,229,242,236,229,230,244,244,232,225,105,128, + 248,150,101, 3,188,106,188,170,188,193,104, 4,188,116,188,125, + 188,139,188,155,225,242,225,226,233, 99,128, 6, 43,230,233,238, + 225,236,225,242,225,226,233, 99,128,254,154,233,238,233,244,233, + 225,236,225,242,225,226,233, 99,128,254,155,237,229,228,233,225, + 236,225,242,225,226,233, 99,128,254,156,242,101, 2,188,177,188, + 186,229,248,233,243,244,115,128, 34, 3,230,239,242,101,128, 34, + 52,244, 97,130, 3,184,188,202,188,206, 49,128, 3,209,243,249, + 237,226,239,236,231,242,229,229,107,128, 3,209,105, 2,188,226, + 189, 56,229,245,244,104, 4,188,239,189, 18,189, 33,189, 42, 97, + 2,188,245,189, 4,227,233,242,227,236,229,235,239,242,229,225, + 110,128, 50,121,240,225,242,229,238,235,239,242,229,225,110,128, + 50, 25,227,233,242,227,236,229,235,239,242,229,225,110,128, 50, + 107,235,239,242,229,225,110,128, 49, 76,240,225,242,229,238,235, + 239,242,229,225,110,128, 50, 11,242,244,229,229,110, 2,189, 66, + 189, 75,227,233,242,227,236,101,128, 36,108,112, 2,189, 81,189, + 88,225,242,229,110,128, 36,128,229,242,233,239,100,128, 36,148, + 111, 6,189,110,189,127,189,132,189,146,189,151,189,204,238,225, + 238,231,237,239,238,244,232,239,244,232,225,105,128, 14, 17,239, + 107,128, 1,173,240,232,245,244,232,225,239,244,232,225,105,128, + 14, 18,242,110,128, 0,254,244,104, 3,189,160,189,184,189,194, + 97, 2,189,166,189,176,232,225,238,244,232,225,105,128, 14, 23, + 238,244,232,225,105,128, 14, 16,239,238,231,244,232,225,105,128, + 14, 24,245,238,231,244,232,225,105,128, 14, 22,245,243,225,238, + 100, 2,189,214,189,225,227,249,242,233,236,236,233, 99,128, 4, + 130,243,243,229,240,225,242,225,244,239,114, 2,189,240,189,249, + 225,242,225,226,233, 99,128, 6,108,240,229,242,243,233,225,110, + 128, 6,108,242,229,101,144, 0, 51,190, 41,190, 50,190, 60,190, + 90,190, 97,190,107,190,132,190,159,190,193,190,205,190,224,190, + 235,191, 12,191, 34,191, 42,191, 53,225,242,225,226,233, 99,128, + 6, 99,226,229,238,231,225,236,105,128, 9,233,227,233,242,227, + 236,101,129, 36, 98,190, 71,233,238,246,229,242,243,229,243,225, + 238,243,243,229,242,233,102,128, 39,140,228,229,246, 97,128, 9, + 105,229,233,231,232,244,232,115,128, 33, 92,231,117, 2,190,114, + 190,123,234,225,242,225,244,105,128, 10,233,242,237,245,235,232, + 105,128, 10,105,232, 97, 2,190,139,190,150,227,235,225,242,225, + 226,233, 99,128, 6, 99,238,231,250,232,239,117,128, 48, 35,105, + 2,190,165,190,183,228,229,239,231,242,225,240,232,233,227,240, + 225,242,229,110,128, 50, 34,238,230,229,242,233,239,114,128, 32, + 131,237,239,238,239,243,240,225,227,101,128,255, 19,238,245,237, + 229,242,225,244,239,242,226,229,238,231,225,236,105,128, 9,246, + 239,236,228,243,244,249,236,101,128,247, 51,112, 2,190,241,190, + 248,225,242,229,110,128, 36,118,229,114, 2,190,255,191, 5,233, + 239,100,128, 36,138,243,233,225,110,128, 6,243,241,245,225,242, + 244,229,242,115,129, 0,190,191, 25,229,237,228,225,243,104,128, + 246,222,242,239,237,225,110,128, 33,114,243,245,240,229,242,233, + 239,114,128, 0,179,244,232,225,105,128, 14, 83,250,243,241,245, + 225,242,101,128, 51,148,105, 7,191, 86,191, 97,191,212,192, 54, + 192, 66,192,115,192,132,232,233,242,225,231,225,238, 97,128, 48, + 97,107, 2,191,103,191,127,225,244,225,235,225,238, 97,129, 48, + 193,191,115,232,225,236,230,247,233,228,244,104,128,255,129,229, + 245,116, 4,191,139,191,174,191,189,191,198, 97, 2,191,145,191, + 160,227,233,242,227,236,229,235,239,242,229,225,110,128, 50,112, + 240,225,242,229,238,235,239,242,229,225,110,128, 50, 16,227,233, + 242,227,236,229,235,239,242,229,225,110,128, 50, 98,235,239,242, + 229,225,110,128, 49, 55,240,225,242,229,238,235,239,242,229,225, + 110,128, 50, 2,236,228,101,133, 2,220,191,228,191,239,192, 0, + 192, 12,192, 40,226,229,236,239,247,227,237, 98,128, 3, 48, 99, + 2,191,245,191,250,237, 98,128, 3, 3,239,237, 98,128, 3, 3, + 228,239,245,226,236,229,227,237, 98,128, 3, 96,111, 2,192, 18, + 192, 28,240,229,242,225,244,239,114,128, 34, 60,246,229,242,236, + 225,249,227,237, 98,128, 3, 52,246,229,242,244,233,227,225,236, + 227,237, 98,128, 3, 62,237,229,243,227,233,242,227,236,101,128, + 34,151,112, 2,192, 72,192,102,229,232, 97, 2,192, 80,192, 89, + 232,229,226,242,229,119,128, 5,150,236,229,230,244,232,229,226, + 242,229,119,128, 5,150,240,233,231,245,242,237,245,235,232,105, + 128, 10,112,244,236,239,227,249,242,233,236,236,233,227,227,237, + 98,128, 4,131,247,238,225,242,237,229,238,233,225,110,128, 5, + 127,236,233,238,229,226,229,236,239,119,128, 30,111,237,239,238, + 239,243,240,225,227,101,128,255, 84,111, 7,192,185,192,196,192, + 207,192,232,193, 96,193,108,193,192,225,242,237,229,238,233,225, + 110,128, 5,105,232,233,242,225,231,225,238, 97,128, 48,104,235, + 225,244,225,235,225,238, 97,129, 48,200,192,220,232,225,236,230, + 247,233,228,244,104,128,255,132,110, 3,192,240,193, 82,193, 87, + 101, 4,192,250,193, 63,193, 70,193, 76,226,225,114, 4,193, 6, + 193, 35,193, 45,193, 54,229,248,244,242, 97, 2,193, 16,193, 26, + 232,233,231,232,237,239,100,128, 2,229,236,239,247,237,239,100, + 128, 2,233,232,233,231,232,237,239,100,128, 2,230,236,239,247, + 237,239,100,128, 2,232,237,233,228,237,239,100,128, 2,231,230, + 233,246,101,128, 1,189,243,233,120,128, 1,133,244,247,111,128, + 1,168,239,115,128, 3,132,243,241,245,225,242,101,128, 51, 39, + 240,225,244,225,235,244,232,225,105,128, 14, 15,242,244,239,233, + 243,229,243,232,229,236,236,226,242,225,227,235,229,116, 2,193, + 131,193,161,236,229,230,116,130, 48, 20,193,142,193,150,243,237, + 225,236,108,128,254, 93,246,229,242,244,233,227,225,108,128,254, + 57,242,233,231,232,116,130, 48, 21,193,173,193,181,243,237,225, + 236,108,128,254, 94,246,229,242,244,233,227,225,108,128,254, 58, + 244,225,239,244,232,225,105,128, 14, 21,240, 97, 2,193,209,193, + 221,236,225,244,225,236,232,239,239,107,128, 1,171,242,229,110, + 128, 36,175,114, 3,193,235,194, 10,194, 25,225,228,229,237,225, + 242,107,129, 33, 34,193,247,115, 2,193,253,194, 3,225,238,115, + 128,248,234,229,242,233,102,128,246,219,229,244,242,239,230,236, + 229,248,232,239,239,107,128, 2,136,233,225,103, 4,194, 37,194, + 42,194, 47,194, 52,228,110,128, 37,188,236,102,128, 37,196,242, + 116,128, 37,186,245,112,128, 37,178,115,132, 2,166,194, 69,194, + 108,194,214,194,227,225,228,105,130, 5,230,194, 79,194, 99,228, + 225,231,229,243,104,129,251, 70,194, 90,232,229,226,242,229,119, + 128,251, 70,232,229,226,242,229,119,128, 5,230,101, 2,194,114, + 194,125,227,249,242,233,236,236,233, 99,128, 4, 70,242,101,134, + 5,181,194,142,194,156,194,161,194,170,194,185,194,201, 49, 2, + 194,148,194,152, 50,128, 5,181,101,128, 5,181,178, 98,128, 5, + 181,232,229,226,242,229,119,128, 5,181,238,225,242,242,239,247, + 232,229,226,242,229,119,128, 5,181,241,245,225,242,244,229,242, + 232,229,226,242,229,119,128, 5,181,247,233,228,229,232,229,226, + 242,229,119,128, 5,181,232,229,227,249,242,233,236,236,233, 99, + 128, 4, 91,245,240,229,242,233,239,114,128,246,243,116, 4,194, + 247,195, 41,195,106,195,157, 97, 3,194,255,195, 9,195, 16,226, + 229,238,231,225,236,105,128, 9,159,228,229,246, 97,128, 9, 31, + 231,117, 2,195, 23,195, 32,234,225,242,225,244,105,128, 10,159, + 242,237,245,235,232,105,128, 10, 31,229,104, 4,195, 52,195, 61, + 195, 75,195, 91,225,242,225,226,233, 99,128, 6,121,230,233,238, + 225,236,225,242,225,226,233, 99,128,251,103,233,238,233,244,233, + 225,236,225,242,225,226,233, 99,128,251,104,237,229,228,233,225, + 236,225,242,225,226,233, 99,128,251,105,232, 97, 3,195,115,195, + 125,195,132,226,229,238,231,225,236,105,128, 9,160,228,229,246, + 97,128, 9, 32,231,117, 2,195,139,195,148,234,225,242,225,244, + 105,128, 10,160,242,237,245,235,232,105,128, 10, 32,245,242,238, + 229,100,128, 2,135,117, 3,195,173,195,184,195,209,232,233,242, + 225,231,225,238, 97,128, 48,100,235,225,244,225,235,225,238, 97, + 129, 48,196,195,197,232,225,236,230,247,233,228,244,104,128,255, + 130,243,237,225,236,108, 2,195,219,195,230,232,233,242,225,231, + 225,238, 97,128, 48, 99,235,225,244,225,235,225,238, 97,129, 48, + 195,195,243,232,225,236,230,247,233,228,244,104,128,255,111,119, + 2,196, 5,196,110,101, 2,196, 11,196, 59,236,246,101, 3,196, + 21,196, 30,196, 51,227,233,242,227,236,101,128, 36,107,112, 2, + 196, 36,196, 43,225,242,229,110,128, 36,127,229,242,233,239,100, + 128, 36,147,242,239,237,225,110,128, 33,123,238,244,121, 3,196, + 69,196, 78,196, 89,227,233,242,227,236,101,128, 36,115,232,225, + 238,231,250,232,239,117,128, 83, 68,112, 2,196, 95,196,102,225, + 242,229,110,128, 36,135,229,242,233,239,100,128, 36,155,111,142, + 0, 50,196,142,196,151,196,161,196,191,196,243,197, 12,197, 39, + 197, 73,197, 85,197,104,197,115,197,148,197,156,197,180,225,242, + 225,226,233, 99,128, 6, 98,226,229,238,231,225,236,105,128, 9, + 232,227,233,242,227,236,101,129, 36, 97,196,172,233,238,246,229, + 242,243,229,243,225,238,243,243,229,242,233,102,128, 39,139,100, + 2,196,197,196,203,229,246, 97,128, 9,104,239,116, 2,196,210, + 196,221,229,238,236,229,225,228,229,114,128, 32, 37,236,229,225, + 228,229,114,129, 32, 37,196,232,246,229,242,244,233,227,225,108, + 128,254, 48,231,117, 2,196,250,197, 3,234,225,242,225,244,105, + 128, 10,232,242,237,245,235,232,105,128, 10,104,232, 97, 2,197, + 19,197, 30,227,235,225,242,225,226,233, 99,128, 6, 98,238,231, + 250,232,239,117,128, 48, 34,105, 2,197, 45,197, 63,228,229,239, + 231,242,225,240,232,233,227,240,225,242,229,110,128, 50, 33,238, + 230,229,242,233,239,114,128, 32,130,237,239,238,239,243,240,225, + 227,101,128,255, 18,238,245,237,229,242,225,244,239,242,226,229, + 238,231,225,236,105,128, 9,245,239,236,228,243,244,249,236,101, + 128,247, 50,112, 2,197,121,197,128,225,242,229,110,128, 36,117, + 229,114, 2,197,135,197,141,233,239,100,128, 36,137,243,233,225, + 110,128, 6,242,242,239,237,225,110,128, 33,113,115, 2,197,162, + 197,170,244,242,239,235,101,128, 1,187,245,240,229,242,233,239, + 114,128, 0,178,244,104, 2,197,187,197,192,225,105,128, 14, 82, + 233,242,228,115,128, 33, 84,117,145, 0,117,197,237,197,245,198, + 30,198, 87,198,225,199, 6,199,129,199,145,199,196,200, 10,200, + 91,200,100,200,219,200,243,201, 95,201,123,201,237,225,227,245, + 244,101,128, 0,250, 98, 4,197,255,198, 4,198, 13,198, 23,225, + 114,128, 2,137,229,238,231,225,236,105,128, 9,137,239,240,239, + 237,239,230,111,128, 49, 40,242,229,246,101,128, 1,109, 99, 3, + 198, 38,198, 45,198, 77,225,242,239,110,128, 1,212,233,242, 99, + 2,198, 53,198, 58,236,101,128, 36,228,245,237,230,236,229,120, + 129, 0,251,198, 69,226,229,236,239,119,128, 30,119,249,242,233, + 236,236,233, 99,128, 4, 67,100, 5,198, 99,198,110,198,133,198, + 139,198,215,225,244,244,225,228,229,246, 97,128, 9, 81,226,108, + 2,198,117,198,125,225,227,245,244,101,128, 1,113,231,242,225, + 246,101,128, 2, 21,229,246, 97,128, 9, 9,233,229,242,229,243, + 233,115,133, 0,252,198,159,198,167,198,175,198,198,198,206,225, + 227,245,244,101,128, 1,216,226,229,236,239,119,128, 30,115, 99, + 2,198,181,198,188,225,242,239,110,128, 1,218,249,242,233,236, + 236,233, 99,128, 4,241,231,242,225,246,101,128, 1,220,237,225, + 227,242,239,110,128, 1,214,239,244,226,229,236,239,119,128, 30, + 229,103, 2,198,231,198,238,242,225,246,101,128, 0,249,117, 2, + 198,244,198,253,234,225,242,225,244,105,128, 10,137,242,237,245, + 235,232,105,128, 10, 9,104, 3,199, 14,199, 24,199,102,233,242, + 225,231,225,238, 97,128, 48, 70,111, 2,199, 30,199, 40,239,235, + 225,226,239,246,101,128, 30,231,242,110,133, 1,176,199, 55,199, + 63,199, 74,199, 82,199, 94,225,227,245,244,101,128, 30,233,228, + 239,244,226,229,236,239,119,128, 30,241,231,242,225,246,101,128, + 30,235,232,239,239,235,225,226,239,246,101,128, 30,237,244,233, + 236,228,101,128, 30,239,245,238,231,225,242,245,237,236,225,245, + 116,129, 1,113,199,118,227,249,242,233,236,236,233, 99,128, 4, + 243,233,238,246,229,242,244,229,228,226,242,229,246,101,128, 2, + 23,107, 3,199,153,199,177,199,188,225,244,225,235,225,238, 97, + 129, 48,166,199,165,232,225,236,230,247,233,228,244,104,128,255, + 115,227,249,242,233,236,236,233, 99,128, 4,121,239,242,229,225, + 110,128, 49, 92,109, 2,199,202,199,255, 97, 2,199,208,199,241, + 227,242,239,110,130, 1,107,199,219,199,230,227,249,242,233,236, + 236,233, 99,128, 4,239,228,233,229,242,229,243,233,115,128, 30, + 123,244,242,225,231,245,242,237,245,235,232,105,128, 10, 65,239, + 238,239,243,240,225,227,101,128,255, 85,110, 2,200, 16,200, 71, + 228,229,242,243,227,239,242,101,132, 0, 95,200, 35,200, 41,200, + 53,200, 64,228,226,108,128, 32, 23,237,239,238,239,243,240,225, + 227,101,128,255, 63,246,229,242,244,233,227,225,108,128,254, 51, + 247,225,246,121,128,254, 79,105, 2,200, 77,200, 82,239,110,128, + 34, 42,246,229,242,243,225,108,128, 34, 0,239,231,239,238,229, + 107,128, 1,115,112, 5,200,112,200,119,200,127,200,142,200,193, + 225,242,229,110,128, 36,176,226,236,239,227,107,128, 37,128,240, + 229,242,228,239,244,232,229,226,242,229,119,128, 5,196,243,233, + 236,239,110,131, 3,197,200,156,200,177,200,185,228,233,229,242, + 229,243,233,115,129, 3,203,200,169,244,239,238,239,115,128, 3, + 176,236,225,244,233,110,128, 2,138,244,239,238,239,115,128, 3, + 205,244,225,227,107, 2,200,202,200,213,226,229,236,239,247,227, + 237, 98,128, 3, 29,237,239,100,128, 2,212,114, 2,200,225,200, + 237,225,231,245,242,237,245,235,232,105,128, 10,115,233,238,103, + 128, 1,111,115, 3,200,251,201, 10,201, 55,232,239,242,244,227, + 249,242,233,236,236,233, 99,128, 4, 94,237,225,236,108, 2,201, + 19,201, 30,232,233,242,225,231,225,238, 97,128, 48, 69,235,225, + 244,225,235,225,238, 97,129, 48,165,201, 43,232,225,236,230,247, + 233,228,244,104,128,255,105,244,242,225,233,231,232,116, 2,201, + 67,201, 78,227,249,242,233,236,236,233, 99,128, 4,175,243,244, + 242,239,235,229,227,249,242,233,236,236,233, 99,128, 4,177,244, + 233,236,228,101,130, 1,105,201,107,201,115,225,227,245,244,101, + 128, 30,121,226,229,236,239,119,128, 30,117,117, 5,201,135,201, + 145,201,152,201,177,201,193,226,229,238,231,225,236,105,128, 9, + 138,228,229,246, 97,128, 9, 10,231,117, 2,201,159,201,168,234, + 225,242,225,244,105,128, 10,138,242,237,245,235,232,105,128, 10, + 10,237,225,244,242,225,231,245,242,237,245,235,232,105,128, 10, + 66,246,239,247,229,236,243,233,231,110, 3,201,209,201,219,201, + 226,226,229,238,231,225,236,105,128, 9,194,228,229,246, 97,128, + 9, 66,231,245,234,225,242,225,244,105,128, 10,194,246,239,247, + 229,236,243,233,231,110, 3,201,253,202, 7,202, 14,226,229,238, + 231,225,236,105,128, 9,193,228,229,246, 97,128, 9, 65,231,245, + 234,225,242,225,244,105,128, 10,193,118,139, 0,118,202, 51,202, + 199,202,208,202,219,203,148,203,155,203,253,204, 9,204,109,204, + 117,204,138, 97, 4,202, 61,202, 68,202, 93,202,104,228,229,246, + 97,128, 9, 53,231,117, 2,202, 75,202, 84,234,225,242,225,244, + 105,128, 10,181,242,237,245,235,232,105,128, 10, 53,235,225,244, + 225,235,225,238, 97,128, 48,247,118,132, 5,213,202,116,202,143, + 202,175,202,187,228,225,231,229,243,104,130,251, 53,202,129,202, + 134,182, 53,128,251, 53,232,229,226,242,229,119,128,251, 53,104, + 2,202,149,202,157,229,226,242,229,119,128, 5,213,239,236,225, + 109,129,251, 75,202,166,232,229,226,242,229,119,128,251, 75,246, + 225,246,232,229,226,242,229,119,128, 5,240,249,239,228,232,229, + 226,242,229,119,128, 5,241,227,233,242,227,236,101,128, 36,229, + 228,239,244,226,229,236,239,119,128, 30,127,101, 6,202,233,202, + 244,203, 52,203, 63,203, 69,203,136,227,249,242,233,236,236,233, + 99,128, 4, 50,104, 4,202,254,203, 7,203, 21,203, 37,225,242, + 225,226,233, 99,128, 6,164,230,233,238,225,236,225,242,225,226, + 233, 99,128,251,107,233,238,233,244,233,225,236,225,242,225,226, + 233, 99,128,251,108,237,229,228,233,225,236,225,242,225,226,233, + 99,128,251,109,235,225,244,225,235,225,238, 97,128, 48,249,238, + 245,115,128, 38, 64,242,244,233,227,225,108, 2,203, 80,203, 86, + 226,225,114,128, 0,124,236,233,238,101, 4,203, 99,203,110,203, + 121,203,130,225,226,239,246,229,227,237, 98,128, 3, 13,226,229, + 236,239,247,227,237, 98,128, 3, 41,236,239,247,237,239,100,128, + 2,204,237,239,100,128, 2,200,247,225,242,237,229,238,233,225, + 110,128, 5,126,232,239,239,107,128, 2,139,105, 3,203,163,203, + 174,203,213,235,225,244,225,235,225,238, 97,128, 48,248,242,225, + 237, 97, 3,203,185,203,195,203,202,226,229,238,231,225,236,105, + 128, 9,205,228,229,246, 97,128, 9, 77,231,245,234,225,242,225, + 244,105,128, 10,205,243,225,242,231, 97, 3,203,225,203,235,203, + 242,226,229,238,231,225,236,105,128, 9,131,228,229,246, 97,128, + 9, 3,231,245,234,225,242,225,244,105,128, 10,131,237,239,238, + 239,243,240,225,227,101,128,255, 86,111, 3,204, 17,204, 28,204, + 98,225,242,237,229,238,233,225,110,128, 5,120,233,227,229,100, + 2,204, 37,204, 73,233,244,229,242,225,244,233,239,110, 2,204, + 51,204, 62,232,233,242,225,231,225,238, 97,128, 48,158,235,225, + 244,225,235,225,238, 97,128, 48,254,237,225,242,235,235,225,238, + 97,129, 48,155,204, 86,232,225,236,230,247,233,228,244,104,128, + 255,158,235,225,244,225,235,225,238, 97,128, 48,250,240,225,242, + 229,110,128, 36,177,116, 2,204,123,204,130,233,236,228,101,128, + 30,125,245,242,238,229,100,128, 2,140,117, 2,204,144,204,155, + 232,233,242,225,231,225,238, 97,128, 48,148,235,225,244,225,235, + 225,238, 97,128, 48,244,119,143, 0,119,204,200,205,177,205,187, + 205,210,205,250,206, 61,206, 69,208, 40,208, 81,208, 93,208,168, + 208,176,208,183,208,194,208,203, 97, 8,204,218,204,225,204,235, + 204,246,205, 28,205, 60,205, 72,205,108,227,245,244,101,128, 30, + 131,229,235,239,242,229,225,110,128, 49, 89,232,233,242,225,231, + 225,238, 97,128, 48,143,107, 2,204,252,205, 20,225,244,225,235, + 225,238, 97,129, 48,239,205, 8,232,225,236,230,247,233,228,244, + 104,128,255,156,239,242,229,225,110,128, 49, 88,243,237,225,236, + 108, 2,205, 38,205, 49,232,233,242,225,231,225,238, 97,128, 48, + 142,235,225,244,225,235,225,238, 97,128, 48,238,244,244,239,243, + 241,245,225,242,101,128, 51, 87,118, 2,205, 78,205, 86,229,228, + 225,243,104,128, 48, 28,249,245,238,228,229,242,243,227,239,242, + 229,246,229,242,244,233,227,225,108,128,254, 52,119, 3,205,116, + 205,125,205,139,225,242,225,226,233, 99,128, 6, 72,230,233,238, + 225,236,225,242,225,226,233, 99,128,254,238,232,225,237,250,225, + 225,226,239,246,101, 2,205,154,205,163,225,242,225,226,233, 99, + 128, 6, 36,230,233,238,225,236,225,242,225,226,233, 99,128,254, + 134,226,243,241,245,225,242,101,128, 51,221,227,233,242, 99, 2, + 205,196,205,201,236,101,128, 36,230,245,237,230,236,229,120,128, + 1,117,100, 2,205,216,205,226,233,229,242,229,243,233,115,128, + 30,133,239,116, 2,205,233,205,242,225,227,227,229,238,116,128, + 30,135,226,229,236,239,119,128, 30,137,101, 4,206, 4,206, 15, + 206, 27,206, 51,232,233,242,225,231,225,238, 97,128, 48,145,233, + 229,242,243,244,242,225,243,115,128, 33, 24,107, 2,206, 33,206, + 43,225,244,225,235,225,238, 97,128, 48,241,239,242,229,225,110, + 128, 49, 94,239,235,239,242,229,225,110,128, 49, 93,231,242,225, + 246,101,128, 30,129,232,233,244,101, 8,206, 90,206, 99,206,183, + 207, 17,207,101,207,146,207,198,207,254,226,245,236,236,229,116, + 128, 37,230, 99, 2,206,105,206,125,233,242,227,236,101,129, 37, + 203,206,115,233,238,246,229,242,243,101,128, 37,217,239,242,238, + 229,242,226,242,225,227,235,229,116, 2,206,142,206,162,236,229, + 230,116,129, 48, 14,206,151,246,229,242,244,233,227,225,108,128, + 254, 67,242,233,231,232,116,129, 48, 15,206,172,246,229,242,244, + 233,227,225,108,128,254, 68,100, 2,206,189,206,230,233,225,237, + 239,238,100,129, 37,199,206,200,227,239,238,244,225,233,238,233, + 238,231,226,236,225,227,235,243,237,225,236,236,228,233,225,237, + 239,238,100,128, 37,200,239,247,238,240,239,233,238,244,233,238, + 103, 2,206,246,207, 6,243,237,225,236,236,244,242,233,225,238, + 231,236,101,128, 37,191,244,242,233,225,238,231,236,101,128, 37, + 189,236,101, 2,207, 24,207, 66,230,244,240,239,233,238,244,233, + 238,103, 2,207, 39,207, 55,243,237,225,236,236,244,242,233,225, + 238,231,236,101,128, 37,195,244,242,233,225,238,231,236,101,128, + 37,193,238,244,233,227,245,236,225,242,226,242,225,227,235,229, + 116, 2,207, 86,207, 93,236,229,230,116,128, 48, 22,242,233,231, + 232,116,128, 48, 23,242,233,231,232,244,240,239,233,238,244,233, + 238,103, 2,207,119,207,135,243,237,225,236,236,244,242,233,225, + 238,231,236,101,128, 37,185,244,242,233,225,238,231,236,101,128, + 37,183,115, 3,207,154,207,184,207,192,109, 2,207,160,207,172, + 225,236,236,243,241,245,225,242,101,128, 37,171,233,236,233,238, + 231,230,225,227,101,128, 38, 58,241,245,225,242,101,128, 37,161, + 244,225,114,128, 38, 6,116, 2,207,204,207,215,229,236,229,240, + 232,239,238,101,128, 38, 15,239,242,244,239,233,243,229,243,232, + 229,236,236,226,242,225,227,235,229,116, 2,207,239,207,246,236, + 229,230,116,128, 48, 24,242,233,231,232,116,128, 48, 25,245,240, + 240,239,233,238,244,233,238,103, 2,208, 13,208, 29,243,237,225, + 236,236,244,242,233,225,238,231,236,101,128, 37,181,244,242,233, + 225,238,231,236,101,128, 37,179,105, 2,208, 46,208, 57,232,233, + 242,225,231,225,238, 97,128, 48,144,107, 2,208, 63,208, 73,225, + 244,225,235,225,238, 97,128, 48,240,239,242,229,225,110,128, 49, + 95,237,239,238,239,243,240,225,227,101,128,255, 87,111, 4,208, + 103,208,114,208,139,208,157,232,233,242,225,231,225,238, 97,128, + 48,146,235,225,244,225,235,225,238, 97,129, 48,242,208,127,232, + 225,236,230,247,233,228,244,104,128,255,102,110,129, 32,169,208, + 145,237,239,238,239,243,240,225,227,101,128,255,230,247,225,229, + 238,244,232,225,105,128, 14, 39,240,225,242,229,110,128, 36,178, + 242,233,238,103,128, 30,152,243,245,240,229,242,233,239,114,128, + 2,183,244,245,242,238,229,100,128, 2,141,249,238,110,128, 1, + 191,120,137, 0,120,208,231,208,242,208,253,209, 6,209, 33,209, + 46,209, 50,209, 62,209, 70,225,226,239,246,229,227,237, 98,128, + 3, 61,226,239,240,239,237,239,230,111,128, 49, 18,227,233,242, + 227,236,101,128, 36,231,100, 2,209, 12,209, 22,233,229,242,229, + 243,233,115,128, 30,141,239,244,225,227,227,229,238,116,128, 30, + 139,229,232,225,242,237,229,238,233,225,110,128, 5,109,105,128, + 3,190,237,239,238,239,243,240,225,227,101,128,255, 88,240,225, + 242,229,110,128, 36,179,243,245,240,229,242,233,239,114,128, 2, + 227,121,143, 0,121,209,115,210, 74,210, 97,210,137,212,103,212, + 111,212,128,212,192,212,204,213,201,213,241,213,253,214, 8,214, + 29,215, 2, 97, 11,209,139,209,151,209,161,209,168,209,175,209, + 185,209,210,209,221,210, 3,210, 16,210, 62,225,228,239,243,241, + 245,225,242,101,128, 51, 78,226,229,238,231,225,236,105,128, 9, + 175,227,245,244,101,128, 0,253,228,229,246, 97,128, 9, 47,229, + 235,239,242,229,225,110,128, 49, 82,231,117, 2,209,192,209,201, + 234,225,242,225,244,105,128, 10,175,242,237,245,235,232,105,128, + 10, 47,232,233,242,225,231,225,238, 97,128, 48,132,107, 2,209, + 227,209,251,225,244,225,235,225,238, 97,129, 48,228,209,239,232, + 225,236,230,247,233,228,244,104,128,255,148,239,242,229,225,110, + 128, 49, 81,237,225,235,235,225,238,244,232,225,105,128, 14, 78, + 243,237,225,236,108, 2,210, 26,210, 37,232,233,242,225,231,225, + 238, 97,128, 48,131,235,225,244,225,235,225,238, 97,129, 48,227, + 210, 50,232,225,236,230,247,233,228,244,104,128,255,108,244,227, + 249,242,233,236,236,233, 99,128, 4, 99,227,233,242, 99, 2,210, + 83,210, 88,236,101,128, 36,232,245,237,230,236,229,120,128, 1, + 119,100, 2,210,103,210,113,233,229,242,229,243,233,115,128, 0, + 255,239,116, 2,210,120,210,129,225,227,227,229,238,116,128, 30, + 143,226,229,236,239,119,128, 30,245,101, 7,210,153,211,161,211, + 170,211,188,211,220,212, 40,212, 91,104, 8,210,171,210,180,210, + 214,210,228,211, 45,211, 61,211,120,211,138,225,242,225,226,233, + 99,128, 6, 74,226,225,242,242,229,101, 2,210,191,210,200,225, + 242,225,226,233, 99,128, 6,210,230,233,238,225,236,225,242,225, + 226,233, 99,128,251,175,230,233,238,225,236,225,242,225,226,233, + 99,128,254,242,232,225,237,250,225,225,226,239,246,101, 4,210, + 247,211, 0,211, 14,211, 30,225,242,225,226,233, 99,128, 6, 38, + 230,233,238,225,236,225,242,225,226,233, 99,128,254,138,233,238, + 233,244,233,225,236,225,242,225,226,233, 99,128,254,139,237,229, + 228,233,225,236,225,242,225,226,233, 99,128,254,140,233,238,233, + 244,233,225,236,225,242,225,226,233, 99,128,254,243,237,101, 2, + 211, 68,211, 81,228,233,225,236,225,242,225,226,233, 99,128,254, + 244,229,237,105, 2,211, 89,211,104,238,233,244,233,225,236,225, + 242,225,226,233, 99,128,252,221,243,239,236,225,244,229,228,225, + 242,225,226,233, 99,128,252, 88,238,239,239,238,230,233,238,225, + 236,225,242,225,226,233, 99,128,252,148,244,232,242,229,229,228, + 239,244,243,226,229,236,239,247,225,242,225,226,233, 99,128, 6, + 209,235,239,242,229,225,110,128, 49, 86,110,129, 0,165,211,176, + 237,239,238,239,243,240,225,227,101,128,255,229,111, 2,211,194, + 211,203,235,239,242,229,225,110,128, 49, 85,242,233,238,232,233, + 229,245,232,235,239,242,229,225,110,128, 49,134,114, 3,211,228, + 212, 8,212, 20,225,232,226,229,238,249,239,237,111, 2,211,242, + 211,251,232,229,226,242,229,119,128, 5,170,236,229,230,244,232, + 229,226,242,229,119,128, 5,170,233,227,249,242,233,236,236,233, + 99,128, 4, 75,245,228,233,229,242,229,243,233,243,227,249,242, + 233,236,236,233, 99,128, 4,249,243,233,229,245,238,103, 3,212, + 53,212, 62,212, 78,235,239,242,229,225,110,128, 49,129,240,225, + 238,243,233,239,243,235,239,242,229,225,110,128, 49,131,243,233, + 239,243,235,239,242,229,225,110,128, 49,130,244,233,246,232,229, + 226,242,229,119,128, 5,154,231,242,225,246,101,128, 30,243,232, + 239,239,107,129, 1,180,212,120,225,226,239,246,101,128, 30,247, + 105, 5,212,140,212,151,212,162,212,171,212,179,225,242,237,229, + 238,233,225,110,128, 5,117,227,249,242,233,236,236,233, 99,128, + 4, 87,235,239,242,229,225,110,128, 49, 98,238,249,225,238,103, + 128, 38, 47,247,238,225,242,237,229,238,233,225,110,128, 5,130, + 237,239,238,239,243,240,225,227,101,128,255, 89,111, 7,212,220, + 213, 34,213, 45,213, 55,213, 93,213,139,213,148,100,131, 5,217, + 212,230,212,250,213, 3,228,225,231,229,243,104,129,251, 57,212, + 241,232,229,226,242,229,119,128,251, 57,232,229,226,242,229,119, + 128, 5,217,249,239,100, 2,213, 11,213, 20,232,229,226,242,229, + 119,128, 5,242,240,225,244,225,232,232,229,226,242,229,119,128, + 251, 31,232,233,242,225,231,225,238, 97,128, 48,136,233,235,239, + 242,229,225,110,128, 49,137,107, 2,213, 61,213, 85,225,244,225, + 235,225,238, 97,129, 48,232,213, 73,232,225,236,230,247,233,228, + 244,104,128,255,150,239,242,229,225,110,128, 49, 91,243,237,225, + 236,108, 2,213,103,213,114,232,233,242,225,231,225,238, 97,128, + 48,135,235,225,244,225,235,225,238, 97,129, 48,231,213,127,232, + 225,236,230,247,233,228,244,104,128,255,110,244,231,242,229,229, + 107,128, 3,243,121, 2,213,154,213,191, 97, 2,213,160,213,170, + 229,235,239,242,229,225,110,128, 49,136,107, 2,213,176,213,184, + 239,242,229,225,110,128, 49,135,244,232,225,105,128, 14, 34,233, + 238,231,244,232,225,105,128, 14, 13,112, 2,213,207,213,214,225, + 242,229,110,128, 36,180,239,231,229,231,242,225,237,237,229,238, + 105,129, 3,122,213,230,231,242,229,229,235,227,237, 98,128, 3, + 69,114,129, 1,166,213,247,233,238,103,128, 30,153,243,245,240, + 229,242,233,239,114,128, 2,184,116, 2,214, 14,214, 21,233,236, + 228,101,128, 30,249,245,242,238,229,100,128, 2,142,117, 5,214, + 41,214, 52,214, 62,214,100,214,232,232,233,242,225,231,225,238, + 97,128, 48,134,233,235,239,242,229,225,110,128, 49,140,107, 2, + 214, 68,214, 92,225,244,225,235,225,238, 97,129, 48,230,214, 80, + 232,225,236,230,247,233,228,244,104,128,255,149,239,242,229,225, + 110,128, 49, 96,115, 3,214,108,214,146,214,187,226,233,103, 2, + 214,116,214,127,227,249,242,233,236,236,233, 99,128, 4,107,233, + 239,244,233,230,233,229,228,227,249,242,233,236,236,233, 99,128, + 4,109,236,233,244,244,236,101, 2,214,157,214,168,227,249,242, + 233,236,236,233, 99,128, 4,103,233,239,244,233,230,233,229,228, + 227,249,242,233,236,236,233, 99,128, 4,105,237,225,236,108, 2, + 214,196,214,207,232,233,242,225,231,225,238, 97,128, 48,133,235, + 225,244,225,235,225,238, 97,129, 48,229,214,220,232,225,236,230, + 247,233,228,244,104,128,255,109,249,101, 2,214,239,214,248,235, + 239,242,229,225,110,128, 49,139,239,235,239,242,229,225,110,128, + 49,138,249, 97, 2,215, 9,215, 19,226,229,238,231,225,236,105, + 128, 9,223,228,229,246, 97,128, 9, 95,122,142, 0,122,215, 58, + 216, 66,216, 77,216,120,216,147,217,182,218, 34,218, 76,218, 88, + 218,100,218,128,218,136,218,152,218,161, 97, 10,215, 80,215, 91, + 215, 98,215,105,215,116,215,194,215,224,215,235,216, 15,216, 27, + 225,242,237,229,238,233,225,110,128, 5,102,227,245,244,101,128, + 1,122,228,229,246, 97,128, 9, 91,231,245,242,237,245,235,232, + 105,128, 10, 91,104, 4,215,126,215,135,215,149,215,179,225,242, + 225,226,233, 99,128, 6, 56,230,233,238,225,236,225,242,225,226, + 233, 99,128,254,198,105, 2,215,155,215,170,238,233,244,233,225, + 236,225,242,225,226,233, 99,128,254,199,242,225,231,225,238, 97, + 128, 48, 86,237,229,228,233,225,236,225,242,225,226,233, 99,128, + 254,200,233,110, 2,215,201,215,210,225,242,225,226,233, 99,128, + 6, 50,230,233,238,225,236,225,242,225,226,233, 99,128,254,176, + 235,225,244,225,235,225,238, 97,128, 48,182,241,229,102, 2,215, + 243,216, 1,231,225,228,239,236,232,229,226,242,229,119,128, 5, + 149,241,225,244,225,238,232,229,226,242,229,119,128, 5,148,242, + 241,225,232,229,226,242,229,119,128, 5,152,249,233,110,130, 5, + 214,216, 37,216, 57,228,225,231,229,243,104,129,251, 54,216, 48, + 232,229,226,242,229,119,128,251, 54,232,229,226,242,229,119,128, + 5,214,226,239,240,239,237,239,230,111,128, 49, 23, 99, 3,216, + 85,216, 92,216,114,225,242,239,110,128, 1,126,233,242, 99, 2, + 216,100,216,105,236,101,128, 36,233,245,237,230,236,229,120,128, + 30,145,245,242,108,128, 2,145,228,239,116,130, 1,124,216,130, + 216,139,225,227,227,229,238,116,128, 1,124,226,229,236,239,119, + 128, 30,147,101, 6,216,161,216,172,216,215,216,226,216,237,217, + 177,227,249,242,233,236,236,233, 99,128, 4, 55,100, 2,216,178, + 216,197,229,243,227,229,238,228,229,242,227,249,242,233,236,236, + 233, 99,128, 4,153,233,229,242,229,243,233,243,227,249,242,233, + 236,236,233, 99,128, 4,223,232,233,242,225,231,225,238, 97,128, + 48, 92,235,225,244,225,235,225,238, 97,128, 48,188,242,111,140, + 0, 48,217, 10,217, 19,217, 29,217, 36,217, 61,217, 74,217, 85, + 217, 97,217,108,217,118,217,129,217,136,225,242,225,226,233, 99, + 128, 6, 96,226,229,238,231,225,236,105,128, 9,230,228,229,246, + 97,128, 9,102,231,117, 2,217, 43,217, 52,234,225,242,225,244, + 105,128, 10,230,242,237,245,235,232,105,128, 10,102,232,225,227, + 235,225,242,225,226,233, 99,128, 6, 96,233,238,230,229,242,233, + 239,114,128, 32,128,237,239,238,239,243,240,225,227,101,128,255, + 16,239,236,228,243,244,249,236,101,128,247, 48,240,229,242,243, + 233,225,110,128, 6,240,243,245,240,229,242,233,239,114,128, 32, + 112,244,232,225,105,128, 14, 80,247,233,228,244,104, 3,217,148, + 217,157,217,169,234,239,233,238,229,114,128,254,255,238,239,238, + 234,239,233,238,229,114,128, 32, 12,243,240,225,227,101,128, 32, + 11,244, 97,128, 3,182,104, 2,217,188,217,199,226,239,240,239, + 237,239,230,111,128, 49, 19,101, 4,217,209,217,220,217,236,217, + 247,225,242,237,229,238,233,225,110,128, 5,106,226,242,229,246, + 229,227,249,242,233,236,236,233, 99,128, 4,194,227,249,242,233, + 236,236,233, 99,128, 4, 54,100, 2,217,253,218, 16,229,243,227, + 229,238,228,229,242,227,249,242,233,236,236,233, 99,128, 4,151, + 233,229,242,229,243,233,243,227,249,242,233,236,236,233, 99,128, + 4,221,105, 3,218, 42,218, 53,218, 64,232,233,242,225,231,225, + 238, 97,128, 48, 88,235,225,244,225,235,225,238, 97,128, 48,184, + 238,239,242,232,229,226,242,229,119,128, 5,174,236,233,238,229, + 226,229,236,239,119,128, 30,149,237,239,238,239,243,240,225,227, + 101,128,255, 90,111, 2,218,106,218,117,232,233,242,225,231,225, + 238, 97,128, 48, 94,235,225,244,225,235,225,238, 97,128, 48,190, + 240,225,242,229,110,128, 36,181,242,229,244,242,239,230,236,229, + 248,232,239,239,107,128, 2,144,243,244,242,239,235,101,128, 1, + 182,117, 2,218,167,218,178,232,233,242,225,231,225,238, 97,128, + 48, 90,235,225,244,225,235,225,238, 97,128, 48,186 + } +#endif /* DEFINE_PS_TABLES_DATA */ + ; + + +#ifdef DEFINE_PS_TABLES + /* + * This function searches the compressed table efficiently. + */ + static unsigned long + ft_get_adobe_glyph_index( const char* name, + const char* limit ) + { + int c = 0; + int count, min, max; + const unsigned char* p = ft_adobe_glyph_list; + + + if ( name == 0 || name >= limit ) + goto NotFound; + + c = *name++; + count = p[1]; + p += 2; + + min = 0; + max = count; + + while ( min < max ) + { + int mid = ( min + max ) >> 1; + const unsigned char* q = p + mid * 2; + int c2; + + + q = ft_adobe_glyph_list + ( ( (int)q[0] << 8 ) | q[1] ); + + c2 = q[0] & 127; + if ( c2 == c ) + { + p = q; + goto Found; + } + if ( c2 < c ) + min = mid + 1; + else + max = mid; + } + goto NotFound; + + Found: + for (;;) + { + /* assert (*p & 127) == c */ + + if ( name >= limit ) + { + if ( (p[0] & 128) == 0 && + (p[1] & 128) != 0 ) + return (unsigned long)( ( (int)p[2] << 8 ) | p[3] ); + + goto NotFound; + } + c = *name++; + if ( p[0] & 128 ) + { + p++; + if ( c != (p[0] & 127) ) + goto NotFound; + + continue; + } + + p++; + count = p[0] & 127; + if ( p[0] & 128 ) + p += 2; + + p++; + + for ( ; count > 0; count--, p += 2 ) + { + int offset = ( (int)p[0] << 8 ) | p[1]; + const unsigned char* q = ft_adobe_glyph_list + offset; + + if ( c == ( q[0] & 127 ) ) + { + p = q; + goto NextIter; + } + } + goto NotFound; + + NextIter: + ; + } + + NotFound: + return 0; + } +#endif /* DEFINE_PS_TABLES */ + +#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/pngshim.c b/non-source/foreign/freetype2/src/sfnt/pngshim.c new file mode 100644 index 000000000..76181568a --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/pngshim.c @@ -0,0 +1,462 @@ +/**************************************************************************** + * + * pngshim.c + * + * PNG Bitmap glyph support. + * + * Copyright (C) 2013-2024 by + * Google, Inc. + * Written by Stuart Gill and Behdad Esfahbod. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include FT_CONFIG_STANDARD_LIBRARY_H + + +#if defined( TT_CONFIG_OPTION_EMBEDDED_BITMAPS ) && \ + defined( FT_CONFIG_OPTION_USE_PNG ) + + /* We always include <setjmp.h>, so make libpng shut up! */ +#define PNG_SKIP_SETJMP_CHECK 1 +#include <png.h> +#include "pngshim.h" + +#include "sferrors.h" + + + /* This code is freely based on cairo-png.c. There's so many ways */ + /* to call libpng, and the way cairo does it is defacto standard. */ + + static unsigned int + multiply_alpha( unsigned int alpha, + unsigned int color ) + { + unsigned int temp = alpha * color + 0x80; + + + return ( temp + ( temp >> 8 ) ) >> 8; + } + + + /* Premultiplies data and converts RGBA bytes => BGRA. */ + static void + premultiply_data( png_structp png, + png_row_infop row_info, + png_bytep data ) + { + unsigned int i = 0, limit; + + /* The `vector_size' attribute was introduced in gcc 3.1, which */ + /* 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. */ + /* */ + /* 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__ + /* the clang documentation doesn't cover the two-argument case of */ + /* `__builtin_shufflevector'; however, it is is implemented since */ + /* version 2.8 */ +#define vector_shuffle __builtin_shufflevector +#else +#define vector_shuffle __builtin_shuffle +#endif + + typedef unsigned short v82 __attribute__(( vector_size( 16 ) )); + + + if ( row_info->rowbytes > 15 ) + { + /* process blocks of 16 bytes in one rush, which gives a nice speed-up */ + limit = row_info->rowbytes - 16 + 1; + for ( ; i < limit; i += 16 ) + { + unsigned char* base = &data[i]; + + v82 s, s0, s1, a; + + /* clang <= 3.9 can't apply scalar values to vectors */ + /* (or rather, it needs a different syntax) */ + v82 n0x80 = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }; + v82 n0xFF = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + v82 n8 = { 8, 8, 8, 8, 8, 8, 8, 8 }; + + v82 ma = { 1, 1, 3, 3, 5, 5, 7, 7 }; + v82 o1 = { 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF }; + v82 m0 = { 1, 0, 3, 2, 5, 4, 7, 6 }; + + + ft_memcpy( &s, base, 16 ); /* RGBA RGBA RGBA RGBA */ + s0 = s & n0xFF; /* R B R B R B R B */ + s1 = s >> n8; /* G A G A G A G A */ + + a = vector_shuffle( s1, ma ); /* A A A A A A A A */ + s1 |= o1; /* G 1 G 1 G 1 G 1 */ + s0 = vector_shuffle( s0, m0 ); /* B R B R B R B R */ + + s0 *= a; + s1 *= a; + s0 += n0x80; + s1 += n0x80; + s0 = ( s0 + ( s0 >> n8 ) ) >> n8; + s1 = ( s1 + ( s1 >> n8 ) ) >> n8; + + s = s0 | ( s1 << n8 ); + ft_memcpy( base, &s, 16 ); + } + } +#endif /* use `vector_size' */ + + FT_UNUSED( png ); + + limit = row_info->rowbytes; + for ( ; i < limit; i += 4 ) + { + unsigned char* base = &data[i]; + unsigned int alpha = base[3]; + + + if ( alpha == 0 ) + base[0] = base[1] = base[2] = base[3] = 0; + + else + { + unsigned int red = base[0]; + unsigned int green = base[1]; + unsigned int blue = base[2]; + + + if ( alpha != 0xFF ) + { + red = multiply_alpha( alpha, red ); + green = multiply_alpha( alpha, green ); + blue = multiply_alpha( alpha, blue ); + } + + base[0] = (unsigned char)blue; + base[1] = (unsigned char)green; + base[2] = (unsigned char)red; + base[3] = (unsigned char)alpha; + } + } + } + + + /* Converts RGBx bytes to BGRA. */ + static void + convert_bytes_to_data( png_structp png, + png_row_infop row_info, + png_bytep data ) + { + unsigned int i; + + FT_UNUSED( png ); + + + for ( i = 0; i < row_info->rowbytes; i += 4 ) + { + unsigned char* base = &data[i]; + unsigned int red = base[0]; + unsigned int green = base[1]; + unsigned int blue = base[2]; + + + base[0] = (unsigned char)blue; + base[1] = (unsigned char)green; + base[2] = (unsigned char)red; + base[3] = 0xFF; + } + } + + + /* Use error callback to avoid png writing to stderr. */ + static void + error_callback( png_structp png, + png_const_charp error_msg ) + { + FT_Error* error = (FT_Error*)png_get_error_ptr( png ); + + FT_UNUSED( error_msg ); + + + *error = FT_THROW( Out_Of_Memory ); +#ifdef PNG_SETJMP_SUPPORTED + ft_longjmp( png_jmpbuf( png ), 1 ); +#endif + /* if we get here, then we have no choice but to abort ... */ + } + + + /* Use warning callback to avoid png writing to stderr. */ + static void + warning_callback( png_structp png, + png_const_charp error_msg ) + { + FT_UNUSED( png ); + FT_UNUSED( error_msg ); + + /* Just ignore warnings. */ + } + + + static void + read_data_from_FT_Stream( png_structp png, + png_bytep data, + png_size_t length ) + { + FT_Error error; + png_voidp p = png_get_io_ptr( png ); + FT_Stream stream = (FT_Stream)p; + + + if ( FT_FRAME_ENTER( length ) ) + { + FT_Error* e = (FT_Error*)png_get_error_ptr( png ); + + + *e = FT_THROW( Invalid_Stream_Read ); + png_error( png, NULL ); + + /* return; (never reached) */ + } + + ft_memcpy( data, stream->cursor, length ); + + FT_FRAME_EXIT(); + } + + + FT_LOCAL_DEF( FT_Error ) + Load_SBit_Png( FT_GlyphSlot slot, + FT_Int x_offset, + FT_Int y_offset, + FT_Int pix_bits, + TT_SBit_Metrics metrics, + FT_Memory memory, + FT_Byte* data, + FT_UInt png_len, + FT_Bool populate_map_and_metrics, + FT_Bool metrics_only ) + { + FT_Bitmap *map = &slot->bitmap; + FT_Error error = FT_Err_Ok; + FT_StreamRec stream; + + png_structp png; + png_infop info; + png_uint_32 imgWidth, imgHeight; + + int bitdepth, color_type, interlace; + FT_Int i; + + /* `rows` gets modified within a 'setjmp' scope; */ + /* we thus need the `volatile` keyword. */ + png_byte* *volatile rows = NULL; + + + if ( x_offset < 0 || + y_offset < 0 ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + if ( !populate_map_and_metrics && + ( (FT_UInt)x_offset + metrics->width > map->width || + (FT_UInt)y_offset + metrics->height > map->rows || + pix_bits != 32 || + map->pixel_mode != FT_PIXEL_MODE_BGRA ) ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + FT_Stream_OpenMemory( &stream, data, png_len ); + + png = png_create_read_struct( PNG_LIBPNG_VER_STRING, + &error, + error_callback, + warning_callback ); + if ( !png ) + { + error = FT_THROW( Out_Of_Memory ); + goto Exit; + } + + info = png_create_info_struct( png ); + if ( !info ) + { + error = FT_THROW( Out_Of_Memory ); + png_destroy_read_struct( &png, NULL, NULL ); + goto Exit; + } + + if ( ft_setjmp( png_jmpbuf( png ) ) ) + { + error = FT_THROW( Invalid_File_Format ); + goto DestroyExit; + } + + png_set_read_fn( png, &stream, read_data_from_FT_Stream ); + + png_read_info( png, info ); + png_get_IHDR( png, info, + &imgWidth, &imgHeight, + &bitdepth, &color_type, &interlace, + NULL, NULL ); + + if ( error || + ( !populate_map_and_metrics && + ( (FT_Int)imgWidth != metrics->width || + (FT_Int)imgHeight != metrics->height ) ) ) + goto DestroyExit; + + if ( populate_map_and_metrics ) + { + /* 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; + + map->width = metrics->width; + map->rows = metrics->height; + map->pixel_mode = FT_PIXEL_MODE_BGRA; + map->pitch = (int)( map->width * 4 ); + map->num_grays = 256; + } + + /* convert palette/gray image to rgb */ + if ( color_type == PNG_COLOR_TYPE_PALETTE ) + png_set_palette_to_rgb( png ); + + /* expand gray bit depth if needed */ + if ( color_type == PNG_COLOR_TYPE_GRAY ) + { +#if PNG_LIBPNG_VER >= 10209 + png_set_expand_gray_1_2_4_to_8( png ); +#else + png_set_gray_1_2_4_to_8( png ); +#endif + } + + /* transform transparency to alpha */ + if ( png_get_valid( png, info, PNG_INFO_tRNS ) ) + png_set_tRNS_to_alpha( png ); + + if ( bitdepth == 16 ) + png_set_strip_16( png ); + + if ( bitdepth < 8 ) + png_set_packing( png ); + + /* convert grayscale to RGB */ + if ( color_type == PNG_COLOR_TYPE_GRAY || + color_type == PNG_COLOR_TYPE_GRAY_ALPHA ) + png_set_gray_to_rgb( png ); + + if ( interlace != PNG_INTERLACE_NONE ) + png_set_interlace_handling( png ); + + png_set_filler( png, 0xFF, PNG_FILLER_AFTER ); + + /* recheck header after setting EXPAND options */ + png_read_update_info( png, info ); + png_get_IHDR( png, info, + &imgWidth, &imgHeight, + &bitdepth, &color_type, &interlace, + NULL, NULL ); + + if ( bitdepth != 8 || + !( color_type == PNG_COLOR_TYPE_RGB || + color_type == PNG_COLOR_TYPE_RGB_ALPHA ) ) + { + error = FT_THROW( Invalid_File_Format ); + goto DestroyExit; + } + + if ( metrics_only ) + goto DestroyExit; + + switch ( color_type ) + { + default: /* Shouldn't happen, but ... */ + case PNG_COLOR_TYPE_RGB_ALPHA: + png_set_read_user_transform_fn( png, premultiply_data ); + break; + + case PNG_COLOR_TYPE_RGB: + /* Humm, this smells. Carry on though. */ + png_set_read_user_transform_fn( png, convert_bytes_to_data ); + break; + } + + if ( populate_map_and_metrics ) + { + /* this doesn't overflow: 0x7FFF * 0x7FFF * 4 < 2^32 */ + FT_ULong size = map->rows * (FT_ULong)map->pitch; + + + error = ft_glyphslot_alloc_bitmap( slot, size ); + if ( error ) + goto DestroyExit; + } + + if ( FT_QNEW_ARRAY( rows, imgHeight ) ) + { + error = FT_THROW( Out_Of_Memory ); + goto DestroyExit; + } + + for ( i = 0; i < (FT_Int)imgHeight; i++ ) + rows[i] = map->buffer + ( y_offset + i ) * map->pitch + x_offset * 4; + + png_read_image( png, rows ); + + png_read_end( png, info ); + + DestroyExit: + /* even if reading fails with longjmp, rows must be freed */ + FT_FREE( rows ); + png_destroy_read_struct( &png, &info, NULL ); + FT_Stream_Close( &stream ); + + Exit: + return error; + } + +#else /* !(TT_CONFIG_OPTION_EMBEDDED_BITMAPS && FT_CONFIG_OPTION_USE_PNG) */ + + /* ANSI C doesn't like empty source files */ + typedef int pngshim_dummy_; + +#endif /* !(TT_CONFIG_OPTION_EMBEDDED_BITMAPS && FT_CONFIG_OPTION_USE_PNG) */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/pngshim.h b/non-source/foreign/freetype2/src/sfnt/pngshim.h new file mode 100644 index 000000000..6e7a5c08e --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/pngshim.h @@ -0,0 +1,50 @@ +/**************************************************************************** + * + * pngshim.h + * + * PNG Bitmap glyph support. + * + * Copyright (C) 2013-2024 by + * Google, Inc. + * Written by Stuart Gill and Behdad Esfahbod. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef PNGSHIM_H_ +#define PNGSHIM_H_ + + +#include "ttload.h" + + +FT_BEGIN_HEADER + +#ifdef FT_CONFIG_OPTION_USE_PNG + + FT_LOCAL( FT_Error ) + Load_SBit_Png( FT_GlyphSlot slot, + FT_Int x_offset, + FT_Int y_offset, + FT_Int pix_bits, + TT_SBit_Metrics metrics, + FT_Memory memory, + FT_Byte* data, + FT_UInt png_len, + FT_Bool populate_map_and_metrics, + FT_Bool metrics_only ); + +#endif + +FT_END_HEADER + +#endif /* PNGSHIM_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfdriver.c b/non-source/foreign/freetype2/src/sfnt/sfdriver.c new file mode 100644 index 000000000..81072207b --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfdriver.c @@ -0,0 +1,1384 @@ +/**************************************************************************** + * + * sfdriver.c + * + * High-level SFNT driver interface (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/sfnt.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/ttnameid.h> + +#include "sfdriver.h" +#include "ttload.h" +#include "sfobjs.h" + +#include "sferrors.h" + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS +#include "ttsbit.h" +#endif + +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS +#include "ttcolr.h" +#include "ttcpal.h" +#endif + +#ifdef FT_CONFIG_OPTION_SVG +#include "ttsvg.h" +#endif + +#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES +#include "ttpost.h" +#endif + +#ifdef TT_CONFIG_OPTION_BDF +#include "ttbdf.h" +#include <freetype/internal/services/svbdf.h> +#endif + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING +#include "ttgpos.h" +#endif + +#include "ttcmap.h" +#include "ttkern.h" +#include "ttmtx.h" + +#include <freetype/internal/services/svgldict.h> +#include <freetype/internal/services/svpostnm.h> +#include <freetype/internal/services/svsfnt.h> +#include <freetype/internal/services/svttcmap.h> + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/ftmm.h> +#include <freetype/internal/services/svmm.h> +#endif + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT sfdriver + + + /* + * SFNT TABLE SERVICE + * + */ + + FT_CALLBACK_DEF( FT_Error ) + sfnt_load_table( FT_Face face, /* TT_Face */ + FT_ULong tag, + FT_Long offset, + FT_Byte* buffer, + FT_ULong* length ) + { + TT_Face ttface = (TT_Face)face; + + + return tt_face_load_any( ttface, tag, offset, buffer, length ); + } + + + FT_CALLBACK_DEF( void* ) + get_sfnt_table( FT_Face face, /* TT_Face */ + FT_Sfnt_Tag tag ) + { + TT_Face ttface = (TT_Face)face; + + void* table; + + + switch ( tag ) + { + case FT_SFNT_HEAD: + table = &ttface->header; + break; + + case FT_SFNT_HHEA: + table = &ttface->horizontal; + break; + + case FT_SFNT_VHEA: + table = ttface->vertical_info ? &ttface->vertical : NULL; + break; + + case FT_SFNT_OS2: + table = ( ttface->os2.version == 0xFFFFU ) ? NULL : &ttface->os2; + break; + + case FT_SFNT_POST: + table = &ttface->postscript; + break; + + case FT_SFNT_MAXP: + table = &ttface->max_profile; + break; + + case FT_SFNT_PCLT: + table = ttface->pclt.Version ? &ttface->pclt : NULL; + break; + + default: + table = NULL; + } + + return table; + } + + + FT_CALLBACK_DEF( FT_Error ) + sfnt_table_info( FT_Face face, /* TT_Face */ + FT_UInt idx, + FT_ULong *tag, + FT_ULong *offset, + FT_ULong *length ) + { + TT_Face ttface = (TT_Face)face; + + + if ( !offset || !length ) + return FT_THROW( Invalid_Argument ); + + if ( !tag ) + *length = ttface->num_tables; + else + { + if ( idx >= ttface->num_tables ) + return FT_THROW( Table_Missing ); + + *tag = ttface->dir_tables[idx].Tag; + *offset = ttface->dir_tables[idx].Offset; + *length = ttface->dir_tables[idx].Length; + } + + return FT_Err_Ok; + } + + + FT_DEFINE_SERVICE_SFNT_TABLEREC( + sfnt_service_sfnt_table, + + sfnt_load_table, /* FT_SFNT_TableLoadFunc load_table */ + get_sfnt_table, /* FT_SFNT_TableGetFunc get_table */ + sfnt_table_info /* FT_SFNT_TableInfoFunc table_info */ + ) + + +#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES + + /* + * GLYPH DICT SERVICE + * + */ + + FT_CALLBACK_DEF( FT_Error ) + sfnt_get_glyph_name( FT_Face face, + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ) + { + FT_String* gname; + FT_Error error; + + + error = tt_face_get_ps_name( (TT_Face)face, glyph_index, &gname ); + if ( !error ) + FT_STRCPYN( buffer, gname, buffer_max ); + + return error; + } + + + FT_CALLBACK_DEF( FT_UInt ) + sfnt_get_name_index( FT_Face face, + const FT_String* glyph_name ) + { + TT_Face ttface = (TT_Face)face; + + FT_UInt i, max_gid = FT_UINT_MAX; + + + if ( face->num_glyphs < 0 ) + return 0; + else if ( (FT_ULong)face->num_glyphs < FT_UINT_MAX ) + max_gid = (FT_UInt)face->num_glyphs; + else + FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08lx\n", + FT_UINT_MAX, face->num_glyphs )); + + for ( i = 0; i < max_gid; i++ ) + { + FT_String* gname; + FT_Error error = tt_face_get_ps_name( ttface, i, &gname ); + + + if ( error ) + continue; + + if ( !ft_strcmp( glyph_name, gname ) ) + return i; + } + + return 0; + } + + + FT_DEFINE_SERVICE_GLYPHDICTREC( + sfnt_service_glyph_dict, + + sfnt_get_glyph_name, /* FT_GlyphDict_GetNameFunc get_name */ + sfnt_get_name_index /* FT_GlyphDict_NameIndexFunc name_index */ + ) + +#endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + + /* + * POSTSCRIPT NAME SERVICE + * + */ + + /* an array representing allowed ASCII characters in a PS string */ + static const unsigned char sfnt_ps_map[16] = + { + /* 4 0 C 8 */ + 0x00, 0x00, /* 0x00: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 */ + 0x00, 0x00, /* 0x10: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 */ + 0xDE, 0x7C, /* 0x20: 1 1 0 1 1 1 1 0 0 1 1 1 1 1 0 0 */ + 0xFF, 0xAF, /* 0x30: 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 */ + 0xFF, 0xFF, /* 0x40: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 */ + 0xFF, 0xD7, /* 0x50: 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 */ + 0xFF, 0xFF, /* 0x60: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 */ + 0xFF, 0x57 /* 0x70: 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 */ + }; + + + static int + sfnt_is_postscript( int c ) + { + unsigned int cc; + + + if ( c < 0 || c >= 0x80 ) + return 0; + + cc = (unsigned int)c; + + return sfnt_ps_map[cc >> 3] & ( 1 << ( cc & 0x07 ) ); + } + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + /* Only ASCII letters and digits are taken for a variation font */ + /* instance's PostScript name. */ + /* */ + /* `ft_isalnum' is a macro, but we need a function here, thus */ + /* this definition. */ + static int + sfnt_is_alphanumeric( int c ) + { + return ft_isalnum( c ); + } + + + /* the implementation of MurmurHash3 is taken and adapted from */ + /* https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp */ + +#define ROTL32( x, r ) ( x << r ) | ( x >> ( 32 - r ) ) + + + static FT_UInt32 + fmix32( FT_UInt32 h ) + { + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + return h; + } + + + static void + murmur_hash_3_128( const void* key, + const unsigned int len, + FT_UInt32 seed, + void* out ) + { + const FT_Byte* data = (const FT_Byte*)key; + const int nblocks = (int)len / 16; + + FT_UInt32 h1 = seed; + FT_UInt32 h2 = seed; + FT_UInt32 h3 = seed; + FT_UInt32 h4 = seed; + + const FT_UInt32 c1 = 0x239b961b; + const FT_UInt32 c2 = 0xab0e9789; + const FT_UInt32 c3 = 0x38b34ae5; + const FT_UInt32 c4 = 0xa1e38b93; + + const FT_UInt32* blocks = (const FT_UInt32*)( data + nblocks * 16 ); + + int i; + + + for( i = -nblocks; i; i++ ) + { + FT_UInt32 k1 = blocks[i * 4 + 0]; + FT_UInt32 k2 = blocks[i * 4 + 1]; + FT_UInt32 k3 = blocks[i * 4 + 2]; + FT_UInt32 k4 = blocks[i * 4 + 3]; + + + k1 *= c1; + k1 = ROTL32( k1, 15 ); + k1 *= c2; + h1 ^= k1; + + h1 = ROTL32( h1, 19 ); + h1 += h2; + h1 = h1 * 5 + 0x561ccd1b; + + k2 *= c2; + k2 = ROTL32( k2, 16 ); + k2 *= c3; + h2 ^= k2; + + h2 = ROTL32( h2, 17 ); + h2 += h3; + h2 = h2 * 5 + 0x0bcaa747; + + k3 *= c3; + k3 = ROTL32( k3, 17 ); + k3 *= c4; + h3 ^= k3; + + h3 = ROTL32( h3, 15 ); + h3 += h4; + h3 = h3 * 5 + 0x96cd1c35; + + k4 *= c4; + k4 = ROTL32( k4, 18 ); + k4 *= c1; + h4 ^= k4; + + h4 = ROTL32( h4, 13 ); + h4 += h1; + h4 = h4 * 5 + 0x32ac3b17; + } + + { + const FT_Byte* tail = (const FT_Byte*)( data + nblocks * 16 ); + + FT_UInt32 k1 = 0; + FT_UInt32 k2 = 0; + FT_UInt32 k3 = 0; + FT_UInt32 k4 = 0; + + + switch ( len & 15 ) + { + case 15: + k4 ^= (FT_UInt32)tail[14] << 16; + 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; + k1 = ROTL32( k1, 15 ); + k1 *= c2; + h1 ^= k1; + } + } + + h1 ^= len; + h2 ^= len; + h3 ^= len; + h4 ^= len; + + h1 += h2; + h1 += h3; + h1 += h4; + + h2 += h1; + h3 += h1; + h4 += h1; + + h1 = fmix32( h1 ); + h2 = fmix32( h2 ); + h3 = fmix32( h3 ); + h4 = fmix32( h4 ); + + h1 += h2; + h1 += h3; + h1 += h4; + + h2 += h1; + h3 += h1; + h4 += h1; + + ((FT_UInt32*)out)[0] = h1; + ((FT_UInt32*)out)[1] = h2; + ((FT_UInt32*)out)[2] = h3; + ((FT_UInt32*)out)[3] = h4; + } + + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + + typedef int (*char_type_func)( int c ); + + + /* Handling of PID/EID 3/0 and 3/1 is the same. */ +#define IS_WIN( n ) ( (n)->platformID == 3 && \ + ( (n)->encodingID == 1 || (n)->encodingID == 0 ) ) + +#define IS_APPLE( n ) ( (n)->platformID == 1 && \ + (n)->encodingID == 0 ) + + static char* + get_win_string( FT_Memory memory, + FT_Stream stream, + TT_Name entry, + char_type_func char_type, + FT_Bool report_invalid_characters ) + { + FT_Error error; + + char* result = NULL; + FT_String* r; + FT_Char* p; + FT_UInt len; + + + if ( FT_QALLOC( result, entry->stringLength / 2 + 1 ) ) + return NULL; + + if ( FT_STREAM_SEEK( entry->stringOffset ) || + FT_FRAME_ENTER( entry->stringLength ) ) + goto get_win_string_error; + + r = (FT_String*)result; + p = (FT_Char*)stream->cursor; + + for ( len = entry->stringLength / 2; len > 0; len--, p += 2 ) + { + if ( p[0] == 0 && char_type( p[1] ) ) + *r++ = p[1]; + else + { + if ( report_invalid_characters ) + FT_TRACE0(( "get_win_string:" + " Character 0x%X invalid in PS name string\n", + ((unsigned)p[0])*256 + (unsigned)p[1] )); + continue; + } + } + *r = '\0'; + + FT_FRAME_EXIT(); + + if ( r != result ) + return result; + + get_win_string_error: + FT_FREE( result ); + + entry->stringLength = 0; + entry->stringOffset = 0; + FT_FREE( entry->string ); + + return NULL; + } + + + static char* + get_apple_string( FT_Memory memory, + FT_Stream stream, + TT_Name entry, + char_type_func char_type, + FT_Bool report_invalid_characters ) + { + FT_Error error; + + char* result = NULL; + FT_String* r; + FT_Char* p; + FT_UInt len; + + + if ( FT_QALLOC( result, entry->stringLength + 1 ) ) + return NULL; + + if ( FT_STREAM_SEEK( entry->stringOffset ) || + FT_FRAME_ENTER( entry->stringLength ) ) + goto get_apple_string_error; + + r = (FT_String*)result; + p = (FT_Char*)stream->cursor; + + for ( len = entry->stringLength; len > 0; len--, p++ ) + { + if ( char_type( *p ) ) + *r++ = *p; + else + { + if ( report_invalid_characters ) + FT_TRACE0(( "get_apple_string:" + " Character `%c' (0x%X) invalid in PS name string\n", + *p, *p )); + continue; + } + } + *r = '\0'; + + FT_FRAME_EXIT(); + + if ( r != result ) + return result; + + get_apple_string_error: + FT_FREE( result ); + + entry->stringOffset = 0; + entry->stringLength = 0; + FT_FREE( entry->string ); + + return NULL; + } + + + FT_CALLBACK_DEF( FT_Bool ) + sfnt_get_name_id( TT_Face face, + FT_UShort id, + FT_Int *win, + FT_Int *apple ) + { + FT_Int n; + + + *win = -1; + *apple = -1; + + for ( n = 0; n < face->num_names; n++ ) + { + TT_Name name = face->name_table.names + n; + + + if ( name->nameID == id && name->stringLength > 0 ) + { + if ( IS_WIN( name ) && ( name->languageID == 0x409 || *win == -1 ) ) + *win = n; + + if ( IS_APPLE( name ) && ( name->languageID == 0 || *apple == -1 ) ) + *apple = n; + } + } + + return ( *win >= 0 ) || ( *apple >= 0 ); + } + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + /* + The maximum length of an axis value descriptor. + + We need 65536 different values for the decimal fraction; this fits + nicely into five decimal places. Consequently, it consists of + + . the minus sign if the number is negative, + . up to five characters for the digits before the decimal point, + . the decimal point if there is a fractional part, and + . up to five characters for the digits after the decimal point. + + We also need one byte for the leading `_' character and up to four + bytes for the axis tag. + */ +#define MAX_VALUE_DESCRIPTOR_LEN ( 1 + 5 + 1 + 5 + 1 + 4 ) + + + /* the maximum length of PostScript font names */ +#define MAX_PS_NAME_LEN 127 + + + /* + * Find the shortest decimal representation of a 16.16 fixed-point + * number. The function fills `buf' with the result, returning a pointer + * to the position after the representation's last byte. + */ + + static char* + fixed2float( FT_Int fixed, + char* buf ) + { + char* p; + char* q; + char tmp[5]; + + FT_Int int_part; + FT_Int frac_part; + + FT_Int i; + + + p = buf; + + if ( fixed == 0 ) + { + *p++ = '0'; + return p; + } + + if ( fixed < 0 ) + { + *p++ = '-'; + fixed = NEG_INT( fixed ); + } + + int_part = ( fixed >> 16 ) & 0xFFFF; + frac_part = fixed & 0xFFFF; + + /* get digits of integer part (in reverse order) */ + q = tmp; + while ( int_part > 0 ) + { + *q++ = '0' + int_part % 10; + int_part /= 10; + } + + /* copy digits in correct order to buffer */ + while ( q > tmp ) + *p++ = *--q; + + if ( !frac_part ) + return p; + + /* save position of point */ + q = p; + *p++ = '.'; + + /* apply rounding */ + frac_part = frac_part * 10 + 5; + + /* get digits of fractional part */ + for ( i = 0; i < 5; i++ ) + { + *p++ = '0' + (char)( frac_part / 0x10000L ); + + frac_part %= 0x10000L; + if ( !frac_part ) + break; + + frac_part *= 10; + } + + /* + If the remainder stored in `frac_part' (after the last FOR loop) is + smaller than 34480*10, the resulting decimal value minus 0.00001 is + an equivalent representation of `fixed'. + + The above FOR loop always finds the larger of the two values; I + verified this by iterating over all possible fixed-point numbers. + + If the remainder is 17232*10, both values are equally good, and we + take the next even number (following IEEE 754's `round to nearest, + ties to even' rounding rule). + + If the remainder is smaller than 17232*10, the lower of the two + numbers is nearer to the exact result (values 17232 and 34480 were + also found by testing all possible fixed-point values). + + We use this to find a shorter decimal representation. If not ending + with digit zero, we take the representation with less error. + */ + p--; + if ( p - q == 5 ) /* five digits? */ + { + /* take the representation that has zero as the last digit */ + if ( frac_part < 34480 * 10 && + *p == '1' ) + *p = '0'; + + /* otherwise use the one with less error */ + else if ( frac_part == 17232 * 10 && + *p & 1 ) + *p -= 1; + + else if ( frac_part < 17232 * 10 && + *p != '0' ) + *p -= 1; + } + + /* remove trailing zeros */ + while ( *p == '0' ) + *p-- = '\0'; + + return p + 1; + } + + + static const char hexdigits[16] = + { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + + + static const char* + sfnt_get_var_ps_name( TT_Face face ) + { + FT_Error error; + FT_Memory memory = face->root.memory; + + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm; + + FT_UInt num_coords; + FT_Fixed* coords; + FT_MM_Var* mm_var; + + FT_Int found, win, apple; + FT_UInt i, j; + + char* result = NULL; + char* p; + + + if ( !face->var_postscript_prefix ) + { + FT_UInt len; + + + /* check whether we have a Variations PostScript Name Prefix */ + found = sfnt_get_name_id( face, + TT_NAME_ID_VARIATIONS_PREFIX, + &win, + &apple ); + if ( !found ) + { + /* otherwise use the typographic family name */ + found = sfnt_get_name_id( face, + TT_NAME_ID_TYPOGRAPHIC_FAMILY, + &win, + &apple ); + } + + if ( !found ) + { + /* according to the 'name' documentation in the OpenType */ + /* specification the font family name is to be used if the */ + /* typographic family name is missing, so let's do that */ + found = sfnt_get_name_id( face, + TT_NAME_ID_FONT_FAMILY, + &win, + &apple ); + } + + if ( !found ) + { + FT_TRACE0(( "sfnt_get_var_ps_name:" + " Can't construct PS name prefix for font instances\n" )); + return NULL; + } + + /* prefer Windows entries over Apple */ + if ( win != -1 ) + result = get_win_string( face->root.memory, + face->name_table.stream, + face->name_table.names + win, + sfnt_is_alphanumeric, + 0 ); + if ( !result && apple != -1 ) + result = get_apple_string( face->root.memory, + face->name_table.stream, + face->name_table.names + apple, + sfnt_is_alphanumeric, + 0 ); + + if ( !result ) + { + FT_TRACE0(( "sfnt_get_var_ps_name:" + " No valid PS name prefix for font instances found\n" )); + /* XXX It probably makes sense to never let this fail */ + /* since an arbitrary prefix should work, too. */ + /* On the other hand, it is very unlikely that */ + /* we ever reach this code at all. */ + return NULL; + } + + len = ft_strlen( result ); + + /* sanitize if necessary; we reserve space for 36 bytes (a 128bit */ + /* checksum as a hex number, preceded by `-' and followed by three */ + /* ASCII dots, to be used if the constructed PS name would be too */ + /* long); this is also sufficient for a single instance */ + if ( len > MAX_PS_NAME_LEN - ( 1 + 32 + 3 ) ) + { + len = MAX_PS_NAME_LEN - ( 1 + 32 + 3 ); + result[len] = '\0'; + + FT_TRACE0(( "sfnt_get_var_ps_name:" + " Shortening variation PS name prefix\n" )); + FT_TRACE0(( " " + " to %d characters\n", len )); + } + + face->var_postscript_prefix = result; + face->var_postscript_prefix_len = len; + } + + mm->get_var_blend( FT_FACE( face ), + &num_coords, + &coords, + NULL, + &mm_var ); + + if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) && + !FT_IS_VARIATION( FT_FACE( face ) ) ) + { + SFNT_Service sfnt = (SFNT_Service)face->sfnt; + + FT_Long instance = ( ( face->root.face_index & 0x7FFF0000L ) >> 16 ) - 1; + FT_UInt psid = mm_var->namedstyle[instance].psid; + + char* ps_name = NULL; + + + /* try first to load the name string with index `postScriptNameID' */ + if ( psid == 6 || + ( psid > 255 && psid < 32768 ) ) + (void)sfnt->get_name( face, (FT_UShort)psid, &ps_name ); + + if ( ps_name ) + { + result = ps_name; + p = result + ft_strlen( result ) + 1; + + goto check_length; + } + else + { + /* otherwise construct a name using `subfamilyNameID' */ + FT_UInt strid = mm_var->namedstyle[instance].strid; + + char* subfamily_name; + char* s; + + + (void)sfnt->get_name( face, (FT_UShort)strid, &subfamily_name ); + + if ( !subfamily_name ) + { + FT_TRACE1(( "sfnt_get_var_ps_name:" + " can't construct named instance PS name;\n" )); + FT_TRACE1(( " " + " trying to construct normal instance PS name\n" )); + goto construct_instance_name; + } + + /* after the prefix we have character `-' followed by the */ + /* subfamily name (using only characters a-z, A-Z, and 0-9) */ + if ( FT_QALLOC( result, face->var_postscript_prefix_len + + 1 + ft_strlen( subfamily_name ) + 1 ) ) + return NULL; + + ft_strcpy( result, face->var_postscript_prefix ); + + p = result + face->var_postscript_prefix_len; + *p++ = '-'; + + s = subfamily_name; + while ( *s ) + { + if ( ft_isalnum( *s ) ) + *p++ = *s; + s++; + } + *p++ = '\0'; + + FT_FREE( subfamily_name ); + } + } + else + { + FT_Var_Axis* axis; + + + construct_instance_name: + axis = mm_var->axis; + + if ( FT_QALLOC( result, + face->var_postscript_prefix_len + + num_coords * MAX_VALUE_DESCRIPTOR_LEN + 1 ) ) + return NULL; + + p = result; + + ft_strcpy( p, face->var_postscript_prefix ); + p += face->var_postscript_prefix_len; + + for ( i = 0; i < num_coords; i++, coords++, axis++ ) + { + char t; + + + /* omit axis value descriptor if it is identical */ + /* to the default axis value */ + if ( *coords == axis->def ) + continue; + + *p++ = '_'; + p = fixed2float( *coords, p ); + + t = (char)( axis->tag >> 24 ); + if ( t != ' ' && ft_isalnum( t ) ) + *p++ = t; + t = (char)( axis->tag >> 16 ); + if ( t != ' ' && ft_isalnum( t ) ) + *p++ = t; + t = (char)( axis->tag >> 8 ); + if ( t != ' ' && ft_isalnum( t ) ) + *p++ = t; + t = (char)axis->tag; + if ( t != ' ' && ft_isalnum( t ) ) + *p++ = t; + } + *p++ = '\0'; + } + + check_length: + if ( p - result > MAX_PS_NAME_LEN ) + { + /* the PS name is too long; replace the part after the prefix with */ + /* a checksum; we use MurmurHash 3 with a hash length of 128 bit */ + + FT_UInt32 seed = 123456789; + + FT_UInt32 hash[4]; + FT_UInt32* h; + + + murmur_hash_3_128( result, p - result, seed, hash ); + + p = result + face->var_postscript_prefix_len; + *p++ = '-'; + + /* we convert the hash value to hex digits from back to front */ + p += 32 + 3; + h = hash + 3; + + *p-- = '\0'; + *p-- = '.'; + *p-- = '.'; + *p-- = '.'; + + for ( i = 0; i < 4; i++, h-- ) + { + FT_UInt32 v = *h; + + + for ( j = 0; j < 8; j++ ) + { + *p-- = hexdigits[v & 0xF]; + v >>= 4; + } + } + } + + return result; + } + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + + FT_CALLBACK_DEF( const char* ) + sfnt_get_ps_name( FT_Face face ) /* TT_Face */ + { + TT_Face ttface = (TT_Face)face; + + FT_Int found, win, apple; + const char* result = NULL; + + + if ( ttface->postscript_name ) + return ttface->postscript_name; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( ttface->blend && + ( FT_IS_NAMED_INSTANCE( face ) || + FT_IS_VARIATION( face ) ) ) + { + ttface->postscript_name = sfnt_get_var_ps_name( ttface ); + return ttface->postscript_name; + } +#endif + + /* scan the name table to see whether we have a Postscript name here, */ + /* either in Macintosh or Windows platform encodings */ + found = sfnt_get_name_id( ttface, TT_NAME_ID_PS_NAME, &win, &apple ); + if ( !found ) + return NULL; + + /* prefer Windows entries over Apple */ + if ( win != -1 ) + result = get_win_string( FT_FACE_MEMORY( face ), + ttface->name_table.stream, + ttface->name_table.names + win, + sfnt_is_postscript, + 1 ); + if ( !result && apple != -1 ) + result = get_apple_string( FT_FACE_MEMORY( face ), + ttface->name_table.stream, + ttface->name_table.names + apple, + sfnt_is_postscript, + 1 ); + + ttface->postscript_name = result; + + return result; + } + + + FT_DEFINE_SERVICE_PSFONTNAMEREC( + sfnt_service_ps_name, + + sfnt_get_ps_name /* FT_PsName_GetFunc get_ps_font_name */ + ) + + + /* + * TT CMAP INFO + */ + FT_DEFINE_SERVICE_TTCMAPSREC( + tt_service_get_cmap_info, + + tt_get_cmap_info /* TT_CMap_Info_GetFunc get_cmap_info */ + ) + + +#ifdef TT_CONFIG_OPTION_BDF + + static FT_Error + sfnt_get_charset_id( FT_Face face, + const char* *acharset_encoding, + const char* *acharset_registry ) + { + BDF_PropertyRec encoding, registry; + FT_Error error; + + + /* XXX: I don't know whether this is correct, since + * tt_face_find_bdf_prop only returns something correct if we have + * previously selected a size that is listed in the BDF table. + * Should we change the BDF table format to include single offsets + * for `CHARSET_REGISTRY' and `CHARSET_ENCODING'? + */ + error = tt_face_find_bdf_prop( face, "CHARSET_REGISTRY", ®istry ); + if ( !error ) + { + error = tt_face_find_bdf_prop( face, "CHARSET_ENCODING", &encoding ); + if ( !error ) + { + if ( registry.type == BDF_PROPERTY_TYPE_ATOM && + encoding.type == BDF_PROPERTY_TYPE_ATOM ) + { + *acharset_encoding = encoding.u.atom; + *acharset_registry = registry.u.atom; + } + else + error = FT_THROW( Invalid_Argument ); + } + } + + return error; + } + + + FT_DEFINE_SERVICE_BDFRec( + sfnt_service_bdf, + + sfnt_get_charset_id, /* FT_BDF_GetCharsetIdFunc get_charset_id */ + tt_face_find_bdf_prop /* FT_BDF_GetPropertyFunc get_property */ + ) + + +#endif /* TT_CONFIG_OPTION_BDF */ + + + /* + * SERVICE LIST + */ + +#if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF + FT_DEFINE_SERVICEDESCREC5( + sfnt_services, + + FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table, + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name, + FT_SERVICE_ID_GLYPH_DICT, &sfnt_service_glyph_dict, + FT_SERVICE_ID_BDF, &sfnt_service_bdf, + FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info ) +#elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES + FT_DEFINE_SERVICEDESCREC4( + sfnt_services, + + FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table, + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name, + FT_SERVICE_ID_GLYPH_DICT, &sfnt_service_glyph_dict, + FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info ) +#elif defined TT_CONFIG_OPTION_BDF + FT_DEFINE_SERVICEDESCREC4( + sfnt_services, + + FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table, + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name, + FT_SERVICE_ID_BDF, &sfnt_service_bdf, + FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info ) +#else + FT_DEFINE_SERVICEDESCREC3( + sfnt_services, + + FT_SERVICE_ID_SFNT_TABLE, &sfnt_service_sfnt_table, + FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &sfnt_service_ps_name, + FT_SERVICE_ID_TT_CMAP, &tt_service_get_cmap_info ) +#endif + + + FT_CALLBACK_DEF( FT_Module_Interface ) + sfnt_get_interface( FT_Module module, + const char* module_interface ) + { + FT_UNUSED( module ); + + return ft_service_list_lookup( sfnt_services, module_interface ); + } + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS +#define PUT_EMBEDDED_BITMAPS( a ) a +#else +#define PUT_EMBEDDED_BITMAPS( a ) NULL +#endif + +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS +#define PUT_COLOR_LAYERS( a ) a +#else +#define PUT_COLOR_LAYERS( a ) NULL +#endif + +#ifdef FT_CONFIG_OPTION_SVG +#define PUT_SVG_SUPPORT( a ) a +#else +#define PUT_SVG_SUPPORT( a ) NULL +#endif + +#define PUT_COLOR_LAYERS_V1( a ) PUT_COLOR_LAYERS( a ) + +#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES +#define PUT_PS_NAMES( a ) a +#else +#define PUT_PS_NAMES( a ) NULL +#endif + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING +#define PUT_GPOS_KERNING( a ) a +#else +#define PUT_GPOS_KERNING( a ) NULL +#endif + + FT_DEFINE_SFNT_INTERFACE( + sfnt_interface, + + tt_face_goto_table, /* TT_Loader_GotoTableFunc goto_table */ + + sfnt_init_face, /* TT_Init_Face_Func init_face */ + sfnt_load_face, /* TT_Load_Face_Func load_face */ + sfnt_done_face, /* TT_Done_Face_Func done_face */ + sfnt_get_interface, /* FT_Module_Requester get_interface */ + + tt_face_load_any, /* TT_Load_Any_Func load_any */ + + tt_face_load_head, /* TT_Load_Table_Func load_head */ + tt_face_load_hhea, /* TT_Load_Metrics_Func load_hhea */ + tt_face_load_cmap, /* TT_Load_Table_Func load_cmap */ + tt_face_load_maxp, /* TT_Load_Table_Func load_maxp */ + tt_face_load_os2, /* TT_Load_Table_Func load_os2 */ + tt_face_load_post, /* TT_Load_Table_Func load_post */ + + tt_face_load_name, /* TT_Load_Table_Func load_name */ + tt_face_free_name, /* TT_Free_Table_Func free_name */ + + tt_face_load_kern, /* TT_Load_Table_Func load_kern */ + PUT_GPOS_KERNING( tt_face_load_gpos ), + /* TT_Load_Table_Func load_gpos */ + tt_face_load_gasp, /* TT_Load_Table_Func load_gasp */ + tt_face_load_pclt, /* TT_Load_Table_Func load_init */ + + /* see `ttload.h' */ + PUT_EMBEDDED_BITMAPS( tt_face_load_bhed ), + /* TT_Load_Table_Func load_bhed */ + PUT_EMBEDDED_BITMAPS( tt_face_load_sbit_image ), + /* TT_Load_SBit_Image_Func load_sbit_image */ + + /* see `ttpost.h' */ + PUT_PS_NAMES( tt_face_get_ps_name ), + /* TT_Get_PS_Name_Func get_psname */ + PUT_PS_NAMES( tt_face_free_ps_names ), + /* TT_Free_Table_Func free_psnames */ + + /* since version 2.1.8 */ + tt_face_get_kerning, /* TT_Face_GetKerningFunc get_kerning */ + + PUT_GPOS_KERNING( tt_face_get_gpos_kerning ), + /* TT_Face_GetKerningFunc get_gpos_kerning */ + + /* since version 2.2 */ + tt_face_load_font_dir, /* TT_Load_Table_Func load_font_dir */ + tt_face_load_hmtx, /* TT_Load_Metrics_Func load_hmtx */ + + /* see `ttsbit.h' and `sfnt.h' */ + PUT_EMBEDDED_BITMAPS( tt_face_load_sbit ), + /* TT_Load_Table_Func load_eblc */ + PUT_EMBEDDED_BITMAPS( tt_face_free_sbit ), + /* TT_Free_Table_Func free_eblc */ + + PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike ), + /* TT_Set_SBit_Strike_Func set_sbit_strike */ + PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ), + /* TT_Load_Strike_Metrics_Func load_strike_metrics */ + + PUT_COLOR_LAYERS( tt_face_load_cpal ), + /* TT_Load_Table_Func load_cpal */ + PUT_COLOR_LAYERS( tt_face_load_colr ), + /* TT_Load_Table_Func load_colr */ + PUT_COLOR_LAYERS( tt_face_free_cpal ), + /* TT_Free_Table_Func free_cpal */ + PUT_COLOR_LAYERS( tt_face_free_colr ), + /* TT_Free_Table_Func free_colr */ + PUT_COLOR_LAYERS( tt_face_palette_set ), + /* TT_Set_Palette_Func set_palette */ + PUT_COLOR_LAYERS( tt_face_get_colr_layer ), + /* TT_Get_Colr_Layer_Func get_colr_layer */ + + PUT_COLOR_LAYERS_V1( tt_face_get_colr_glyph_paint ), + /* TT_Get_Color_Glyph_Paint_Func get_colr_glyph_paint */ + PUT_COLOR_LAYERS_V1( tt_face_get_color_glyph_clipbox ), + /* TT_Get_Color_Glyph_ClipBox_Func get_clipbox */ + PUT_COLOR_LAYERS_V1( tt_face_get_paint_layers ), + /* TT_Get_Paint_Layers_Func get_paint_layers */ + PUT_COLOR_LAYERS_V1( tt_face_get_colorline_stops ), + /* TT_Get_Paint get_paint */ + PUT_COLOR_LAYERS_V1( tt_face_get_paint ), + /* TT_Get_Colorline_Stops_Func get_colorline_stops */ + + PUT_COLOR_LAYERS( tt_face_colr_blend_layer ), + /* TT_Blend_Colr_Func colr_blend */ + + tt_face_get_metrics, /* TT_Get_Metrics_Func get_metrics */ + + tt_face_get_name, /* TT_Get_Name_Func get_name */ + sfnt_get_name_id, /* TT_Get_Name_ID_Func get_name_id */ + + PUT_SVG_SUPPORT( tt_face_load_svg ), + /* TT_Load_Table_Func load_svg */ + PUT_SVG_SUPPORT( tt_face_free_svg ), + /* TT_Free_Table_Func free_svg */ + PUT_SVG_SUPPORT( tt_face_load_svg_doc ) + /* TT_Load_Svg_Doc_Func load_svg_doc */ + ) + + + FT_DEFINE_MODULE( + sfnt_module_class, + + 0, /* not a font driver or renderer */ + sizeof ( FT_ModuleRec ), + + "sfnt", /* driver name */ + 0x10000L, /* driver version 1.0 */ + 0x20000L, /* driver requires FreeType 2.0 or higher */ + + (const void*)&sfnt_interface, /* module specific interface */ + + NULL, /* FT_Module_Constructor module_init */ + NULL, /* FT_Module_Destructor module_done */ + sfnt_get_interface /* FT_Module_Requester get_interface */ + ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfdriver.h b/non-source/foreign/freetype2/src/sfnt/sfdriver.h new file mode 100644 index 000000000..6f71489fd --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfdriver.h @@ -0,0 +1,35 @@ +/**************************************************************************** + * + * sfdriver.h + * + * High-level SFNT driver interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SFDRIVER_H_ +#define SFDRIVER_H_ + + +#include <freetype/ftmodapi.h> + + +FT_BEGIN_HEADER + + FT_DECLARE_MODULE( sfnt_module_class ) + +FT_END_HEADER + +#endif /* SFDRIVER_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sferrors.h b/non-source/foreign/freetype2/src/sfnt/sferrors.h new file mode 100644 index 000000000..d3ca1d9aa --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sferrors.h @@ -0,0 +1,41 @@ +/**************************************************************************** + * + * sferrors.h + * + * SFNT error codes (specification only). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the SFNT error enumeration constants. + * + */ + +#ifndef SFERRORS_H_ +#define SFERRORS_H_ + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX SFNT_Err_ +#define FT_ERR_BASE FT_Mod_Err_SFNT + +#include <freetype/fterrors.h> + +#endif /* SFERRORS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfnt.c b/non-source/foreign/freetype2/src/sfnt/sfnt.c new file mode 100644 index 000000000..52411febc --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfnt.c @@ -0,0 +1,41 @@ +/**************************************************************************** + * + * sfnt.c + * + * Single object library component. + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "pngshim.c" +#include "sfdriver.c" +#include "sfobjs.c" +#include "sfwoff.c" +#include "sfwoff2.c" +#include "ttbdf.c" +#include "ttcmap.c" +#include "ttcolr.c" +#include "ttcpal.c" +#include "ttsvg.c" + +#include "ttgpos.c" +#include "ttkern.c" +#include "ttload.c" +#include "ttmtx.c" +#include "ttpost.c" +#include "ttsbit.c" +#include "woff2tags.c" + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfobjs.c b/non-source/foreign/freetype2/src/sfnt/sfobjs.c new file mode 100644 index 000000000..6ee4e5e93 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfobjs.c @@ -0,0 +1,1552 @@ +/**************************************************************************** + * + * sfobjs.c + * + * SFNT object management (base). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include "sfobjs.h" +#include "ttload.h" +#include "ttcmap.h" +#include "ttkern.h" +#include "sfwoff.h" +#include "sfwoff2.h" +#include <freetype/internal/sfnt.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/ttnameid.h> +#include <freetype/tttags.h> +#include <freetype/internal/services/svpscmap.h> +#include <freetype/ftsnames.h> + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/internal/services/svmm.h> +#include <freetype/internal/services/svmetric.h> +#endif + +#include "sferrors.h" + +#ifdef TT_CONFIG_OPTION_BDF +#include "ttbdf.h" +#endif + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING +#include "ttgpos.h" +#endif + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT sfobjs + + + + /* convert a UTF-16 name entry to ASCII */ + static FT_String* + tt_name_ascii_from_utf16( TT_Name entry, + FT_Memory memory ) + { + FT_String* string = NULL; + FT_UInt len, code, n; + FT_Byte* read = (FT_Byte*)entry->string; + FT_Error error; + + + len = (FT_UInt)entry->stringLength / 2; + + if ( FT_QNEW_ARRAY( string, len + 1 ) ) + return NULL; + + for ( n = 0; n < len; n++ ) + { + code = FT_NEXT_USHORT( read ); + + if ( code == 0 ) + break; + + if ( code < 32 || code > 127 ) + code = '?'; + + string[n] = (char)code; + } + + string[n] = 0; + + return string; + } + + + /* convert an Apple Roman or symbol name entry to ASCII */ + static FT_String* + tt_name_ascii_from_other( TT_Name entry, + FT_Memory memory ) + { + FT_String* string = NULL; + FT_UInt len, code, n; + FT_Byte* read = (FT_Byte*)entry->string; + FT_Error error; + + + len = (FT_UInt)entry->stringLength; + + if ( FT_QNEW_ARRAY( string, len + 1 ) ) + return NULL; + + for ( n = 0; n < len; n++ ) + { + code = *read++; + + if ( code == 0 ) + break; + + if ( code < 32 || code > 127 ) + code = '?'; + + string[n] = (char)code; + } + + string[n] = 0; + + return string; + } + + + typedef FT_String* (*TT_Name_ConvertFunc)( TT_Name entry, + FT_Memory memory ); + + + /* documentation is in sfnt.h */ + + FT_LOCAL_DEF( FT_Error ) + tt_face_get_name( TT_Face face, + FT_UShort nameid, + FT_String** name ) + { + FT_Memory memory = face->root.memory; + FT_Error error = FT_Err_Ok; + FT_String* result = NULL; + FT_UShort n; + TT_Name rec; + + FT_Int found_apple = -1; + FT_Int found_apple_roman = -1; + FT_Int found_apple_english = -1; + FT_Int found_win = -1; + FT_Int found_unicode = -1; + + FT_Bool is_english = 0; + + TT_Name_ConvertFunc convert; + + + FT_ASSERT( name ); + + rec = face->name_table.names; + for ( n = 0; n < face->num_names; n++, rec++ ) + { + /* According to the OpenType 1.3 specification, only Microsoft or */ + /* Apple platform IDs might be used in the `name' table. The */ + /* `Unicode' platform is reserved for the `cmap' table, and the */ + /* `ISO' one is deprecated. */ + /* */ + /* However, the Apple TrueType specification doesn't say the same */ + /* thing and goes to suggest that all Unicode `name' table entries */ + /* should be coded in UTF-16 (in big-endian format I suppose). */ + /* */ + if ( rec->nameID == nameid && rec->stringLength > 0 ) + { + switch ( rec->platformID ) + { + case TT_PLATFORM_APPLE_UNICODE: + case TT_PLATFORM_ISO: + /* there is `languageID' to check there. We should use this */ + /* field only as a last solution when nothing else is */ + /* available. */ + /* */ + found_unicode = n; + break; + + case TT_PLATFORM_MACINTOSH: + /* This is a bit special because some fonts will use either */ + /* an English language id, or a Roman encoding id, to indicate */ + /* the English version of its font name. */ + /* */ + if ( rec->languageID == TT_MAC_LANGID_ENGLISH ) + found_apple_english = n; + else if ( rec->encodingID == TT_MAC_ID_ROMAN ) + found_apple_roman = n; + break; + + case TT_PLATFORM_MICROSOFT: + /* we only take a non-English name when there is nothing */ + /* else available in the font */ + /* */ + if ( found_win == -1 || ( rec->languageID & 0x3FF ) == 0x009 ) + { + switch ( rec->encodingID ) + { + case TT_MS_ID_SYMBOL_CS: + case TT_MS_ID_UNICODE_CS: + case TT_MS_ID_UCS_4: + is_english = FT_BOOL( ( rec->languageID & 0x3FF ) == 0x009 ); + found_win = n; + break; + + default: + ; + } + } + break; + + default: + ; + } + } + } + + found_apple = found_apple_roman; + if ( found_apple_english >= 0 ) + found_apple = found_apple_english; + + /* some fonts contain invalid Unicode or Macintosh formatted entries; */ + /* we will thus favor names encoded in Windows formats if available */ + /* (provided it is an English name) */ + /* */ + convert = NULL; + if ( found_win >= 0 && !( found_apple >= 0 && !is_english ) ) + { + rec = face->name_table.names + found_win; + switch ( rec->encodingID ) + { + /* all Unicode strings are encoded using UTF-16BE */ + case TT_MS_ID_UNICODE_CS: + case TT_MS_ID_SYMBOL_CS: + convert = tt_name_ascii_from_utf16; + break; + + case TT_MS_ID_UCS_4: + /* Apparently, if this value is found in a name table entry, it is */ + /* documented as `full Unicode repertoire'. Experience with the */ + /* MsGothic font shipped with Windows Vista shows that this really */ + /* means UTF-16 encoded names (UCS-4 values are only used within */ + /* charmaps). */ + convert = tt_name_ascii_from_utf16; + break; + + default: + ; + } + } + else if ( found_apple >= 0 ) + { + rec = face->name_table.names + found_apple; + convert = tt_name_ascii_from_other; + } + else if ( found_unicode >= 0 ) + { + rec = face->name_table.names + found_unicode; + convert = tt_name_ascii_from_utf16; + } + + if ( rec && convert ) + { + if ( !rec->string ) + { + FT_Stream stream = face->name_table.stream; + + + if ( FT_QNEW_ARRAY ( rec->string, rec->stringLength ) || + FT_STREAM_SEEK( rec->stringOffset ) || + FT_STREAM_READ( rec->string, rec->stringLength ) ) + { + FT_FREE( rec->string ); + rec->stringLength = 0; + result = NULL; + goto Exit; + } + } + + result = convert( rec, memory ); + } + + Exit: + *name = result; + return error; + } + + + static FT_Encoding + sfnt_find_encoding( int platform_id, + int encoding_id ) + { + typedef struct TEncoding_ + { + int platform_id; + int encoding_id; + FT_Encoding encoding; + + } TEncoding; + + static + const TEncoding tt_encodings[] = + { + { TT_PLATFORM_ISO, -1, FT_ENCODING_UNICODE }, + + { TT_PLATFORM_APPLE_UNICODE, -1, FT_ENCODING_UNICODE }, + + { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, FT_ENCODING_APPLE_ROMAN }, + + { TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS, FT_ENCODING_MS_SYMBOL }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, FT_ENCODING_UNICODE }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, FT_ENCODING_UNICODE }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, FT_ENCODING_SJIS }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_PRC, FT_ENCODING_PRC }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, FT_ENCODING_BIG5 }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, FT_ENCODING_WANSUNG }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, FT_ENCODING_JOHAB } + }; + + const TEncoding *cur, *limit; + + + cur = tt_encodings; + limit = cur + sizeof ( tt_encodings ) / sizeof ( tt_encodings[0] ); + + for ( ; cur < limit; cur++ ) + { + if ( cur->platform_id == platform_id ) + { + if ( cur->encoding_id == encoding_id || + cur->encoding_id == -1 ) + return cur->encoding; + } + } + + return FT_ENCODING_NONE; + } + + + /* Fill in face->ttc_header. If the font is not a TTC, it is */ + /* synthesized into a TTC with one offset table. */ + static FT_Error + sfnt_open_font( FT_Stream stream, + TT_Face face, + FT_Int* face_instance_index, + FT_Long* woff2_num_faces ) + { + FT_Memory memory = stream->memory; + FT_Error error; + FT_ULong tag, offset; + + static const FT_Frame_Field ttc_header_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TTC_HeaderRec + + FT_FRAME_START( 8 ), + FT_FRAME_LONG( version ), + FT_FRAME_LONG( count ), /* this is ULong in the specs */ + FT_FRAME_END + }; + +#ifndef FT_CONFIG_OPTION_USE_BROTLI + FT_UNUSED( face_instance_index ); + FT_UNUSED( woff2_num_faces ); +#endif + + + face->ttc_header.tag = 0; + face->ttc_header.version = 0; + face->ttc_header.count = 0; + +#if defined( FT_CONFIG_OPTION_USE_ZLIB ) || \ + defined( FT_CONFIG_OPTION_USE_BROTLI ) + retry: +#endif + + offset = FT_STREAM_POS(); + + if ( FT_READ_ULONG( tag ) ) + return error; + +#ifdef FT_CONFIG_OPTION_USE_ZLIB + if ( tag == TTAG_wOFF ) + { + FT_TRACE2(( "sfnt_open_font: file is a WOFF; synthesizing SFNT\n" )); + + if ( FT_STREAM_SEEK( offset ) ) + return error; + + error = woff_open_font( stream, face ); + if ( error ) + return error; + + /* Swap out stream and retry! */ + stream = face->root.stream; + goto retry; + } +#endif + +#ifdef FT_CONFIG_OPTION_USE_BROTLI + 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; + } +#endif + + if ( tag != 0x00010000UL && + tag != TTAG_ttcf && + tag != TTAG_OTTO && + tag != TTAG_true && + tag != TTAG_typ1 && + tag != TTAG_0xA5kbd && + tag != TTAG_0xA5lst && + tag != 0x00020000UL ) + { + FT_TRACE2(( " not a font using the SFNT container format\n" )); + return FT_THROW( Unknown_File_Format ); + } + + face->ttc_header.tag = TTAG_ttcf; + + if ( tag == TTAG_ttcf ) + { + FT_Int n; + + + FT_TRACE3(( "sfnt_open_font: file is a collection\n" )); + + if ( FT_STREAM_READ_FIELDS( ttc_header_fields, &face->ttc_header ) ) + return error; + + FT_TRACE3(( " with %ld subfonts\n", + face->ttc_header.count )); + + if ( face->ttc_header.count == 0 ) + return FT_THROW( Invalid_Table ); + + /* a rough size estimate: let's conservatively assume that there */ + /* is just a single table info in each subfont header (12 + 16*1 = */ + /* 28 bytes), thus we have (at least) `12 + 4*count' bytes for the */ + /* size of the TTC header plus `28*count' bytes for all subfont */ + /* headers */ + if ( (FT_ULong)face->ttc_header.count > stream->size / ( 28 + 4 ) ) + return FT_THROW( Array_Too_Large ); + + /* now read the offsets of each font in the file */ + if ( FT_QNEW_ARRAY( face->ttc_header.offsets, face->ttc_header.count ) ) + return error; + + if ( FT_FRAME_ENTER( face->ttc_header.count * 4L ) ) + return error; + + for ( n = 0; n < face->ttc_header.count; n++ ) + face->ttc_header.offsets[n] = FT_GET_ULONG(); + + FT_FRAME_EXIT(); + } + else + { + FT_TRACE3(( "sfnt_open_font: synthesize TTC\n" )); + + face->ttc_header.version = 1 << 16; + face->ttc_header.count = 1; + + if ( FT_QNEW( face->ttc_header.offsets ) ) + return error; + + face->ttc_header.offsets[0] = offset; + } + + return error; + } + + + FT_LOCAL_DEF( FT_Error ) + sfnt_init_face( FT_Stream stream, + TT_Face face, + FT_Int face_instance_index, + FT_Int num_params, + FT_Parameter* params ) + { + FT_Error error; + FT_Library library = face->root.driver->root.library; + SFNT_Service sfnt; + FT_Int face_index; + FT_Long woff2_num_faces = 0; + + + /* for now, parameters are unused */ + FT_UNUSED( num_params ); + FT_UNUSED( params ); + + + sfnt = (SFNT_Service)face->sfnt; + if ( !sfnt ) + { + sfnt = (SFNT_Service)FT_Get_Module_Interface( library, "sfnt" ); + if ( !sfnt ) + { + FT_ERROR(( "sfnt_init_face: cannot access `sfnt' module\n" )); + return FT_THROW( Missing_Module ); + } + + face->sfnt = sfnt; + face->goto_table = sfnt->goto_table; + } + + FT_FACE_FIND_GLOBAL_SERVICE( face, face->psnames, POSTSCRIPT_CMAPS ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( !face->mm ) + { + /* we want the MM interface from the `truetype' module only */ + FT_Module tt_module = FT_Get_Module( library, "truetype" ); + + + face->mm = ft_module_get_service( tt_module, + FT_SERVICE_ID_MULTI_MASTERS, + 0 ); + } + + if ( !face->tt_var ) + { + /* we want the metrics variations interface */ + /* from the `truetype' module only */ + FT_Module tt_module = FT_Get_Module( library, "truetype" ); + + + face->tt_var = ft_module_get_service( tt_module, + FT_SERVICE_ID_METRICS_VARIATIONS, + 0 ); + } + + if ( !face->face_var ) + face->face_var = ft_module_get_service( + &face->root.driver->root, + FT_SERVICE_ID_METRICS_VARIATIONS, + 0 ); +#endif + + FT_TRACE2(( "SFNT driver\n" )); + + 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: %p (index %d)\n", + (void *)face, + face_instance_index )); + + face_index = FT_ABS( face_instance_index ) & 0xFFFF; + + /* value -(N+1) requests information on index N */ + if ( face_instance_index < 0 && face_index > 0 ) + face_index--; + + if ( face_index >= face->ttc_header.count ) + { + if ( face_instance_index >= 0 ) + return FT_THROW( Invalid_Argument ); + else + face_index = 0; + } + + if ( FT_STREAM_SEEK( face->ttc_header.offsets[face_index] ) ) + return error; + + /* check whether we have a valid TrueType file */ + error = sfnt->load_font_dir( face, stream ); + if ( error ) + return error; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + { + FT_Memory memory = face->root.memory; + + FT_ULong fvar_len; + + FT_ULong version; + FT_ULong offset; + + FT_UShort num_axes; + FT_UShort axis_size; + FT_UShort num_instances; + FT_UShort instance_size; + + FT_Int instance_index; + + FT_Byte* default_values = NULL; + FT_Byte* instance_values = NULL; + + + instance_index = FT_ABS( face_instance_index ) >> 16; + + /* test whether current face is a GX font with named instances */ + if ( face->goto_table( face, TTAG_fvar, stream, &fvar_len ) || + fvar_len < 20 || + FT_READ_ULONG( version ) || + FT_READ_USHORT( offset ) || + FT_STREAM_SKIP( 2 ) /* reserved */ || + FT_READ_USHORT( num_axes ) || + FT_READ_USHORT( axis_size ) || + FT_READ_USHORT( num_instances ) || + FT_READ_USHORT( instance_size ) ) + { + version = 0; + offset = 0; + num_axes = 0; + axis_size = 0; + num_instances = 0; + instance_size = 0; + } + + /* check that the data is bound by the table length */ + if ( version != 0x00010000UL || + axis_size != 20 || + num_axes == 0 || + /* `num_axes' limit implied by 16-bit `instance_size' */ + num_axes > 0x3FFE || + !( instance_size == 4 + 4 * num_axes || + instance_size == 6 + 4 * num_axes ) || + /* `num_instances' limit implied by limited range of name IDs */ + num_instances > 0x7EFF || + offset + + axis_size * num_axes + + instance_size * num_instances > fvar_len ) + num_instances = 0; + else + face->variation_support |= TT_FACE_FLAG_VAR_FVAR; + + /* + * As documented in the OpenType specification, an entry for the + * default instance may be omitted in the named instance table. In + * particular this means that even if there is no named instance + * table in the font we actually do have a named instance, namely the + * default instance. + * + * For consistency, we always want the default instance in our list + * of named instances. If it is missing, we try to synthesize it + * later on. Here, we have to adjust `num_instances' accordingly. + */ + + if ( ( face->variation_support & TT_FACE_FLAG_VAR_FVAR ) && + !( FT_QALLOC( default_values, num_axes * 4 ) || + FT_QALLOC( instance_values, num_axes * 4 ) ) ) + { + /* the current stream position is 16 bytes after the table start */ + FT_ULong array_start = FT_STREAM_POS() - 16 + offset; + FT_ULong default_value_offset, instance_offset; + + FT_Byte* p; + FT_UInt i; + + + default_value_offset = array_start + 8; + p = default_values; + + for ( i = 0; i < num_axes; i++ ) + { + (void)FT_STREAM_READ_AT( default_value_offset, p, 4 ); + + default_value_offset += axis_size; + p += 4; + } + + instance_offset = array_start + axis_size * num_axes + 4; + + for ( i = 0; i < num_instances; i++ ) + { + (void)FT_STREAM_READ_AT( instance_offset, + instance_values, + num_axes * 4 ); + + if ( !ft_memcmp( default_values, instance_values, num_axes * 4 ) ) + break; + + instance_offset += instance_size; + } + + /* named instance indices start with value 1 */ + face->var_default_named_instance = i + 1; + + if ( i == num_instances ) + { + /* no default instance in named instance table; */ + /* we thus have to synthesize it */ + num_instances++; + } + } + + FT_FREE( default_values ); + FT_FREE( instance_values ); + + /* we don't support Multiple Master CFFs yet; */ + /* note that `glyf' or `CFF2' have precedence */ + if ( face->goto_table( face, TTAG_glyf, stream, 0 ) && + face->goto_table( face, TTAG_CFF2, stream, 0 ) && + !face->goto_table( face, TTAG_CFF, stream, 0 ) ) + num_instances = 0; + + /* instance indices in `face_instance_index' start with index 1, */ + /* thus `>' and not `>=' */ + if ( instance_index > num_instances ) + { + if ( face_instance_index >= 0 ) + return FT_THROW( Invalid_Argument ); + else + num_instances = 0; + } + + face->root.style_flags = (FT_Long)num_instances << 16; + } +#endif + + face->root.num_faces = face->ttc_header.count; + face->root.face_index = face_instance_index; + + /* `num_faces' for a WOFF2 needs to be handled separately. */ + if ( woff2_num_faces ) + face->root.num_faces = woff2_num_faces; + + return error; + } + + +#define LOAD_( x ) \ + do \ + { \ + FT_TRACE2(( "`" #x "' " )); \ + FT_TRACE3(( "-->\n" )); \ + \ + error = sfnt->load_ ## x( face, stream ); \ + \ + FT_TRACE2(( "%s\n", ( !error ) \ + ? "loaded" \ + : FT_ERR_EQ( error, Table_Missing ) \ + ? "missing" \ + : "failed to load" )); \ + FT_TRACE3(( "\n" )); \ + } while ( 0 ) + +#define LOADM_( x, vertical ) \ + do \ + { \ + FT_TRACE2(( "`%s" #x "' ", \ + vertical ? "vertical " : "" )); \ + FT_TRACE3(( "-->\n" )); \ + \ + error = sfnt->load_ ## x( face, stream, vertical ); \ + \ + FT_TRACE2(( "%s\n", ( !error ) \ + ? "loaded" \ + : FT_ERR_EQ( error, Table_Missing ) \ + ? "missing" \ + : "failed to load" )); \ + FT_TRACE3(( "\n" )); \ + } while ( 0 ) + +#define GET_NAME( id, field ) \ + do \ + { \ + error = tt_face_get_name( face, TT_NAME_ID_ ## id, field ); \ + if ( error ) \ + goto Exit; \ + } while ( 0 ) + + + FT_LOCAL_DEF( FT_Error ) + sfnt_load_face( FT_Stream stream, + TT_Face face, + FT_Int face_instance_index, + FT_Int num_params, + FT_Parameter* params ) + { + FT_Error error; +#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES + FT_Error psnames_error; +#endif + + FT_Bool has_outline; + FT_Bool is_apple_sbit; + + FT_Bool has_CBLC; + FT_Bool has_CBDT; + FT_Bool has_EBLC; + FT_Bool has_bloc; + FT_Bool has_sbix; + + FT_Bool ignore_typographic_family = FALSE; + FT_Bool ignore_typographic_subfamily = FALSE; + FT_Bool ignore_sbix = FALSE; + + SFNT_Service sfnt = (SFNT_Service)face->sfnt; + + FT_UNUSED( face_instance_index ); + + + /* Check parameters */ + + { + FT_Int i; + + + for ( i = 0; i < num_params; i++ ) + { + if ( params[i].tag == FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY ) + ignore_typographic_family = TRUE; + else if ( params[i].tag == FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY ) + ignore_typographic_subfamily = TRUE; + else if ( params[i].tag == FT_PARAM_TAG_IGNORE_SBIX ) + ignore_sbix = TRUE; + } + } + + /* Load tables */ + + /* We now support two SFNT-based bitmapped font formats. They */ + /* are recognized easily as they do not include a `glyf' */ + /* table. */ + /* */ + /* The first format comes from Apple, and uses a table named */ + /* `bhed' instead of `head' to store the font header (using */ + /* the same format). It also doesn't include horizontal and */ + /* vertical metrics tables (i.e. `hhea' and `vhea' tables are */ + /* missing). */ + /* */ + /* The other format comes from Microsoft, and is used with */ + /* WinCE/PocketPC. It looks like a standard TTF, except that */ + /* it doesn't contain outlines. */ + /* */ + + FT_TRACE2(( "sfnt_load_face: %p\n", (void *)face )); + FT_TRACE2(( "\n" )); + + /* do we have outlines in there? */ +#ifdef FT_CONFIG_OPTION_INCREMENTAL + has_outline = FT_BOOL( face->root.internal->incremental_interface || + tt_face_lookup_table( face, TTAG_glyf ) || + tt_face_lookup_table( face, TTAG_CFF ) || + tt_face_lookup_table( face, TTAG_CFF2 ) ); +#else + has_outline = FT_BOOL( tt_face_lookup_table( face, TTAG_glyf ) || + tt_face_lookup_table( face, TTAG_CFF ) || + tt_face_lookup_table( face, TTAG_CFF2 ) ); +#endif + + /* check which sbit formats are present */ + has_CBLC = !face->goto_table( face, TTAG_CBLC, stream, 0 ); + has_CBDT = !face->goto_table( face, TTAG_CBDT, stream, 0 ); + has_EBLC = !face->goto_table( face, TTAG_EBLC, stream, 0 ); + has_bloc = !face->goto_table( face, TTAG_bloc, stream, 0 ); + has_sbix = !face->goto_table( face, TTAG_sbix, stream, 0 ); + + is_apple_sbit = FALSE; + + if ( ignore_sbix ) + has_sbix = FALSE; + + /* if this font doesn't contain outlines, we try to load */ + /* a `bhed' table */ + if ( !has_outline && sfnt->load_bhed ) + { + LOAD_( bhed ); + is_apple_sbit = FT_BOOL( !error ); + } + + /* load the font header (`head' table) if this isn't an Apple */ + /* sbit font file */ + if ( !is_apple_sbit || has_sbix ) + { + LOAD_( head ); + if ( error ) + goto Exit; + } + + /* Ignore outlines for CBLC/CBDT fonts. */ + if ( has_CBLC || has_CBDT ) + has_outline = FALSE; + + /* OpenType 1.8.2 introduced limits to this value; */ + /* however, they make sense for older SFNT fonts also */ + if ( face->header.Units_Per_EM < 16 || + face->header.Units_Per_EM > 16384 ) + { + error = FT_THROW( Invalid_Table ); + + goto Exit; + } + + /* the following tables are often not present in embedded TrueType */ + /* fonts within PDF documents, so don't check for them. */ + LOAD_( maxp ); + LOAD_( cmap ); + + /* the following tables are optional in PCL fonts -- */ + /* don't check for errors */ + LOAD_( name ); + LOAD_( post ); + +#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES + psnames_error = error; +#endif + + /* do not load the metrics headers and tables if this is an Apple */ + /* sbit font file */ + if ( !is_apple_sbit ) + { + /* load the `hhea' and `hmtx' tables */ + LOADM_( hhea, 0 ); + if ( !error ) + { + LOADM_( hmtx, 0 ); + if ( FT_ERR_EQ( error, Table_Missing ) ) + { + error = FT_THROW( Hmtx_Table_Missing ); + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* If this is an incrementally loaded font and there are */ + /* overriding metrics, tolerate a missing `hmtx' table. */ + if ( face->root.internal->incremental_interface && + face->root.internal->incremental_interface->funcs-> + get_glyph_metrics ) + { + face->horizontal.number_Of_HMetrics = 0; + error = FT_Err_Ok; + } +#endif + } + } + else if ( FT_ERR_EQ( error, Table_Missing ) ) + { + /* No `hhea' table necessary for SFNT Mac fonts. */ + if ( face->format_tag == TTAG_true ) + { + FT_TRACE2(( "This is an SFNT Mac font.\n" )); + + has_outline = 0; + error = FT_Err_Ok; + } + else + { + error = FT_THROW( Horiz_Header_Missing ); + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* If this is an incrementally loaded font and there are */ + /* overriding metrics, tolerate a missing `hhea' table. */ + if ( face->root.internal->incremental_interface && + face->root.internal->incremental_interface->funcs-> + get_glyph_metrics ) + { + face->horizontal.number_Of_HMetrics = 0; + error = FT_Err_Ok; + } +#endif + + } + } + + if ( error ) + goto Exit; + + /* try to load the `vhea' and `vmtx' tables */ + LOADM_( hhea, 1 ); + if ( !error ) + { + LOADM_( hmtx, 1 ); + if ( !error ) + face->vertical_info = 1; + } + + if ( error && FT_ERR_NEQ( error, Table_Missing ) ) + goto Exit; + + LOAD_( os2 ); + if ( error ) + { + /* we treat the table as missing if there are any errors */ + face->os2.version = 0xFFFFU; + } + } + + /* the optional tables */ + + /* embedded bitmap support */ + /* TODO: Replace this clumsy check for all possible sbit tables */ + /* with something better (for example, by passing a parameter */ + /* to suppress 'sbix' loading). */ + if ( sfnt->load_eblc && + ( has_CBLC || has_EBLC || has_bloc || has_sbix ) ) + LOAD_( eblc ); + + /* colored glyph support */ + if ( sfnt->load_cpal ) + { + LOAD_( cpal ); + LOAD_( colr ); + } + + /* OpenType-SVG glyph support */ + if ( sfnt->load_svg ) + LOAD_( svg ); + + /* consider the pclt, kerning, and gasp tables as optional */ + LOAD_( pclt ); + LOAD_( gasp ); + LOAD_( kern ); + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING + LOAD_( gpos ); +#endif + + face->root.num_glyphs = face->max_profile.numGlyphs; + + /* Bit 8 of the `fsSelection' field in the `OS/2' table denotes */ + /* a WWS-only font face. `WWS' stands for `weight', width', and */ + /* `slope', a term used by Microsoft's Windows Presentation */ + /* Foundation (WPF). This flag has been introduced in version */ + /* 1.5 of the OpenType specification (May 2008). */ + + face->root.family_name = NULL; + face->root.style_name = NULL; + if ( face->os2.version != 0xFFFFU && face->os2.fsSelection & 256 ) + { + if ( !ignore_typographic_family ) + GET_NAME( TYPOGRAPHIC_FAMILY, &face->root.family_name ); + if ( !face->root.family_name ) + GET_NAME( FONT_FAMILY, &face->root.family_name ); + + if ( !ignore_typographic_subfamily ) + GET_NAME( TYPOGRAPHIC_SUBFAMILY, &face->root.style_name ); + if ( !face->root.style_name ) + GET_NAME( FONT_SUBFAMILY, &face->root.style_name ); + } + else + { + GET_NAME( WWS_FAMILY, &face->root.family_name ); + if ( !face->root.family_name && !ignore_typographic_family ) + GET_NAME( TYPOGRAPHIC_FAMILY, &face->root.family_name ); + if ( !face->root.family_name ) + GET_NAME( FONT_FAMILY, &face->root.family_name ); + + GET_NAME( WWS_SUBFAMILY, &face->root.style_name ); + if ( !face->root.style_name && !ignore_typographic_subfamily ) + GET_NAME( TYPOGRAPHIC_SUBFAMILY, &face->root.style_name ); + if ( !face->root.style_name ) + GET_NAME( FONT_SUBFAMILY, &face->root.style_name ); + } + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + { + FT_Memory memory = face->root.memory; + + + if ( FT_STRDUP( face->non_var_style_name, face->root.style_name ) ) + goto Exit; + } +#endif + + /* now set up root fields */ + { + FT_Face root = &face->root; + FT_Long flags = root->face_flags; + + + /********************************************************************** + * + * Compute face flags. + */ + if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_CBLC || + face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX || + face->colr || + face->svg ) + flags |= FT_FACE_FLAG_COLOR; /* color glyphs */ + + if ( has_outline == TRUE ) + { + /* by default (and for backward compatibility) we handle */ + /* fonts with an 'sbix' table as bitmap-only */ + if ( has_sbix ) + flags |= FT_FACE_FLAG_SBIX; /* with 'sbix' bitmaps */ + else + flags |= FT_FACE_FLAG_SCALABLE; /* scalable outlines */ + } + + /* The sfnt driver only supports bitmap fonts natively, thus we */ + /* don't set FT_FACE_FLAG_HINTER. */ + flags |= FT_FACE_FLAG_SFNT | /* SFNT file format */ + FT_FACE_FLAG_HORIZONTAL; /* horizontal data */ + +#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES + if ( !psnames_error && + face->postscript.FormatType != 0x00030000L ) + flags |= FT_FACE_FLAG_GLYPH_NAMES; +#endif + + /* fixed width font? */ + if ( face->postscript.isFixedPitch ) + flags |= FT_FACE_FLAG_FIXED_WIDTH; + + /* vertical information? */ + if ( face->vertical_info ) + flags |= FT_FACE_FLAG_VERTICAL; + + /* kerning available ? */ + if ( TT_FACE_HAS_KERNING( face ) +#ifdef TT_CONFIG_OPTION_GPOS_KERNING + || face->gpos_kerning_available +#endif + ) + flags |= FT_FACE_FLAG_KERNING; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* Don't bother to load the tables unless somebody asks for them. */ + /* No need to do work which will (probably) not be used. */ + if ( face->variation_support & TT_FACE_FLAG_VAR_FVAR ) + flags |= FT_FACE_FLAG_MULTIPLE_MASTERS; +#endif + + root->face_flags = flags; + + /********************************************************************** + * + * Compute style flags. + */ + + flags = 0; + if ( has_outline == TRUE && face->os2.version != 0xFFFFU ) + { + /* We have an OS/2 table; use the `fsSelection' field. Bit 9 */ + /* indicates an oblique font face. This flag has been */ + /* introduced in version 1.5 of the OpenType specification. */ + + if ( face->os2.fsSelection & 512 ) /* bit 9 */ + flags |= FT_STYLE_FLAG_ITALIC; + else if ( face->os2.fsSelection & 1 ) /* bit 0 */ + flags |= FT_STYLE_FLAG_ITALIC; + + if ( face->os2.fsSelection & 32 ) /* bit 5 */ + flags |= FT_STYLE_FLAG_BOLD; + } + else + { + /* this is an old Mac font, use the header field */ + + if ( face->header.Mac_Style & 1 ) + flags |= FT_STYLE_FLAG_BOLD; + + if ( face->header.Mac_Style & 2 ) + flags |= FT_STYLE_FLAG_ITALIC; + } + + root->style_flags |= flags; + + /********************************************************************** + * + * Polish the charmaps. + * + * Try to set the charmap encoding according to the platform & + * encoding ID of each charmap. Emulate Unicode charmap if one + * is missing. + */ + + tt_face_build_cmaps( face ); /* ignore errors */ + + + /* set the encoding fields */ + { + FT_Int m; +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + FT_Bool has_unicode = FALSE; +#endif + + + for ( m = 0; m < root->num_charmaps; m++ ) + { + FT_CharMap charmap = root->charmaps[m]; + + + charmap->encoding = sfnt_find_encoding( charmap->platform_id, + charmap->encoding_id ); + +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + if ( charmap->encoding == FT_ENCODING_UNICODE || + charmap->encoding == FT_ENCODING_MS_SYMBOL ) /* PUA */ + has_unicode = TRUE; + } + + /* synthesize Unicode charmap if one is missing */ + if ( !has_unicode && + root->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) + { + FT_CharMapRec cmaprec; + + + cmaprec.face = root; + cmaprec.platform_id = TT_PLATFORM_MICROSOFT; + cmaprec.encoding_id = TT_MS_ID_UNICODE_CS; + cmaprec.encoding = FT_ENCODING_UNICODE; + + + error = FT_CMap_New( (FT_CMap_Class)&tt_cmap_unicode_class_rec, + NULL, &cmaprec, NULL ); + if ( error && + FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) && + FT_ERR_NEQ( error, Unimplemented_Feature ) ) + goto Exit; + error = FT_Err_Ok; + +#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + } + } + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + /* + * Now allocate the root array of FT_Bitmap_Size records and + * populate them. Unfortunately, it isn't possible to indicate bit + * depths in the FT_Bitmap_Size record. This is a design error. + */ + { + FT_UInt count; + + + count = face->sbit_num_strikes; + + if ( count > 0 ) + { + FT_Memory memory = face->root.memory; + FT_UShort em_size = face->header.Units_Per_EM; + FT_Short avgwidth = face->os2.xAvgCharWidth; + FT_Size_Metrics metrics; + + FT_UInt* sbit_strike_map = NULL; + FT_UInt strike_idx, bsize_idx; + + + if ( em_size == 0 || face->os2.version == 0xFFFFU ) + { + avgwidth = 1; + em_size = 1; + } + + /* to avoid invalid strike data in the `available_sizes' field */ + /* of `FT_Face', we map `available_sizes' indices to strike */ + /* indices */ + if ( FT_NEW_ARRAY( root->available_sizes, count ) || + FT_QNEW_ARRAY( sbit_strike_map, count ) ) + goto Exit; + + bsize_idx = 0; + for ( strike_idx = 0; strike_idx < count; strike_idx++ ) + { + FT_Bitmap_Size* bsize = root->available_sizes + bsize_idx; + + + error = sfnt->load_strike_metrics( face, strike_idx, &metrics ); + if ( error ) + continue; + + bsize->height = (FT_Short)( metrics.height >> 6 ); + bsize->width = (FT_Short)( + ( avgwidth * metrics.x_ppem + em_size / 2 ) / em_size ); + + bsize->x_ppem = metrics.x_ppem << 6; + bsize->y_ppem = metrics.y_ppem << 6; + + /* assume 72dpi */ + bsize->size = metrics.y_ppem << 6; + + /* only use strikes with valid PPEM values */ + if ( bsize->x_ppem && bsize->y_ppem ) + sbit_strike_map[bsize_idx++] = strike_idx; + } + + /* reduce array size to the actually used elements */ + FT_MEM_QRENEW_ARRAY( sbit_strike_map, count, bsize_idx ); + + /* from now on, all strike indices are mapped */ + /* using `sbit_strike_map' */ + if ( bsize_idx ) + { + face->sbit_strike_map = sbit_strike_map; + + root->face_flags |= FT_FACE_FLAG_FIXED_SIZES; + root->num_fixed_sizes = (FT_Int)bsize_idx; + } + } + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + /* a font with no bitmaps and no outlines is scalable; */ + /* it has only empty glyphs then */ + if ( !FT_HAS_FIXED_SIZES( root ) && !FT_IS_SCALABLE( root ) ) + root->face_flags |= FT_FACE_FLAG_SCALABLE; + + + /********************************************************************** + * + * Set up metrics. + */ + if ( FT_IS_SCALABLE( root ) || + FT_HAS_SBIX( root ) ) + { + /* XXX What about if outline header is missing */ + /* (e.g. sfnt wrapped bitmap)? */ + root->bbox.xMin = face->header.xMin; + root->bbox.yMin = face->header.yMin; + root->bbox.xMax = face->header.xMax; + root->bbox.yMax = face->header.yMax; + root->units_per_EM = face->header.Units_Per_EM; + + + /* + * Computing the ascender/descender/height is tricky. + * + * The OpenType specification v1.8.3 says: + * + * [OS/2's] sTypoAscender, sTypoDescender and sTypoLineGap fields + * are intended to allow applications to lay out documents in a + * typographically-correct and portable fashion. + * + * This is somewhat at odds with the decades of backwards + * compatibility, operating systems and applications doing whatever + * they want, not to mention broken fonts. + * + * Not all fonts have an OS/2 table; in this case, we take the values + * in the horizontal header, although there is nothing stopping the + * values from being unreliable. Even with a OS/2 table, certain fonts + * set the sTypoAscender, sTypoDescender and sTypoLineGap fields to 0 + * and instead correctly set usWinAscent and usWinDescent. + * + * As an example, Arial Narrow is shipped as four files ARIALN.TTF, + * ARIALNI.TTF, ARIALNB.TTF and ARIALNBI.TTF. Strangely, all fonts have + * the same values in their sTypo* fields, except ARIALNB.ttf which + * sets them to 0. All of them have different usWinAscent/Descent + * values. The OS/2 table therefore cannot be trusted for computing the + * text height reliably. + * + * As a compromise, do the following: + * + * 1. If the OS/2 table exists and the fsSelection bit 7 is set + * (USE_TYPO_METRICS), trust the font and use the sTypo* metrics. + * 2. Otherwise, use the `hhea' table's metrics. + * 3. If they are zero and the OS/2 table exists, + * 1. use the OS/2 table's sTypo* metrics if they are non-zero. + * 2. Otherwise, use the OS/2 table's usWin* metrics. + */ + + if ( face->os2.version != 0xFFFFU && face->os2.fsSelection & 128 ) + { + root->ascender = face->os2.sTypoAscender; + root->descender = face->os2.sTypoDescender; + root->height = root->ascender - root->descender + + face->os2.sTypoLineGap; + } + else + { + root->ascender = face->horizontal.Ascender; + root->descender = face->horizontal.Descender; + root->height = root->ascender - root->descender + + face->horizontal.Line_Gap; + + if ( !( root->ascender || root->descender ) ) + { + if ( face->os2.version != 0xFFFFU ) + { + if ( face->os2.sTypoAscender || face->os2.sTypoDescender ) + { + root->ascender = face->os2.sTypoAscender; + root->descender = face->os2.sTypoDescender; + root->height = root->ascender - root->descender + + face->os2.sTypoLineGap; + } + else + { + root->ascender = (FT_Short)face->os2.usWinAscent; + root->descender = -(FT_Short)face->os2.usWinDescent; + root->height = root->ascender - root->descender; + } + } + } + } + + root->max_advance_width = + (FT_Short)face->horizontal.advance_Width_Max; + root->max_advance_height = + (FT_Short)( face->vertical_info ? face->vertical.advance_Height_Max + : root->height ); + + /* See https://www.microsoft.com/typography/otspec/post.htm -- */ + /* Adjust underline position from top edge to centre of */ + /* stroke to convert TrueType meaning to FreeType meaning. */ + root->underline_position = face->postscript.underlinePosition - + face->postscript.underlineThickness / 2; + root->underline_thickness = face->postscript.underlineThickness; + } + + } + + Exit: + FT_TRACE2(( "sfnt_load_face: done\n" )); + + return error; + } + + +#undef LOAD_ +#undef LOADM_ +#undef GET_NAME + + + FT_LOCAL_DEF( void ) + sfnt_done_face( TT_Face face ) + { + FT_Memory memory; + SFNT_Service sfnt; + + + if ( !face ) + return; + + memory = face->root.memory; + sfnt = (SFNT_Service)face->sfnt; + + if ( sfnt ) + { + /* destroy the postscript names table if it is loaded */ + if ( sfnt->free_psnames ) + sfnt->free_psnames( face ); + + /* destroy the embedded bitmaps table if it is loaded */ + if ( sfnt->free_eblc ) + sfnt->free_eblc( face ); + + /* destroy color table data if it is loaded */ + if ( sfnt->free_cpal ) + { + sfnt->free_cpal( face ); + sfnt->free_colr( face ); + } + +#ifdef FT_CONFIG_OPTION_SVG + /* free SVG data */ + if ( sfnt->free_svg ) + sfnt->free_svg( face ); +#endif + } + +#ifdef TT_CONFIG_OPTION_BDF + /* freeing the embedded BDF properties */ + tt_face_free_bdf_props( face ); +#endif + + /* freeing the kerning table */ + tt_face_done_kern( face ); + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING + /* freeing the GPOS table */ + tt_face_done_gpos( face ); +#endif + + /* freeing the collection table */ + FT_FREE( face->ttc_header.offsets ); + face->ttc_header.count = 0; + + /* freeing table directory */ + FT_FREE( face->dir_tables ); + face->num_tables = 0; + + { + FT_Stream stream = FT_FACE_STREAM( face ); + + + /* simply release the 'cmap' table frame */ + FT_FRAME_RELEASE( face->cmap_table ); + face->cmap_size = 0; + } + + face->horz_metrics_size = 0; + face->vert_metrics_size = 0; + + /* freeing vertical metrics, if any */ + if ( face->vertical_info ) + { + FT_FREE( face->vertical.long_metrics ); + FT_FREE( face->vertical.short_metrics ); + face->vertical_info = 0; + } + + /* freeing the gasp table */ + FT_FREE( face->gasp.gaspRanges ); + face->gasp.numRanges = 0; + + /* freeing the name table */ + if ( sfnt ) + sfnt->free_name( face ); + + /* freeing family and style name */ + FT_FREE( face->root.family_name ); + FT_FREE( face->root.style_name ); + + /* freeing sbit size table */ + FT_FREE( face->root.available_sizes ); + FT_FREE( face->sbit_strike_map ); + face->root.num_fixed_sizes = 0; + + FT_FREE( face->postscript_name ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_FREE( face->var_postscript_prefix ); + FT_FREE( face->non_var_style_name ); +#endif + + /* freeing glyph color palette data */ + FT_FREE( face->palette_data.palette_name_ids ); + FT_FREE( face->palette_data.palette_flags ); + FT_FREE( face->palette_data.palette_entry_name_ids ); + FT_FREE( face->palette ); + + face->sfnt = NULL; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfobjs.h b/non-source/foreign/freetype2/src/sfnt/sfobjs.h new file mode 100644 index 000000000..90847d957 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfobjs.h @@ -0,0 +1,58 @@ +/**************************************************************************** + * + * sfobjs.h + * + * SFNT object management (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SFOBJS_H_ +#define SFOBJS_H_ + + +#include <freetype/internal/sfnt.h> +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + sfnt_init_face( FT_Stream stream, + TT_Face face, + FT_Int face_instance_index, + FT_Int num_params, + FT_Parameter* params ); + + FT_LOCAL( FT_Error ) + sfnt_load_face( FT_Stream stream, + TT_Face face, + FT_Int face_instance_index, + FT_Int num_params, + FT_Parameter* params ); + + FT_LOCAL( void ) + sfnt_done_face( TT_Face face ); + + FT_LOCAL( FT_Error ) + tt_face_get_name( TT_Face face, + FT_UShort nameid, + FT_String** name ); + + +FT_END_HEADER + +#endif /* SFOBJS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfwoff.c b/non-source/foreign/freetype2/src/sfnt/sfwoff.c new file mode 100644 index 000000000..14514bf95 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfwoff.c @@ -0,0 +1,426 @@ +/**************************************************************************** + * + * sfwoff.c + * + * WOFF format management (base). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. 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 <freetype/tttags.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/ftgzip.h> + + +#ifdef FT_CONFIG_OPTION_USE_ZLIB + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is 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->close = NULL; + } + + + FT_COMPARE_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_Tag 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 || + woff.num_tables > 0xFFFU || + 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_QALLOC( sfnt, 12 ) || FT_NEW( sfnt_stream ) ) + goto Exit; + + sfnt_header = sfnt; + + /* Write sfnt header. */ + { + FT_Int entrySelector = FT_MSB( woff.num_tables ); + FT_Int searchRange = ( 1 << entrySelector ) * 16; + FT_Int 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_QNEW_ARRAY( tables, woff.num_tables ) || + FT_QNEW_ARRAY( indices, woff.num_tables ) ) + goto Exit; + + FT_TRACE2(( "\n" )); + FT_TRACE2(( " tag offset compLen origLen checksum\n" )); + FT_TRACE2(( " -------------------------------------------\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_QREALLOC( sfnt, 12, 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 + { + /* 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; + } + } + + 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 + +#else /* !FT_CONFIG_OPTION_USE_ZLIB */ + + /* ANSI C doesn't like empty source files */ + typedef int sfwoff_dummy_; + +#endif /* !FT_CONFIG_OPTION_USE_ZLIB */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfwoff.h b/non-source/foreign/freetype2/src/sfnt/sfwoff.h new file mode 100644 index 000000000..a04735ffe --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfwoff.h @@ -0,0 +1,43 @@ +/**************************************************************************** + * + * sfwoff.h + * + * WOFFF format management (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef SFWOFF_H_ +#define SFWOFF_H_ + + +#include <freetype/internal/sfnt.h> +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + +#ifdef FT_CONFIG_OPTION_USE_ZLIB + + FT_LOCAL( FT_Error ) + woff_open_font( FT_Stream stream, + TT_Face face ); + + +#endif + +FT_END_HEADER + +#endif /* SFWOFF_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfwoff2.c b/non-source/foreign/freetype2/src/sfnt/sfwoff2.c new file mode 100644 index 000000000..589b3e0c6 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfwoff2.c @@ -0,0 +1,2380 @@ +/**************************************************************************** + * + * sfwoff2.c + * + * WOFF2 format management (base). + * + * Copyright (C) 2019-2024 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 <freetype/tttags.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> + + +#ifdef FT_CONFIG_OPTION_USE_BROTLI + +#include <brotli/decode.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 sfwoff2 + + /* An arbitrary, heuristic size limit (67MByte) for expanded WOFF2 data. */ +#define MAX_SFNT_SIZE ( 1 << 26 ) + +#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 + +#define HAVE_OVERLAP_SIMPLE_BITMAP 0x1 + + + static void + stream_close( FT_Stream stream ) + { + FT_Memory memory = stream->memory; + + + FT_FREE( stream->base ); + + stream->size = 0; + stream->close = NULL; + } + + + FT_COMPARE_DEF( int ) + compare_tags( const void* a, + const void* b ) + { + WOFF2_Table table1 = *(WOFF2_Table*)a; + WOFF2_Table table2 = *(WOFF2_Table*)b; + + FT_Tag tag1 = table1->Tag; + FT_Tag 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_QREALLOC( 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_Int shift; + + + for ( i = 0; i < aligned_size; i += 4 ) + checksum += FT_NEXT_ULONG( buf ); + + /* remaining bytes can be shifted and added one at a time */ + for ( shift = 24; i < size; i++, shift -= 8 ) + checksum += (FT_UInt32)FT_NEXT_BYTE( buf ) << shift; + + return checksum; + } + + + static FT_Error + woff2_decompress( FT_Byte* dst, + FT_ULong dst_size, + const FT_Byte* src, + FT_ULong src_size ) + { + /* 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; + } + + + static WOFF2_Table + find_table( WOFF2_Table* tables, + FT_UShort num_tables, + FT_Tag 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_Bool have_overlap, + 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 ( i == 0 && have_overlap ) + flag |= GLYF_OVERLAP_SIMPLE; + + 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_QALLOC( 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 option_flags; + 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 glyph_buf_size; + FT_ULong bbox_bitmap_offset; + FT_ULong bbox_bitmap_length; + FT_ULong overlap_bitmap_offset = 0; + FT_ULong overlap_bitmap_length = 0; + + 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_QNEW_ARRAY( substreams, num_substreams ) ) + goto Fail; + + if ( FT_STREAM_SKIP( 2 ) ) + goto Fail; + if ( FT_READ_USHORT( option_flags ) ) + goto Fail; + if ( FT_READ_USHORT( num_glyphs ) ) + goto Fail; + if ( FT_READ_USHORT( index_format ) ) + goto Fail; + + FT_TRACE4(( "option_flags = %u; num_glyphs = %u; index_format = %u\n", + option_flags, 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 + 2 + 2 + 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 ( option_flags & HAVE_OVERLAP_SIMPLE_BITMAP ) + { + /* Size of overlapBitmap = floor((numGlyphs + 7) / 8) */ + overlap_bitmap_length = ( num_glyphs + 7U ) >> 3; + if ( overlap_bitmap_length > info->glyf_table->TransformLength - offset ) + goto Fail; + + overlap_bitmap_offset = pos + offset; + + FT_TRACE5(( " Overlap bitmap: offset = %lu; size = %lu;\n", + overlap_bitmap_offset, overlap_bitmap_length )); + offset += overlap_bitmap_length; + } + + if ( FT_QNEW_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) */ + bbox_bitmap_length = ( ( num_glyphs + 31U ) >> 5 ) << 2; + /* bboxStreamSize is the combined size of bboxBitmap and bboxStream. */ + substreams[BBOX_STREAM].offset += bbox_bitmap_length; + + glyph_buf_size = WOFF2_DEFAULT_GLYPH_BUF; + if ( FT_QALLOC( glyph_buf, glyph_buf_size ) ) + goto Fail; + + if ( FT_QNEW_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 = 0; + 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_QREALLOC( 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_Bool have_overlap = FALSE; + FT_Byte overlap_bitmap; + FT_ULong overlap_offset; + 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; + + + /* Set `have_overlap`. */ + if ( overlap_bitmap_offset ) + { + overlap_offset = overlap_bitmap_offset + ( i >> 3 ); + if ( FT_STREAM_SEEK( overlap_offset ) || + FT_READ_BYTE( overlap_bitmap ) ) + goto Fail; + if ( overlap_bitmap & ( 0x80 >> ( i & 7 ) ) ) + have_overlap = TRUE; + } + + if ( FT_QNEW_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_QNEW_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_QREALLOC( 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, + have_overlap, + 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'. */ + 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_QNEW_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_QNEW_ARRAY( advance_widths, num_hmetrics ) || + FT_QNEW_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_QALLOC( 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[16]; + + /* 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 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_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_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_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 || + woff2.num_tables > 0xFFFU || + 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_QNEW_ARRAY( tables, woff2.num_tables ) || + FT_QNEW_ARRAY( indices, woff2.num_tables ) ) + goto Exit; + + FT_TRACE2(( "\n" )); + FT_TRACE2(( " tag flags transform origLen transformLen offset\n" )); + FT_TRACE2(( " -----------------------------------------------------------\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->flags = flags; + table->src_offset = src_offset; + table->src_length = table->TransformLength; + src_offset += table->TransformLength; + table->dst_offset = 0; + + 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 )); + + /* pre-zero pointers within in case of failure */ + 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_QNEW_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 > 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; + + + if ( ttc_font->num_tables == 0 || ttc_font->num_tables > 0xFFFU ) + { + FT_ERROR(( "woff2_open_font: invalid WOFF2 CollectionFontEntry\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* Create a temporary array. */ + if ( FT_QNEW_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_QRENEW_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; + + if ( sfnt_size >= MAX_SFNT_SIZE ) + sfnt_size = MAX_SFNT_SIZE; + +#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_QALLOC( sfnt, sfnt_size ) || + FT_NEW( sfnt_stream ) ) + goto Exit; + + { + FT_Byte* sfnt_header = sfnt; + + FT_Int entrySelector = FT_MSB( woff2.num_tables ); + FT_Int searchRange = ( 1 << entrySelector ) * 16; + FT_Int rangeShift = woff2.num_tables * 16 - searchRange; + + + WRITE_ULONG ( sfnt_header, woff2.flavor ); + 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 ); + + /* reject fonts that have multiple tables with the same tag */ + for ( nn = 1; nn < woff2.num_tables; nn++ ) + { + FT_Tag tag = indices[nn]->Tag; + + + if ( tag == indices[nn - 1]->Tag ) + { + FT_ERROR(( "woff2_open_font:" + " multiple tables with tag `%c%c%c%c'.\n", + (FT_Char)( tag >> 24 ), + (FT_Char)( tag >> 16 ), + (FT_Char)( tag >> 8 ), + (FT_Char)( tag ) )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + } + + if ( woff2.uncompressed_size < 1 ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* We must not blindly trust `uncompressed_size` since its */ + /* value might be corrupted. If it is too large, reject the */ + /* font. In other words, we don't accept a WOFF2 font that */ + /* expands to something larger than MAX_SFNT_SIZE. If ever */ + /* necessary, this limit can be easily adjusted. */ + if ( woff2.uncompressed_size > MAX_SFNT_SIZE ) + { + FT_ERROR(( "Uncompressed font too large.\n" )); + error = FT_THROW( Array_Too_Large ); + goto Exit; + } + + /* Allocate memory for uncompressed table data. */ + if ( FT_QALLOC( 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_QREALLOC( 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 + +#else /* !FT_CONFIG_OPTION_USE_BROTLI */ + + /* ANSI C doesn't like empty source files */ + typedef int sfwoff2_dummy_; + +#endif /* !FT_CONFIG_OPTION_USE_BROTLI */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/sfwoff2.h b/non-source/foreign/freetype2/src/sfnt/sfwoff2.h new file mode 100644 index 000000000..f41140648 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/sfwoff2.h @@ -0,0 +1,78 @@ +/**************************************************************************** + * + * sfwoff2.h + * + * WOFFF2 format management (specification). + * + * Copyright (C) 2019-2024 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 <freetype/internal/sfnt.h> +#include <freetype/internal/ftobjs.h> + + +FT_BEGIN_HEADER + +#ifdef FT_CONFIG_OPTION_USE_BROTLI + + /* 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 +#define GLYF_OVERLAP_SIMPLE 1 << 6 + + /* 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 ); + +#endif /* FT_CONFIG_OPTION_USE_BROTLI */ + +FT_END_HEADER + +#endif /* SFWOFF2_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttbdf.c b/non-source/foreign/freetype2/src/sfnt/ttbdf.c new file mode 100644 index 000000000..d9765f486 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttbdf.c @@ -0,0 +1,257 @@ +/**************************************************************************** + * + * ttbdf.c + * + * TrueType and OpenType embedded BDF properties (body). + * + * Copyright (C) 2005-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include "ttbdf.h" + +#include "sferrors.h" + + +#ifdef TT_CONFIG_OPTION_BDF + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttbdf + + + FT_LOCAL_DEF( void ) + tt_face_free_bdf_props( TT_Face face ) + { + TT_BDF bdf = &face->bdf; + + + if ( bdf->loaded ) + { + FT_Stream stream = FT_FACE( face )->stream; + + + if ( bdf->table ) + FT_FRAME_RELEASE( bdf->table ); + + bdf->table_end = NULL; + bdf->strings = NULL; + bdf->strings_size = 0; + } + } + + + static FT_Error + tt_face_load_bdf_props( TT_Face face, + FT_Stream stream ) + { + TT_BDF bdf = &face->bdf; + FT_ULong length; + FT_Error error; + + + FT_ZERO( bdf ); + + error = tt_face_goto_table( face, TTAG_BDF, stream, &length ); + if ( error || + length < 8 || + FT_FRAME_EXTRACT( length, bdf->table ) ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + bdf->table_end = bdf->table + length; + + { + FT_Byte* p = bdf->table; + FT_UInt version = FT_NEXT_USHORT( p ); + FT_UInt num_strikes = FT_NEXT_USHORT( p ); + FT_ULong strings = FT_NEXT_ULONG ( p ); + FT_UInt count; + FT_Byte* strike; + + + if ( version != 0x0001 || + strings < 8 || + ( strings - 8 ) / 4 < num_strikes || + strings + 1 > length ) + { + goto BadTable; + } + + bdf->num_strikes = num_strikes; + bdf->strings = bdf->table + strings; + bdf->strings_size = length - strings; + + count = bdf->num_strikes; + p = bdf->table + 8; + strike = p + count * 4; + + + for ( ; count > 0; count-- ) + { + FT_UInt num_items = FT_PEEK_USHORT( p + 2 ); + + /* + * We don't need to check the value sets themselves, since this + * is done later. + */ + strike += 10 * num_items; + + p += 4; + } + + if ( strike > bdf->strings ) + goto BadTable; + } + + bdf->loaded = 1; + + Exit: + return error; + + BadTable: + FT_FRAME_RELEASE( bdf->table ); + FT_ZERO( bdf ); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_find_bdf_prop( FT_Face face, /* TT_Face */ + const char* property_name, + BDF_PropertyRec *aprop ) + { + TT_Face ttface = (TT_Face)face; + TT_BDF bdf = &ttface->bdf; + FT_Size size = face->size; + FT_Error error = FT_Err_Ok; + FT_Byte* p; + FT_UInt count; + FT_Byte* strike; + FT_Offset property_len; + + + aprop->type = BDF_PROPERTY_TYPE_NONE; + + if ( bdf->loaded == 0 ) + { + error = tt_face_load_bdf_props( ttface, FT_FACE_STREAM( face ) ); + if ( error ) + goto Exit; + } + + count = bdf->num_strikes; + p = bdf->table + 8; + strike = p + 4 * count; + + error = FT_ERR( Invalid_Argument ); + + if ( !size || !property_name ) + goto Exit; + + property_len = ft_strlen( property_name ); + if ( property_len == 0 ) + goto Exit; + + for ( ; count > 0; count-- ) + { + FT_UInt _ppem = FT_NEXT_USHORT( p ); + FT_UInt _count = FT_NEXT_USHORT( p ); + + + if ( _ppem == size->metrics.y_ppem ) + { + count = _count; + goto FoundStrike; + } + + strike += 10 * _count; + } + goto Exit; + + FoundStrike: + p = strike; + for ( ; count > 0; count-- ) + { + FT_UInt type = FT_PEEK_USHORT( p + 4 ); + + + if ( ( type & 0x10 ) != 0 ) + { + FT_UInt32 name_offset = FT_PEEK_ULONG( p ); + FT_UInt32 value = FT_PEEK_ULONG( p + 6 ); + + /* be a bit paranoid for invalid entries here */ + if ( name_offset < bdf->strings_size && + property_len < bdf->strings_size - name_offset && + ft_strncmp( property_name, + (const char*)bdf->strings + name_offset, + bdf->strings_size - name_offset ) == 0 ) + { + switch ( type & 0x0F ) + { + case 0x00: /* string */ + case 0x01: /* atoms */ + /* check that the content is really 0-terminated */ + if ( value < bdf->strings_size && + ft_memchr( bdf->strings + value, 0, bdf->strings_size ) ) + { + aprop->type = BDF_PROPERTY_TYPE_ATOM; + aprop->u.atom = (const char*)bdf->strings + value; + error = FT_Err_Ok; + goto Exit; + } + break; + + case 0x02: + aprop->type = BDF_PROPERTY_TYPE_INTEGER; + aprop->u.integer = (FT_Int32)value; + error = FT_Err_Ok; + goto Exit; + + case 0x03: + aprop->type = BDF_PROPERTY_TYPE_CARDINAL; + aprop->u.cardinal = value; + error = FT_Err_Ok; + goto Exit; + + default: + ; + } + } + } + p += 10; + } + + Exit: + return error; + } + +#else /* !TT_CONFIG_OPTION_BDF */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_bdf_dummy_; + +#endif /* !TT_CONFIG_OPTION_BDF */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttbdf.h b/non-source/foreign/freetype2/src/sfnt/ttbdf.h new file mode 100644 index 000000000..d8d722b92 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttbdf.h @@ -0,0 +1,49 @@ +/**************************************************************************** + * + * ttbdf.h + * + * TrueType and OpenType embedded BDF properties (specification). + * + * Copyright (C) 2005-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTBDF_H_ +#define TTBDF_H_ + + +#include "ttload.h" +#include <freetype/ftbdf.h> + + +FT_BEGIN_HEADER + + +#ifdef TT_CONFIG_OPTION_BDF + + FT_LOCAL( void ) + tt_face_free_bdf_props( TT_Face face ); + + + FT_LOCAL( FT_Error ) + tt_face_find_bdf_prop( FT_Face face, + const char* property_name, + BDF_PropertyRec *aprop ); + +#endif /* TT_CONFIG_OPTION_BDF */ + + +FT_END_HEADER + +#endif /* TTBDF_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttcmap.c b/non-source/foreign/freetype2/src/sfnt/ttcmap.c new file mode 100644 index 000000000..28f4d1173 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttcmap.c @@ -0,0 +1,3902 @@ +/**************************************************************************** + * + * ttcmap.c + * + * TrueType character mapping table (cmap) support (body). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> + +#include "sferrors.h" /* must come before `ftvalid.h' */ + +#include <freetype/internal/ftvalid.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/services/svpscmap.h> +#include "ttload.h" +#include "ttcmap.h" +#include "ttpost.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 ttcmap + + +#define TT_PEEK_SHORT FT_PEEK_SHORT +#define TT_PEEK_USHORT FT_PEEK_USHORT +#define TT_PEEK_UINT24 FT_PEEK_UOFF3 +#define TT_PEEK_LONG FT_PEEK_LONG +#define TT_PEEK_ULONG FT_PEEK_ULONG + +#define TT_NEXT_SHORT FT_NEXT_SHORT +#define TT_NEXT_USHORT FT_NEXT_USHORT +#define TT_NEXT_UINT24 FT_NEXT_UOFF3 +#define TT_NEXT_LONG FT_NEXT_LONG +#define TT_NEXT_ULONG FT_NEXT_ULONG + + + /* Too large glyph index return values are caught in `FT_Get_Char_Index' */ + /* and `FT_Get_Next_Char' (the latter calls the internal `next' function */ + /* again in this case). To mark character code return values as invalid */ + /* it is sufficient to set the corresponding glyph index return value to */ + /* zero. */ + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap_init( FT_CMap cmap, /* TT_CMap */ + void* table_ ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = (FT_Byte*)table_; + + + ttcmap->data = table; + return FT_Err_Ok; + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 0 *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 0 + * length 2 USHORT table length in bytes + * language 4 USHORT Mac language code + * glyph_ids 6 BYTE[256] array of glyph indices + * 262 + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_0 + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap0_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p; + FT_UInt length; + + + if ( table + 2 + 2 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; /* skip format */ + length = TT_NEXT_USHORT( p ); + + if ( table + length > valid->limit || length < 262 ) + FT_INVALID_TOO_SHORT; + + /* check glyph indices whenever necessary */ + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + FT_UInt n, idx; + + + p = table + 6; + for ( n = 0; n < 256; n++ ) + { + idx = *p++; + if ( idx >= TT_VALID_GLYPH_COUNT( valid ) ) + FT_INVALID_GLYPH_ID; + } + } + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap0_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + + + return char_code < 256 ? table[6 + char_code] : 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap0_char_next( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 *pchar_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt32 charcode = *pchar_code; + FT_UInt32 result = 0; + FT_UInt gindex = 0; + + + table += 6; /* go to glyph IDs */ + while ( ++charcode < 256 ) + { + gindex = table[charcode]; + if ( gindex != 0 ) + { + result = charcode; + break; + } + } + + *pchar_code = result; + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap0_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 4; + + + cmap_info->format = 0; + cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap0_class_rec, + + sizeof ( TT_CMapRec ), + + (FT_CMap_InitFunc) tt_cmap_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap0_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap0_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 0, + (TT_CMap_ValidateFunc)tt_cmap0_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap0_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_0 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 2 *****/ + /***** *****/ + /***** This is used for certain CJK encodings that encode text in a *****/ + /***** mixed 8/16 bits encoding along the following lines. *****/ + /***** *****/ + /***** * Certain byte values correspond to an 8-bit character code *****/ + /***** (typically in the range 0..127 for ASCII compatibility). *****/ + /***** *****/ + /***** * Certain byte values signal the first byte of a 2-byte *****/ + /***** character code (but these values are also valid as the *****/ + /***** second byte of a 2-byte character). *****/ + /***** *****/ + /***** The following charmap lookup and iteration functions all *****/ + /***** assume that the value `charcode' fulfills the following. *****/ + /***** *****/ + /***** - For one-byte characters, `charcode' is simply the *****/ + /***** character code. *****/ + /***** *****/ + /***** - For two-byte characters, `charcode' is the 2-byte *****/ + /***** character code in big endian format. More precisely: *****/ + /***** *****/ + /***** (charcode >> 8) is the first byte value *****/ + /***** (charcode & 0xFF) is the second byte value *****/ + /***** *****/ + /***** Note that not all values of `charcode' are valid according *****/ + /***** to these rules, and the function moderately checks the *****/ + /***** arguments. *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 2 + * length 2 USHORT table length in bytes + * language 4 USHORT Mac language code + * keys 6 USHORT[256] sub-header keys + * subs 518 SUBHEAD[NSUBS] sub-headers array + * glyph_ids 518+NSUB*8 USHORT[] glyph ID array + * + * The `keys' table is used to map charcode high bytes to sub-headers. + * The value of `NSUBS' is the number of sub-headers defined in the + * table and is computed by finding the maximum of the `keys' table. + * + * Note that for any `n', `keys[n]' is a byte offset within the `subs' + * table, i.e., it is the corresponding sub-header index multiplied + * by 8. + * + * Each sub-header has the following format. + * + * NAME OFFSET TYPE DESCRIPTION + * + * first 0 USHORT first valid low-byte + * count 2 USHORT number of valid low-bytes + * delta 4 SHORT see below + * offset 6 USHORT see below + * + * A sub-header defines, for each high byte, the range of valid + * low bytes within the charmap. Note that the range defined by `first' + * and `count' must be completely included in the interval [0..255] + * according to the specification. + * + * If a character code is contained within a given sub-header, then + * mapping it to a glyph index is done as follows. + * + * - The value of `offset' is read. This is a _byte_ distance from the + * location of the `offset' field itself into a slice of the + * `glyph_ids' table. Let's call it `slice' (it is a USHORT[], too). + * + * - The value `slice[char.lo - first]' is read. If it is 0, there is + * no glyph for the charcode. Otherwise, the value of `delta' is + * added to it (modulo 65536) to form a new glyph index. + * + * It is up to the validation routine to check that all offsets fall + * within the glyph IDs table (and not within the `subs' table itself or + * outside of the CMap). + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_2 + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap2_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p; + FT_UInt length; + + FT_UInt n, max_subs; + FT_Byte* keys; /* keys table */ + FT_Byte* subs; /* sub-headers */ + FT_Byte* glyph_ids; /* glyph ID array */ + + + if ( table + 2 + 2 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; /* skip format */ + length = TT_NEXT_USHORT( p ); + + if ( table + length > valid->limit || length < 6 + 512 ) + FT_INVALID_TOO_SHORT; + + keys = table + 6; + + /* parse keys to compute sub-headers count */ + p = keys; + max_subs = 0; + for ( n = 0; n < 256; n++ ) + { + FT_UInt idx = TT_NEXT_USHORT( p ); + + + /* value must be multiple of 8 */ + if ( valid->level >= FT_VALIDATE_PARANOID && ( idx & 7 ) != 0 ) + FT_INVALID_DATA; + + idx >>= 3; + + if ( idx > max_subs ) + max_subs = idx; + } + + FT_ASSERT( p == table + 518 ); + + subs = p; + glyph_ids = subs + ( max_subs + 1 ) * 8; + if ( glyph_ids > valid->limit ) + FT_INVALID_TOO_SHORT; + + /* parse sub-headers */ + for ( n = 0; n <= max_subs; n++ ) + { + FT_UInt first_code, code_count, offset; + FT_Int delta; + + + first_code = TT_NEXT_USHORT( p ); + code_count = TT_NEXT_USHORT( p ); + delta = TT_NEXT_SHORT( p ); + offset = TT_NEXT_USHORT( p ); + + /* many Dynalab fonts have empty sub-headers */ + if ( code_count == 0 ) + continue; + + /* check range within 0..255 */ + if ( valid->level >= FT_VALIDATE_PARANOID ) + { + if ( first_code >= 256 || code_count > 256 - first_code ) + FT_INVALID_DATA; + } + + /* check offset */ + if ( offset != 0 ) + { + FT_Byte* ids; + + + ids = p - 2 + offset; + if ( ids < glyph_ids || ids + code_count * 2 > table + length ) + FT_INVALID_OFFSET; + + /* check glyph IDs */ + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + FT_Byte* limit = p + code_count * 2; + FT_UInt idx; + + + for ( ; p < limit; ) + { + idx = TT_NEXT_USHORT( p ); + if ( idx != 0 ) + { + idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU; + if ( idx >= TT_VALID_GLYPH_COUNT( valid ) ) + FT_INVALID_GLYPH_ID; + } + } + } + } + } + + return FT_Err_Ok; + } + + + /* return sub header corresponding to a given character code */ + /* NULL on invalid charcode */ + static FT_Byte* + tt_cmap2_get_subheader( FT_Byte* table, + FT_UInt32 char_code ) + { + FT_Byte* result = NULL; + + + if ( char_code < 0x10000UL ) + { + FT_UInt char_lo = (FT_UInt)( char_code & 0xFF ); + FT_UInt char_hi = (FT_UInt)( char_code >> 8 ); + FT_Byte* p = table + 6; /* keys table */ + FT_Byte* subs = table + 518; /* subheaders table */ + FT_Byte* sub; + + + if ( char_hi == 0 ) + { + /* an 8-bit character code -- we use subHeader 0 in this case */ + /* to test whether the character code is in the charmap */ + /* */ + sub = subs; /* jump to first sub-header */ + + /* check that the sub-header for this byte is 0, which */ + /* indicates that it is really a valid one-byte value; */ + /* otherwise, return 0 */ + /* */ + p += char_lo * 2; + if ( TT_PEEK_USHORT( p ) != 0 ) + goto Exit; + } + else + { + /* a 16-bit character code */ + + /* jump to key entry */ + p += char_hi * 2; + /* jump to sub-header */ + sub = subs + ( FT_PAD_FLOOR( TT_PEEK_USHORT( p ), 8 ) ); + + /* check that the high byte isn't a valid one-byte value */ + if ( sub == subs ) + goto Exit; + } + + result = sub; + } + + Exit: + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap2_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt result = 0; + FT_Byte* subheader; + + + subheader = tt_cmap2_get_subheader( table, char_code ); + if ( subheader ) + { + FT_Byte* p = subheader; + FT_UInt idx = (FT_UInt)( char_code & 0xFF ); + FT_UInt start, count; + FT_Int delta; + FT_UInt offset; + + + start = TT_NEXT_USHORT( p ); + count = TT_NEXT_USHORT( p ); + delta = TT_NEXT_SHORT ( p ); + offset = TT_PEEK_USHORT( p ); + + idx -= start; + if ( idx < count && offset != 0 ) + { + p += offset + 2 * idx; + idx = TT_PEEK_USHORT( p ); + + if ( idx != 0 ) + result = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU; + } + } + + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap2_char_next( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 *pcharcode ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt gindex = 0; + FT_UInt32 result = 0; + FT_UInt32 charcode = *pcharcode + 1; + FT_Byte* subheader; + + + while ( charcode < 0x10000UL ) + { + subheader = tt_cmap2_get_subheader( table, charcode ); + if ( subheader ) + { + FT_Byte* p = subheader; + FT_UInt start = TT_NEXT_USHORT( p ); + FT_UInt count = TT_NEXT_USHORT( p ); + FT_Int delta = TT_NEXT_SHORT ( p ); + FT_UInt offset = TT_PEEK_USHORT( p ); + FT_UInt char_lo = (FT_UInt)( charcode & 0xFF ); + FT_UInt pos, idx; + + + if ( char_lo >= start + count && charcode <= 0xFF ) + { + /* this happens only for a malformed cmap */ + charcode = 0x100; + continue; + } + + if ( offset == 0 ) + { + if ( charcode == 0x100 ) + goto Exit; /* this happens only for a malformed cmap */ + goto Next_SubHeader; + } + + if ( char_lo < start ) + { + char_lo = start; + pos = 0; + } + else + pos = (FT_UInt)( char_lo - start ); + + p += offset + pos * 2; + charcode = FT_PAD_FLOOR( charcode, 256 ) + char_lo; + + for ( ; pos < count; pos++, charcode++ ) + { + idx = TT_NEXT_USHORT( p ); + + if ( idx != 0 ) + { + gindex = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU; + if ( gindex != 0 ) + { + result = charcode; + goto Exit; + } + } + } + + /* if unsuccessful, avoid `charcode' leaving */ + /* the current 256-character block */ + if ( count ) + charcode--; + } + + /* If `charcode' is <= 0xFF, retry with `charcode + 1'. */ + /* Otherwise jump to the next 256-character block and retry. */ + Next_SubHeader: + if ( charcode <= 0xFF ) + charcode++; + else + charcode = FT_PAD_FLOOR( charcode, 0x100 ) + 0x100; + } + + Exit: + *pcharcode = result; + + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap2_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 4; + + + cmap_info->format = 2; + cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap2_class_rec, + + sizeof ( TT_CMapRec ), + + (FT_CMap_InitFunc) tt_cmap_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap2_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap2_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 2, + (TT_CMap_ValidateFunc)tt_cmap2_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap2_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_2 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 4 *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 4 + * length 2 USHORT table length + * in bytes + * language 4 USHORT Mac language code + * + * segCountX2 6 USHORT 2*NUM_SEGS + * searchRange 8 USHORT 2*(1 << LOG_SEGS) + * entrySelector 10 USHORT LOG_SEGS + * rangeShift 12 USHORT segCountX2 - + * searchRange + * + * endCount 14 USHORT[NUM_SEGS] end charcode for + * each segment; last + * is 0xFFFF + * + * pad 14+NUM_SEGS*2 USHORT padding + * + * startCount 16+NUM_SEGS*2 USHORT[NUM_SEGS] first charcode for + * each segment + * + * idDelta 16+NUM_SEGS*4 SHORT[NUM_SEGS] delta for each + * segment + * idOffset 16+NUM_SEGS*6 SHORT[NUM_SEGS] range offset for + * each segment; can be + * zero + * + * glyphIds 16+NUM_SEGS*8 USHORT[] array of glyph ID + * ranges + * + * Character codes are modelled by a series of ordered (increasing) + * intervals called segments. Each segment has start and end codes, + * provided by the `startCount' and `endCount' arrays. Segments must + * not overlap, and the last segment should always contain the value + * 0xFFFF for `endCount'. + * + * The fields `searchRange', `entrySelector' and `rangeShift' are better + * ignored (they are traces of over-engineering in the TrueType + * specification). + * + * Each segment also has a signed `delta', as well as an optional offset + * within the `glyphIds' table. + * + * If a segment's idOffset is 0, the glyph index corresponding to any + * charcode within the segment is obtained by adding the value of + * `idDelta' directly to the charcode, modulo 65536. + * + * Otherwise, a glyph index is taken from the glyph IDs sub-array for + * the segment, and the value of `idDelta' is added to it. + * + * + * Finally, note that a lot of fonts contain an invalid last segment, + * where `start' and `end' are correctly set to 0xFFFF but both `delta' + * and `offset' are incorrect (e.g., `opens___.ttf' which comes with + * OpenOffice.org). We need special code to deal with them correctly. + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_4 + + typedef struct TT_CMap4Rec_ + { + TT_CMapRec cmap; + FT_UInt32 cur_charcode; /* current charcode */ + FT_UInt cur_gindex; /* current glyph index */ + + FT_UInt num_ranges; + FT_UInt cur_range; + FT_UInt cur_start; + FT_UInt cur_end; + FT_Int cur_delta; + FT_Byte* cur_values; + + } TT_CMap4Rec, *TT_CMap4; + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap4_init( FT_CMap cmap, /* TT_CMap4 */ + void* table_ ) + { + TT_CMap4 ttcmap = (TT_CMap4)cmap; + FT_Byte* table = (FT_Byte*)table_; + FT_Byte* p; + + + ttcmap->cmap.data = table; + + p = table + 6; + ttcmap->num_ranges = FT_PEEK_USHORT( p ) >> 1; + ttcmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL; + ttcmap->cur_gindex = 0; + + return FT_Err_Ok; + } + + + static FT_Int + tt_cmap4_set_range( TT_CMap4 cmap, + FT_UInt range_index ) + { + FT_Byte* table = cmap->cmap.data; + FT_Byte* p; + FT_UInt num_ranges = cmap->num_ranges; + + + while ( range_index < num_ranges ) + { + FT_UInt offset; + + + p = table + 14 + range_index * 2; + cmap->cur_end = FT_PEEK_USHORT( p ); + + p += 2 + num_ranges * 2; + cmap->cur_start = FT_PEEK_USHORT( p ); + + p += num_ranges * 2; + cmap->cur_delta = FT_PEEK_SHORT( p ); + + p += num_ranges * 2; + offset = FT_PEEK_USHORT( p ); + + /* some fonts have an incorrect last segment; */ + /* we have to catch it */ + if ( range_index >= num_ranges - 1 && + cmap->cur_start == 0xFFFFU && + cmap->cur_end == 0xFFFFU ) + { + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Byte* limit = face->cmap_table + face->cmap_size; + + + if ( offset && p + offset + 2 > limit ) + { + cmap->cur_delta = 1; + offset = 0; + } + } + + if ( offset != 0xFFFFU ) + { + cmap->cur_values = offset ? p + offset : NULL; + cmap->cur_range = range_index; + return 0; + } + + /* we skip empty segments */ + range_index++; + } + + return -1; + } + + + /* search the index of the charcode next to cmap->cur_charcode; */ + /* caller should call tt_cmap4_set_range with proper range */ + /* before calling this function */ + /* */ + static void + tt_cmap4_next( TT_CMap4 cmap ) + { + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Byte* limit = face->cmap_table + face->cmap_size; + + FT_UInt charcode; + + + charcode = (FT_UInt)cmap->cur_charcode + 1; + + if ( charcode < cmap->cur_start ) + charcode = cmap->cur_start; + + for (;;) + { + FT_Byte* values = cmap->cur_values; + FT_UInt end = cmap->cur_end; + FT_Int delta = cmap->cur_delta; + + + if ( charcode <= end ) + { + if ( values ) + { + FT_Byte* p = values + 2 * ( charcode - cmap->cur_start ); + + + /* if p > limit, the whole segment is invalid */ + if ( p > limit ) + goto Next_Segment; + + do + { + FT_UInt gindex = FT_NEXT_USHORT( p ); + + + if ( gindex ) + { + gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU; + if ( gindex ) + { + cmap->cur_charcode = charcode; + cmap->cur_gindex = gindex; + return; + } + } + } while ( ++charcode <= end ); + } + else + { + do + { + FT_UInt gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU; + + + if ( gindex >= (FT_UInt)face->root.num_glyphs ) + { + /* we have an invalid glyph index; if there is an overflow, */ + /* we can adjust `charcode', otherwise the whole segment is */ + /* invalid */ + gindex = 0; + + if ( (FT_Int)charcode + delta < 0 && + (FT_Int)end + delta >= 0 ) + charcode = (FT_UInt)( -delta ); + + else if ( (FT_Int)charcode + delta < 0x10000L && + (FT_Int)end + delta >= 0x10000L ) + charcode = (FT_UInt)( 0x10000L - delta ); + + else + goto Next_Segment; + } + + if ( gindex ) + { + cmap->cur_charcode = charcode; + cmap->cur_gindex = gindex; + return; + } + } while ( ++charcode <= end ); + } + } + + Next_Segment: + /* we need to find another range */ + if ( tt_cmap4_set_range( cmap, cmap->cur_range + 1 ) < 0 ) + break; + + if ( charcode < cmap->cur_start ) + charcode = cmap->cur_start; + } + + cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL; + cmap->cur_gindex = 0; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap4_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p; + FT_UInt length; + + FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids; + FT_UInt num_segs; + FT_Error error = FT_Err_Ok; + + + if ( table + 2 + 2 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; /* skip format */ + length = TT_NEXT_USHORT( p ); + + /* in certain fonts, the `length' field is invalid and goes */ + /* out of bound. We try to correct this here... */ + if ( table + length > valid->limit ) + { + if ( valid->level >= FT_VALIDATE_TIGHT ) + FT_INVALID_TOO_SHORT; + + length = (FT_UInt)( valid->limit - table ); + } + + /* it also happens that the `length' field is too small; */ + /* this is easy to correct */ + if ( length < (FT_UInt)( valid->limit - table ) ) + { + if ( valid->level >= FT_VALIDATE_PARANOID ) + FT_INVALID_DATA; + + length = (FT_UInt)( valid->limit - table ); + } + + if ( length < 16 ) + FT_INVALID_TOO_SHORT; + + p = table + 6; + num_segs = TT_NEXT_USHORT( p ); /* read segCountX2 */ + + if ( valid->level >= FT_VALIDATE_PARANOID ) + { + /* check that we have an even value here */ + if ( num_segs & 1 ) + FT_INVALID_DATA; + } + + num_segs /= 2; + + if ( length < 16 + num_segs * 2 * 4 ) + FT_INVALID_TOO_SHORT; + + /* check the search parameters - even though we never use them */ + /* */ + if ( valid->level >= FT_VALIDATE_PARANOID ) + { + /* check the values of `searchRange', `entrySelector', `rangeShift' */ + FT_UInt search_range = TT_NEXT_USHORT( p ); + FT_UInt entry_selector = TT_NEXT_USHORT( p ); + FT_UInt range_shift = TT_NEXT_USHORT( p ); + + + if ( ( search_range | range_shift ) & 1 ) /* must be even values */ + FT_INVALID_DATA; + + search_range /= 2; + range_shift /= 2; + + /* `search range' is the greatest power of 2 that is <= num_segs */ + + if ( search_range > num_segs || + search_range * 2 < num_segs || + search_range + range_shift != num_segs || + search_range != ( 1U << entry_selector ) ) + FT_INVALID_DATA; + } + + ends = table + 14; + starts = table + 16 + num_segs * 2; + deltas = starts + num_segs * 2; + offsets = deltas + num_segs * 2; + glyph_ids = offsets + num_segs * 2; + + /* check last segment; its end count value must be 0xFFFF */ + if ( valid->level >= FT_VALIDATE_PARANOID ) + { + p = ends + ( num_segs - 1 ) * 2; + if ( TT_PEEK_USHORT( p ) != 0xFFFFU ) + FT_INVALID_DATA; + } + + { + FT_UInt start, end, offset, n; + FT_UInt last_start = 0, last_end = 0; + FT_Int delta; + FT_Byte* p_start = starts; + FT_Byte* p_end = ends; + FT_Byte* p_delta = deltas; + FT_Byte* p_offset = offsets; + + + for ( n = 0; n < num_segs; n++ ) + { + p = p_offset; + start = TT_NEXT_USHORT( p_start ); + end = TT_NEXT_USHORT( p_end ); + delta = TT_NEXT_SHORT( p_delta ); + offset = TT_NEXT_USHORT( p_offset ); + + if ( start > end ) + FT_INVALID_DATA; + + /* this test should be performed at default validation level; */ + /* unfortunately, some popular Asian fonts have overlapping */ + /* ranges in their charmaps */ + /* */ + if ( start <= last_end && n > 0 ) + { + if ( valid->level >= FT_VALIDATE_TIGHT ) + FT_INVALID_DATA; + else + { + /* allow overlapping segments, provided their start points */ + /* and end points, respectively, are in ascending order */ + /* */ + if ( last_start > start || last_end > end ) + error |= TT_CMAP_FLAG_UNSORTED; + else + error |= TT_CMAP_FLAG_OVERLAPPING; + } + } + + if ( offset && offset != 0xFFFFU ) + { + p += offset; /* start of glyph ID array */ + + /* check that we point within the glyph IDs table only */ + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + if ( p < glyph_ids || + p + ( end - start + 1 ) * 2 > table + length ) + FT_INVALID_DATA; + } + /* Some fonts handle the last segment incorrectly. In */ + /* theory, 0xFFFF might point to an ordinary glyph -- */ + /* a cmap 4 is versatile and could be used for any */ + /* encoding, not only Unicode. However, reality shows */ + /* that far too many fonts are sloppy and incorrectly */ + /* set all fields but `start' and `end' for the last */ + /* segment if it contains only a single character. */ + /* */ + /* We thus omit the test here, delaying it to the */ + /* routines that actually access the cmap. */ + else if ( n != num_segs - 1 || + !( start == 0xFFFFU && end == 0xFFFFU ) ) + { + if ( p < glyph_ids || + p + ( end - start + 1 ) * 2 > valid->limit ) + FT_INVALID_DATA; + } + + /* check glyph indices within the segment range */ + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + FT_UInt i, idx; + + + for ( i = start; i < end; i++ ) + { + idx = FT_NEXT_USHORT( p ); + if ( idx != 0 ) + { + idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU; + + if ( idx >= TT_VALID_GLYPH_COUNT( valid ) ) + FT_INVALID_GLYPH_ID; + } + } + } + } + else if ( offset == 0xFFFFU ) + { + /* some fonts (erroneously?) use a range offset of 0xFFFF */ + /* to mean missing glyph in cmap table */ + /* */ + if ( valid->level >= FT_VALIDATE_PARANOID || + n != num_segs - 1 || + !( start == 0xFFFFU && end == 0xFFFFU ) ) + FT_INVALID_DATA; + } + + last_start = start; + last_end = end; + } + } + + return error; + } + + + static FT_UInt + tt_cmap4_char_map_linear( TT_CMap cmap, + FT_UInt32* pcharcode, + FT_Bool next ) + { + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Byte* limit = face->cmap_table + face->cmap_size; + + + FT_UInt num_segs2, start, end, offset; + FT_Int delta; + FT_UInt i, num_segs; + FT_UInt32 charcode = *pcharcode + next; + FT_UInt gindex = 0; + FT_Byte* p; + FT_Byte* q; + + + p = cmap->data + 6; + num_segs = TT_PEEK_USHORT( p ) >> 1; + + if ( !num_segs ) + return 0; + + num_segs2 = num_segs << 1; + + /* linear search */ + p = cmap->data + 14; /* ends table */ + q = cmap->data + 16 + num_segs2; /* starts table */ + + for ( i = 0; i < num_segs; i++ ) + { + end = TT_NEXT_USHORT( p ); + start = TT_NEXT_USHORT( q ); + + if ( charcode < start ) + { + if ( next ) + charcode = start; + else + break; + } + + Again: + if ( charcode <= end ) + { + FT_Byte* r; + + + r = q - 2 + num_segs2; + delta = TT_PEEK_SHORT( r ); + r += num_segs2; + offset = TT_PEEK_USHORT( r ); + + /* some fonts have an incorrect last segment; */ + /* we have to catch it */ + if ( i >= num_segs - 1 && + start == 0xFFFFU && end == 0xFFFFU ) + { + if ( offset && r + offset + 2 > limit ) + { + delta = 1; + offset = 0; + } + } + + if ( offset == 0xFFFFU ) + continue; + + if ( offset ) + { + r += offset + ( charcode - start ) * 2; + + /* if r > limit, the whole segment is invalid */ + if ( next && r > limit ) + continue; + + gindex = TT_PEEK_USHORT( r ); + if ( gindex ) + { + gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU; + if ( gindex >= (FT_UInt)face->root.num_glyphs ) + gindex = 0; + } + } + else + { + gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU; + + if ( next && gindex >= (FT_UInt)face->root.num_glyphs ) + { + /* we have an invalid glyph index; if there is an overflow, */ + /* we can adjust `charcode', otherwise the whole segment is */ + /* invalid */ + gindex = 0; + + if ( (FT_Int)charcode + delta < 0 && + (FT_Int)end + delta >= 0 ) + charcode = (FT_UInt)( -delta ); + + else if ( (FT_Int)charcode + delta < 0x10000L && + (FT_Int)end + delta >= 0x10000L ) + charcode = (FT_UInt)( 0x10000L - delta ); + + else + continue; + } + } + + if ( next && !gindex ) + { + if ( charcode >= 0xFFFFU ) + break; + + charcode++; + goto Again; + } + + break; + } + } + + if ( next ) + *pcharcode = charcode; + + return gindex; + } + + + static FT_UInt + tt_cmap4_char_map_binary( TT_CMap cmap, + FT_UInt32* pcharcode, + FT_Bool next ) + { + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Byte* limit = face->cmap_table + face->cmap_size; + + FT_UInt num_segs2, start, end, offset; + FT_Int delta; + FT_UInt max, min, mid, num_segs; + FT_UInt charcode = (FT_UInt)*pcharcode + next; + FT_UInt gindex = 0; + FT_Byte* p; + + + p = cmap->data + 6; + num_segs = TT_PEEK_USHORT( p ) >> 1; + + if ( !num_segs ) + return 0; + + num_segs2 = num_segs << 1; + + min = 0; + max = num_segs; + + /* binary search */ + do + { + mid = ( min + max ) >> 1; + p = cmap->data + 14 + mid * 2; + end = TT_PEEK_USHORT( p ); + p += 2 + num_segs2; + start = TT_PEEK_USHORT( p ); + + if ( charcode < start ) + max = mid; + else if ( charcode > end ) + min = mid + 1; + else + { + p += num_segs2; + delta = TT_PEEK_SHORT( p ); + p += num_segs2; + offset = TT_PEEK_USHORT( p ); + + /* some fonts have an incorrect last segment; */ + /* we have to catch it */ + if ( mid >= num_segs - 1 && + start == 0xFFFFU && end == 0xFFFFU ) + { + if ( offset && p + offset + 2 > limit ) + { + delta = 1; + offset = 0; + } + } + + /* search the first segment containing `charcode' */ + if ( cmap->flags & TT_CMAP_FLAG_OVERLAPPING ) + { + FT_UInt i; + + + /* call the current segment `max' */ + max = mid; + + if ( offset == 0xFFFFU ) + mid = max + 1; + + /* search in segments before the current segment */ + for ( i = max; i > 0; i-- ) + { + FT_UInt prev_end; + FT_Byte* old_p; + + + old_p = p; + p = cmap->data + 14 + ( i - 1 ) * 2; + prev_end = TT_PEEK_USHORT( p ); + + if ( charcode > prev_end ) + { + p = old_p; + break; + } + + end = prev_end; + p += 2 + num_segs2; + start = TT_PEEK_USHORT( p ); + p += num_segs2; + delta = TT_PEEK_SHORT( p ); + p += num_segs2; + offset = TT_PEEK_USHORT( p ); + + if ( offset != 0xFFFFU ) + mid = i - 1; + } + + /* no luck */ + if ( mid == max + 1 ) + { + if ( i != max ) + { + p = cmap->data + 14 + max * 2; + end = TT_PEEK_USHORT( p ); + p += 2 + num_segs2; + start = TT_PEEK_USHORT( p ); + p += num_segs2; + delta = TT_PEEK_SHORT( p ); + p += num_segs2; + offset = TT_PEEK_USHORT( p ); + } + + mid = max; + + /* search in segments after the current segment */ + for ( i = max + 1; i < num_segs; i++ ) + { + FT_UInt next_end, next_start; + + + p = cmap->data + 14 + i * 2; + next_end = TT_PEEK_USHORT( p ); + p += 2 + num_segs2; + next_start = TT_PEEK_USHORT( p ); + + if ( charcode < next_start ) + break; + + end = next_end; + start = next_start; + p += num_segs2; + delta = TT_PEEK_SHORT( p ); + p += num_segs2; + offset = TT_PEEK_USHORT( p ); + + if ( offset != 0xFFFFU ) + mid = i; + } + i--; + + /* still no luck */ + if ( mid == max ) + { + mid = i; + + break; + } + } + + /* end, start, delta, and offset are for the i'th segment */ + if ( mid != i ) + { + p = cmap->data + 14 + mid * 2; + end = TT_PEEK_USHORT( p ); + p += 2 + num_segs2; + start = TT_PEEK_USHORT( p ); + p += num_segs2; + delta = TT_PEEK_SHORT( p ); + p += num_segs2; + offset = TT_PEEK_USHORT( p ); + } + } + else + { + if ( offset == 0xFFFFU ) + break; + } + + if ( offset ) + { + p += offset + ( charcode - start ) * 2; + + /* if p > limit, the whole segment is invalid */ + if ( next && p > limit ) + break; + + gindex = TT_PEEK_USHORT( p ); + if ( gindex ) + { + gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU; + if ( gindex >= (FT_UInt)face->root.num_glyphs ) + gindex = 0; + } + } + else + { + gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU; + + if ( next && gindex >= (FT_UInt)face->root.num_glyphs ) + { + /* we have an invalid glyph index; if there is an overflow, */ + /* we can adjust `charcode', otherwise the whole segment is */ + /* invalid */ + gindex = 0; + + if ( (FT_Int)charcode + delta < 0 && + (FT_Int)end + delta >= 0 ) + charcode = (FT_UInt)( -delta ); + + else if ( (FT_Int)charcode + delta < 0x10000L && + (FT_Int)end + delta >= 0x10000L ) + charcode = (FT_UInt)( 0x10000L - delta ); + } + } + + break; + } + } + while ( min < max ); + + if ( next ) + { + TT_CMap4 cmap4 = (TT_CMap4)cmap; + + + /* if `charcode' is not in any segment, then `mid' is */ + /* the segment nearest to `charcode' */ + + if ( charcode > end && ++mid == num_segs ) + return 0; + + if ( tt_cmap4_set_range( cmap4, mid ) ) + { + if ( gindex ) + *pcharcode = charcode; + } + else + { + cmap4->cur_charcode = charcode; + + if ( gindex ) + cmap4->cur_gindex = gindex; + else + { + tt_cmap4_next( cmap4 ); + gindex = cmap4->cur_gindex; + } + + if ( gindex ) + *pcharcode = cmap4->cur_charcode; + } + } + + return gindex; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap4_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + + + if ( char_code >= 0x10000UL ) + return 0; + + if ( ttcmap->flags & TT_CMAP_FLAG_UNSORTED ) + return tt_cmap4_char_map_linear( ttcmap, &char_code, 0 ); + else + return tt_cmap4_char_map_binary( ttcmap, &char_code, 0 ); + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap4_char_next( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 *pchar_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_UInt gindex; + + + if ( *pchar_code >= 0xFFFFU ) + return 0; + + if ( ttcmap->flags & TT_CMAP_FLAG_UNSORTED ) + gindex = tt_cmap4_char_map_linear( ttcmap, pchar_code, 1 ); + else + { + TT_CMap4 cmap4 = (TT_CMap4)cmap; + + + /* no need to search */ + if ( *pchar_code == cmap4->cur_charcode ) + { + tt_cmap4_next( cmap4 ); + gindex = cmap4->cur_gindex; + if ( gindex ) + *pchar_code = cmap4->cur_charcode; + } + else + gindex = tt_cmap4_char_map_binary( ttcmap, pchar_code, 1 ); + } + + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap4_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 4; + + + cmap_info->format = 4; + cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap4_class_rec, + + sizeof ( TT_CMap4Rec ), + + (FT_CMap_InitFunc) tt_cmap4_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap4_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap4_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 4, + (TT_CMap_ValidateFunc)tt_cmap4_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap4_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_4 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 6 *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 6 + * length 2 USHORT table length in bytes + * language 4 USHORT Mac language code + * + * first 6 USHORT first segment code + * count 8 USHORT segment size in chars + * glyphIds 10 USHORT[count] glyph IDs + * + * A very simplified segment mapping. + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_6 + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap6_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p; + FT_UInt length, count; + + + if ( table + 10 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; + length = TT_NEXT_USHORT( p ); + + p = table + 8; /* skip language and start index */ + count = TT_NEXT_USHORT( p ); + + if ( table + length > valid->limit || length < 10 + count * 2 ) + FT_INVALID_TOO_SHORT; + + /* check glyph indices */ + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + FT_UInt gindex; + + + for ( ; count > 0; count-- ) + { + gindex = TT_NEXT_USHORT( p ); + if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) ) + FT_INVALID_GLYPH_ID; + } + } + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap6_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt result = 0; + FT_Byte* p = table + 6; + FT_UInt start = TT_NEXT_USHORT( p ); + FT_UInt count = TT_NEXT_USHORT( p ); + FT_UInt idx = (FT_UInt)( char_code - start ); + + + if ( idx < count ) + { + p += 2 * idx; + result = TT_PEEK_USHORT( p ); + } + + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap6_char_next( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 *pchar_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt32 result = 0; + FT_UInt32 char_code = *pchar_code + 1; + FT_UInt gindex = 0; + + FT_Byte* p = table + 6; + FT_UInt start = TT_NEXT_USHORT( p ); + FT_UInt count = TT_NEXT_USHORT( p ); + FT_UInt idx; + + + if ( char_code >= 0x10000UL ) + return 0; + + if ( char_code < start ) + char_code = start; + + idx = (FT_UInt)( char_code - start ); + p += 2 * idx; + + for ( ; idx < count; idx++ ) + { + gindex = TT_NEXT_USHORT( p ); + if ( gindex != 0 ) + { + result = char_code; + break; + } + + if ( char_code >= 0xFFFFU ) + return 0; + + char_code++; + } + + *pchar_code = result; + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap6_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 4; + + + cmap_info->format = 6; + cmap_info->language = (FT_ULong)TT_PEEK_USHORT( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap6_class_rec, + + sizeof ( TT_CMapRec ), + + (FT_CMap_InitFunc) tt_cmap_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap6_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap6_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 6, + (TT_CMap_ValidateFunc)tt_cmap6_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap6_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_6 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 8 *****/ + /***** *****/ + /***** It is hard to completely understand what the OpenType spec *****/ + /***** says about this format, but here is my conclusion. *****/ + /***** *****/ + /***** The purpose of this format is to easily map UTF-16 text to *****/ + /***** glyph indices. Basically, the `char_code' must be in one of *****/ + /***** the following formats. *****/ + /***** *****/ + /***** - A 16-bit value that isn't part of the Unicode Surrogates *****/ + /***** Area (i.e. U+D800-U+DFFF). *****/ + /***** *****/ + /***** - A 32-bit value, made of two surrogate values, i.e.. if *****/ + /***** `char_code = (char_hi << 16) | char_lo', then both *****/ + /***** `char_hi' and `char_lo' must be in the Surrogates Area. *****/ + /***** Area. *****/ + /***** *****/ + /***** The `is32' table embedded in the charmap indicates whether a *****/ + /***** given 16-bit value is in the surrogates area or not. *****/ + /***** *****/ + /***** So, for any given `char_code', we can assert the following. *****/ + /***** *****/ + /***** If `char_hi == 0' then we must have `is32[char_lo] == 0'. *****/ + /***** *****/ + /***** If `char_hi != 0' then we must have both *****/ + /***** `is32[char_hi] != 0' and `is32[char_lo] != 0'. *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 8 + * reserved 2 USHORT reserved + * length 4 ULONG length in bytes + * language 8 ULONG Mac language code + * is32 12 BYTE[8192] 32-bitness bitmap + * count 8204 ULONG number of groups + * + * This header is followed by `count' groups of the following format: + * + * start 0 ULONG first charcode + * end 4 ULONG last charcode + * startId 8 ULONG start glyph ID for the group + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_8 + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap8_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p = table + 4; + FT_Byte* is32; + FT_UInt32 length; + FT_UInt32 num_groups; + + + if ( table + 16 + 8192 > valid->limit ) + FT_INVALID_TOO_SHORT; + + length = TT_NEXT_ULONG( p ); + if ( length > (FT_UInt32)( valid->limit - table ) || length < 8192 + 16 ) + FT_INVALID_TOO_SHORT; + + is32 = table + 12; + p = is32 + 8192; /* skip `is32' array */ + num_groups = TT_NEXT_ULONG( p ); + + /* p + num_groups * 12 > valid->limit ? */ + if ( num_groups > (FT_UInt32)( valid->limit - p ) / 12 ) + FT_INVALID_TOO_SHORT; + + /* check groups, they must be in increasing order */ + { + FT_UInt32 n, start, end, start_id, count, last = 0; + + + for ( n = 0; n < num_groups; n++ ) + { + FT_UInt hi, lo; + + + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + start_id = TT_NEXT_ULONG( p ); + + if ( start > end ) + FT_INVALID_DATA; + + if ( n > 0 && start <= last ) + FT_INVALID_DATA; + + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + FT_UInt32 d = end - start; + + + /* start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ? */ + if ( d > TT_VALID_GLYPH_COUNT( valid ) || + start_id >= TT_VALID_GLYPH_COUNT( valid ) - d ) + FT_INVALID_GLYPH_ID; + + count = (FT_UInt32)( end - start + 1 ); + + if ( start & ~0xFFFFU ) + { + /* start_hi != 0; check that is32[i] is 1 for each i in */ + /* the `hi' and `lo' of the range [start..end] */ + for ( ; count > 0; count--, start++ ) + { + hi = (FT_UInt)( start >> 16 ); + lo = (FT_UInt)( start & 0xFFFFU ); + + if ( (is32[hi >> 3] & ( 0x80 >> ( hi & 7 ) ) ) == 0 ) + FT_INVALID_DATA; + + if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) == 0 ) + FT_INVALID_DATA; + } + } + else + { + /* start_hi == 0; check that is32[i] is 0 for each i in */ + /* the range [start..end] */ + + /* end_hi cannot be != 0! */ + if ( end & ~0xFFFFU ) + FT_INVALID_DATA; + + for ( ; count > 0; count--, start++ ) + { + lo = (FT_UInt)( start & 0xFFFFU ); + + if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) != 0 ) + FT_INVALID_DATA; + } + } + } + + last = end; + } + } + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap8_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt result = 0; + FT_Byte* p = table + 8204; + FT_UInt32 num_groups = TT_NEXT_ULONG( p ); + FT_UInt32 start, end, start_id; + + + for ( ; num_groups > 0; num_groups-- ) + { + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + start_id = TT_NEXT_ULONG( p ); + + if ( char_code < start ) + break; + + if ( char_code <= end ) + { + if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) ) + return 0; + + result = (FT_UInt)( start_id + ( char_code - start ) ); + break; + } + } + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap8_char_next( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 *pchar_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Face face = FT_CMAP_FACE( cmap ); + FT_UInt32 result = 0; + FT_UInt32 char_code; + FT_UInt gindex = 0; + FT_Byte* table = ttcmap->data; + FT_Byte* p = table + 8204; + FT_UInt32 num_groups = TT_NEXT_ULONG( p ); + FT_UInt32 start, end, start_id; + + + if ( *pchar_code >= 0xFFFFFFFFUL ) + return 0; + + char_code = *pchar_code + 1; + + p = table + 8208; + + for ( ; num_groups > 0; num_groups-- ) + { + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + start_id = TT_NEXT_ULONG( p ); + + if ( char_code < start ) + char_code = start; + + Again: + if ( char_code <= end ) + { + /* ignore invalid group */ + if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) ) + continue; + + gindex = (FT_UInt)( start_id + ( char_code - start ) ); + + /* does first element of group point to `.notdef' glyph? */ + if ( gindex == 0 ) + { + if ( char_code >= 0xFFFFFFFFUL ) + break; + + char_code++; + goto Again; + } + + /* if `gindex' is invalid, the remaining values */ + /* in this group are invalid, too */ + if ( gindex >= (FT_UInt)face->num_glyphs ) + { + gindex = 0; + continue; + } + + result = char_code; + break; + } + } + + *pchar_code = result; + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap8_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 8; + + + cmap_info->format = 8; + cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap8_class_rec, + + sizeof ( TT_CMapRec ), + + (FT_CMap_InitFunc) tt_cmap_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap8_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap8_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 8, + (TT_CMap_ValidateFunc)tt_cmap8_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap8_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_8 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 10 *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 10 + * reserved 2 USHORT reserved + * length 4 ULONG length in bytes + * language 8 ULONG Mac language code + * + * start 12 ULONG first char in range + * count 16 ULONG number of chars in range + * glyphIds 20 USHORT[count] glyph indices covered + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_10 + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap10_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p = table + 4; + FT_ULong length, count; + + + if ( table + 20 > valid->limit ) + FT_INVALID_TOO_SHORT; + + length = TT_NEXT_ULONG( p ); + p = table + 16; + count = TT_NEXT_ULONG( p ); + + if ( length > (FT_ULong)( valid->limit - table ) || + /* length < 20 + count * 2 ? */ + length < 20 || + ( length - 20 ) / 2 < count ) + FT_INVALID_TOO_SHORT; + + /* check glyph indices */ + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + FT_UInt gindex; + + + for ( ; count > 0; count-- ) + { + gindex = TT_NEXT_USHORT( p ); + if ( gindex >= TT_VALID_GLYPH_COUNT( valid ) ) + FT_INVALID_GLYPH_ID; + } + } + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap10_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt result = 0; + FT_Byte* p = table + 12; + FT_UInt32 start = TT_NEXT_ULONG( p ); + FT_UInt32 count = TT_NEXT_ULONG( p ); + FT_UInt32 idx; + + + if ( char_code < start ) + return 0; + + idx = char_code - start; + + if ( idx < count ) + { + p += 2 * idx; + result = TT_PEEK_USHORT( p ); + } + + return result; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap10_char_next( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 *pchar_code ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* table = ttcmap->data; + FT_UInt32 char_code; + FT_UInt gindex = 0; + FT_Byte* p = table + 12; + FT_UInt32 start = TT_NEXT_ULONG( p ); + FT_UInt32 count = TT_NEXT_ULONG( p ); + FT_UInt32 idx; + + + if ( *pchar_code >= 0xFFFFFFFFUL ) + return 0; + + char_code = *pchar_code + 1; + + if ( char_code < start ) + char_code = start; + + idx = char_code - start; + p += 2 * idx; + + for ( ; idx < count; idx++ ) + { + gindex = TT_NEXT_USHORT( p ); + if ( gindex != 0 ) + break; + + if ( char_code >= 0xFFFFFFFFUL ) + return 0; + + char_code++; + } + + *pchar_code = char_code; + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap10_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 8; + + + cmap_info->format = 10; + cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap10_class_rec, + + sizeof ( TT_CMapRec ), + + (FT_CMap_InitFunc) tt_cmap_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap10_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap10_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 10, + (TT_CMap_ValidateFunc)tt_cmap10_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap10_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_10 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 12 *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 12 + * reserved 2 USHORT reserved + * length 4 ULONG length in bytes + * language 8 ULONG Mac language code + * count 12 ULONG number of groups + * 16 + * + * This header is followed by `count' groups of the following format: + * + * start 0 ULONG first charcode + * end 4 ULONG last charcode + * startId 8 ULONG start glyph ID for the group + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_12 + + typedef struct TT_CMap12Rec_ + { + TT_CMapRec cmap; + FT_Bool valid; + FT_ULong cur_charcode; + FT_UInt cur_gindex; + FT_ULong cur_group; + FT_ULong num_groups; + + } TT_CMap12Rec, *TT_CMap12; + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap12_init( FT_CMap cmap, /* TT_CMap12 */ + void* table_ ) + { + TT_CMap12 ttcmap = (TT_CMap12)cmap; + FT_Byte* table = (FT_Byte*)table_; + + + ttcmap->cmap.data = table; + + table += 12; + ttcmap->num_groups = FT_PEEK_ULONG( table ); + + ttcmap->valid = 0; + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap12_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p; + FT_ULong length; + FT_ULong num_groups; + + + if ( table + 16 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 4; + length = TT_NEXT_ULONG( p ); + + p = table + 12; + num_groups = TT_NEXT_ULONG( p ); + + if ( length > (FT_ULong)( valid->limit - table ) || + /* length < 16 + 12 * num_groups ? */ + length < 16 || + ( length - 16 ) / 12 < num_groups ) + FT_INVALID_TOO_SHORT; + + /* check groups, they must be in increasing order */ + { + FT_ULong n, start, end, start_id, last = 0; + + + for ( n = 0; n < num_groups; n++ ) + { + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + start_id = TT_NEXT_ULONG( p ); + + if ( start > end ) + FT_INVALID_DATA; + + if ( n > 0 && start <= last ) + FT_INVALID_DATA; + + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + FT_UInt32 d = end - start; + + + /* start_id + end - start >= TT_VALID_GLYPH_COUNT( valid ) ? */ + if ( d > TT_VALID_GLYPH_COUNT( valid ) || + start_id >= TT_VALID_GLYPH_COUNT( valid ) - d ) + FT_INVALID_GLYPH_ID; + } + + last = end; + } + } + + return FT_Err_Ok; + } + + + /* search the index of the charcode next to cmap->cur_charcode */ + /* cmap->cur_group should be set up properly by caller */ + /* */ + static void + tt_cmap12_next( FT_CMap cmap ) /* TT_CMap12 */ + { + TT_CMap12 ttcmap = (TT_CMap12)cmap; + FT_Face face = FT_CMAP_FACE( cmap ); + FT_Byte* p; + FT_ULong start, end, start_id, char_code; + FT_ULong n; + FT_UInt gindex; + + + char_code = ttcmap->cur_charcode + 1; + + for ( n = ttcmap->cur_group; n < ttcmap->num_groups; n++ ) + { + p = ttcmap->cmap.data + 16 + 12 * n; + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + start_id = TT_PEEK_ULONG( p ); + + if ( char_code < start ) + char_code = start; + + Again: + if ( char_code <= end ) + { + /* ignore invalid group */ + if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) ) + continue; + + gindex = (FT_UInt)( start_id + ( char_code - start ) ); + + /* does first element of group point to `.notdef' glyph? */ + if ( gindex == 0 ) + { + if ( char_code >= 0xFFFFFFFFUL ) + goto Fail; + + char_code++; + goto Again; + } + + /* if `gindex' is invalid, the remaining values */ + /* in this group are invalid, too */ + if ( gindex >= (FT_UInt)face->num_glyphs ) + continue; + + ttcmap->cur_charcode = char_code; + ttcmap->cur_gindex = gindex; + ttcmap->cur_group = n; + + return; + } + } + + Fail: + ttcmap->valid = 0; + } + + + static FT_UInt + tt_cmap12_char_map_binary( TT_CMap cmap, + FT_UInt32* pchar_code, + FT_Bool next ) + { + FT_UInt gindex = 0; + FT_Byte* p = cmap->data + 12; + FT_UInt32 num_groups = TT_PEEK_ULONG( p ); + FT_UInt32 char_code = *pchar_code + next; + FT_UInt32 start, end, start_id; + FT_UInt32 max, min, mid; + + + if ( !num_groups ) + return 0; + + min = 0; + max = num_groups; + + /* binary search */ + do + { + mid = ( min + max ) >> 1; + p = cmap->data + 16 + 12 * mid; + + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + + if ( char_code < start ) + max = mid; + else if ( char_code > end ) + min = mid + 1; + else + { + start_id = TT_PEEK_ULONG( p ); + + /* reject invalid glyph index */ + if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) ) + gindex = 0; + else + gindex = (FT_UInt)( start_id + ( char_code - start ) ); + break; + } + } + while ( min < max ); + + if ( next ) + { + FT_Face face = FT_CMAP_FACE( cmap ); + TT_CMap12 cmap12 = (TT_CMap12)cmap; + + + /* if `char_code' is not in any group, then `mid' is */ + /* the group nearest to `char_code' */ + + if ( char_code > end && ++mid == num_groups ) + return 0; + + cmap12->valid = 1; + cmap12->cur_charcode = char_code; + cmap12->cur_group = mid; + + if ( gindex >= (FT_UInt)face->num_glyphs ) + gindex = 0; + + if ( !gindex ) + { + tt_cmap12_next( FT_CMAP( cmap12 ) ); + + if ( cmap12->valid ) + gindex = cmap12->cur_gindex; + } + else + cmap12->cur_gindex = gindex; + + *pchar_code = cmap12->cur_charcode; + } + + return gindex; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap12_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + return tt_cmap12_char_map_binary( (TT_CMap)cmap, &char_code, 0 ); + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap12_char_next( FT_CMap cmap, /* TT_CMap12 */ + FT_UInt32 *pchar_code ) + { + TT_CMap12 cmap12 = (TT_CMap12)cmap; + FT_UInt gindex; + + + if ( *pchar_code >= 0xFFFFFFFFUL ) + return 0; + + /* no need to search */ + if ( cmap12->valid && cmap12->cur_charcode == *pchar_code ) + { + tt_cmap12_next( FT_CMAP( cmap12 ) ); + if ( cmap12->valid ) + { + gindex = cmap12->cur_gindex; + *pchar_code = (FT_UInt32)cmap12->cur_charcode; + } + else + gindex = 0; + } + else + gindex = tt_cmap12_char_map_binary( (TT_CMap)cmap, pchar_code, 1 ); + + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap12_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 8; + + + cmap_info->format = 12; + cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap12_class_rec, + + sizeof ( TT_CMap12Rec ), + + (FT_CMap_InitFunc) tt_cmap12_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap12_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap12_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 12, + (TT_CMap_ValidateFunc)tt_cmap12_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap12_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_12 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 13 *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 13 + * reserved 2 USHORT reserved + * length 4 ULONG length in bytes + * language 8 ULONG Mac language code + * count 12 ULONG number of groups + * 16 + * + * This header is followed by `count' groups of the following format: + * + * start 0 ULONG first charcode + * end 4 ULONG last charcode + * glyphId 8 ULONG glyph ID for the whole group + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_13 + + typedef struct TT_CMap13Rec_ + { + TT_CMapRec cmap; + FT_Bool valid; + FT_ULong cur_charcode; + FT_UInt cur_gindex; + FT_ULong cur_group; + FT_ULong num_groups; + + } TT_CMap13Rec, *TT_CMap13; + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap13_init( FT_CMap cmap, /* TT_CMap13 */ + void* table_ ) + { + TT_CMap13 ttcmap = (TT_CMap13)cmap; + FT_Byte* table = (FT_Byte*)table_; + + + ttcmap->cmap.data = table; + + table += 12; + ttcmap->num_groups = FT_PEEK_ULONG( table ); + + ttcmap->valid = 0; + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap13_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p; + FT_ULong length; + FT_ULong num_groups; + + + if ( table + 16 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 4; + length = TT_NEXT_ULONG( p ); + + p = table + 12; + num_groups = TT_NEXT_ULONG( p ); + + if ( length > (FT_ULong)( valid->limit - table ) || + /* length < 16 + 12 * num_groups ? */ + length < 16 || + ( length - 16 ) / 12 < num_groups ) + FT_INVALID_TOO_SHORT; + + /* check groups, they must be in increasing order */ + { + FT_ULong n, start, end, glyph_id, last = 0; + + + for ( n = 0; n < num_groups; n++ ) + { + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + glyph_id = TT_NEXT_ULONG( p ); + + if ( start > end ) + FT_INVALID_DATA; + + if ( n > 0 && start <= last ) + FT_INVALID_DATA; + + if ( valid->level >= FT_VALIDATE_TIGHT ) + { + if ( glyph_id >= TT_VALID_GLYPH_COUNT( valid ) ) + FT_INVALID_GLYPH_ID; + } + + last = end; + } + } + + return FT_Err_Ok; + } + + + /* search the index of the charcode next to cmap->cur_charcode */ + /* cmap->cur_group should be set up properly by caller */ + /* */ + static void + tt_cmap13_next( FT_CMap cmap ) /* TT_CMap13 */ + { + TT_CMap13 ttcmap = (TT_CMap13)cmap; + FT_Face face = FT_CMAP_FACE( cmap ); + FT_Byte* p; + FT_ULong start, end, glyph_id, char_code; + FT_ULong n; + FT_UInt gindex; + + + char_code = ttcmap->cur_charcode + 1; + + for ( n = ttcmap->cur_group; n < ttcmap->num_groups; n++ ) + { + p = ttcmap->cmap.data + 16 + 12 * n; + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + glyph_id = TT_PEEK_ULONG( p ); + + if ( char_code < start ) + char_code = start; + + if ( char_code <= end ) + { + gindex = (FT_UInt)glyph_id; + + if ( gindex && gindex < (FT_UInt)face->num_glyphs ) + { + ttcmap->cur_charcode = char_code; + ttcmap->cur_gindex = gindex; + ttcmap->cur_group = n; + + return; + } + } + } + + ttcmap->valid = 0; + } + + + static FT_UInt + tt_cmap13_char_map_binary( TT_CMap cmap, + FT_UInt32* pchar_code, + FT_Bool next ) + { + FT_UInt gindex = 0; + FT_Byte* p = cmap->data + 12; + FT_UInt32 num_groups = TT_PEEK_ULONG( p ); + FT_UInt32 char_code = *pchar_code + next; + FT_UInt32 start, end; + FT_UInt32 max, min, mid; + + + if ( !num_groups ) + return 0; + + min = 0; + max = num_groups; + + /* binary search */ + do + { + mid = ( min + max ) >> 1; + p = cmap->data + 16 + 12 * mid; + + start = TT_NEXT_ULONG( p ); + end = TT_NEXT_ULONG( p ); + + if ( char_code < start ) + max = mid; + else if ( char_code > end ) + min = mid + 1; + else + { + gindex = (FT_UInt)TT_PEEK_ULONG( p ); + + break; + } + } + while ( min < max ); + + if ( next ) + { + FT_Face face = cmap->cmap.charmap.face; + TT_CMap13 cmap13 = (TT_CMap13)cmap; + + + /* if `char_code' is not in any group, then `mid' is */ + /* the group nearest to `char_code' */ + + if ( char_code > end && ++mid == num_groups ) + return 0; + + cmap13->valid = 1; + cmap13->cur_charcode = char_code; + cmap13->cur_group = mid; + + if ( gindex >= (FT_UInt)face->num_glyphs ) + gindex = 0; + + if ( !gindex ) + { + tt_cmap13_next( FT_CMAP( cmap13 ) ); + + if ( cmap13->valid ) + gindex = cmap13->cur_gindex; + } + else + cmap13->cur_gindex = gindex; + + *pchar_code = cmap13->cur_charcode; + } + + return gindex; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap13_char_index( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 char_code ) + { + return tt_cmap13_char_map_binary( (TT_CMap)cmap, &char_code, 0 ); + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap13_char_next( FT_CMap cmap, /* TT_CMap13 */ + FT_UInt32 *pchar_code ) + { + TT_CMap13 cmap13 = (TT_CMap13)cmap; + FT_UInt gindex; + + + if ( *pchar_code >= 0xFFFFFFFFUL ) + return 0; + + /* no need to search */ + if ( cmap13->valid && cmap13->cur_charcode == *pchar_code ) + { + tt_cmap13_next( FT_CMAP( cmap13 ) ); + if ( cmap13->valid ) + { + gindex = cmap13->cur_gindex; + *pchar_code = cmap13->cur_charcode; + } + else + gindex = 0; + } + else + gindex = tt_cmap13_char_map_binary( (TT_CMap)cmap, pchar_code, 1 ); + + return gindex; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap13_get_info( FT_CharMap cmap, /* TT_CMap */ + TT_CMapInfo *cmap_info ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = ttcmap->data + 8; + + + cmap_info->format = 13; + cmap_info->language = (FT_ULong)TT_PEEK_ULONG( p ); + + return FT_Err_Ok; + } + + + FT_DEFINE_TT_CMAP( + tt_cmap13_class_rec, + + sizeof ( TT_CMap13Rec ), + + (FT_CMap_InitFunc) tt_cmap13_init, /* init */ + (FT_CMap_DoneFunc) NULL, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap13_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap13_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + 13, + (TT_CMap_ValidateFunc)tt_cmap13_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap13_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_13 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FORMAT 14 *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * TABLE OVERVIEW + * -------------- + * + * NAME OFFSET TYPE DESCRIPTION + * + * format 0 USHORT must be 14 + * length 2 ULONG table length in bytes + * numSelector 6 ULONG number of variation sel. records + * + * Followed by numSelector records, each of which looks like + * + * varSelector 0 UINT24 Unicode codepoint of sel. + * defaultOff 3 ULONG offset to a default UVS table + * describing any variants to be found in + * the normal Unicode subtable. + * nonDefOff 7 ULONG offset to a non-default UVS table + * describing any variants not in the + * standard cmap, with GIDs here + * (either offset may be 0 NULL) + * + * Selectors are sorted by code point. + * + * A default Unicode Variation Selector (UVS) subtable is just a list of + * ranges of code points which are to be found in the standard cmap. No + * glyph IDs (GIDs) here. + * + * numRanges 0 ULONG number of ranges following + * + * A range looks like + * + * uniStart 0 UINT24 code point of the first character in + * this range + * additionalCnt 3 UBYTE count of additional characters in this + * range (zero means a range of a single + * character) + * + * Ranges are sorted by `uniStart'. + * + * A non-default Unicode Variation Selector (UVS) subtable is a list of + * mappings from codepoint to GID. + * + * numMappings 0 ULONG number of mappings + * + * A range looks like + * + * uniStart 0 UINT24 code point of the first character in + * this range + * GID 3 USHORT and its GID + * + * Ranges are sorted by `uniStart'. + */ + +#ifdef TT_CONFIG_CMAP_FORMAT_14 + + typedef struct TT_CMap14Rec_ + { + TT_CMapRec cmap; + FT_ULong num_selectors; + + /* This array is used to store the results of various + * cmap 14 query functions. The data is overwritten + * on each call to these functions. + */ + FT_UInt32 max_results; + FT_UInt32* results; + FT_Memory memory; + + } TT_CMap14Rec, *TT_CMap14; + + + FT_CALLBACK_DEF( void ) + tt_cmap14_done( FT_CMap cmap ) /* TT_CMap14 */ + { + TT_CMap14 ttcmap = (TT_CMap14)cmap; + FT_Memory memory = ttcmap->memory; + + + ttcmap->max_results = 0; + if ( memory && ttcmap->results ) + FT_FREE( ttcmap->results ); + } + + + static FT_Error + tt_cmap14_ensure( TT_CMap14 cmap, + FT_UInt32 num_results, + FT_Memory memory ) + { + FT_UInt32 old_max = cmap->max_results; + FT_Error error = FT_Err_Ok; + + + if ( num_results > cmap->max_results ) + { + cmap->memory = memory; + + if ( FT_QRENEW_ARRAY( cmap->results, old_max, num_results ) ) + return error; + + cmap->max_results = num_results; + } + + return error; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap14_init( FT_CMap cmap, /* TT_CMap14 */ + void* table_ ) + { + TT_CMap14 ttcmap = (TT_CMap14)cmap; + FT_Byte* table = (FT_Byte*)table_; + + + ttcmap->cmap.data = table; + + table += 6; + ttcmap->num_selectors = FT_PEEK_ULONG( table ); + ttcmap->max_results = 0; + ttcmap->results = NULL; + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap14_validate( FT_Byte* table, + FT_Validator valid ) + { + FT_Byte* p; + FT_ULong length; + FT_ULong num_selectors; + + + if ( table + 2 + 4 + 4 > valid->limit ) + FT_INVALID_TOO_SHORT; + + p = table + 2; + length = TT_NEXT_ULONG( p ); + num_selectors = TT_NEXT_ULONG( p ); + + if ( length > (FT_ULong)( valid->limit - table ) || + /* length < 10 + 11 * num_selectors ? */ + length < 10 || + ( length - 10 ) / 11 < num_selectors ) + FT_INVALID_TOO_SHORT; + + /* check selectors, they must be in increasing order */ + { + /* we start lastVarSel at 1 because a variant selector value of 0 + * isn't valid. + */ + FT_ULong n, lastVarSel = 1; + + + for ( n = 0; n < num_selectors; n++ ) + { + FT_ULong varSel = TT_NEXT_UINT24( p ); + FT_ULong defOff = TT_NEXT_ULONG( p ); + FT_ULong nondefOff = TT_NEXT_ULONG( p ); + + + if ( defOff >= length || nondefOff >= length ) + FT_INVALID_TOO_SHORT; + + if ( varSel < lastVarSel ) + FT_INVALID_DATA; + + lastVarSel = varSel + 1; + + /* check the default table (these glyphs should be reached */ + /* through the normal Unicode cmap, no GIDs, just check order) */ + if ( defOff != 0 ) + { + FT_Byte* defp = table + defOff; + FT_ULong numRanges; + FT_ULong i; + FT_ULong lastBase = 0; + + + if ( defp + 4 > valid->limit ) + FT_INVALID_TOO_SHORT; + + numRanges = TT_NEXT_ULONG( defp ); + + /* defp + numRanges * 4 > valid->limit ? */ + if ( numRanges > (FT_ULong)( valid->limit - defp ) / 4 ) + FT_INVALID_TOO_SHORT; + + for ( i = 0; i < numRanges; i++ ) + { + FT_ULong base = TT_NEXT_UINT24( defp ); + FT_ULong cnt = FT_NEXT_BYTE( defp ); + + + if ( base + cnt >= 0x110000UL ) /* end of Unicode */ + FT_INVALID_DATA; + + if ( base < lastBase ) + FT_INVALID_DATA; + + lastBase = base + cnt + 1U; + } + } + + /* and the non-default table (these glyphs are specified here) */ + if ( nondefOff != 0 ) + { + FT_Byte* ndp = table + nondefOff; + FT_ULong numMappings; + FT_ULong i, lastUni = 0; + + + if ( ndp + 4 > valid->limit ) + FT_INVALID_TOO_SHORT; + + numMappings = TT_NEXT_ULONG( ndp ); + + /* numMappings * 5 > (FT_ULong)( valid->limit - ndp ) ? */ + if ( numMappings > ( (FT_ULong)( valid->limit - ndp ) ) / 5 ) + FT_INVALID_TOO_SHORT; + + for ( i = 0; i < numMappings; i++ ) + { + FT_ULong uni = TT_NEXT_UINT24( ndp ); + FT_ULong gid = TT_NEXT_USHORT( ndp ); + + + if ( uni >= 0x110000UL ) /* end of Unicode */ + FT_INVALID_DATA; + + if ( uni < lastUni ) + FT_INVALID_DATA; + + lastUni = uni + 1U; + + if ( valid->level >= FT_VALIDATE_TIGHT && + gid >= TT_VALID_GLYPH_COUNT( valid ) ) + FT_INVALID_GLYPH_ID; + } + } + } + } + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap14_char_index( FT_CMap cmap, + FT_UInt32 char_code ) + { + FT_UNUSED( cmap ); + FT_UNUSED( char_code ); + + /* This can't happen */ + return 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap14_char_next( FT_CMap cmap, + FT_UInt32 *pchar_code ) + { + FT_UNUSED( cmap ); + + /* This can't happen */ + *pchar_code = 0; + return 0; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap14_get_info( FT_CharMap cmap, + TT_CMapInfo *cmap_info ) + { + FT_UNUSED( cmap ); + + cmap_info->format = 14; + /* subtable 14 does not define a language field */ + cmap_info->language = 0xFFFFFFFFUL; + + return FT_Err_Ok; + } + + + static FT_UInt + tt_cmap14_char_map_def_binary( FT_Byte *base, + FT_UInt32 char_code ) + { + FT_UInt32 numRanges = TT_PEEK_ULONG( base ); + FT_UInt32 max, min; + + + min = 0; + max = numRanges; + + base += 4; + + /* binary search */ + while ( min < max ) + { + FT_UInt32 mid = ( min + max ) >> 1; + FT_Byte* p = base + 4 * mid; + FT_ULong start = TT_NEXT_UINT24( p ); + FT_UInt cnt = FT_NEXT_BYTE( p ); + + + if ( char_code < start ) + max = mid; + else if ( char_code > start + cnt ) + min = mid + 1; + else + return TRUE; + } + + return FALSE; + } + + + static FT_UInt + tt_cmap14_char_map_nondef_binary( FT_Byte *base, + FT_UInt32 char_code ) + { + FT_UInt32 numMappings = TT_PEEK_ULONG( base ); + FT_UInt32 max, min; + + + min = 0; + max = numMappings; + + base += 4; + + /* binary search */ + while ( min < max ) + { + FT_UInt32 mid = ( min + max ) >> 1; + FT_Byte* p = base + 5 * mid; + FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p ); + + + if ( char_code < uni ) + max = mid; + else if ( char_code > uni ) + min = mid + 1; + else + return TT_PEEK_USHORT( p ); + } + + return 0; + } + + + static FT_Byte* + tt_cmap14_find_variant( FT_Byte *base, + FT_UInt32 variantCode ) + { + FT_UInt32 numVar = TT_PEEK_ULONG( base ); + FT_UInt32 max, min; + + + min = 0; + max = numVar; + + base += 4; + + /* binary search */ + while ( min < max ) + { + FT_UInt32 mid = ( min + max ) >> 1; + FT_Byte* p = base + 11 * mid; + FT_ULong varSel = TT_NEXT_UINT24( p ); + + + if ( variantCode < varSel ) + max = mid; + else if ( variantCode > varSel ) + min = mid + 1; + else + return p; + } + + return NULL; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap14_char_var_index( FT_CMap cmap, /* TT_CMap */ + FT_CMap ucmap, /* TT_CMap */ + FT_UInt32 charcode, + FT_UInt32 variantSelector ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + TT_CMap ttucmap = (TT_CMap)ucmap; + + FT_Byte* p = tt_cmap14_find_variant( ttcmap->data + 6, + variantSelector ); + FT_ULong defOff; + FT_ULong nondefOff; + + + if ( !p ) + return 0; + + defOff = TT_NEXT_ULONG( p ); + nondefOff = TT_PEEK_ULONG( p ); + + if ( defOff != 0 && + tt_cmap14_char_map_def_binary( ttcmap->data + defOff, charcode ) ) + { + /* This is the default variant of this charcode. GID not stored */ + /* here; stored in the normal Unicode charmap instead. */ + return ttucmap->cmap.clazz->char_index( &ttucmap->cmap, charcode ); + } + + if ( nondefOff != 0 ) + return tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff, + charcode ); + + return 0; + } + + + FT_CALLBACK_DEF( FT_Int ) + tt_cmap14_char_var_isdefault( FT_CMap cmap, /* TT_CMap */ + FT_UInt32 charcode, + FT_UInt32 variantSelector ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte* p = tt_cmap14_find_variant( ttcmap->data + 6, + variantSelector ); + FT_ULong defOff; + FT_ULong nondefOff; + + + if ( !p ) + return -1; + + defOff = TT_NEXT_ULONG( p ); + nondefOff = TT_NEXT_ULONG( p ); + + if ( defOff != 0 && + tt_cmap14_char_map_def_binary( ttcmap->data + defOff, charcode ) ) + return 1; + + if ( nondefOff != 0 && + tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff, + charcode ) != 0 ) + return 0; + + return -1; + } + + + FT_CALLBACK_DEF( FT_UInt32* ) + tt_cmap14_variants( FT_CMap cmap, /* TT_CMap14 */ + FT_Memory memory ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + TT_CMap14 cmap14 = (TT_CMap14)cmap; + FT_UInt32 count = cmap14->num_selectors; + FT_Byte* p = ttcmap->data + 10; + FT_UInt32* result; + FT_UInt32 i; + + + if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) ) + return NULL; + + result = cmap14->results; + for ( i = 0; i < count; i++ ) + { + result[i] = (FT_UInt32)TT_NEXT_UINT24( p ); + p += 8; + } + result[i] = 0; + + return result; + } + + + FT_CALLBACK_DEF( FT_UInt32 * ) + tt_cmap14_char_variants( FT_CMap cmap, /* TT_CMap14 */ + FT_Memory memory, + FT_UInt32 charCode ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + TT_CMap14 cmap14 = (TT_CMap14)cmap; + FT_UInt32 count = cmap14->num_selectors; + FT_Byte* p = ttcmap->data + 10; + FT_UInt32* q; + + + if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) ) + return NULL; + + for ( q = cmap14->results; count > 0; count-- ) + { + FT_UInt32 varSel = TT_NEXT_UINT24( p ); + FT_ULong defOff = TT_NEXT_ULONG( p ); + FT_ULong nondefOff = TT_NEXT_ULONG( p ); + + + if ( ( defOff != 0 && + tt_cmap14_char_map_def_binary( ttcmap->data + defOff, + charCode ) ) || + ( nondefOff != 0 && + tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff, + charCode ) != 0 ) ) + { + q[0] = varSel; + q++; + } + } + q[0] = 0; + + return cmap14->results; + } + + + static FT_UInt + tt_cmap14_def_char_count( FT_Byte *p ) + { + FT_UInt32 numRanges = (FT_UInt32)TT_NEXT_ULONG( p ); + FT_UInt tot = 0; + + + p += 3; /* point to the first `cnt' field */ + for ( ; numRanges > 0; numRanges-- ) + { + tot += 1 + p[0]; + p += 4; + } + + return tot; + } + + + static FT_UInt32* + tt_cmap14_get_def_chars( TT_CMap cmap, + FT_Byte* p, + FT_Memory memory ) + { + TT_CMap14 cmap14 = (TT_CMap14) cmap; + FT_UInt32 numRanges; + FT_UInt cnt; + FT_UInt32* q; + + + cnt = tt_cmap14_def_char_count( p ); + numRanges = (FT_UInt32)TT_NEXT_ULONG( p ); + + if ( tt_cmap14_ensure( cmap14, ( cnt + 1 ), memory ) ) + return NULL; + + for ( q = cmap14->results; numRanges > 0; numRanges-- ) + { + FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p ); + + + cnt = FT_NEXT_BYTE( p ) + 1; + do + { + q[0] = uni; + uni += 1; + q += 1; + + } while ( --cnt != 0 ); + } + q[0] = 0; + + return cmap14->results; + } + + + static FT_UInt32* + tt_cmap14_get_nondef_chars( TT_CMap cmap, + FT_Byte *p, + FT_Memory memory ) + { + TT_CMap14 cmap14 = (TT_CMap14) cmap; + FT_UInt32 numMappings; + FT_UInt i; + FT_UInt32 *ret; + + + numMappings = (FT_UInt32)TT_NEXT_ULONG( p ); + + if ( tt_cmap14_ensure( cmap14, ( numMappings + 1 ), memory ) ) + return NULL; + + ret = cmap14->results; + for ( i = 0; i < numMappings; i++ ) + { + ret[i] = (FT_UInt32)TT_NEXT_UINT24( p ); + p += 2; + } + ret[i] = 0; + + return ret; + } + + + FT_CALLBACK_DEF( FT_UInt32 * ) + tt_cmap14_variant_chars( FT_CMap cmap, /* TT_CMap */ + FT_Memory memory, + FT_UInt32 variantSelector ) + { + TT_CMap ttcmap = (TT_CMap)cmap; + FT_Byte *p = tt_cmap14_find_variant( ttcmap->data + 6, + variantSelector ); + FT_Int i; + FT_ULong defOff; + FT_ULong nondefOff; + + + if ( !p ) + return NULL; + + defOff = TT_NEXT_ULONG( p ); + nondefOff = TT_NEXT_ULONG( p ); + + if ( defOff == 0 && nondefOff == 0 ) + return NULL; + + if ( defOff == 0 ) + return tt_cmap14_get_nondef_chars( ttcmap, ttcmap->data + nondefOff, + memory ); + else if ( nondefOff == 0 ) + return tt_cmap14_get_def_chars( ttcmap, ttcmap->data + defOff, + memory ); + else + { + /* Both a default and a non-default glyph set? That's probably not */ + /* good font design, but the spec allows for it... */ + TT_CMap14 cmap14 = (TT_CMap14)cmap; + FT_UInt32 numRanges; + FT_UInt32 numMappings; + FT_UInt32 duni; + FT_UInt32 dcnt; + FT_UInt32 nuni; + FT_Byte* dp; + FT_UInt di, ni, k; + + FT_UInt32 *ret; + + + p = ttcmap->data + nondefOff; + dp = ttcmap->data + defOff; + + numMappings = (FT_UInt32)TT_NEXT_ULONG( p ); + dcnt = tt_cmap14_def_char_count( dp ); + numRanges = (FT_UInt32)TT_NEXT_ULONG( dp ); + + if ( numMappings == 0 ) + return tt_cmap14_get_def_chars( ttcmap, ttcmap->data + defOff, + memory ); + if ( dcnt == 0 ) + return tt_cmap14_get_nondef_chars( ttcmap, ttcmap->data + nondefOff, + memory ); + + if ( tt_cmap14_ensure( cmap14, ( dcnt + numMappings + 1 ), memory ) ) + return NULL; + + ret = cmap14->results; + duni = (FT_UInt32)TT_NEXT_UINT24( dp ); + dcnt = FT_NEXT_BYTE( dp ); + di = 1; + nuni = (FT_UInt32)TT_NEXT_UINT24( p ); + p += 2; + ni = 1; + i = 0; + + for (;;) + { + if ( nuni > duni + dcnt ) + { + for ( k = 0; k <= dcnt; k++ ) + ret[i++] = duni + k; + + di++; + + if ( di > numRanges ) + break; + + duni = (FT_UInt32)TT_NEXT_UINT24( dp ); + dcnt = FT_NEXT_BYTE( dp ); + } + else + { + if ( nuni < duni ) + ret[i++] = nuni; + /* If it is within the default range then ignore it -- */ + /* that should not have happened */ + ni++; + if ( ni > numMappings ) + break; + + nuni = (FT_UInt32)TT_NEXT_UINT24( p ); + p += 2; + } + } + + if ( ni <= numMappings ) + { + /* If we get here then we have run out of all default ranges. */ + /* We have read one non-default mapping which we haven't stored */ + /* and there may be others that need to be read. */ + ret[i++] = nuni; + while ( ni < numMappings ) + { + ret[i++] = (FT_UInt32)TT_NEXT_UINT24( p ); + p += 2; + ni++; + } + } + else if ( di <= numRanges ) + { + /* If we get here then we have run out of all non-default */ + /* mappings. We have read one default range which we haven't */ + /* stored and there may be others that need to be read. */ + for ( k = 0; k <= dcnt; k++ ) + ret[i++] = duni + k; + + while ( di < numRanges ) + { + duni = (FT_UInt32)TT_NEXT_UINT24( dp ); + dcnt = FT_NEXT_BYTE( dp ); + + for ( k = 0; k <= dcnt; k++ ) + ret[i++] = duni + k; + di++; + } + } + + ret[i] = 0; + + return ret; + } + } + + + FT_DEFINE_TT_CMAP( + tt_cmap14_class_rec, + + sizeof ( TT_CMap14Rec ), + + (FT_CMap_InitFunc) tt_cmap14_init, /* init */ + (FT_CMap_DoneFunc) tt_cmap14_done, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap14_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap14_char_next, /* char_next */ + + /* Format 14 extension functions */ + (FT_CMap_CharVarIndexFunc) tt_cmap14_char_var_index, + (FT_CMap_CharVarIsDefaultFunc)tt_cmap14_char_var_isdefault, + (FT_CMap_VariantListFunc) tt_cmap14_variants, + (FT_CMap_CharVariantListFunc) tt_cmap14_char_variants, + (FT_CMap_VariantCharListFunc) tt_cmap14_variant_chars, + + 14, + (TT_CMap_ValidateFunc)tt_cmap14_validate, /* validate */ + (TT_CMap_Info_GetFunc)tt_cmap14_get_info /* get_cmap_info */ + ) + +#endif /* TT_CONFIG_CMAP_FORMAT_14 */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** SYNTHETIC UNICODE *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /* This charmap is generated using postscript glyph names. */ + +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + FT_CALLBACK_DEF( const char * ) + tt_get_glyph_name( void* face_, /* TT_Face */ + FT_UInt idx ) + { + TT_Face face = (TT_Face)face_; + FT_String* PSname = NULL; + + + tt_face_get_ps_name( face, idx, &PSname ); + + return PSname; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_cmap_unicode_init( FT_CMap cmap, /* PS_Unicodes */ + FT_Pointer pointer ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + FT_UNUSED( pointer ); + + + if ( !psnames->unicodes_init ) + return FT_THROW( Unimplemented_Feature ); + + return psnames->unicodes_init( memory, + unicodes, + face->root.num_glyphs, + &tt_get_glyph_name, + (PS_FreeGlyphNameFunc)NULL, + (FT_Pointer)face ); + } + + + FT_CALLBACK_DEF( void ) + tt_cmap_unicode_done( FT_CMap cmap ) /* PS_Unicodes */ + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + FT_Face face = FT_CMAP_FACE( cmap ); + FT_Memory memory = FT_FACE_MEMORY( face ); + + + FT_FREE( unicodes->maps ); + unicodes->num_maps = 0; + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap_unicode_char_index( FT_CMap cmap, /* PS_Unicodes */ + FT_UInt32 char_code ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + + return psnames->unicodes_char_index( unicodes, char_code ); + } + + + FT_CALLBACK_DEF( FT_UInt ) + tt_cmap_unicode_char_next( FT_CMap cmap, /* PS_Unicodes */ + FT_UInt32 *pchar_code ) + { + PS_Unicodes unicodes = (PS_Unicodes)cmap; + TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); + FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; + + + return psnames->unicodes_char_next( unicodes, pchar_code ); + } + + + FT_DEFINE_TT_CMAP( + tt_cmap_unicode_class_rec, + + sizeof ( PS_UnicodesRec ), + + (FT_CMap_InitFunc) tt_cmap_unicode_init, /* init */ + (FT_CMap_DoneFunc) tt_cmap_unicode_done, /* done */ + (FT_CMap_CharIndexFunc)tt_cmap_unicode_char_index, /* char_index */ + (FT_CMap_CharNextFunc) tt_cmap_unicode_char_next, /* char_next */ + + (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */ + (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */ + (FT_CMap_VariantListFunc) NULL, /* variant_list */ + (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */ + (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */ + + ~0U, + (TT_CMap_ValidateFunc)NULL, /* validate */ + (TT_CMap_Info_GetFunc)NULL /* get_cmap_info */ + ) + +#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + + static const TT_CMap_Class tt_cmap_classes[] = + { +#undef TTCMAPCITEM +#define TTCMAPCITEM( a ) &a, +#include "ttcmapc.h" + NULL, + }; + + + /* parse the `cmap' table and build the corresponding TT_CMap objects */ + /* in the current face */ + /* */ + FT_LOCAL_DEF( FT_Error ) + tt_face_build_cmaps( TT_Face face ) + { + FT_Byte* const table = face->cmap_table; + FT_Byte* limit; + FT_UInt volatile num_cmaps; + FT_Byte* volatile p = table; + FT_Library library = FT_FACE_LIBRARY( face ); + + FT_UNUSED( library ); + + + if ( !p || face->cmap_size < 4 ) + 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; + FT_UInt32 offset; + + + charmap.platform_id = TT_NEXT_USHORT( p ); + charmap.encoding_id = TT_NEXT_USHORT( p ); + charmap.face = FT_FACE( face ); + charmap.encoding = FT_ENCODING_NONE; /* will be filled later */ + offset = TT_NEXT_ULONG( p ); + + if ( offset && offset <= face->cmap_size - 2 ) + { + FT_Byte* volatile cmap = table + offset; + volatile FT_UInt format = TT_PEEK_USHORT( cmap ); + const TT_CMap_Class* volatile pclazz = tt_cmap_classes; + TT_CMap_Class volatile clazz; + + + for ( ; *pclazz; pclazz++ ) + { + clazz = *pclazz; + if ( clazz->format == format ) + { + volatile TT_ValidatorRec valid; + volatile FT_Error error = FT_Err_Ok; + + + ft_validator_init( FT_VALIDATOR( &valid ), cmap, limit, + FT_VALIDATE_DEFAULT ); + + valid.num_glyphs = (FT_UInt)face->max_profile.numGlyphs; + + if ( ft_setjmp( FT_VALIDATOR( &valid )->jump_buffer) == 0 ) + { + /* validate this cmap sub-table */ + error = clazz->validate( cmap, FT_VALIDATOR( &valid ) ); + } + + if ( !valid.validator.error ) + { + FT_CMap ttcmap; + + + /* It might make sense to store the single variation */ + /* selector cmap somewhere special. But it would have to be */ + /* in the public FT_FaceRec, and we can't change that. */ + + if ( !FT_CMap_New( (FT_CMap_Class)clazz, + cmap, &charmap, &ttcmap ) ) + { + /* it is simpler to directly set `flags' than adding */ + /* a parameter to FT_CMap_New */ + ((TT_CMap)ttcmap)->flags = (FT_Int)error; + } + } + else + { + FT_TRACE0(( "tt_face_build_cmaps:" + " broken cmap sub-table ignored\n" )); + } + break; + } + } + + if ( !*pclazz ) + { + FT_TRACE0(( "tt_face_build_cmaps:" + " unsupported cmap sub-table ignored\n" )); + } + } + } + + return FT_Err_Ok; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_get_cmap_info( FT_CharMap charmap, + TT_CMapInfo *cmap_info ) + { + FT_CMap cmap = FT_CMAP( charmap ); + TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz; + + + if ( clazz->get_cmap_info ) + return clazz->get_cmap_info( charmap, cmap_info ); + else + return FT_THROW( Invalid_CharMap_Format ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttcmap.h b/non-source/foreign/freetype2/src/sfnt/ttcmap.h new file mode 100644 index 000000000..e2c5e72bf --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttcmap.h @@ -0,0 +1,126 @@ +/**************************************************************************** + * + * ttcmap.h + * + * TrueType character mapping table (cmap) support (specification). + * + * Copyright (C) 2002-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTCMAP_H_ +#define TTCMAP_H_ + + +#include <freetype/internal/tttypes.h> +#include <freetype/internal/ftvalid.h> +#include <freetype/internal/services/svttcmap.h> + +FT_BEGIN_HEADER + + +#define TT_CMAP_FLAG_UNSORTED 1 +#define TT_CMAP_FLAG_OVERLAPPING 2 + + typedef struct TT_CMapRec_ + { + FT_CMapRec cmap; + FT_Byte* data; /* pointer to in-memory cmap table */ + FT_Int flags; /* for format 4 only */ + + } TT_CMapRec, *TT_CMap; + + typedef const struct TT_CMap_ClassRec_* TT_CMap_Class; + + + typedef FT_Error + (*TT_CMap_ValidateFunc)( FT_Byte* data, + FT_Validator valid ); + + typedef struct TT_CMap_ClassRec_ + { + FT_CMap_ClassRec clazz; + FT_UInt format; + TT_CMap_ValidateFunc validate; + TT_CMap_Info_GetFunc get_cmap_info; + + } TT_CMap_ClassRec; + + +#define FT_DEFINE_TT_CMAP( class_, \ + size_, \ + init_, \ + done_, \ + char_index_, \ + char_next_, \ + char_var_index_, \ + char_var_default_, \ + variant_list_, \ + charvariant_list_, \ + variantchar_list_, \ + format_, \ + validate_, \ + get_cmap_info_ ) \ + FT_CALLBACK_TABLE_DEF \ + const TT_CMap_ClassRec class_ = \ + { \ + { size_, \ + init_, \ + done_, \ + char_index_, \ + char_next_, \ + char_var_index_, \ + char_var_default_, \ + variant_list_, \ + charvariant_list_, \ + variantchar_list_ \ + }, \ + \ + format_, \ + validate_, \ + get_cmap_info_ \ + }; + + +#undef TTCMAPCITEM +#define TTCMAPCITEM( a ) FT_CALLBACK_TABLE const TT_CMap_ClassRec a; +#include "ttcmapc.h" + + + typedef struct TT_ValidatorRec_ + { + FT_ValidatorRec validator; + FT_UInt num_glyphs; + + } TT_ValidatorRec, *TT_Validator; + + +#define TT_VALIDATOR( x ) ( (TT_Validator)( x ) ) +#define TT_VALID_GLYPH_COUNT( x ) TT_VALIDATOR( x )->num_glyphs + + + FT_CALLBACK_TABLE const TT_CMap_ClassRec tt_cmap_unicode_class_rec; + + FT_LOCAL( FT_Error ) + tt_face_build_cmaps( TT_Face face ); + + /* used in tt-cmaps service */ + FT_LOCAL( FT_Error ) + tt_get_cmap_info( FT_CharMap charmap, + TT_CMapInfo *cmap_info ); + + +FT_END_HEADER + +#endif /* TTCMAP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttcmapc.h b/non-source/foreign/freetype2/src/sfnt/ttcmapc.h new file mode 100644 index 000000000..370898363 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttcmapc.h @@ -0,0 +1,56 @@ +/**************************************************************************** + * + * ttcmapc.h + * + * TT CMAP classes definitions (specification only). + * + * Copyright (C) 2009-2024 by + * Oran Agra and Mickey Gabel. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifdef TT_CONFIG_CMAP_FORMAT_0 + TTCMAPCITEM( tt_cmap0_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_2 + TTCMAPCITEM( tt_cmap2_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_4 + TTCMAPCITEM( tt_cmap4_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_6 + TTCMAPCITEM( tt_cmap6_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_8 + TTCMAPCITEM( tt_cmap8_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_10 + TTCMAPCITEM( tt_cmap10_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_12 + TTCMAPCITEM( tt_cmap12_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_13 + TTCMAPCITEM( tt_cmap13_class_rec ) +#endif + +#ifdef TT_CONFIG_CMAP_FORMAT_14 + TTCMAPCITEM( tt_cmap14_class_rec ) +#endif + + + /* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttcolr.c b/non-source/foreign/freetype2/src/sfnt/ttcolr.c new file mode 100644 index 000000000..b37658dde --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttcolr.c @@ -0,0 +1,1923 @@ +/**************************************************************************** + * + * ttcolr.c + * + * TrueType and OpenType colored glyph layer support (body). + * + * Copyright (C) 2018-2024 by + * David Turner, Robert Wilhelm, Dominik Röttsches, and Werner Lemberg. + * + * Originally written by Shao Yu Zhang <shaozhang@fb.com>. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * `COLR' table specification: + * + * https://www.microsoft.com/typography/otspec/colr.htm + * + */ + + +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include <freetype/ftcolor.h> +#include <freetype/config/integer-types.h> + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/internal/services/svmm.h> +#endif + +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS + +#include "ttcolr.h" + + + /* NOTE: These are the table sizes calculated through the specs. */ +#define BASE_GLYPH_SIZE 6U +#define BASE_GLYPH_PAINT_RECORD_SIZE 6U +#define LAYER_V1_LIST_PAINT_OFFSET_SIZE 4U +#define LAYER_V1_LIST_NUM_LAYERS_SIZE 4U +#define COLOR_STOP_SIZE 6U +#define VAR_IDX_BASE_SIZE 4U +#define LAYER_SIZE 4U +/* https://docs.microsoft.com/en-us/typography/opentype/spec/colr#colr-header */ +/* 3 * uint16 + 2 * Offset32 */ +#define COLRV0_HEADER_SIZE 14U +/* COLRV0_HEADER_SIZE + 5 * Offset32 */ +#define COLRV1_HEADER_SIZE 34U + + +#define ENSURE_READ_BYTES( byte_size ) \ + if ( p < colr->paints_start_v1 || \ + p > (FT_Byte*)colr->table + colr->table_size - byte_size ) \ + return 0 + + + typedef enum FT_PaintFormat_Internal_ + { + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SOLID = 3, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_LINEAR_GRADIENT = 5, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_RADIAL_GRADIENT = 7, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SWEEP_GRADIENT = 9, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSFORM = 13, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSLATE = 15, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE = 17, + FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER = 18, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER = 19, + FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM = 20, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM = 21, + FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER = 22, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER = 23, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE = 25, + FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER = 26, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER = 27, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW = 29, + FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER = 30, + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER = 31, + + } FT_PaintFormat_Internal; + + + typedef struct BaseGlyphRecord_ + { + FT_UShort gid; + FT_UShort first_layer_index; + FT_UShort num_layers; + + } BaseGlyphRecord; + + + typedef struct BaseGlyphV1Record_ + { + FT_UShort gid; + /* Offset from start of BaseGlyphV1List, i.e., from base_glyphs_v1. */ + FT_ULong paint_offset; + + } BaseGlyphV1Record; + + + typedef struct Colr_ + { + FT_UShort version; + FT_UShort num_base_glyphs; + FT_UShort num_layers; + + FT_Byte* base_glyphs; + FT_Byte* layers; + + FT_ULong num_base_glyphs_v1; + /* Points at beginning of BaseGlyphV1List. */ + FT_Byte* base_glyphs_v1; + + FT_ULong num_layers_v1; + FT_Byte* layers_v1; + + FT_Byte* clip_list; + + /* + * Paint tables start at the minimum of the end of the LayerList and the + * end of the BaseGlyphList. Record this location in a field here for + * safety checks when accessing paint tables. + */ + FT_Byte* paints_start_v1; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* Item Variation Store for variable 'COLR' v1. */ + GX_ItemVarStoreRec var_store; + GX_DeltaSetIdxMapRec delta_set_idx_map; +#endif + + /* The memory that backs up the `COLR' table. */ + void* table; + FT_ULong table_size; + + } Colr; + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttcolr + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_colr( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_Memory memory = face->root.memory; + + FT_Byte* table = NULL; + FT_Byte* p = NULL; + /* Needed for reading array lengths in referenced tables. */ + FT_Byte* p1 = NULL; + + Colr* colr = NULL; + + FT_ULong base_glyph_offset, layer_offset; + FT_ULong base_glyphs_offset_v1, num_base_glyphs_v1; + FT_ULong layer_offset_v1, num_layers_v1, clip_list_offset; + FT_ULong table_size; +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_ULong colr_offset_in_stream; +#endif + + + /* `COLR' always needs `CPAL' */ + if ( !face->cpal ) + return FT_THROW( Invalid_File_Format ); + + error = face->goto_table( face, TTAG_COLR, stream, &table_size ); + if ( error ) + goto NoColr; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + colr_offset_in_stream = FT_STREAM_POS(); +#endif + + if ( table_size < COLRV0_HEADER_SIZE ) + goto NoColr; + + if ( FT_FRAME_EXTRACT( table_size, table ) ) + goto NoColr; + + p = table; + + if ( FT_NEW( colr ) ) + goto NoColr; + + colr->version = FT_NEXT_USHORT( p ); + if ( colr->version != 0 && colr->version != 1 ) + goto InvalidTable; + + colr->num_base_glyphs = FT_NEXT_USHORT( p ); + base_glyph_offset = FT_NEXT_ULONG( p ); + + if ( table_size <= base_glyph_offset ) + goto InvalidTable; + if ( ( table_size - base_glyph_offset ) / BASE_GLYPH_SIZE + < colr->num_base_glyphs ) + goto InvalidTable; + + layer_offset = FT_NEXT_ULONG( p ); + colr->num_layers = FT_NEXT_USHORT( p ); + + if ( table_size <= layer_offset ) + goto InvalidTable; + if ( ( table_size - layer_offset ) / LAYER_SIZE + < colr->num_layers ) + goto InvalidTable; + + if ( colr->version == 1 ) + { + if ( table_size < COLRV1_HEADER_SIZE ) + goto InvalidTable; + + base_glyphs_offset_v1 = FT_NEXT_ULONG( p ); + + if ( table_size - 4 <= base_glyphs_offset_v1 ) + goto InvalidTable; + + p1 = (FT_Byte*)( table + base_glyphs_offset_v1 ); + num_base_glyphs_v1 = FT_PEEK_ULONG( p1 ); + + if ( ( table_size - base_glyphs_offset_v1 ) / BASE_GLYPH_PAINT_RECORD_SIZE + < num_base_glyphs_v1 ) + goto InvalidTable; + + colr->num_base_glyphs_v1 = num_base_glyphs_v1; + colr->base_glyphs_v1 = p1; + + layer_offset_v1 = FT_NEXT_ULONG( p ); + + if ( table_size <= layer_offset_v1 ) + goto InvalidTable; + + if ( layer_offset_v1 ) + { + if ( table_size - 4 <= layer_offset_v1 ) + goto InvalidTable; + + p1 = (FT_Byte*)( table + layer_offset_v1 ); + num_layers_v1 = FT_PEEK_ULONG( p1 ); + + if ( ( table_size - layer_offset_v1 ) / LAYER_V1_LIST_PAINT_OFFSET_SIZE + < num_layers_v1 ) + goto InvalidTable; + + colr->num_layers_v1 = num_layers_v1; + colr->layers_v1 = p1; + + colr->paints_start_v1 = + FT_MIN( colr->base_glyphs_v1 + + colr->num_base_glyphs_v1 * BASE_GLYPH_PAINT_RECORD_SIZE, + colr->layers_v1 + + colr->num_layers_v1 * LAYER_V1_LIST_PAINT_OFFSET_SIZE ); + } + else + { + colr->num_layers_v1 = 0; + colr->layers_v1 = 0; + colr->paints_start_v1 = + colr->base_glyphs_v1 + + colr->num_base_glyphs_v1 * BASE_GLYPH_PAINT_RECORD_SIZE; + } + + clip_list_offset = FT_NEXT_ULONG( p ); + + if ( table_size <= clip_list_offset ) + goto InvalidTable; + + if ( clip_list_offset ) + colr->clip_list = (FT_Byte*)( table + clip_list_offset ); + else + colr->clip_list = 0; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + colr->var_store.dataCount = 0; + colr->var_store.varData = NULL; + colr->var_store.axisCount = 0; + colr->var_store.regionCount = 0; + colr->var_store.varRegionList = 0; + + colr->delta_set_idx_map.mapCount = 0; + colr->delta_set_idx_map.outerIndex = NULL; + colr->delta_set_idx_map.innerIndex = NULL; + + if ( face->variation_support & TT_FACE_FLAG_VAR_FVAR ) + { + FT_ULong var_idx_map_offset, var_store_offset; + + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm; + + + var_idx_map_offset = FT_NEXT_ULONG( p ); + + if ( var_idx_map_offset >= table_size ) + goto InvalidTable; + + var_store_offset = FT_NEXT_ULONG( p ); + if ( table_size <= var_store_offset ) + goto InvalidTable; + + if ( var_store_offset ) + { + /* If variation info has not been initialized yet, try doing so, */ + /* otherwise loading the variation store will fail as it */ + /* requires access to `blend` for checking the number of axes. */ + if ( !face->blend ) + if ( mm->get_mm_var( FT_FACE( face ), NULL ) ) + goto InvalidTable; + + /* Try loading `VarIdxMap` and `VarStore`. */ + error = mm->load_item_var_store( + FT_FACE( face ), + colr_offset_in_stream + var_store_offset, + &colr->var_store ); + if ( error != FT_Err_Ok ) + goto InvalidTable; + } + + if ( colr->var_store.axisCount && var_idx_map_offset ) + { + error = mm->load_delta_set_idx_map( + FT_FACE( face ), + colr_offset_in_stream + var_idx_map_offset, + &colr->delta_set_idx_map, + &colr->var_store, + table_size ); + if ( error != FT_Err_Ok ) + goto InvalidTable; + } + } +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + } + + colr->base_glyphs = (FT_Byte*)( table + base_glyph_offset ); + colr->layers = (FT_Byte*)( table + layer_offset ); + colr->table = table; + colr->table_size = table_size; + + face->colr = colr; + + return FT_Err_Ok; + + InvalidTable: +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + { + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm; + + + mm->done_delta_set_idx_map( FT_FACE( face ), + &colr->delta_set_idx_map ); + mm->done_item_var_store( FT_FACE( face ), + &colr->var_store ); + } +#endif + + error = FT_THROW( Invalid_Table ); + + NoColr: + FT_FRAME_RELEASE( table ); + FT_FREE( colr ); + + return error; + } + + + FT_LOCAL_DEF( void ) + tt_face_free_colr( TT_Face face ) + { + FT_Stream stream = face->root.stream; + FT_Memory memory = face->root.memory; + + Colr* colr = (Colr*)face->colr; + + + if ( colr ) + { +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + { + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm; + + + mm->done_delta_set_idx_map( FT_FACE( face ), + &colr->delta_set_idx_map ); + mm->done_item_var_store( FT_FACE( face ), + &colr->var_store ); + } +#endif + FT_FRAME_RELEASE( colr->table ); + FT_FREE( colr ); + } + } + + + static FT_Bool + find_base_glyph_record( FT_Byte* base_glyph_begin, + FT_UInt num_base_glyph, + FT_UInt glyph_id, + BaseGlyphRecord* record ) + { + FT_UInt min = 0; + FT_UInt max = num_base_glyph; + + + while ( min < max ) + { + FT_UInt mid = min + ( max - min ) / 2; + FT_Byte* p = base_glyph_begin + mid * BASE_GLYPH_SIZE; + + FT_UShort gid = FT_NEXT_USHORT( p ); + + + if ( gid < glyph_id ) + min = mid + 1; + else if (gid > glyph_id ) + max = mid; + else + { + record->gid = gid; + record->first_layer_index = FT_NEXT_USHORT( p ); + record->num_layers = FT_NEXT_USHORT( p ); + + return 1; + } + } + + return 0; + } + + + FT_LOCAL_DEF( FT_Bool ) + tt_face_get_colr_layer( TT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator ) + { + Colr* colr = (Colr*)face->colr; + BaseGlyphRecord glyph_record; + + + if ( !colr ) + return 0; + + if ( !iterator->p ) + { + FT_ULong offset; + + + /* first call to function */ + iterator->layer = 0; + + if ( !find_base_glyph_record( colr->base_glyphs, + colr->num_base_glyphs, + base_glyph, + &glyph_record ) ) + return 0; + + if ( glyph_record.num_layers ) + iterator->num_layers = glyph_record.num_layers; + else + return 0; + + offset = LAYER_SIZE * glyph_record.first_layer_index; + if ( offset + LAYER_SIZE * glyph_record.num_layers > colr->table_size ) + return 0; + + iterator->p = colr->layers + offset; + } + + if ( iterator->layer >= iterator->num_layers || + iterator->p < colr->layers || + iterator->p >= ( (FT_Byte*)colr->table + colr->table_size ) ) + return 0; + + *aglyph_index = FT_NEXT_USHORT( iterator->p ); + *acolor_index = FT_NEXT_USHORT( iterator->p ); + + if ( *aglyph_index >= (FT_UInt)( FT_FACE( face )->num_glyphs ) || + ( *acolor_index != 0xFFFF && + *acolor_index >= face->palette_data.num_palette_entries ) ) + return 0; + + iterator->layer++; + + return 1; + } + + + static FT_Bool + read_color_line( Colr* colr, + FT_Byte* color_line_p, + FT_ColorLine* colorline, + FT_Bool read_variable ) + { + FT_Byte* p = color_line_p; + FT_PaintExtend paint_extend; + + + ENSURE_READ_BYTES( 3 ); + + paint_extend = (FT_PaintExtend)FT_NEXT_BYTE( p ); + if ( paint_extend > FT_COLR_PAINT_EXTEND_REFLECT ) + return 0; + + colorline->extend = paint_extend; + + colorline->color_stop_iterator.num_color_stops = FT_NEXT_USHORT( p ); + colorline->color_stop_iterator.p = p; + colorline->color_stop_iterator.current_color_stop = 0; + colorline->color_stop_iterator.read_variable = read_variable; + + return 1; + } + + + /* + * Read a paint offset for `FT_Paint*` objects that have them and check + * whether it is within reasonable limits within the font and the COLR + * table. + * + * Return 1 on success, 0 on failure. + */ + static FT_Bool + get_child_table_pointer ( Colr* colr, + FT_Byte* paint_base, + FT_Byte** p, + FT_Byte** child_table_pointer ) + { + FT_UInt32 paint_offset; + FT_Byte* child_table_p; + + + if ( !child_table_pointer ) + return 0; + + if ( *p < colr->paints_start_v1 || + *p > (FT_Byte*)colr->table + colr->table_size - 1 - 3 ) + return 0; + + paint_offset = FT_NEXT_UOFF3( *p ); + if ( !paint_offset ) + return 0; + + child_table_p = (FT_Byte*)( paint_base + paint_offset ); + + if ( child_table_p < colr->paints_start_v1 || + child_table_p >= ( (FT_Byte*)colr->table + colr->table_size ) ) + return 0; + + *child_table_pointer = child_table_p; + return 1; + } + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + static FT_Bool + get_deltas_for_var_index_base ( TT_Face face, + Colr* colr, + FT_ULong var_index_base, + FT_UInt num_deltas, + FT_ItemVarDelta* deltas ) + { + FT_UInt outer_index = 0; + FT_UInt inner_index = 0; + FT_ULong loop_var_index = var_index_base; + + FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm; + + FT_UInt i = 0; + + + if ( var_index_base == 0xFFFFFFFF ) + { + for ( i = 0; i < num_deltas; ++i ) + deltas[i] = 0; + return 1; + } + + for ( i = 0; i < num_deltas; ++i ) + { + loop_var_index = var_index_base + i; + + if ( colr->delta_set_idx_map.innerIndex ) + { + if ( loop_var_index >= colr->delta_set_idx_map.mapCount ) + loop_var_index = colr->delta_set_idx_map.mapCount - 1; + + outer_index = colr->delta_set_idx_map.outerIndex[loop_var_index]; + inner_index = colr->delta_set_idx_map.innerIndex[loop_var_index]; + } + else + { + outer_index = 0; + inner_index = loop_var_index; + } + + deltas[i] = mm->get_item_delta( FT_FACE( face ), &colr->var_store, + outer_index, inner_index ); + } + + return 1; + } + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + + static FT_Bool + read_paint( TT_Face face, + Colr* colr, + FT_Byte* p, + FT_COLR_Paint* apaint ) + { + FT_Byte* paint_base = p; + FT_Byte* child_table_p = NULL; + FT_Bool do_read_var = FALSE; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_ULong var_index_base = 0; + /* Longest varIndexBase offset is 5 in the spec. */ + FT_ItemVarDelta item_deltas[6] = { 0, 0, 0, 0, 0, 0 }; +#else + FT_UNUSED( face ); +#endif + + + if ( !p || !colr || !colr->table ) + return 0; + + /* The last byte of the 'COLR' table is at 'size-1'; subtract 1 of */ + /* that to account for the expected format byte we are going to read. */ + if ( p < colr->paints_start_v1 || + p > (FT_Byte*)colr->table + colr->table_size - 2 ) + return 0; + + apaint->format = (FT_PaintFormat)FT_NEXT_BYTE( p ); + + if ( apaint->format >= FT_COLR_PAINT_FORMAT_MAX ) + return 0; + + if ( apaint->format == FT_COLR_PAINTFORMAT_COLR_LAYERS ) + { + /* Initialize layer iterator/ */ + FT_Byte num_layers; + FT_UInt32 first_layer_index; + + + ENSURE_READ_BYTES( 5 ); + num_layers = FT_NEXT_BYTE( p ); + if ( num_layers > colr->num_layers_v1 ) + return 0; + + first_layer_index = FT_NEXT_ULONG( p ); + if ( first_layer_index + num_layers > colr->num_layers_v1 ) + return 0; + + apaint->u.colr_layers.layer_iterator.num_layers = num_layers; + apaint->u.colr_layers.layer_iterator.layer = 0; + /* TODO: Check whether pointer is outside colr? */ + apaint->u.colr_layers.layer_iterator.p = + colr->layers_v1 + + LAYER_V1_LIST_NUM_LAYERS_SIZE + + LAYER_V1_LIST_PAINT_OFFSET_SIZE * first_layer_index; + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_SOLID || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SOLID ) + { + ENSURE_READ_BYTES( 4 ); + apaint->u.solid.color.palette_index = FT_NEXT_USHORT( p ); + apaint->u.solid.color.alpha = FT_NEXT_SHORT( p ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SOLID ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG( p ); + + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 1, + item_deltas ) ) + return 0; + + apaint->u.solid.color.alpha += (FT_F2Dot14)item_deltas[0]; + } +#endif + + apaint->format = FT_COLR_PAINTFORMAT_SOLID; + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_COLR_GLYPH ) + { + ENSURE_READ_BYTES(2); + apaint->u.colr_glyph.glyphID = FT_NEXT_USHORT( p ); + + return 1; + } + + /* + * Grouped below here are all paint formats that have an offset to a + * child paint table as the first entry (for example, a color line or a + * child paint table). Retrieve that and determine whether that paint + * offset is valid first. + */ + + if ( !get_child_table_pointer( colr, paint_base, &p, &child_table_p ) ) + return 0; + + if ( apaint->format == FT_COLR_PAINTFORMAT_LINEAR_GRADIENT || + ( do_read_var = + ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_LINEAR_GRADIENT ) ) ) + { + if ( !read_color_line( colr, + child_table_p, + &apaint->u.linear_gradient.colorline, + do_read_var ) ) + return 0; + + /* + * In order to support variations expose these as FT_Fixed 16.16 + * values so that we can support fractional values after + * interpolation. + */ + ENSURE_READ_BYTES( 12 ); + apaint->u.linear_gradient.p0.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.linear_gradient.p0.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.linear_gradient.p1.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.linear_gradient.p1.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.linear_gradient.p2.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.linear_gradient.p2.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( do_read_var ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG ( p ); + + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 6, + item_deltas ) ) + return 0; + + apaint->u.linear_gradient.p0.x += INT_TO_FIXED( item_deltas[0] ); + apaint->u.linear_gradient.p0.y += INT_TO_FIXED( item_deltas[1] ); + apaint->u.linear_gradient.p1.x += INT_TO_FIXED( item_deltas[2] ); + apaint->u.linear_gradient.p1.y += INT_TO_FIXED( item_deltas[3] ); + apaint->u.linear_gradient.p2.x += INT_TO_FIXED( item_deltas[4] ); + apaint->u.linear_gradient.p2.y += INT_TO_FIXED( item_deltas[5] ); + } +#endif + + apaint->format = FT_COLR_PAINTFORMAT_LINEAR_GRADIENT; + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_RADIAL_GRADIENT || + ( do_read_var = + ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_RADIAL_GRADIENT ) ) ) + { + FT_Pos tmp; + + + if ( !read_color_line( colr, + child_table_p, + &apaint->u.radial_gradient.colorline, + do_read_var ) ) + return 0; + + + /* In the OpenType specification, `r0` and `r1` are defined as */ + /* `UFWORD`. Since FreeType doesn't have a corresponding 16.16 */ + /* format we convert to `FWORD` and replace negative values with */ + /* (32bit) `FT_INT_MAX`. */ + + ENSURE_READ_BYTES( 12 ); + + apaint->u.radial_gradient.c0.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.radial_gradient.c0.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + + tmp = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.radial_gradient.r0 = tmp < 0 ? FT_INT_MAX : tmp; + + apaint->u.radial_gradient.c1.x = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.radial_gradient.c1.y = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + + tmp = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.radial_gradient.r1 = tmp < 0 ? FT_INT_MAX : tmp; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( do_read_var ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG ( p ); + + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 6, + item_deltas ) ) + return 0; + + apaint->u.radial_gradient.c0.x += INT_TO_FIXED( item_deltas[0] ); + apaint->u.radial_gradient.c0.y += INT_TO_FIXED( item_deltas[1] ); + + // TODO: Anything to be done about UFWORD deltas here? + apaint->u.radial_gradient.r0 += INT_TO_FIXED( item_deltas[2] ); + + apaint->u.radial_gradient.c1.x += INT_TO_FIXED( item_deltas[3] ); + apaint->u.radial_gradient.c1.y += INT_TO_FIXED( item_deltas[4] ); + + apaint->u.radial_gradient.r1 += INT_TO_FIXED( item_deltas[5] ); + } +#endif + + apaint->format = FT_COLR_PAINTFORMAT_RADIAL_GRADIENT; + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_SWEEP_GRADIENT || + ( do_read_var = + ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SWEEP_GRADIENT ) ) ) + { + if ( !read_color_line( colr, + child_table_p, + &apaint->u.sweep_gradient.colorline, + do_read_var) ) + return 0; + + ENSURE_READ_BYTES( 8 ); + + apaint->u.sweep_gradient.center.x = + INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.sweep_gradient.center.y = + INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + + apaint->u.sweep_gradient.start_angle = + F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.sweep_gradient.end_angle = + F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( do_read_var ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG ( p ); + + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4, + item_deltas ) ) + return 0; + + // TODO: Handle overflow? + apaint->u.sweep_gradient.center.x += INT_TO_FIXED( item_deltas[0] ); + apaint->u.sweep_gradient.center.y += INT_TO_FIXED( item_deltas[1] ); + + apaint->u.sweep_gradient.start_angle += + F2DOT14_TO_FIXED( item_deltas[2] ); + apaint->u.sweep_gradient.end_angle += + F2DOT14_TO_FIXED( item_deltas[3] ); + } +#endif + apaint->format = FT_COLR_PAINTFORMAT_SWEEP_GRADIENT; + + return 1; + } + + if ( apaint->format == FT_COLR_PAINTFORMAT_GLYPH ) + { + ENSURE_READ_BYTES( 2 ); + apaint->u.glyph.paint.p = child_table_p; + apaint->u.glyph.paint.insert_root_transform = 0; + apaint->u.glyph.glyphID = FT_NEXT_USHORT( p ); + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSFORM || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSFORM ) + { + apaint->u.transform.paint.p = child_table_p; + apaint->u.transform.paint.insert_root_transform = 0; + + if ( !get_child_table_pointer( colr, paint_base, &p, &child_table_p ) ) + return 0; + + p = child_table_p; + + /* + * The following matrix coefficients are encoded as + * OpenType 16.16 fixed-point values. + */ + ENSURE_READ_BYTES( 24 ); + apaint->u.transform.affine.xx = FT_NEXT_LONG( p ); + apaint->u.transform.affine.yx = FT_NEXT_LONG( p ); + apaint->u.transform.affine.xy = FT_NEXT_LONG( p ); + apaint->u.transform.affine.yy = FT_NEXT_LONG( p ); + apaint->u.transform.affine.dx = FT_NEXT_LONG( p ); + apaint->u.transform.affine.dy = FT_NEXT_LONG( p ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSFORM ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG( p ); + + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 6, + item_deltas ) ) + return 0; + + apaint->u.transform.affine.xx += (FT_Fixed)item_deltas[0]; + apaint->u.transform.affine.yx += (FT_Fixed)item_deltas[1]; + apaint->u.transform.affine.xy += (FT_Fixed)item_deltas[2]; + apaint->u.transform.affine.yy += (FT_Fixed)item_deltas[3]; + apaint->u.transform.affine.dx += (FT_Fixed)item_deltas[4]; + apaint->u.transform.affine.dy += (FT_Fixed)item_deltas[5]; + } +#endif + + apaint->format = FT_COLR_PAINTFORMAT_TRANSFORM; + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_TRANSLATE || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSLATE ) + { + apaint->u.translate.paint.p = child_table_p; + apaint->u.translate.paint.insert_root_transform = 0; + + ENSURE_READ_BYTES( 4 ); + apaint->u.translate.dx = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.translate.dy = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_TRANSLATE ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG( p ); + + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 2, + item_deltas ) ) + return 0; + + apaint->u.translate.dx += INT_TO_FIXED( item_deltas[0] ); + apaint->u.translate.dy += INT_TO_FIXED( item_deltas[1] ); + } +#endif + + apaint->format = FT_COLR_PAINTFORMAT_TRANSLATE; + + return 1; + } + + else if ( apaint->format >= FT_COLR_PAINTFORMAT_SCALE && + (FT_PaintFormat_Internal)apaint->format <= + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER ) + { + apaint->u.scale.paint.p = child_table_p; + apaint->u.scale.paint.insert_root_transform = 0; + + /* All scale paints get at least one scale value. */ + ENSURE_READ_BYTES( 2 ); + apaint->u.scale.scale_x = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + + /* Non-uniform ones read an extra y value. */ + if ( apaint->format == FT_COLR_PAINTFORMAT_SCALE || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER ) + { + ENSURE_READ_BYTES( 2 ); + apaint->u.scale.scale_y = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + } + else + apaint->u.scale.scale_y = apaint->u.scale.scale_x; + + /* Scale paints that have a center read center coordinates, */ + /* otherwise the center is (0,0). */ + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_SCALE_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_SCALE_UNIFORM_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER ) + { + ENSURE_READ_BYTES( 4 ); + apaint->u.scale.center_x = INT_TO_FIXED( FT_NEXT_SHORT ( p ) ); + apaint->u.scale.center_y = INT_TO_FIXED( FT_NEXT_SHORT ( p ) ); + } + else + { + apaint->u.scale.center_x = 0; + apaint->u.scale.center_y = 0; + } + + /* Base values set, now handle variations. */ + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG( p ); + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE ) + { + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 2, + item_deltas ) ) + return 0; + + apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] ); + apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[1] ); + } + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_CENTER ) + { + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4, + item_deltas ) ) + return 0; + + apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] ); + apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[1] ); + apaint->u.scale.center_x += INT_TO_FIXED( item_deltas[2] ); + apaint->u.scale.center_y += INT_TO_FIXED( item_deltas[3] ); + } + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM ) + { + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 1, + item_deltas ) ) + return 0; + + apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] ); + apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[0] ); + } + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SCALE_UNIFORM_CENTER ) + { + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 3, + item_deltas ) ) + return 0; + + apaint->u.scale.scale_x += F2DOT14_TO_FIXED( item_deltas[0] ); + apaint->u.scale.scale_y += F2DOT14_TO_FIXED( item_deltas[0] ); + apaint->u.scale.center_x += INT_TO_FIXED( item_deltas[1] ); + apaint->u.scale.center_y += INT_TO_FIXED( item_deltas[2] ); + } + } +#endif + + /* FT 'COLR' v1 API output format always returns fully defined */ + /* structs; we thus set the format to the public API value. */ + apaint->format = FT_COLR_PAINTFORMAT_SCALE; + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_ROTATE || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER ) + { + apaint->u.rotate.paint.p = child_table_p; + apaint->u.rotate.paint.insert_root_transform = 0; + + ENSURE_READ_BYTES( 2 ); + apaint->u.rotate.angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_ROTATE_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER ) + { + ENSURE_READ_BYTES( 4 ); + apaint->u.rotate.center_x = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.rotate.center_y = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + } + else + { + apaint->u.rotate.center_x = 0; + apaint->u.rotate.center_y = 0; + } + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER ) + { + FT_UInt num_deltas = 0; + + + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG( p ); + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE_CENTER ) + num_deltas = 3; + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_ROTATE ) + num_deltas = 1; + + if ( num_deltas > 0 ) + { + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, + num_deltas, item_deltas ) ) + return 0; + + apaint->u.rotate.angle += F2DOT14_TO_FIXED( item_deltas[0] ); + + if ( num_deltas == 3 ) + { + apaint->u.rotate.center_x += INT_TO_FIXED( item_deltas[1] ); + apaint->u.rotate.center_y += INT_TO_FIXED( item_deltas[2] ); + } + } + } +#endif + + apaint->format = FT_COLR_PAINTFORMAT_ROTATE; + + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_SKEW || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER ) + { + apaint->u.skew.paint.p = child_table_p; + apaint->u.skew.paint.insert_root_transform = 0; + + ENSURE_READ_BYTES( 4 ); + apaint->u.skew.x_skew_angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.skew.y_skew_angle = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_SKEW_CENTER || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER ) + { + ENSURE_READ_BYTES( 4 ); + apaint->u.skew.center_x = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + apaint->u.skew.center_y = INT_TO_FIXED( FT_NEXT_SHORT( p ) ); + } + else + { + apaint->u.skew.center_x = 0; + apaint->u.skew.center_y = 0; + } + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW || + (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER ) + { + ENSURE_READ_BYTES( 4 ); + var_index_base = FT_NEXT_ULONG( p ); + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW ) + { + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 2, + item_deltas ) ) + return 0; + + apaint->u.skew.x_skew_angle += F2DOT14_TO_FIXED( item_deltas[0] ); + apaint->u.skew.y_skew_angle += F2DOT14_TO_FIXED( item_deltas[1] ); + } + + if ( (FT_PaintFormat_Internal)apaint->format == + FT_COLR_PAINTFORMAT_INTERNAL_VAR_SKEW_CENTER ) + { + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4, + item_deltas ) ) + return 0; + + apaint->u.skew.x_skew_angle += F2DOT14_TO_FIXED( item_deltas[0] ); + apaint->u.skew.y_skew_angle += F2DOT14_TO_FIXED( item_deltas[1] ); + apaint->u.skew.center_x += INT_TO_FIXED( item_deltas[2] ); + apaint->u.skew.center_y += INT_TO_FIXED( item_deltas[3] ); + } + } +#endif + + apaint->format = FT_COLR_PAINTFORMAT_SKEW; + + return 1; + } + + else if ( apaint->format == FT_COLR_PAINTFORMAT_COMPOSITE ) + { + FT_UInt composite_mode; + + + apaint->u.composite.source_paint.p = child_table_p; + apaint->u.composite.source_paint.insert_root_transform = 0; + + ENSURE_READ_BYTES( 1 ); + composite_mode = FT_NEXT_BYTE( p ); + if ( composite_mode >= FT_COLR_COMPOSITE_MAX ) + return 0; + + apaint->u.composite.composite_mode = (FT_Composite_Mode)composite_mode; + + if ( !get_child_table_pointer( colr, paint_base, &p, &child_table_p ) ) + return 0; + + apaint->u.composite.backdrop_paint.p = + child_table_p; + apaint->u.composite.backdrop_paint.insert_root_transform = + 0; + + return 1; + } + + return 0; + } + + + static FT_Bool + find_base_glyph_v1_record( FT_Byte * base_glyph_begin, + FT_UInt num_base_glyph, + FT_UInt glyph_id, + BaseGlyphV1Record *record ) + { + FT_UInt min = 0; + FT_UInt max = num_base_glyph; + + + while ( min < max ) + { + FT_UInt mid = min + ( max - min ) / 2; + FT_UShort gid; + + /* + * `base_glyph_begin` is the beginning of `BaseGlyphV1List`; + * skip `numBaseGlyphV1Records` by adding 4 to start binary search + * in the array of `BaseGlyphV1Record`. + */ + FT_Byte *p = base_glyph_begin + 4 + mid * BASE_GLYPH_PAINT_RECORD_SIZE; + + gid = FT_NEXT_USHORT( p ); + + if ( gid < glyph_id ) + min = mid + 1; + else if (gid > glyph_id ) + max = mid; + else + { + record->gid = gid; + record->paint_offset = FT_NEXT_ULONG ( p ); + return 1; + } + } + + return 0; + } + + + FT_LOCAL_DEF( FT_Bool ) + tt_face_get_colr_glyph_paint( TT_Face face, + FT_UInt base_glyph, + FT_Color_Root_Transform root_transform, + FT_OpaquePaint* opaque_paint ) + { + Colr* colr = (Colr*)face->colr; + BaseGlyphV1Record base_glyph_v1_record; + FT_Byte* p; + + if ( !colr || !colr->table ) + return 0; + + if ( colr->version < 1 || !colr->num_base_glyphs_v1 || + !colr->base_glyphs_v1 ) + return 0; + + if ( opaque_paint->p ) + return 0; + + if ( !find_base_glyph_v1_record( colr->base_glyphs_v1, + colr->num_base_glyphs_v1, + base_glyph, + &base_glyph_v1_record ) ) + return 0; + + if ( !base_glyph_v1_record.paint_offset || + base_glyph_v1_record.paint_offset > colr->table_size ) + return 0; + + p = (FT_Byte*)( colr->base_glyphs_v1 + + base_glyph_v1_record.paint_offset ); + if ( p >= ( (FT_Byte*)colr->table + colr->table_size ) ) + return 0; + + opaque_paint->p = p; + + if ( root_transform == FT_COLOR_INCLUDE_ROOT_TRANSFORM ) + opaque_paint->insert_root_transform = 1; + else + opaque_paint->insert_root_transform = 0; + + return 1; + } + + + FT_LOCAL_DEF( FT_Bool ) + tt_face_get_color_glyph_clipbox( TT_Face face, + FT_UInt base_glyph, + FT_ClipBox* clip_box ) + { + Colr* colr; + + FT_Byte *p, *p1, *clip_base, *limit; + + FT_Byte clip_list_format; + FT_ULong num_clip_boxes, i; + FT_UShort gid_start, gid_end; + FT_UInt32 clip_box_offset; + FT_Byte format; + + const FT_Byte num_corners = 4; + FT_Vector corners[4]; + FT_Byte j; + FT_BBox font_clip_box; + + + colr = (Colr*)face->colr; + if ( !colr ) + return 0; + + if ( !colr->clip_list ) + return 0; + + p = colr->clip_list; + + /* Limit points to the first byte after the end of the color table. */ + /* Thus, in subsequent limit checks below we need to check whether the */ + /* read pointer is strictly greater than a position offset by certain */ + /* field sizes to the left of that position. */ + limit = (FT_Byte*)colr->table + colr->table_size; + + /* Check whether we can extract one `uint8` and one `uint32`. */ + if ( p > limit - ( 1 + 4 ) ) + return 0; + + clip_base = p; + clip_list_format = FT_NEXT_BYTE ( p ); + + /* Format byte used here to be able to upgrade ClipList for >16bit */ + /* glyph ids; for now we can expect it to be 1. */ + if ( !( clip_list_format == 1 ) ) + return 0; + + num_clip_boxes = FT_NEXT_ULONG( p ); + + /* Check whether we can extract two `uint16` and one `Offset24`, */ + /* `num_clip_boxes` times. */ + if ( colr->table_size / ( 2 + 2 + 3 ) < num_clip_boxes || + p > limit - ( 2 + 2 + 3 ) * num_clip_boxes ) + return 0; + + for ( i = 0; i < num_clip_boxes; ++i ) + { + gid_start = FT_NEXT_USHORT( p ); + gid_end = FT_NEXT_USHORT( p ); + clip_box_offset = FT_NEXT_UOFF3( p ); + + if ( base_glyph >= gid_start && base_glyph <= gid_end ) + { + p1 = (FT_Byte*)( clip_base + clip_box_offset ); + + /* Check whether we can extract one `uint8`. */ + if ( p1 > limit - 1 ) + return 0; + + format = FT_NEXT_BYTE( p1 ); + + if ( format > 2 ) + return 0; + + /* Check whether we can extract four `FWORD`. */ + if ( p1 > limit - ( 2 + 2 + 2 + 2 ) ) + return 0; + + /* `face->root.size->metrics.x_scale` and `y_scale` are factors */ + /* that scale a font unit value in integers to a 26.6 fixed value */ + /* according to the requested size, see for example */ + /* `ft_recompute_scaled_metrics`. */ + font_clip_box.xMin = FT_MulFix( FT_NEXT_SHORT( p1 ), + face->root.size->metrics.x_scale ); + font_clip_box.yMin = FT_MulFix( FT_NEXT_SHORT( p1 ), + face->root.size->metrics.y_scale ); + font_clip_box.xMax = FT_MulFix( FT_NEXT_SHORT( p1 ), + face->root.size->metrics.x_scale ); + font_clip_box.yMax = FT_MulFix( FT_NEXT_SHORT( p1 ), + face->root.size->metrics.y_scale ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( format == 2 ) + { + FT_ULong var_index_base = 0; + /* varIndexBase offset for clipbox is 3 at most. */ + FT_ItemVarDelta item_deltas[4] = { 0, 0, 0, 0 }; + + + /* Check whether we can extract a 32-bit varIndexBase now. */ + if ( p1 > limit - 4 ) + return 0; + + var_index_base = FT_NEXT_ULONG( p1 ); + + if ( !get_deltas_for_var_index_base( face, colr, var_index_base, 4, + item_deltas ) ) + return 0; + + font_clip_box.xMin += + FT_MulFix( item_deltas[0], face->root.size->metrics.x_scale ); + font_clip_box.yMin += + FT_MulFix( item_deltas[1], face->root.size->metrics.y_scale ); + font_clip_box.xMax += + FT_MulFix( item_deltas[2], face->root.size->metrics.x_scale ); + font_clip_box.yMax += + FT_MulFix( item_deltas[3], face->root.size->metrics.y_scale ); + } +#endif + + /* Make 4 corner points (xMin, yMin), (xMax, yMax) and transform */ + /* them. If we we would only transform two corner points and */ + /* span a rectangle based on those, the rectangle may become too */ + /* small to cover the glyph. */ + corners[0].x = font_clip_box.xMin; + corners[1].x = font_clip_box.xMin; + corners[2].x = font_clip_box.xMax; + corners[3].x = font_clip_box.xMax; + + corners[0].y = font_clip_box.yMin; + corners[1].y = font_clip_box.yMax; + corners[2].y = font_clip_box.yMax; + corners[3].y = font_clip_box.yMin; + + for ( j = 0; j < num_corners; ++j ) + { + if ( face->root.internal->transform_flags & 1 ) + FT_Vector_Transform( &corners[j], + &face->root.internal->transform_matrix ); + + if ( face->root.internal->transform_flags & 2 ) + { + corners[j].x += face->root.internal->transform_delta.x; + corners[j].y += face->root.internal->transform_delta.y; + } + } + + clip_box->bottom_left = corners[0]; + clip_box->top_left = corners[1]; + clip_box->top_right = corners[2]; + clip_box->bottom_right = corners[3]; + + return 1; + } + } + + return 0; + } + + + FT_LOCAL_DEF( FT_Bool ) + tt_face_get_paint_layers( TT_Face face, + FT_LayerIterator* iterator, + FT_OpaquePaint* opaque_paint ) + { + FT_Byte* p = NULL; + FT_Byte* p_first_layer = NULL; + FT_Byte* p_paint = NULL; + FT_UInt32 paint_offset; + + Colr* colr; + + + if ( iterator->layer == iterator->num_layers ) + return 0; + + colr = (Colr*)face->colr; + if ( !colr ) + return 0; + + /* + * We have an iterator pointing at a paint offset as part of the + * `paintOffset` array in `LayerV1List`. + */ + p = iterator->p; + + /* + * Do a cursor sanity check of the iterator. Counting backwards from + * where it stands, we need to end up at a position after the beginning + * of the `LayerV1List` table and not after the end of the + * `LayerV1List`. + */ + p_first_layer = p - + iterator->layer * LAYER_V1_LIST_PAINT_OFFSET_SIZE - + LAYER_V1_LIST_NUM_LAYERS_SIZE; + if ( p_first_layer < (FT_Byte*)colr->layers_v1 ) + return 0; + if ( p_first_layer >= (FT_Byte*)( + colr->layers_v1 + LAYER_V1_LIST_NUM_LAYERS_SIZE + + colr->num_layers_v1 * LAYER_V1_LIST_PAINT_OFFSET_SIZE ) ) + return 0; + + /* + * Before reading, ensure that `p` is within 'COLR' v1 and we can read a + * 4-byte ULONG. + */ + if ( p < colr->layers_v1 || + p > (FT_Byte*)colr->table + colr->table_size - 4 ) + return 0; + + paint_offset = + FT_NEXT_ULONG( p ); + opaque_paint->insert_root_transform = + 0; + + p_paint = (FT_Byte*)( colr->layers_v1 + paint_offset ); + + if ( p_paint < colr->paints_start_v1 || + p_paint >= ( (FT_Byte*)colr->table + colr->table_size ) ) + return 0; + + opaque_paint->p = p_paint; + + iterator->p = p; + + iterator->layer++; + + return 1; + } + + + FT_LOCAL_DEF( FT_Bool ) + tt_face_get_colorline_stops( TT_Face face, + FT_ColorStop* color_stop, + FT_ColorStopIterator *iterator ) + { + Colr* colr = (Colr*)face->colr; + + FT_Byte* p; + FT_ULong var_index_base; + FT_Byte* last_entry_p = NULL; + FT_UInt entry_size = COLOR_STOP_SIZE; + + + if ( !colr || !colr->table || !iterator ) + return 0; + + if ( iterator->current_color_stop >= iterator->num_color_stops ) + return 0; + + if ( iterator->read_variable ) + entry_size += VAR_IDX_BASE_SIZE; + + /* Calculate the start pointer for the last to-be-read (Var)ColorStop */ + /* and check whether we can read a full (Var)ColorStop at that */ + /* position by comparing it to the position that is the size of one */ + /* (Var)ColorStop before the end of the 'COLR' table. */ + last_entry_p = + iterator->p + ( iterator->num_color_stops - 1 - + iterator->current_color_stop ) * entry_size; + if ( iterator->p < colr->paints_start_v1 || + last_entry_p > (FT_Byte*)colr->table + + colr->table_size - entry_size ) + return 0; + + /* Iterator points at first `ColorStop` of `ColorLine`. */ + p = iterator->p; + + color_stop->stop_offset = F2DOT14_TO_FIXED( FT_NEXT_SHORT( p ) ); + + color_stop->color.palette_index = FT_NEXT_USHORT( p ); + + color_stop->color.alpha = FT_NEXT_SHORT( p ); + + if ( iterator->read_variable ) + { + /* Pointer p needs to be advanced independently of whether we intend */ + /* to take variable deltas into account or not. Otherwise iteration */ + /* would fail due to wrong offsets. */ + var_index_base = FT_NEXT_ULONG( p ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + { + FT_Int item_deltas[2]; + + + if ( !get_deltas_for_var_index_base( face, colr, + var_index_base, + 2, + item_deltas ) ) + return 0; + + color_stop->stop_offset += F2DOT14_TO_FIXED( item_deltas[0] ); + color_stop->color.alpha += (FT_F2Dot14)item_deltas[1]; + } +#else + FT_UNUSED( var_index_base ); +#endif + } + + iterator->p = p; + iterator->current_color_stop++; + + return 1; + } + + + FT_LOCAL_DEF( FT_Bool ) + tt_face_get_paint( TT_Face face, + FT_OpaquePaint opaque_paint, + FT_COLR_Paint* paint ) + { + Colr* colr = (Colr*)face->colr; + FT_OpaquePaint next_paint; + FT_Matrix ft_root_scale; + + if ( !colr || !colr->base_glyphs_v1 || !colr->table ) + return 0; + + if ( opaque_paint.insert_root_transform ) + { + /* 'COLR' v1 glyph information is returned in unscaled coordinates, + * i.e., `FT_Size` is not applied or multiplied into the values. When + * client applications draw color glyphs, they can request to include + * a top-level transform, which includes the active `x_scale` and + * `y_scale` information for scaling the glyph, as well the additional + * transform and translate configured through `FT_Set_Transform`. + * This allows client applications to apply this top-level transform + * to the graphics context first and only once, then have gradient and + * contour scaling applied correctly when performing the additional + * drawing operations for subsequenct paints. Prepare this initial + * transform here. + */ + paint->format = FT_COLR_PAINTFORMAT_TRANSFORM; + + next_paint.p = opaque_paint.p; + next_paint.insert_root_transform = 0; + paint->u.transform.paint = next_paint; + + /* `x_scale` and `y_scale` are in 26.6 format, representing the scale + * factor to get from font units to requested size. However, expected + * return values are in 16.16, so we shift accordingly with rounding. + */ + ft_root_scale.xx = ( face->root.size->metrics.x_scale + 32 ) >> 6; + ft_root_scale.xy = 0; + ft_root_scale.yx = 0; + ft_root_scale.yy = ( face->root.size->metrics.y_scale + 32 ) >> 6; + + if ( face->root.internal->transform_flags & 1 ) + FT_Matrix_Multiply( &face->root.internal->transform_matrix, + &ft_root_scale ); + + paint->u.transform.affine.xx = ft_root_scale.xx; + paint->u.transform.affine.xy = ft_root_scale.xy; + paint->u.transform.affine.yx = ft_root_scale.yx; + paint->u.transform.affine.yy = ft_root_scale.yy; + + /* The translation is specified in 26.6 format and, according to the + * documentation of `FT_Set_Translate`, is performed on the character + * size given in the last call to `FT_Set_Char_Size`. The + * 'PaintTransform' paint table's `FT_Affine23` format expects + * values in 16.16 format, thus we need to shift by 10 bits. + */ + if ( face->root.internal->transform_flags & 2 ) + { + paint->u.transform.affine.dx = + face->root.internal->transform_delta.x * ( 1 << 10 ); + paint->u.transform.affine.dy = + face->root.internal->transform_delta.y * ( 1 << 10 ); + } + else + { + paint->u.transform.affine.dx = 0; + paint->u.transform.affine.dy = 0; + } + + return 1; + } + + return read_paint( face, colr, opaque_paint.p, paint ); + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_colr_blend_layer( TT_Face face, + FT_UInt color_index, + FT_GlyphSlot dstSlot, + FT_GlyphSlot srcSlot ) + { + FT_Error error; + + FT_UInt x, y; + FT_Byte b, g, r, alpha; + + FT_ULong size; + FT_Byte* src; + FT_Byte* dst; + + + if ( !dstSlot->bitmap.buffer ) + { + /* Initialize destination of color bitmap */ + /* with the size of first component. */ + dstSlot->bitmap_left = srcSlot->bitmap_left; + dstSlot->bitmap_top = srcSlot->bitmap_top; + + dstSlot->bitmap.width = srcSlot->bitmap.width; + dstSlot->bitmap.rows = srcSlot->bitmap.rows; + dstSlot->bitmap.pixel_mode = FT_PIXEL_MODE_BGRA; + dstSlot->bitmap.pitch = (int)dstSlot->bitmap.width * 4; + dstSlot->bitmap.num_grays = 256; + + size = dstSlot->bitmap.rows * (unsigned int)dstSlot->bitmap.pitch; + + error = ft_glyphslot_alloc_bitmap( dstSlot, size ); + if ( error ) + return error; + + FT_MEM_ZERO( dstSlot->bitmap.buffer, size ); + } + else + { + /* Resize destination if needed such that new component fits. */ + FT_Int x_min, x_max, y_min, y_max; + + + x_min = FT_MIN( dstSlot->bitmap_left, srcSlot->bitmap_left ); + x_max = FT_MAX( dstSlot->bitmap_left + (FT_Int)dstSlot->bitmap.width, + srcSlot->bitmap_left + (FT_Int)srcSlot->bitmap.width ); + + y_min = FT_MIN( dstSlot->bitmap_top - (FT_Int)dstSlot->bitmap.rows, + srcSlot->bitmap_top - (FT_Int)srcSlot->bitmap.rows ); + y_max = FT_MAX( dstSlot->bitmap_top, srcSlot->bitmap_top ); + + if ( x_min != dstSlot->bitmap_left || + x_max != dstSlot->bitmap_left + (FT_Int)dstSlot->bitmap.width || + y_min != dstSlot->bitmap_top - (FT_Int)dstSlot->bitmap.rows || + y_max != dstSlot->bitmap_top ) + { + FT_Memory memory = face->root.memory; + + FT_UInt width = (FT_UInt)( x_max - x_min ); + FT_UInt rows = (FT_UInt)( y_max - y_min ); + FT_UInt pitch = width * 4; + + FT_Byte* buf = NULL; + FT_Byte* p; + FT_Byte* q; + + + size = rows * pitch; + if ( FT_ALLOC( buf, size ) ) + return error; + + p = dstSlot->bitmap.buffer; + q = buf + + (int)pitch * ( y_max - dstSlot->bitmap_top ) + + 4 * ( dstSlot->bitmap_left - x_min ); + + for ( y = 0; y < dstSlot->bitmap.rows; y++ ) + { + FT_MEM_COPY( q, p, dstSlot->bitmap.width * 4 ); + + p += dstSlot->bitmap.pitch; + q += pitch; + } + + ft_glyphslot_set_bitmap( dstSlot, buf ); + + dstSlot->bitmap_top = y_max; + dstSlot->bitmap_left = x_min; + + dstSlot->bitmap.width = width; + dstSlot->bitmap.rows = rows; + dstSlot->bitmap.pitch = (int)pitch; + + dstSlot->internal->flags |= FT_GLYPH_OWN_BITMAP; + dstSlot->format = FT_GLYPH_FORMAT_BITMAP; + } + } + + if ( color_index == 0xFFFF ) + { + if ( face->have_foreground_color ) + { + b = face->foreground_color.blue; + g = face->foreground_color.green; + r = face->foreground_color.red; + alpha = face->foreground_color.alpha; + } + else + { + if ( face->palette_data.palette_flags && + ( face->palette_data.palette_flags[face->palette_index] & + FT_PALETTE_FOR_DARK_BACKGROUND ) ) + { + /* white opaque */ + b = 0xFF; + g = 0xFF; + r = 0xFF; + alpha = 0xFF; + } + else + { + /* black opaque */ + b = 0x00; + g = 0x00; + r = 0x00; + alpha = 0xFF; + } + } + } + else + { + b = face->palette[color_index].blue; + g = face->palette[color_index].green; + r = face->palette[color_index].red; + alpha = face->palette[color_index].alpha; + } + + /* XXX Convert if srcSlot.bitmap is not grey? */ + src = srcSlot->bitmap.buffer; + dst = dstSlot->bitmap.buffer + + dstSlot->bitmap.pitch * ( dstSlot->bitmap_top - srcSlot->bitmap_top ) + + 4 * ( srcSlot->bitmap_left - dstSlot->bitmap_left ); + + for ( y = 0; y < srcSlot->bitmap.rows; y++ ) + { + for ( x = 0; x < srcSlot->bitmap.width; x++ ) + { + int aa = src[x]; + int fa = alpha * aa / 255; + + int fb = b * fa / 255; + int fg = g * fa / 255; + int fr = r * fa / 255; + + int ba2 = 255 - fa; + + int bb = dst[4 * x + 0]; + int bg = dst[4 * x + 1]; + int br = dst[4 * x + 2]; + int ba = dst[4 * x + 3]; + + + dst[4 * x + 0] = (FT_Byte)( bb * ba2 / 255 + fb ); + dst[4 * x + 1] = (FT_Byte)( bg * ba2 / 255 + fg ); + dst[4 * x + 2] = (FT_Byte)( br * ba2 / 255 + fr ); + dst[4 * x + 3] = (FT_Byte)( ba * ba2 / 255 + fa ); + } + + src += srcSlot->bitmap.pitch; + dst += dstSlot->bitmap.pitch; + } + + return FT_Err_Ok; + } + +#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_colr_dummy_; + +#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */ + +/* EOF */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttcolr.h b/non-source/foreign/freetype2/src/sfnt/ttcolr.h new file mode 100644 index 000000000..30031464c --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttcolr.h @@ -0,0 +1,83 @@ +/**************************************************************************** + * + * ttcolr.h + * + * TrueType and OpenType colored glyph layer support (specification). + * + * Copyright (C) 2018-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * Originally written by Shao Yu Zhang <shaozhang@fb.com>. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef __TTCOLR_H__ +#define __TTCOLR_H__ + + +#include "ttload.h" + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + tt_face_load_colr( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( void ) + tt_face_free_colr( TT_Face face ); + + FT_LOCAL( FT_Bool ) + tt_face_get_colr_layer( TT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator ); + + FT_LOCAL( FT_Bool ) + tt_face_get_colr_glyph_paint( TT_Face face, + FT_UInt base_glyph, + FT_Color_Root_Transform root_transform, + FT_OpaquePaint* paint ); + + FT_LOCAL( FT_Bool ) + tt_face_get_color_glyph_clipbox( TT_Face face, + FT_UInt base_glyph, + FT_ClipBox* clip_box ); + + FT_LOCAL( FT_Bool ) + tt_face_get_paint_layers( TT_Face face, + FT_LayerIterator* iterator, + FT_OpaquePaint* paint ); + + FT_LOCAL( FT_Bool ) + tt_face_get_colorline_stops( TT_Face face, + FT_ColorStop* color_stop, + FT_ColorStopIterator* iterator ); + + FT_LOCAL( FT_Bool ) + tt_face_get_paint( TT_Face face, + FT_OpaquePaint opaque_paint, + FT_COLR_Paint* paint ); + + FT_LOCAL( FT_Error ) + tt_face_colr_blend_layer( TT_Face face, + FT_UInt color_index, + FT_GlyphSlot dstSlot, + FT_GlyphSlot srcSlot ); + + +FT_END_HEADER + + +#endif /* __TTCOLR_H__ */ + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttcpal.c b/non-source/foreign/freetype2/src/sfnt/ttcpal.c new file mode 100644 index 000000000..997eb869f --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttcpal.c @@ -0,0 +1,310 @@ +/**************************************************************************** + * + * ttcpal.c + * + * TrueType and OpenType color palette support (body). + * + * Copyright (C) 2018-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * Originally written by Shao Yu Zhang <shaozhang@fb.com>. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * `CPAL' table specification: + * + * https://www.microsoft.com/typography/otspec/cpal.htm + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include <freetype/ftcolor.h> + + +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS + +#include "ttcpal.h" + + + /* NOTE: These are the table sizes calculated through the specs. */ +#define CPAL_V0_HEADER_BASE_SIZE 12U +#define COLOR_SIZE 4U + + + /* all data from `CPAL' not covered in FT_Palette_Data */ + typedef struct Cpal_ + { + FT_UShort version; /* Table version number (0 or 1 supported). */ + FT_UShort num_colors; /* Total number of color records, */ + /* combined for all palettes. */ + FT_Byte* colors; /* RGBA array of colors */ + FT_Byte* color_indices; /* Index of each palette's first color record */ + /* in the combined color record array. */ + + /* The memory which backs up the `CPAL' table. */ + void* table; + FT_ULong table_size; + + } Cpal; + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttcpal + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_cpal( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_Memory memory = face->root.memory; + + FT_Byte* table = NULL; + FT_Byte* p = NULL; + + Cpal* cpal = NULL; + + FT_ULong colors_offset; + FT_ULong table_size; + + + error = face->goto_table( face, TTAG_CPAL, stream, &table_size ); + if ( error ) + goto NoCpal; + + if ( table_size < CPAL_V0_HEADER_BASE_SIZE ) + goto InvalidTable; + + if ( FT_FRAME_EXTRACT( table_size, table ) ) + goto NoCpal; + + p = table; + + if ( FT_NEW( cpal ) ) + goto NoCpal; + + cpal->version = FT_NEXT_USHORT( p ); + if ( cpal->version > 1 ) + goto InvalidTable; + + face->palette_data.num_palette_entries = FT_NEXT_USHORT( p ); + face->palette_data.num_palettes = FT_NEXT_USHORT( p ); + + cpal->num_colors = FT_NEXT_USHORT( p ); + colors_offset = FT_NEXT_ULONG( p ); + + if ( CPAL_V0_HEADER_BASE_SIZE + + face->palette_data.num_palettes * 2U > table_size ) + goto InvalidTable; + + if ( colors_offset >= table_size ) + goto InvalidTable; + if ( cpal->num_colors * COLOR_SIZE > table_size - colors_offset ) + goto InvalidTable; + + if ( face->palette_data.num_palette_entries > cpal->num_colors ) + goto InvalidTable; + + cpal->color_indices = p; + cpal->colors = (FT_Byte*)( table + colors_offset ); + + if ( cpal->version == 1 ) + { + FT_ULong type_offset, label_offset, entry_label_offset; + FT_UShort* array = NULL; + FT_UShort* limit; + FT_UShort* q; + + + if ( CPAL_V0_HEADER_BASE_SIZE + + face->palette_data.num_palettes * 2U + + 3U * 4 > table_size ) + goto InvalidTable; + + p += face->palette_data.num_palettes * 2U; + + type_offset = FT_NEXT_ULONG( p ); + label_offset = FT_NEXT_ULONG( p ); + entry_label_offset = FT_NEXT_ULONG( p ); + + if ( type_offset ) + { + if ( type_offset >= table_size ) + goto InvalidTable; + if ( face->palette_data.num_palettes * 2U > + table_size - type_offset ) + goto InvalidTable; + + if ( FT_QNEW_ARRAY( array, face->palette_data.num_palettes ) ) + goto NoCpal; + + p = table + type_offset; + q = array; + limit = q + face->palette_data.num_palettes; + + while ( q < limit ) + *q++ = FT_NEXT_USHORT( p ); + + face->palette_data.palette_flags = array; + } + + if ( label_offset ) + { + if ( label_offset >= table_size ) + goto InvalidTable; + if ( face->palette_data.num_palettes * 2U > + table_size - label_offset ) + goto InvalidTable; + + if ( FT_QNEW_ARRAY( array, face->palette_data.num_palettes ) ) + goto NoCpal; + + p = table + label_offset; + q = array; + limit = q + face->palette_data.num_palettes; + + while ( q < limit ) + *q++ = FT_NEXT_USHORT( p ); + + face->palette_data.palette_name_ids = array; + } + + if ( entry_label_offset ) + { + if ( entry_label_offset >= table_size ) + goto InvalidTable; + if ( face->palette_data.num_palette_entries * 2U > + table_size - entry_label_offset ) + goto InvalidTable; + + if ( FT_QNEW_ARRAY( array, face->palette_data.num_palette_entries ) ) + goto NoCpal; + + p = table + entry_label_offset; + q = array; + limit = q + face->palette_data.num_palette_entries; + + while ( q < limit ) + *q++ = FT_NEXT_USHORT( p ); + + face->palette_data.palette_entry_name_ids = array; + } + } + + cpal->table = table; + cpal->table_size = table_size; + + face->cpal = cpal; + + /* set up default palette */ + if ( FT_NEW_ARRAY( face->palette, + face->palette_data.num_palette_entries ) ) + goto NoCpal; + + if ( tt_face_palette_set( face, 0 ) ) + goto InvalidTable; + + return FT_Err_Ok; + + InvalidTable: + error = FT_THROW( Invalid_Table ); + + NoCpal: + FT_FRAME_RELEASE( table ); + FT_FREE( cpal ); + + face->cpal = NULL; + + /* arrays in `face->palette_data' and `face->palette' */ + /* are freed in `sfnt_done_face' */ + + return error; + } + + + FT_LOCAL_DEF( void ) + tt_face_free_cpal( TT_Face face ) + { + FT_Stream stream = face->root.stream; + FT_Memory memory = face->root.memory; + + Cpal* cpal = (Cpal*)face->cpal; + + + if ( cpal ) + { + FT_FRAME_RELEASE( cpal->table ); + FT_FREE( cpal ); + } + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_palette_set( TT_Face face, + FT_UInt palette_index ) + { + Cpal* cpal = (Cpal*)face->cpal; + + FT_Byte* offset; + FT_Byte* p; + + FT_Color* q; + FT_Color* limit; + + FT_UShort color_index; + + + if ( !cpal || palette_index >= face->palette_data.num_palettes ) + return FT_THROW( Invalid_Argument ); + + offset = cpal->color_indices + 2 * palette_index; + color_index = FT_PEEK_USHORT( offset ); + + if ( color_index + face->palette_data.num_palette_entries > + cpal->num_colors ) + return FT_THROW( Invalid_Table ); + + p = cpal->colors + COLOR_SIZE * color_index; + q = face->palette; + limit = q + face->palette_data.num_palette_entries; + + while ( q < limit ) + { + q->blue = FT_NEXT_BYTE( p ); + q->green = FT_NEXT_BYTE( p ); + q->red = FT_NEXT_BYTE( p ); + q->alpha = FT_NEXT_BYTE( p ); + + q++; + } + + return FT_Err_Ok; + } + + +#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_cpal_dummy_; + +#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */ + +/* EOF */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttcpal.h b/non-source/foreign/freetype2/src/sfnt/ttcpal.h new file mode 100644 index 000000000..bb301ae88 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttcpal.h @@ -0,0 +1,48 @@ +/**************************************************************************** + * + * ttcpal.h + * + * TrueType and OpenType color palette support (specification). + * + * Copyright (C) 2018-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * Originally written by Shao Yu Zhang <shaozhang@fb.com>. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef __TTCPAL_H__ +#define __TTCPAL_H__ + + +#include "ttload.h" + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + tt_face_load_cpal( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( void ) + tt_face_free_cpal( TT_Face face ); + + FT_LOCAL( FT_Error ) + tt_face_palette_set( TT_Face face, + FT_UInt palette_index ); + + +FT_END_HEADER + + +#endif /* __TTCPAL_H__ */ + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttgpos.c b/non-source/foreign/freetype2/src/sfnt/ttgpos.c new file mode 100644 index 000000000..b6cd8bf82 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttgpos.c @@ -0,0 +1,598 @@ +/**************************************************************************** + * + * ttgpos.c + * + * Load the TrueType GPOS table. The only GPOS layout feature this + * currently supports is kerning, from x advances in the pair adjustment + * layout feature. + * + * Parts of the implementation were adapted from: + * https://github.com/nothings/stb/blob/master/stb_truetype.h + * + * GPOS spec reference available at: + * https://learn.microsoft.com/en-us/typography/opentype/spec/gpos + * + * Copyright (C) 2024 by + * David Saltzman + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + */ + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include "freetype/fttypes.h" +#include "freetype/internal/ftobjs.h" +#include "ttgpos.h" + + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttgpos + + + typedef enum coverage_table_format_type_ + { + COVERAGE_TABLE_FORMAT_LIST = 1, + COVERAGE_TABLE_FORMAT_RANGE = 2 + + } coverage_table_format_type; + + typedef enum class_def_table_format_type_ + { + CLASS_DEF_TABLE_FORMAT_ARRAY = 1, + CLASS_DEF_TABLE_FORMAT_RANGE_GROUPS = 2 + + } class_def_table_format_type; + + typedef enum gpos_lookup_type_ + { + GPOS_LOOKUP_TYPE_NONE = 0, + GPOS_LOOKUP_TYPE_SINGLE_ADJUSTMENT = 1, + GPOS_LOOKUP_TYPE_PAIR_ADJUSTMENT = 2, + GPOS_LOOKUP_TYPE_CURSIVE_ATTACHMENT = 3, + GPOS_LOOKUP_TYPE_MARK_TO_BASE_ATTACHMENT = 4, + GPOS_LOOKUP_TYPE_MARK_TO_LIGATURE_ATTACHMENT = 5, + GPOS_LOOKUP_TYPE_MARK_TO_MARK_ATTACHMENT = 6, + GPOS_LOOKUP_TYPE_CONTEXT_POSITIONING = 7, + GPOS_LOOKUP_TYPE_CHAINED_CONTEXT_POSITIONING = 8, + GPOS_LOOKUP_TYPE_EXTENSION_POSITIONING = 9 + + } gpos_lookup_type; + + typedef enum gpos_pair_adjustment_format_ + { + GPOS_PAIR_ADJUSTMENT_FORMAT_GLYPH_PAIR = 1, + GPOS_PAIR_ADJUSTMENT_FORMAT_CLASS_PAIR = 2 + + } gpos_pair_adjustment_format; + + typedef enum gpos_value_format_bitmask_ + { + GPOS_VALUE_FORMAT_NONE = 0x0000, + GPOS_VALUE_FORMAT_X_PLACEMENT = 0x0001, + GPOS_VALUE_FORMAT_Y_PLACEMENT = 0x0002, + GPOS_VALUE_FORMAT_X_ADVANCE = 0x0004, + GPOS_VALUE_FORMAT_Y_ADVANCE = 0x0008, + GPOS_VALUE_FORMAT_X_PLACEMENT_DEVICE = 0x0010, + GPOS_VALUE_FORMAT_Y_PLACEMENT_DEVICE = 0x0020, + GPOS_VALUE_FORMAT_X_ADVANCE_DEVICE = 0x0040, + GPOS_VALUE_FORMAT_Y_ADVANCE_DEVICE = 0x0080 + + } gpos_value_format_bitmask; + + + typedef struct TT_GPOS_Subtable_Iterator_Context_ + { + /* Iteration state. */ + FT_Byte* current_lookup_table; + gpos_lookup_type current_lookup_type; + FT_UShort subtable_count; + FT_Byte* subtable_offsets; + FT_UInt subtable_idx; + + /* Element for the current iteration. */ + FT_Byte* subtable; + gpos_lookup_type subtable_type; + + } TT_GPOS_Subtable_Iterator_Context; + + + /* Initialize a subtable iterator for a given lookup list index. */ + static void + tt_gpos_subtable_iterator_init( + TT_GPOS_Subtable_Iterator_Context* context, + FT_Byte* gpos_table, + FT_ULong lookup_list_idx ) + { + FT_Byte* lookup_list = gpos_table + FT_PEEK_USHORT( gpos_table + 8 ); + FT_UInt16 lookup_count = FT_PEEK_USHORT( lookup_list ); + + + if ( lookup_list_idx < lookup_count ) + { + context->current_lookup_table = + lookup_list + FT_PEEK_USHORT( lookup_list + 2 + 2 * lookup_list_idx ); + context->current_lookup_type = + (gpos_lookup_type)FT_PEEK_USHORT( context->current_lookup_table ); + context->subtable_count = + FT_PEEK_USHORT( context->current_lookup_table + 4 ); + context->subtable_offsets = context->current_lookup_table + 6; + } + else + { + context->current_lookup_table = NULL; + context->current_lookup_type = GPOS_LOOKUP_TYPE_NONE; + context->subtable_count = 0; + context->subtable_offsets = NULL; + } + + context->subtable_idx = 0; + context->subtable = NULL; + context->subtable_type = GPOS_LOOKUP_TYPE_NONE; + } + + + /* Get the next subtable. Return whether there was a next one. */ + static FT_Bool + tt_gpos_subtable_iterator_next( + TT_GPOS_Subtable_Iterator_Context* context ) + { + if ( context->subtable_idx < context->subtable_count ) + { + FT_UShort subtable_offset = + FT_PEEK_USHORT( context->subtable_offsets + + 2 * context->subtable_idx ); + + + context->subtable = context->current_lookup_table + subtable_offset; + + if ( context->current_lookup_type == + GPOS_LOOKUP_TYPE_EXTENSION_POSITIONING ) + { + /* Update type and subtable based on extension positioning header. */ + context->subtable_type = + (gpos_lookup_type)FT_PEEK_USHORT( context->subtable + 2 ); + context->subtable += FT_PEEK_ULONG( context->subtable + 4 ); + } + else + context->subtable_type = context->current_lookup_type; + + context->subtable_idx++; + return TRUE; + } + + return FALSE; + } + + + static FT_Int + tt_gpos_get_coverage_index( FT_Byte *coverage_table, + FT_UInt glyph ) + { + coverage_table_format_type coverage_format = + (coverage_table_format_type)FT_PEEK_USHORT( coverage_table ); + + + switch ( coverage_format ) + { + case COVERAGE_TABLE_FORMAT_LIST: + { + FT_UShort glyph_count = FT_PEEK_USHORT( coverage_table + 2 ); + + FT_Int l = 0; + FT_Int r = glyph_count - 1; + FT_Int m; + + FT_Int straw; + FT_Int needle = (FT_Int)glyph; + + + /* Binary search. */ + while ( l <= r ) + { + FT_Byte *glyph_array = coverage_table + 4; + FT_UShort glyph_id; + + + m = ( l + r ) >> 1; + glyph_id = FT_PEEK_USHORT( glyph_array + 2 * m ); + straw = glyph_id; + + if ( needle < straw ) + r = m - 1; + else if ( needle > straw ) + l = m + 1; + else + return m; + } + break; + } + + case COVERAGE_TABLE_FORMAT_RANGE: + { + FT_UShort range_count = FT_PEEK_USHORT( coverage_table + 2 ); + FT_Byte *range_array = coverage_table + 4; + + FT_Int l = 0; + FT_Int r = range_count - 1; + FT_Int m; + + FT_Int straw_start; + FT_Int straw_end; + FT_Int needle = (FT_Int)glyph; + + + /* Binary search. */ + while ( l <= r ) + { + FT_Byte *range_record; + + + m = ( l + r ) >> 1; + range_record = range_array + 6 * m; + straw_start = FT_PEEK_USHORT( range_record ); + straw_end = FT_PEEK_USHORT( range_record + 2 ); + + if ( needle < straw_start ) + r = m - 1; + else if ( needle > straw_end ) + l = m + 1; + else + { + FT_UShort start_coverage_index = + FT_PEEK_USHORT( range_record + 4 ); + + + return (FT_Int)start_coverage_index + (FT_Int)glyph - straw_start; + } + } + break; + } + } + + return -1; + } + + + static FT_Int + tt_gpos_get_glyph_class( FT_Byte *class_def_table, + FT_UInt glyph ) + { + class_def_table_format_type class_def_format = + (class_def_table_format_type)FT_PEEK_USHORT( class_def_table ); + + + switch ( class_def_format ) + { + case CLASS_DEF_TABLE_FORMAT_ARRAY: + { + FT_UInt start_glyph_id = FT_PEEK_USHORT( class_def_table + 2 ); + FT_UInt glyph_count = FT_PEEK_USHORT( class_def_table + 4 ); + FT_Byte *class_value_array = class_def_table + 6; + + + if ( glyph >= start_glyph_id && + glyph < start_glyph_id + glyph_count ) + return (FT_Int)FT_PEEK_USHORT( class_value_array + + 2 * ( glyph - start_glyph_id ) ); + break; + } + + case CLASS_DEF_TABLE_FORMAT_RANGE_GROUPS: + { + FT_UShort class_range_count = FT_PEEK_USHORT( class_def_table + 2 ); + FT_Byte *class_range_records = class_def_table + 4; + + FT_Int l = 0; + FT_Int r = class_range_count - 1; + FT_Int m; + + FT_Int straw_start; + FT_Int straw_end; + FT_Int needle = (FT_Int)glyph; + + + while ( l <= r ) + { + FT_Byte *class_range_record; + + + m = ( l + r ) >> 1; + class_range_record = class_range_records + 6 * m; + straw_start = FT_PEEK_USHORT( class_range_record ); + straw_end = FT_PEEK_USHORT( class_range_record + 2 ); + + if ( needle < straw_start ) + r = m - 1; + else if ( needle > straw_end ) + l = m + 1; + else + return (FT_Int)FT_PEEK_USHORT( class_range_record + 4 ); + } + break; + } + } + + /* "All glyphs not assigned to a class fall into class 0." */ + /* (OpenType spec) */ + return 0; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_gpos( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_ULong table_size; + + + /* The GPOS table is optional; exit silently if it is missing. */ + error = face->goto_table( face, TTAG_GPOS, stream, &table_size ); + if ( error ) + goto Exit; + + if ( table_size < 4 ) /* the case of a malformed table */ + { + FT_ERROR(( "tt_face_load_gpos:" + " GPOS table is too small - ignored\n" )); + error = FT_THROW( Table_Missing ); + goto Exit; + } + + if ( FT_FRAME_EXTRACT( table_size, face->gpos_table ) ) + { + FT_ERROR(( "tt_face_load_gpos:" + " could not extract GPOS table\n" )); + goto Exit; + } + + face->gpos_kerning_available = FALSE; + + if ( face->gpos_table ) + { + FT_Byte* feature_list = face->gpos_table + + FT_PEEK_USHORT( face->gpos_table + 6 ); + FT_UInt16 feature_count = FT_PEEK_USHORT( feature_list ); + FT_Byte* feature_records = feature_list + 2; + + FT_UInt idx; + + + for ( idx = 0; idx < feature_count; idx++, feature_records += 6 ) + { + FT_ULong feature_tag = FT_PEEK_ULONG( feature_records ); + + + if ( feature_tag == TTAG_kern ) + { + face->gpos_kerning_available = TRUE; + break; + } + } + } + + Exit: + return error; + } + + + FT_LOCAL_DEF( void ) + tt_face_done_gpos( TT_Face face ) + { + FT_Stream stream = face->root.stream; + + + FT_FRAME_RELEASE( face->gpos_table ); + } + + + FT_LOCAL_DEF( FT_Int ) + tt_face_get_gpos_kerning( TT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph ) + { + FT_Byte* feature_list; + FT_UInt16 feature_count; + FT_Byte* feature_records; + FT_UInt feature_idx; + + + if ( !face->gpos_kerning_available ) + return 0; + + feature_list = face->gpos_table + + FT_PEEK_USHORT( face->gpos_table + 6 ); + feature_count = FT_PEEK_USHORT( feature_list ); + feature_records = feature_list + 2; + + for ( feature_idx = 0; + feature_idx < feature_count; + feature_idx++, feature_records += 6 ) + { + FT_ULong feature_tag = FT_PEEK_ULONG( feature_records ); + FT_Byte* feature_table; + FT_UInt16 lookup_idx_count; + FT_UInt16 lookup_idx; + + + if ( feature_tag != TTAG_kern ) + continue; + + feature_table = feature_list + FT_PEEK_USHORT( feature_records + 4 ); + lookup_idx_count = FT_PEEK_USHORT( feature_table + 2 ); + + for ( lookup_idx = 0; lookup_idx < lookup_idx_count; lookup_idx++ ) + { + FT_UInt16 lookup_list_idx = + FT_PEEK_USHORT( feature_table + 4 + 2 * lookup_idx ); + TT_GPOS_Subtable_Iterator_Context subtable_iter; + + + tt_gpos_subtable_iterator_init( &subtable_iter, + face->gpos_table, + lookup_list_idx ); + + while ( tt_gpos_subtable_iterator_next( &subtable_iter ) ) + { + FT_Byte* subtable; + + gpos_value_format_bitmask value_format_1; + gpos_value_format_bitmask value_format_2; + gpos_pair_adjustment_format format; + + FT_UShort coverage_offset; + FT_Int coverage_index; + + + if ( subtable_iter.subtable_type != + GPOS_LOOKUP_TYPE_PAIR_ADJUSTMENT ) + continue; + + subtable = subtable_iter.subtable; + + value_format_1 = + (gpos_value_format_bitmask)FT_PEEK_USHORT( subtable + 4 ); + value_format_2 = + (gpos_value_format_bitmask)FT_PEEK_USHORT( subtable + 6 ); + + if ( !( value_format_1 == GPOS_VALUE_FORMAT_X_ADVANCE && + value_format_2 == GPOS_VALUE_FORMAT_NONE ) ) + continue; + + format = (gpos_pair_adjustment_format)FT_PEEK_USHORT( subtable ); + + coverage_offset = FT_PEEK_USHORT( subtable + 2 ); + coverage_index = + tt_gpos_get_coverage_index( subtable + coverage_offset, + left_glyph ); + + if ( coverage_index == -1 ) + continue; + + switch ( format ) + { + case GPOS_PAIR_ADJUSTMENT_FORMAT_GLYPH_PAIR: + { + FT_Int l, r, m; + FT_Int straw, needle; + + FT_Int value_record_pair_size_in_bytes = 2; + + FT_UShort pair_set_count = FT_PEEK_USHORT( subtable + 8 ); + FT_UShort pair_pos_offset; + + FT_Byte* pair_value_table; + FT_UShort pair_value_count; + FT_Byte* pair_value_array; + + + if ( coverage_index >= pair_set_count ) + return 0; + + pair_pos_offset = + FT_PEEK_USHORT( subtable + 10 + 2 * coverage_index ); + + pair_value_table = subtable + pair_pos_offset; + pair_value_count = FT_PEEK_USHORT( pair_value_table ); + pair_value_array = pair_value_table + 2; + + needle = (FT_Int)right_glyph; + r = pair_value_count - 1; + l = 0; + + /* Binary search. */ + while ( l <= r ) + { + FT_UShort second_glyph; + FT_Byte* pair_value; + + + m = ( l + r ) >> 1; + pair_value = pair_value_array + + ( 2 + value_record_pair_size_in_bytes ) * m; + second_glyph = FT_PEEK_USHORT( pair_value ); + straw = second_glyph; + + if ( needle < straw ) + r = m - 1; + else if ( needle > straw ) + l = m + 1; + else + { + FT_Short x_advance = FT_PEEK_SHORT( pair_value + 2 ); + + + return x_advance; + } + } + break; + } + + case GPOS_PAIR_ADJUSTMENT_FORMAT_CLASS_PAIR: + { + FT_UShort class_def1_offset = FT_PEEK_USHORT( subtable + 8 ); + FT_UShort class_def2_offset = FT_PEEK_USHORT( subtable + 10 ); + + FT_Int left_glyph_class = + tt_gpos_get_glyph_class( subtable + class_def1_offset, + left_glyph ); + FT_Int right_glyph_class = + tt_gpos_get_glyph_class( subtable + class_def2_offset, + right_glyph ); + + FT_UShort class1_count = FT_PEEK_USHORT( subtable + 12 ); + FT_UShort class2_count = FT_PEEK_USHORT( subtable + 14 ); + + FT_Byte *class1_records, *class2_records; + FT_Short x_advance; + + + if ( left_glyph_class < 0 || + left_glyph_class >= class1_count ) + return 0; /* malformed */ + if ( right_glyph_class < 0 || + right_glyph_class >= class2_count ) + return 0; /* malformed */ + + if ( right_glyph_class == 0 ) + continue; /* right glyph not found in this table */ + + class1_records = subtable + 16; + class2_records = + class1_records + 2 * ( left_glyph_class * class2_count ); + + x_advance = + FT_PEEK_SHORT( class2_records + 2 * right_glyph_class ); + + return x_advance; + } + } + } + } + } + + return 0; + } + +#else /* !TT_CONFIG_OPTION_GPOS_KERNING */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_gpos_dummy_; + +#endif /* !TT_CONFIG_OPTION_GPOS_KERNING */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttgpos.h b/non-source/foreign/freetype2/src/sfnt/ttgpos.h new file mode 100644 index 000000000..570e9e3d7 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttgpos.h @@ -0,0 +1,53 @@ +/**************************************************************************** + * + * ttgpos.c + * + * Load the TrueType GPOS table. The only GPOS layout feature this + * currently supports is kerning, from x advances in the pair adjustment + * layout feature. + * + * Copyright (C) 2024 by + * David Saltzman + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + */ + + +#ifndef TTGPOS_H_ +#define TTGPOS_H_ + + +#include <freetype/internal/ftstream.h> +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + +#ifdef TT_CONFIG_OPTION_GPOS_KERNING + + FT_LOCAL( FT_Error ) + tt_face_load_gpos( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( void ) + tt_face_done_gpos( TT_Face face ); + + FT_LOCAL( FT_Int ) + tt_face_get_gpos_kerning( TT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph ); + +#endif /* TT_CONFIG_OPTION_GPOS_KERNING */ + + +FT_END_HEADER + +#endif /* TTGPOS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttkern.c b/non-source/foreign/freetype2/src/sfnt/ttkern.c new file mode 100644 index 000000000..f0411366a --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttkern.c @@ -0,0 +1,317 @@ +/**************************************************************************** + * + * ttkern.c + * + * Load the basic TrueType kerning table. This doesn't handle + * kerning data within the GPOS table at the moment. + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include "ttkern.h" + +#include "sferrors.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttkern + + +#undef TT_KERN_INDEX +#define TT_KERN_INDEX( g1, g2 ) ( ( (FT_ULong)(g1) << 16 ) | (g2) ) + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_kern( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_ULong table_size; + FT_Byte* p; + FT_Byte* p_limit; + FT_UInt nn, num_tables; + FT_UInt32 avail = 0, ordered = 0; + + + /* the kern table is optional; exit silently if it is missing */ + error = face->goto_table( face, TTAG_kern, stream, &table_size ); + if ( error ) + goto Exit; + + if ( table_size < 4 ) /* the case of a malformed table */ + { + FT_ERROR(( "tt_face_load_kern:" + " kerning table is too small - ignored\n" )); + error = FT_THROW( Table_Missing ); + goto Exit; + } + + if ( FT_FRAME_EXTRACT( table_size, face->kern_table ) ) + { + FT_ERROR(( "tt_face_load_kern:" + " could not extract kerning table\n" )); + goto Exit; + } + + face->kern_table_size = table_size; + + p = face->kern_table; + p_limit = p + table_size; + + p += 2; /* skip version */ + num_tables = FT_NEXT_USHORT( p ); + + if ( num_tables > 32 ) /* we only support up to 32 sub-tables */ + num_tables = 32; + + for ( nn = 0; nn < num_tables; nn++ ) + { + FT_UInt num_pairs, length, coverage, format; + FT_Byte* p_next; + FT_UInt32 mask = (FT_UInt32)1UL << nn; + + + if ( p + 6 > p_limit ) + break; + + p_next = p; + + p += 2; /* skip version */ + length = FT_NEXT_USHORT( p ); + coverage = FT_NEXT_USHORT( p ); + + if ( length <= 6 + 8 ) + break; + + p_next += length; + + if ( p_next > p_limit ) /* handle broken table */ + p_next = p_limit; + + format = coverage >> 8; + + /* we currently only support format 0 kerning tables */ + if ( format != 0 ) + goto NextTable; + + /* only use horizontal kerning tables */ + if ( ( coverage & 3U ) != 0x0001 || + p + 8 > p_next ) + goto NextTable; + + num_pairs = FT_NEXT_USHORT( p ); + p += 6; + + if ( ( p_next - p ) < 6 * (int)num_pairs ) /* handle broken count */ + num_pairs = (FT_UInt)( ( p_next - p ) / 6 ); + + avail |= mask; + + /* + * Now check whether the pairs in this table are ordered. + * We then can use binary search. + */ + if ( num_pairs > 0 ) + { + FT_ULong count; + FT_ULong old_pair; + + + old_pair = FT_NEXT_ULONG( p ); + p += 2; + + for ( count = num_pairs - 1; count > 0; count-- ) + { + FT_UInt32 cur_pair; + + + cur_pair = FT_NEXT_ULONG( p ); + if ( cur_pair < old_pair ) + break; + + p += 2; + old_pair = cur_pair; + } + + if ( count == 0 ) + ordered |= mask; + } + + NextTable: + p = p_next; + } + + face->num_kern_tables = nn; + face->kern_avail_bits = avail; + face->kern_order_bits = ordered; + + Exit: + return error; + } + + + FT_LOCAL_DEF( void ) + tt_face_done_kern( TT_Face face ) + { + FT_Stream stream = face->root.stream; + + + FT_FRAME_RELEASE( face->kern_table ); + face->kern_table_size = 0; + face->num_kern_tables = 0; + face->kern_avail_bits = 0; + face->kern_order_bits = 0; + } + + + FT_LOCAL_DEF( FT_Int ) + tt_face_get_kerning( TT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph ) + { + FT_Int result = 0; + FT_UInt count, mask; + + FT_Byte* p; + FT_Byte* p_limit; + + + if ( !face->kern_table ) + return result; + + p = face->kern_table; + p_limit = p + face->kern_table_size; + + p += 4; + mask = 0x0001; + + for ( count = face->num_kern_tables; + count > 0 && p + 6 <= p_limit; + count--, mask <<= 1 ) + { + FT_Byte* base = p; + FT_Byte* next; + FT_UInt version = FT_NEXT_USHORT( p ); + FT_UInt length = FT_NEXT_USHORT( p ); + FT_UInt coverage = FT_NEXT_USHORT( p ); + FT_UInt num_pairs; + FT_Int value = 0; + + FT_UNUSED( version ); + + + next = base + length; + + if ( next > p_limit ) /* handle broken table */ + next = p_limit; + + if ( ( face->kern_avail_bits & mask ) == 0 ) + goto NextTable; + + FT_ASSERT( p + 8 <= next ); /* tested in tt_face_load_kern */ + + num_pairs = FT_NEXT_USHORT( p ); + p += 6; + + if ( ( next - p ) < 6 * (int)num_pairs ) /* handle broken count */ + num_pairs = (FT_UInt)( ( next - p ) / 6 ); + + switch ( coverage >> 8 ) + { + case 0: + { + FT_ULong key0 = TT_KERN_INDEX( left_glyph, right_glyph ); + + + if ( face->kern_order_bits & mask ) /* binary search */ + { + FT_UInt min = 0; + FT_UInt max = num_pairs; + + + while ( min < max ) + { + FT_UInt mid = ( min + max ) >> 1; + FT_Byte* q = p + 6 * mid; + FT_ULong key; + + + key = FT_NEXT_ULONG( q ); + + if ( key == key0 ) + { + value = FT_PEEK_SHORT( q ); + goto Found; + } + if ( key < key0 ) + min = mid + 1; + else + max = mid; + } + } + else /* linear search */ + { + FT_UInt count2; + + + for ( count2 = num_pairs; count2 > 0; count2-- ) + { + FT_ULong key = FT_NEXT_ULONG( p ); + + + if ( key == key0 ) + { + value = FT_PEEK_SHORT( p ); + goto Found; + } + p += 2; + } + } + } + break; + + /* + * We don't support format 2 because we haven't seen a single font + * using it in real life... + */ + + default: + ; + } + + goto NextTable; + + Found: + if ( coverage & 8 ) /* override or add */ + result = value; + else + result += value; + + NextTable: + p = next; + } + + return result; + } + +#undef TT_KERN_INDEX + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttkern.h b/non-source/foreign/freetype2/src/sfnt/ttkern.h new file mode 100644 index 000000000..a54e51df1 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttkern.h @@ -0,0 +1,51 @@ +/**************************************************************************** + * + * ttkern.h + * + * Load the basic TrueType kerning table. This doesn't handle + * kerning data within the GPOS table at the moment. + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTKERN_H_ +#define TTKERN_H_ + + +#include <freetype/internal/ftstream.h> +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + tt_face_load_kern( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( void ) + tt_face_done_kern( TT_Face face ); + + FT_LOCAL( FT_Int ) + tt_face_get_kerning( TT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph ); + +#define TT_FACE_HAS_KERNING( face ) ( (face)->kern_avail_bits != 0 ) + + +FT_END_HEADER + +#endif /* TTKERN_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttload.c b/non-source/foreign/freetype2/src/sfnt/ttload.c new file mode 100644 index 000000000..c3a5fae2c --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttload.c @@ -0,0 +1,1496 @@ +/**************************************************************************** + * + * ttload.c + * + * Load the basic TrueType tables, i.e., tables that can be either in + * TTF or OTF fonts (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include "ttload.h" + +#include "sferrors.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttload + + + /************************************************************************** + * + * @Function: + * tt_face_lookup_table + * + * @Description: + * Looks for a TrueType table by name. + * + * @Input: + * face :: + * A face object handle. + * + * tag :: + * The searched tag. + * + * @Return: + * A pointer to the table directory entry. 0 if not found. + */ + FT_LOCAL_DEF( TT_Table ) + tt_face_lookup_table( TT_Face face, + FT_ULong tag ) + { + TT_Table entry; + TT_Table limit; +#ifdef FT_DEBUG_LEVEL_TRACE + FT_Bool zero_length = FALSE; +#endif + + + FT_TRACE4(( "tt_face_lookup_table: %p, `%c%c%c%c' -- ", + (void *)face, + (FT_Char)( tag >> 24 ), + (FT_Char)( tag >> 16 ), + (FT_Char)( tag >> 8 ), + (FT_Char)( tag ) )); + + entry = face->dir_tables; + limit = entry + face->num_tables; + + for ( ; entry < limit; entry++ ) + { + /* For compatibility with Windows, we consider */ + /* zero-length tables the same as missing tables. */ + if ( entry->Tag == tag ) + { + if ( entry->Length != 0 ) + { + FT_TRACE4(( "found table.\n" )); + return entry; + } +#ifdef FT_DEBUG_LEVEL_TRACE + zero_length = TRUE; +#endif + } + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( zero_length ) + FT_TRACE4(( "ignoring empty table\n" )); + else + FT_TRACE4(( "could not find table\n" )); +#endif + + return NULL; + } + + + /************************************************************************** + * + * @Function: + * tt_face_goto_table + * + * @Description: + * Looks for a TrueType table by name, then seek a stream to it. + * + * @Input: + * face :: + * A face object handle. + * + * tag :: + * The searched tag. + * + * stream :: + * The stream to seek when the table is found. + * + * @Output: + * length :: + * The length of the table if found, undefined otherwise. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_goto_table( TT_Face face, + FT_ULong tag, + FT_Stream stream, + FT_ULong* length ) + { + TT_Table table; + FT_Error error; + + + table = tt_face_lookup_table( face, tag ); + if ( table ) + { + if ( length ) + *length = table->Length; + + if ( FT_STREAM_SEEK( table->Offset ) ) + goto Exit; + } + else + error = FT_THROW( Table_Missing ); + + Exit: + return error; + } + + + /* Here, we */ + /* */ + /* - check that `num_tables' is valid (and adjust it if necessary); */ + /* also return the number of valid table entries */ + /* */ + /* - look for a `head' table, check its size, and parse it to check */ + /* whether its `magic' field is correctly set */ + /* */ + /* - errors (except errors returned by stream handling) */ + /* */ + /* SFNT_Err_Unknown_File_Format: */ + /* no table is defined in directory, it is not sfnt-wrapped */ + /* data */ + /* SFNT_Err_Table_Missing: */ + /* table directory is valid, but essential tables */ + /* (head/bhed/SING) are missing */ + /* */ + static FT_Error + check_table_dir( SFNT_Header sfnt, + FT_Stream stream, + FT_UShort* valid ) + { + FT_Error error; + FT_UShort nn, valid_entries = 0; + FT_UInt has_head = 0, has_sing = 0, has_meta = 0; + FT_ULong offset = sfnt->offset + 12; + + static const FT_Frame_Field table_dir_entry_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_TableRec + + FT_FRAME_START( 16 ), + FT_FRAME_ULONG( Tag ), + FT_FRAME_ULONG( CheckSum ), + FT_FRAME_ULONG( Offset ), + FT_FRAME_ULONG( Length ), + FT_FRAME_END + }; + + + if ( FT_STREAM_SEEK( offset ) ) + goto Exit; + + for ( nn = 0; nn < sfnt->num_tables; nn++ ) + { + TT_TableRec table; + + + if ( FT_STREAM_READ_FIELDS( table_dir_entry_fields, &table ) ) + { + FT_TRACE2(( "check_table_dir:" + " can read only %hu table%s in font (instead of %hu)\n", + nn, nn == 1 ? "" : "s", sfnt->num_tables )); + sfnt->num_tables = nn; + break; + } + + /* we ignore invalid tables */ + + if ( table.Offset > stream->size ) + { + FT_TRACE2(( "check_table_dir: table entry %hu invalid\n", nn )); + continue; + } + else if ( table.Length > stream->size - table.Offset ) + { + /* Some tables have such a simple structure that clipping its */ + /* contents is harmless. This also makes FreeType less sensitive */ + /* to invalid table lengths (which programs like Acroread seem to */ + /* ignore in general). */ + + if ( table.Tag == TTAG_hmtx || + table.Tag == TTAG_vmtx ) + valid_entries++; + else + { + FT_TRACE2(( "check_table_dir: table entry %hu invalid\n", nn )); + continue; + } + } + else + valid_entries++; + + if ( table.Tag == TTAG_head || table.Tag == TTAG_bhed ) + { + FT_UInt32 magic; + + +#ifndef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + if ( table.Tag == TTAG_head ) +#endif + has_head = 1; + + /* + * The table length should be 0x36, but certain font tools make it + * 0x38, so we will just check that it is greater. + * + * Note that according to the specification, the table must be + * padded to 32-bit lengths, but this doesn't apply to the value of + * its `Length' field! + * + */ + if ( table.Length < 0x36 ) + { + FT_TRACE2(( "check_table_dir:" + " `head' or `bhed' table too small\n" )); + error = FT_THROW( Table_Missing ); + goto Exit; + } + + if ( FT_STREAM_SEEK( table.Offset + 12 ) || + FT_READ_ULONG( magic ) ) + goto Exit; + + if ( magic != 0x5F0F3CF5UL ) + FT_TRACE2(( "check_table_dir:" + " invalid magic number in `head' or `bhed' table\n")); + + if ( FT_STREAM_SEEK( offset + ( nn + 1 ) * 16 ) ) + goto Exit; + } + else if ( table.Tag == TTAG_SING ) + has_sing = 1; + else if ( table.Tag == TTAG_META ) + has_meta = 1; + } + + *valid = valid_entries; + + if ( !valid_entries ) + { + FT_TRACE2(( "check_table_dir: no valid tables found\n" )); + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + + /* if `sing' and `meta' tables are present, there is no `head' table */ + if ( has_head || ( has_sing && has_meta ) ) + { + error = FT_Err_Ok; + goto Exit; + } + else + { + FT_TRACE2(( "check_table_dir:" )); +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + FT_TRACE2(( " neither `head', `bhed', nor `sing' table found\n" )); +#else + FT_TRACE2(( " neither `head' nor `sing' table found\n" )); +#endif + error = FT_THROW( Table_Missing ); + } + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_font_dir + * + * @Description: + * Loads the header of a SFNT font file. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * @Output: + * sfnt :: + * The SFNT header. + * + * @Return: + * FreeType error code. 0 means success. + * + * @Note: + * The stream cursor must be at the beginning of the font directory. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_font_dir( TT_Face face, + FT_Stream stream ) + { + SFNT_HeaderRec sfnt; + FT_Error error; + FT_Memory memory = stream->memory; + FT_UShort nn, valid_entries = 0; + + static const FT_Frame_Field offset_table_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE SFNT_HeaderRec + + FT_FRAME_START( 8 ), + FT_FRAME_USHORT( num_tables ), + FT_FRAME_USHORT( search_range ), + FT_FRAME_USHORT( entry_selector ), + FT_FRAME_USHORT( range_shift ), + FT_FRAME_END + }; + + + FT_TRACE2(( "tt_face_load_font_dir: %p\n", (void *)face )); + + /* read the offset table */ + + sfnt.offset = FT_STREAM_POS(); + + if ( FT_READ_ULONG( sfnt.format_tag ) || + FT_STREAM_READ_FIELDS( offset_table_fields, &sfnt ) ) + goto Exit; + + /* many fonts don't have these fields set correctly */ +#if 0 + if ( sfnt.search_range != 1 << ( sfnt.entry_selector + 4 ) || + sfnt.search_range + sfnt.range_shift != sfnt.num_tables << 4 ) + return FT_THROW( Unknown_File_Format ); +#endif + + /* load the table directory */ + + FT_TRACE2(( "-- Number of tables: %10hu\n", sfnt.num_tables )); + FT_TRACE2(( "-- Format version: 0x%08lx\n", sfnt.format_tag )); + + if ( sfnt.format_tag != TTAG_OTTO ) + { + /* check first */ + error = check_table_dir( &sfnt, stream, &valid_entries ); + if ( error ) + { + FT_TRACE2(( "tt_face_load_font_dir:" + " invalid table directory for TrueType\n" )); + goto Exit; + } + } + else + { + valid_entries = sfnt.num_tables; + 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; + + if ( FT_QNEW_ARRAY( face->dir_tables, face->num_tables ) ) + goto Exit; + + if ( FT_STREAM_SEEK( sfnt.offset + 12 ) || + FT_FRAME_ENTER( sfnt.num_tables * 16L ) ) + goto Exit; + + FT_TRACE2(( "\n" )); + FT_TRACE2(( " tag offset length checksum\n" )); + FT_TRACE2(( " ----------------------------------\n" )); + + valid_entries = 0; + for ( nn = 0; nn < sfnt.num_tables; nn++ ) + { + TT_TableRec entry; + FT_UShort i; + FT_Bool duplicate; + + + entry.Tag = FT_GET_TAG4(); + entry.CheckSum = FT_GET_ULONG(); + entry.Offset = FT_GET_ULONG(); + entry.Length = FT_GET_ULONG(); + + /* ignore invalid tables that can't be sanitized */ + + if ( entry.Offset > stream->size ) + continue; + else if ( entry.Length > stream->size - entry.Offset ) + { + if ( entry.Tag == TTAG_hmtx || + entry.Tag == TTAG_vmtx ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + FT_ULong old_length = entry.Length; +#endif + + + /* make metrics table length a multiple of 4 */ + entry.Length = ( stream->size - entry.Offset ) & ~3U; + + FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx" + " (sanitized; original length %08lx)", + (FT_Char)( entry.Tag >> 24 ), + (FT_Char)( entry.Tag >> 16 ), + (FT_Char)( entry.Tag >> 8 ), + (FT_Char)( entry.Tag ), + entry.Offset, + entry.Length, + entry.CheckSum, + old_length )); + } + else + continue; + } +#ifdef FT_DEBUG_LEVEL_TRACE + else + FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx", + (FT_Char)( entry.Tag >> 24 ), + (FT_Char)( entry.Tag >> 16 ), + (FT_Char)( entry.Tag >> 8 ), + (FT_Char)( entry.Tag ), + entry.Offset, + entry.Length, + entry.CheckSum )); +#endif + + /* ignore duplicate tables – the first one wins */ + duplicate = 0; + for ( i = 0; i < valid_entries; i++ ) + { + if ( face->dir_tables[i].Tag == entry.Tag ) + { + duplicate = 1; + break; + } + } + if ( duplicate ) + { + FT_TRACE2(( " (duplicate, ignored)\n" )); + continue; + } + else + { + FT_TRACE2(( "\n" )); + + /* we finally have a valid entry */ + face->dir_tables[valid_entries++] = entry; + } + } + + /* final adjustment to number of tables */ + face->num_tables = valid_entries; + + FT_FRAME_EXIT(); + + if ( !valid_entries ) + { + FT_TRACE2(( "tt_face_load_font_dir: no valid tables found\n" )); + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + + FT_TRACE2(( "table directory loaded\n" )); + FT_TRACE2(( "\n" )); + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_any + * + * @Description: + * Loads any font table into client memory. + * + * @Input: + * face :: + * The face object to look for. + * + * tag :: + * The tag of table to load. Use the value 0 if you want + * to access the whole font file, else set this parameter + * to a valid TrueType table tag that you can forge with + * the MAKE_TT_TAG macro. + * + * offset :: + * The starting offset in the table (or the file if + * tag == 0). + * + * length :: + * The address of the decision variable: + * + * If length == NULL: + * Loads the whole table. Returns an error if + * `offset' == 0! + * + * If *length == 0: + * Exits immediately; returning the length of the given + * table or of the font file, depending on the value of + * `tag'. + * + * If *length != 0: + * Loads the next `length' bytes of table or font, + * starting at offset `offset' (in table or font too). + * + * @Output: + * buffer :: + * The address of target buffer. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_any( TT_Face face, + FT_ULong tag, + FT_Long offset, + FT_Byte* buffer, + FT_ULong* length ) + { + FT_Error error; + FT_Stream stream; + TT_Table table; + FT_ULong size; + + + if ( tag != 0 ) + { + /* look for tag in font directory */ + table = tt_face_lookup_table( face, tag ); + if ( !table ) + { + error = FT_THROW( Table_Missing ); + goto Exit; + } + + offset += table->Offset; + size = table->Length; + } + else + /* tag == 0 -- the user wants to access the font file directly */ + size = face->root.stream->size; + + if ( length && *length == 0 ) + { + *length = size; + + return FT_Err_Ok; + } + + if ( length ) + size = *length; + + stream = face->root.stream; + /* the `if' is syntactic sugar for picky compilers */ + if ( FT_STREAM_READ_AT( offset, buffer, size ) ) + goto Exit; + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_generic_header + * + * @Description: + * Loads the TrueType table `head' or `bhed'. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + static FT_Error + tt_face_load_generic_header( TT_Face face, + FT_Stream stream, + FT_ULong tag ) + { + FT_Error error; + TT_Header* header; + + static const FT_Frame_Field header_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_Header + + FT_FRAME_START( 54 ), + FT_FRAME_ULONG ( Table_Version ), + FT_FRAME_ULONG ( Font_Revision ), + FT_FRAME_LONG ( CheckSum_Adjust ), + FT_FRAME_LONG ( Magic_Number ), + FT_FRAME_USHORT( Flags ), + FT_FRAME_USHORT( Units_Per_EM ), + FT_FRAME_ULONG ( Created[0] ), + FT_FRAME_ULONG ( Created[1] ), + FT_FRAME_ULONG ( Modified[0] ), + FT_FRAME_ULONG ( Modified[1] ), + FT_FRAME_SHORT ( xMin ), + FT_FRAME_SHORT ( yMin ), + FT_FRAME_SHORT ( xMax ), + FT_FRAME_SHORT ( yMax ), + FT_FRAME_USHORT( Mac_Style ), + FT_FRAME_USHORT( Lowest_Rec_PPEM ), + FT_FRAME_SHORT ( Font_Direction ), + FT_FRAME_SHORT ( Index_To_Loc_Format ), + FT_FRAME_SHORT ( Glyph_Data_Format ), + FT_FRAME_END + }; + + + error = face->goto_table( face, tag, stream, 0 ); + if ( error ) + goto Exit; + + header = &face->header; + + if ( FT_STREAM_READ_FIELDS( header_fields, header ) ) + goto Exit; + + FT_TRACE3(( "Units per EM: %4hu\n", header->Units_Per_EM )); + FT_TRACE3(( "IndexToLoc: %4hd\n", header->Index_To_Loc_Format )); + + Exit: + return error; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_head( TT_Face face, + FT_Stream stream ) + { + return tt_face_load_generic_header( face, stream, TTAG_head ); + } + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_bhed( TT_Face face, + FT_Stream stream ) + { + return tt_face_load_generic_header( face, stream, TTAG_bhed ); + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + + /************************************************************************** + * + * @Function: + * tt_face_load_maxp + * + * @Description: + * Loads the maximum profile into a face object. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_maxp( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + TT_MaxProfile* maxProfile = &face->max_profile; + + static const FT_Frame_Field maxp_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_MaxProfile + + FT_FRAME_START( 6 ), + FT_FRAME_LONG ( version ), + FT_FRAME_USHORT( numGlyphs ), + FT_FRAME_END + }; + + static const FT_Frame_Field maxp_fields_extra[] = + { + FT_FRAME_START( 26 ), + FT_FRAME_USHORT( maxPoints ), + FT_FRAME_USHORT( maxContours ), + FT_FRAME_USHORT( maxCompositePoints ), + FT_FRAME_USHORT( maxCompositeContours ), + FT_FRAME_USHORT( maxZones ), + FT_FRAME_USHORT( maxTwilightPoints ), + FT_FRAME_USHORT( maxStorage ), + FT_FRAME_USHORT( maxFunctionDefs ), + FT_FRAME_USHORT( maxInstructionDefs ), + FT_FRAME_USHORT( maxStackElements ), + FT_FRAME_USHORT( maxSizeOfInstructions ), + FT_FRAME_USHORT( maxComponentElements ), + FT_FRAME_USHORT( maxComponentDepth ), + FT_FRAME_END + }; + + + error = face->goto_table( face, TTAG_maxp, stream, 0 ); + if ( error ) + goto Exit; + + if ( FT_STREAM_READ_FIELDS( maxp_fields, maxProfile ) ) + goto Exit; + + maxProfile->maxPoints = 0; + maxProfile->maxContours = 0; + maxProfile->maxCompositePoints = 0; + maxProfile->maxCompositeContours = 0; + maxProfile->maxZones = 0; + maxProfile->maxTwilightPoints = 0; + maxProfile->maxStorage = 0; + maxProfile->maxFunctionDefs = 0; + maxProfile->maxInstructionDefs = 0; + maxProfile->maxStackElements = 0; + maxProfile->maxSizeOfInstructions = 0; + maxProfile->maxComponentElements = 0; + maxProfile->maxComponentDepth = 0; + + if ( maxProfile->version >= 0x10000L ) + { + if ( FT_STREAM_READ_FIELDS( maxp_fields_extra, maxProfile ) ) + goto Exit; + + /* XXX: an adjustment that is necessary to load certain */ + /* broken fonts like `Keystrokes MT' :-( */ + /* */ + /* We allocate 64 function entries by default when */ + /* the maxFunctionDefs value is smaller. */ + + if ( maxProfile->maxFunctionDefs < 64 ) + maxProfile->maxFunctionDefs = 64; + + /* we add 4 phantom points later */ + if ( maxProfile->maxTwilightPoints > ( 0xFFFFU - 4 ) ) + { + FT_TRACE0(( "tt_face_load_maxp:" + " too much twilight points in `maxp' table;\n" )); + FT_TRACE0(( " " + " some glyphs might be rendered incorrectly\n" )); + + maxProfile->maxTwilightPoints = 0xFFFFU - 4; + } + } + + FT_TRACE3(( "numGlyphs: %hu\n", maxProfile->numGlyphs )); + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_name + * + * @Description: + * Loads the name records. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_name( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_Memory memory = stream->memory; + FT_ULong table_pos, table_len; + FT_ULong storage_start, storage_limit; + TT_NameTable table; + TT_Name names = NULL; + TT_LangTag langTags = NULL; + + static const FT_Frame_Field name_table_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_NameTableRec + + FT_FRAME_START( 6 ), + FT_FRAME_USHORT( format ), + FT_FRAME_USHORT( numNameRecords ), + FT_FRAME_USHORT( storageOffset ), + FT_FRAME_END + }; + + static const FT_Frame_Field name_record_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_NameRec + + /* no FT_FRAME_START */ + FT_FRAME_USHORT( platformID ), + FT_FRAME_USHORT( encodingID ), + FT_FRAME_USHORT( languageID ), + FT_FRAME_USHORT( nameID ), + FT_FRAME_USHORT( stringLength ), + FT_FRAME_USHORT( stringOffset ), + FT_FRAME_END + }; + + static const FT_Frame_Field langTag_record_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_LangTagRec + + /* no FT_FRAME_START */ + FT_FRAME_USHORT( stringLength ), + FT_FRAME_USHORT( stringOffset ), + FT_FRAME_END + }; + + + table = &face->name_table; + table->stream = stream; + + error = face->goto_table( face, TTAG_name, stream, &table_len ); + if ( error ) + goto Exit; + + table_pos = FT_STREAM_POS(); + + if ( FT_STREAM_READ_FIELDS( name_table_fields, table ) ) + goto Exit; + + /* Some popular Asian fonts have an invalid `storageOffset' value (it */ + /* should be at least `6 + 12*numNameRecords'). However, the string */ + /* offsets, computed as `storageOffset + entry->stringOffset', are */ + /* valid pointers within the name table... */ + /* */ + /* We thus can't check `storageOffset' right now. */ + /* */ + storage_start = table_pos + 6 + 12 * table->numNameRecords; + storage_limit = table_pos + table_len; + + if ( storage_start > storage_limit ) + { + FT_ERROR(( "tt_face_load_name: invalid `name' table\n" )); + error = FT_THROW( Name_Table_Missing ); + goto Exit; + } + + /* `name' format 1 contains additional language tag records, */ + /* which we load first */ + if ( table->format == 1 ) + { + if ( FT_STREAM_SEEK( storage_start ) || + FT_READ_USHORT( table->numLangTagRecords ) ) + goto Exit; + + storage_start += 2 + 4 * table->numLangTagRecords; + + /* allocate language tag records array */ + if ( FT_QNEW_ARRAY( langTags, table->numLangTagRecords ) || + FT_FRAME_ENTER( table->numLangTagRecords * 4 ) ) + goto Exit; + + /* load language tags */ + { + TT_LangTag entry = langTags; + TT_LangTag limit = FT_OFFSET( entry, table->numLangTagRecords ); + + + for ( ; entry < limit; entry++ ) + { + (void)FT_STREAM_READ_FIELDS( langTag_record_fields, entry ); + + /* check that the langTag string is within the table */ + entry->stringOffset += table_pos + table->storageOffset; + if ( entry->stringOffset < storage_start || + entry->stringOffset + entry->stringLength > storage_limit ) + { + /* invalid entry; ignore it */ + entry->stringLength = 0; + } + + /* mark the string as not yet loaded */ + entry->string = NULL; + } + + table->langTags = langTags; + langTags = NULL; + } + + FT_FRAME_EXIT(); + + (void)FT_STREAM_SEEK( table_pos + 6 ); + } + + /* allocate name records array */ + if ( FT_QNEW_ARRAY( names, table->numNameRecords ) || + FT_FRAME_ENTER( table->numNameRecords * 12 ) ) + goto Exit; + + /* load name records */ + { + TT_Name entry = names; + FT_UInt count = table->numNameRecords; + FT_UInt valid = 0; + + + for ( ; count > 0; count-- ) + { + if ( FT_STREAM_READ_FIELDS( name_record_fields, entry ) ) + continue; + + /* check that the name is not empty */ + if ( entry->stringLength == 0 ) + continue; + + /* check that the name string is within the table */ + entry->stringOffset += table_pos + table->storageOffset; + if ( entry->stringOffset < storage_start || + entry->stringOffset + entry->stringLength > storage_limit ) + { + /* invalid entry; ignore it */ + continue; + } + + /* assure that we have a valid language tag ID, and */ + /* that the corresponding langTag entry is valid, too */ + if ( table->format == 1 && entry->languageID >= 0x8000U ) + { + if ( entry->languageID - 0x8000U >= table->numLangTagRecords || + !table->langTags[entry->languageID - 0x8000U].stringLength ) + { + /* invalid entry; ignore it */ + continue; + } + } + + /* mark the string as not yet converted */ + entry->string = NULL; + + valid++; + entry++; + } + + /* reduce array size to the actually used elements */ + FT_MEM_QRENEW_ARRAY( names, + table->numNameRecords, + valid ); + table->names = names; + names = NULL; + table->numNameRecords = valid; + } + + FT_FRAME_EXIT(); + + /* everything went well, update face->num_names */ + face->num_names = (FT_UShort)table->numNameRecords; + + Exit: + FT_FREE( names ); + FT_FREE( langTags ); + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_free_name + * + * @Description: + * Frees the name records. + * + * @Input: + * face :: + * A handle to the target face object. + */ + FT_LOCAL_DEF( void ) + tt_face_free_name( TT_Face face ) + { + FT_Memory memory = face->root.memory; + TT_NameTable table = &face->name_table; + + + if ( table->names ) + { + TT_Name entry = table->names; + TT_Name limit = entry + table->numNameRecords; + + + for ( ; entry < limit; entry++ ) + FT_FREE( entry->string ); + + FT_FREE( table->names ); + } + + if ( table->langTags ) + { + TT_LangTag entry = table->langTags; + TT_LangTag limit = entry + table->numLangTagRecords; + + + for ( ; entry < limit; entry++ ) + FT_FREE( entry->string ); + + FT_FREE( table->langTags ); + } + + table->numNameRecords = 0; + table->numLangTagRecords = 0; + table->format = 0; + table->storageOffset = 0; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_cmap + * + * @Description: + * Loads the cmap directory in a face object. The cmaps themselves + * are loaded on demand in the `ttcmap.c' module. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_cmap( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + + + error = face->goto_table( face, TTAG_cmap, stream, &face->cmap_size ); + if ( error ) + goto Exit; + + if ( FT_FRAME_EXTRACT( face->cmap_size, face->cmap_table ) ) + face->cmap_size = 0; + + Exit: + return error; + } + + + + /************************************************************************** + * + * @Function: + * tt_face_load_os2 + * + * @Description: + * Loads the OS2 table. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_os2( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + TT_OS2* os2; + + static const FT_Frame_Field os2_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_OS2 + + FT_FRAME_START( 78 ), + FT_FRAME_USHORT( version ), + FT_FRAME_SHORT ( xAvgCharWidth ), + FT_FRAME_USHORT( usWeightClass ), + FT_FRAME_USHORT( usWidthClass ), + FT_FRAME_SHORT ( fsType ), + FT_FRAME_SHORT ( ySubscriptXSize ), + FT_FRAME_SHORT ( ySubscriptYSize ), + FT_FRAME_SHORT ( ySubscriptXOffset ), + FT_FRAME_SHORT ( ySubscriptYOffset ), + FT_FRAME_SHORT ( ySuperscriptXSize ), + FT_FRAME_SHORT ( ySuperscriptYSize ), + FT_FRAME_SHORT ( ySuperscriptXOffset ), + FT_FRAME_SHORT ( ySuperscriptYOffset ), + FT_FRAME_SHORT ( yStrikeoutSize ), + FT_FRAME_SHORT ( yStrikeoutPosition ), + FT_FRAME_SHORT ( sFamilyClass ), + FT_FRAME_BYTE ( panose[0] ), + FT_FRAME_BYTE ( panose[1] ), + FT_FRAME_BYTE ( panose[2] ), + FT_FRAME_BYTE ( panose[3] ), + FT_FRAME_BYTE ( panose[4] ), + FT_FRAME_BYTE ( panose[5] ), + FT_FRAME_BYTE ( panose[6] ), + FT_FRAME_BYTE ( panose[7] ), + FT_FRAME_BYTE ( panose[8] ), + FT_FRAME_BYTE ( panose[9] ), + FT_FRAME_ULONG ( ulUnicodeRange1 ), + FT_FRAME_ULONG ( ulUnicodeRange2 ), + FT_FRAME_ULONG ( ulUnicodeRange3 ), + FT_FRAME_ULONG ( ulUnicodeRange4 ), + FT_FRAME_BYTE ( achVendID[0] ), + FT_FRAME_BYTE ( achVendID[1] ), + FT_FRAME_BYTE ( achVendID[2] ), + FT_FRAME_BYTE ( achVendID[3] ), + + FT_FRAME_USHORT( fsSelection ), + FT_FRAME_USHORT( usFirstCharIndex ), + FT_FRAME_USHORT( usLastCharIndex ), + FT_FRAME_SHORT ( sTypoAscender ), + FT_FRAME_SHORT ( sTypoDescender ), + FT_FRAME_SHORT ( sTypoLineGap ), + FT_FRAME_USHORT( usWinAscent ), + FT_FRAME_USHORT( usWinDescent ), + FT_FRAME_END + }; + + /* `OS/2' version 1 and newer */ + static const FT_Frame_Field os2_fields_extra1[] = + { + FT_FRAME_START( 8 ), + FT_FRAME_ULONG( ulCodePageRange1 ), + FT_FRAME_ULONG( ulCodePageRange2 ), + FT_FRAME_END + }; + + /* `OS/2' version 2 and newer */ + static const FT_Frame_Field os2_fields_extra2[] = + { + FT_FRAME_START( 10 ), + FT_FRAME_SHORT ( sxHeight ), + FT_FRAME_SHORT ( sCapHeight ), + FT_FRAME_USHORT( usDefaultChar ), + FT_FRAME_USHORT( usBreakChar ), + FT_FRAME_USHORT( usMaxContext ), + FT_FRAME_END + }; + + /* `OS/2' version 5 and newer */ + static const FT_Frame_Field os2_fields_extra5[] = + { + FT_FRAME_START( 4 ), + FT_FRAME_USHORT( usLowerOpticalPointSize ), + FT_FRAME_USHORT( usUpperOpticalPointSize ), + FT_FRAME_END + }; + + + /* We now support old Mac fonts where the OS/2 table doesn't */ + /* exist. Simply put, we set the `version' field to 0xFFFF */ + /* and test this value each time we need to access the table. */ + error = face->goto_table( face, TTAG_OS2, stream, 0 ); + if ( error ) + goto Exit; + + os2 = &face->os2; + + if ( FT_STREAM_READ_FIELDS( os2_fields, os2 ) ) + goto Exit; + + os2->ulCodePageRange1 = 0; + os2->ulCodePageRange2 = 0; + os2->sxHeight = 0; + os2->sCapHeight = 0; + os2->usDefaultChar = 0; + os2->usBreakChar = 0; + os2->usMaxContext = 0; + os2->usLowerOpticalPointSize = 0; + os2->usUpperOpticalPointSize = 0xFFFF; + + if ( os2->version >= 0x0001 ) + { + /* only version 1 tables */ + if ( FT_STREAM_READ_FIELDS( os2_fields_extra1, os2 ) ) + goto Exit; + + if ( os2->version >= 0x0002 ) + { + /* only version 2 tables */ + if ( FT_STREAM_READ_FIELDS( os2_fields_extra2, os2 ) ) + goto Exit; + + if ( os2->version >= 0x0005 ) + { + /* only version 5 tables */ + if ( FT_STREAM_READ_FIELDS( os2_fields_extra5, os2 ) ) + goto Exit; + } + } + } + + FT_TRACE3(( "sTypoAscender: %4hd\n", os2->sTypoAscender )); + FT_TRACE3(( "sTypoDescender: %4hd\n", os2->sTypoDescender )); + FT_TRACE3(( "usWinAscent: %4hu\n", os2->usWinAscent )); + FT_TRACE3(( "usWinDescent: %4hu\n", os2->usWinDescent )); + FT_TRACE3(( "fsSelection: 0x%2hx\n", os2->fsSelection )); + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_postscript + * + * @Description: + * Loads the Postscript table. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_post( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + TT_Postscript* post = &face->postscript; + + static const FT_Frame_Field post_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_Postscript + + FT_FRAME_START( 32 ), + FT_FRAME_LONG ( FormatType ), + FT_FRAME_LONG ( italicAngle ), + FT_FRAME_SHORT( underlinePosition ), + FT_FRAME_SHORT( underlineThickness ), + FT_FRAME_ULONG( isFixedPitch ), + FT_FRAME_ULONG( minMemType42 ), + FT_FRAME_ULONG( maxMemType42 ), + FT_FRAME_ULONG( minMemType1 ), + FT_FRAME_ULONG( maxMemType1 ), + FT_FRAME_END + }; + + + error = face->goto_table( face, TTAG_post, stream, 0 ); + if ( error ) + return error; + + if ( FT_STREAM_READ_FIELDS( post_fields, post ) ) + return error; + + if ( post->FormatType != 0x00030000L && + post->FormatType != 0x00025000L && + post->FormatType != 0x00020000L && + post->FormatType != 0x00010000L ) + return FT_THROW( Invalid_Post_Table_Format ); + + /* we don't load the glyph names, we do that in another */ + /* module (ttpost). */ + + FT_TRACE3(( "FormatType: 0x%lx\n", post->FormatType )); + FT_TRACE3(( "isFixedPitch: %s\n", post->isFixedPitch + ? " yes" : " no" )); + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_pclt + * + * @Description: + * Loads the PCL 5 Table. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_pclt( TT_Face face, + FT_Stream stream ) + { + static const FT_Frame_Field pclt_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_PCLT + + FT_FRAME_START( 54 ), + FT_FRAME_ULONG ( Version ), + FT_FRAME_ULONG ( FontNumber ), + FT_FRAME_USHORT( Pitch ), + FT_FRAME_USHORT( xHeight ), + FT_FRAME_USHORT( Style ), + FT_FRAME_USHORT( TypeFamily ), + FT_FRAME_USHORT( CapHeight ), + FT_FRAME_USHORT( SymbolSet ), + FT_FRAME_BYTES ( TypeFace, 16 ), + FT_FRAME_BYTES ( CharacterComplement, 8 ), + FT_FRAME_BYTES ( FileName, 6 ), + FT_FRAME_CHAR ( StrokeWeight ), + FT_FRAME_CHAR ( WidthType ), + FT_FRAME_BYTE ( SerifStyle ), + FT_FRAME_BYTE ( Reserved ), + FT_FRAME_END + }; + + FT_Error error; + TT_PCLT* pclt = &face->pclt; + + + /* optional table */ + error = face->goto_table( face, TTAG_PCLT, stream, 0 ); + if ( error ) + goto Exit; + + if ( FT_STREAM_READ_FIELDS( pclt_fields, pclt ) ) + goto Exit; + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_gasp + * + * @Description: + * Loads the `gasp' table into a face object. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_gasp( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_Memory memory = stream->memory; + + FT_UShort j, num_ranges; + TT_GaspRange gasp_ranges = NULL; + + + /* the gasp table is optional */ + error = face->goto_table( face, TTAG_gasp, stream, 0 ); + if ( error ) + goto Exit; + + if ( FT_FRAME_ENTER( 4L ) ) + goto Exit; + + face->gasp.version = FT_GET_USHORT(); + num_ranges = FT_GET_USHORT(); + + FT_FRAME_EXIT(); + + /* only support versions 0 and 1 of the table */ + if ( face->gasp.version >= 2 ) + { + face->gasp.numRanges = 0; + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + FT_TRACE3(( "numRanges: %hu\n", num_ranges )); + + if ( FT_QNEW_ARRAY( gasp_ranges, num_ranges ) || + FT_FRAME_ENTER( num_ranges * 4L ) ) + goto Exit; + + for ( j = 0; j < num_ranges; j++ ) + { + gasp_ranges[j].maxPPEM = FT_GET_USHORT(); + gasp_ranges[j].gaspFlag = FT_GET_USHORT(); + + FT_TRACE3(( "gaspRange %hu: rangeMaxPPEM %5hu, rangeGaspBehavior 0x%hx\n", + j, + gasp_ranges[j].maxPPEM, + gasp_ranges[j].gaspFlag )); + } + + face->gasp.gaspRanges = gasp_ranges; + gasp_ranges = NULL; + face->gasp.numRanges = num_ranges; + + FT_FRAME_EXIT(); + + Exit: + FT_FREE( gasp_ranges ); + return error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttload.h b/non-source/foreign/freetype2/src/sfnt/ttload.h new file mode 100644 index 000000000..2b1d62d9b --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttload.h @@ -0,0 +1,111 @@ +/**************************************************************************** + * + * ttload.h + * + * Load the basic TrueType tables, i.e., tables that can be either in + * TTF or OTF fonts (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTLOAD_H_ +#define TTLOAD_H_ + + +#include <freetype/internal/ftstream.h> +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + + FT_LOCAL( TT_Table ) + tt_face_lookup_table( TT_Face face, + FT_ULong tag ); + + FT_LOCAL( FT_Error ) + tt_face_goto_table( TT_Face face, + FT_ULong tag, + FT_Stream stream, + FT_ULong* length ); + + + FT_LOCAL( FT_Error ) + tt_face_load_font_dir( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_any( TT_Face face, + FT_ULong tag, + FT_Long offset, + FT_Byte* buffer, + FT_ULong* length ); + + + FT_LOCAL( FT_Error ) + tt_face_load_head( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_cmap( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_maxp( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_name( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_os2( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_post( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_pclt( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( void ) + tt_face_free_name( TT_Face face ); + + + FT_LOCAL( FT_Error ) + tt_face_load_gasp( TT_Face face, + FT_Stream stream ); + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + FT_LOCAL( FT_Error ) + tt_face_load_bhed( TT_Face face, + FT_Stream stream ); + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + +FT_END_HEADER + +#endif /* TTLOAD_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttmtx.c b/non-source/foreign/freetype2/src/sfnt/ttmtx.c new file mode 100644 index 000000000..278841185 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttmtx.c @@ -0,0 +1,338 @@ +/**************************************************************************** + * + * ttmtx.c + * + * Load the metrics tables common to TTF and OTF fonts (body). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/internal/services/svmetric.h> +#endif + +#include "ttmtx.h" + +#include "sferrors.h" + + + /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */ + /* be identical except for the names of their fields, */ + /* which are different. */ + /* */ + /* This ensures that `tt_face_load_hmtx' is able to read */ + /* both the horizontal and vertical headers. */ + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttmtx + + + /************************************************************************** + * + * @Function: + * tt_face_load_hmtx + * + * @Description: + * Load the `hmtx' or `vmtx' table into a face object. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * vertical :: + * A boolean flag. If set, load `vmtx'. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_hmtx( TT_Face face, + FT_Stream stream, + FT_Bool vertical ) + { + FT_Error error; + FT_ULong tag, table_size; + FT_ULong* ptable_offset; + FT_ULong* ptable_size; + + + if ( vertical ) + { + tag = TTAG_vmtx; + ptable_offset = &face->vert_metrics_offset; + ptable_size = &face->vert_metrics_size; + } + else + { + tag = TTAG_hmtx; + ptable_offset = &face->horz_metrics_offset; + ptable_size = &face->horz_metrics_size; + } + + error = face->goto_table( face, tag, stream, &table_size ); + if ( error ) + goto Fail; + + *ptable_size = table_size; + *ptable_offset = FT_STREAM_POS(); + + Fail: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_hhea + * + * @Description: + * Load the `hhea' or 'vhea' table into a face object. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * The input stream. + * + * vertical :: + * A boolean flag. If set, load `vhea'. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_hhea( TT_Face face, + FT_Stream stream, + FT_Bool vertical ) + { + FT_Error error; + TT_HoriHeader* header; + + static const FT_Frame_Field metrics_header_fields[] = + { +#undef FT_STRUCTURE +#define FT_STRUCTURE TT_HoriHeader + + FT_FRAME_START( 36 ), + FT_FRAME_ULONG ( Version ), + FT_FRAME_SHORT ( Ascender ), + FT_FRAME_SHORT ( Descender ), + FT_FRAME_SHORT ( Line_Gap ), + FT_FRAME_USHORT( advance_Width_Max ), + FT_FRAME_SHORT ( min_Left_Side_Bearing ), + FT_FRAME_SHORT ( min_Right_Side_Bearing ), + FT_FRAME_SHORT ( xMax_Extent ), + FT_FRAME_SHORT ( caret_Slope_Rise ), + FT_FRAME_SHORT ( caret_Slope_Run ), + FT_FRAME_SHORT ( caret_Offset ), + FT_FRAME_SHORT ( Reserved[0] ), + FT_FRAME_SHORT ( Reserved[1] ), + FT_FRAME_SHORT ( Reserved[2] ), + FT_FRAME_SHORT ( Reserved[3] ), + FT_FRAME_SHORT ( metric_Data_Format ), + FT_FRAME_USHORT( number_Of_HMetrics ), + FT_FRAME_END + }; + + + if ( vertical ) + { + void *v = &face->vertical; + + + error = face->goto_table( face, TTAG_vhea, stream, 0 ); + if ( error ) + goto Fail; + + header = (TT_HoriHeader*)v; + } + else + { + error = face->goto_table( face, TTAG_hhea, stream, 0 ); + if ( error ) + goto Fail; + + header = &face->horizontal; + } + + if ( FT_STREAM_READ_FIELDS( metrics_header_fields, header ) ) + goto Fail; + + FT_TRACE3(( "Ascender: %5d\n", header->Ascender )); + FT_TRACE3(( "Descender: %5d\n", header->Descender )); + FT_TRACE3(( "number_Of_Metrics: %5u\n", header->number_Of_HMetrics )); + + header->long_metrics = NULL; + header->short_metrics = NULL; + + Fail: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_face_get_metrics + * + * @Description: + * Return the horizontal or vertical metrics in font units for a + * given glyph. The values are the left side bearing (top side + * bearing for vertical metrics) and advance width (advance height + * for vertical metrics). + * + * @Input: + * face :: + * A pointer to the TrueType face structure. + * + * vertical :: + * If set to TRUE, get vertical metrics. + * + * gindex :: + * The glyph index. + * + * @Output: + * abearing :: + * The bearing, either left side or top side. + * + * aadvance :: + * The advance width or advance height, depending on + * the `vertical' flag. + */ + FT_LOCAL_DEF( void ) + tt_face_get_metrics( TT_Face face, + FT_Bool vertical, + FT_UInt gindex, + FT_Short *abearing, + FT_UShort *aadvance ) + { + FT_Error error; + FT_Stream stream = face->root.stream; + TT_HoriHeader* header; + FT_ULong table_pos, table_size, table_end; + FT_UShort k; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_Service_MetricsVariations var = + (FT_Service_MetricsVariations)face->tt_var; +#endif + + + if ( vertical ) + { + void* v = &face->vertical; + + + header = (TT_HoriHeader*)v; + table_pos = face->vert_metrics_offset; + table_size = face->vert_metrics_size; + } + else + { + header = &face->horizontal; + table_pos = face->horz_metrics_offset; + table_size = face->horz_metrics_size; + } + + table_end = table_pos + table_size; + + k = header->number_Of_HMetrics; + + if ( k > 0 ) + { + if ( gindex < (FT_UInt)k ) + { + table_pos += 4 * gindex; + if ( table_pos + 4 > table_end ) + goto NoData; + + if ( FT_STREAM_SEEK( table_pos ) || + FT_READ_USHORT( *aadvance ) || + FT_READ_SHORT( *abearing ) ) + goto NoData; + } + else + { + table_pos += 4 * ( k - 1 ); + if ( table_pos + 2 > table_end ) + goto NoData; + + if ( FT_STREAM_SEEK( table_pos ) || + FT_READ_USHORT( *aadvance ) ) + goto NoData; + + table_pos += 4 + 2 * ( gindex - k ); + if ( table_pos + 2 > table_end ) + *abearing = 0; + else + { + if ( FT_STREAM_SEEK( table_pos ) ) + *abearing = 0; + else + (void)FT_READ_SHORT( *abearing ); + } + } + } + else + { + NoData: + *abearing = 0; + *aadvance = 0; + } + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( var && face->blend ) + { + FT_Face f = FT_FACE( face ); + FT_Int a = (FT_Int)*aadvance; + FT_Int b = (FT_Int)*abearing; + + + if ( vertical ) + { + if ( var->vadvance_adjust ) + var->vadvance_adjust( f, gindex, &a ); + if ( var->tsb_adjust ) + var->tsb_adjust( f, gindex, &b ); + } + else + { + if ( var->hadvance_adjust ) + var->hadvance_adjust( f, gindex, &a ); + if ( var->lsb_adjust ) + var->lsb_adjust( f, gindex, &b ); + } + + *aadvance = (FT_UShort)a; + *abearing = (FT_Short)b; + } +#endif + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttmtx.h b/non-source/foreign/freetype2/src/sfnt/ttmtx.h new file mode 100644 index 000000000..34b3c0e18 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttmtx.h @@ -0,0 +1,54 @@ +/**************************************************************************** + * + * ttmtx.h + * + * Load the metrics tables common to TTF and OTF fonts (specification). + * + * Copyright (C) 2006-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTMTX_H_ +#define TTMTX_H_ + + +#include <freetype/internal/ftstream.h> +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + tt_face_load_hhea( TT_Face face, + FT_Stream stream, + FT_Bool vertical ); + + + FT_LOCAL( FT_Error ) + tt_face_load_hmtx( TT_Face face, + FT_Stream stream, + FT_Bool vertical ); + + + FT_LOCAL( void ) + tt_face_get_metrics( TT_Face face, + FT_Bool vertical, + FT_UInt gindex, + FT_Short* abearing, + FT_UShort* aadvance ); + +FT_END_HEADER + +#endif /* TTMTX_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttpost.c b/non-source/foreign/freetype2/src/sfnt/ttpost.c new file mode 100644 index 000000000..5698a62c8 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttpost.c @@ -0,0 +1,484 @@ +/**************************************************************************** + * + * ttpost.c + * + * PostScript name table processing for TrueType and OpenType fonts + * (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * The post table is not completely loaded by the core engine. This + * file loads the missing PS glyph names and implements an API to access + * them. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> + + +#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES + +#include "ttpost.h" + +#include "sferrors.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttpost + + + /* If this configuration macro is defined, we rely on the `psnames' */ + /* module to grab the glyph names. */ + +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + +#include <freetype/internal/services/svpscmap.h> + +#define MAC_NAME( x ) (FT_String*)psnames->macintosh_name( (FT_UInt)(x) ) + + +#else /* !FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + + /* Otherwise, we ignore the `psnames' module, and provide our own */ + /* table of Mac names. Thus, it is possible to build a version of */ + /* FreeType without the Type 1 driver & psnames module. */ + +#define MAC_NAME( x ) (FT_String*)tt_post_default_names[x] + + /* the 258 default Mac PS glyph names; see file `tools/glnames.py' */ + + static const FT_String* const tt_post_default_names[258] = + { + /* 0 */ + ".notdef", ".null", "nonmarkingreturn", "space", "exclam", + "quotedbl", "numbersign", "dollar", "percent", "ampersand", + /* 10 */ + "quotesingle", "parenleft", "parenright", "asterisk", "plus", + "comma", "hyphen", "period", "slash", "zero", + /* 20 */ + "one", "two", "three", "four", "five", + "six", "seven", "eight", "nine", "colon", + /* 30 */ + "semicolon", "less", "equal", "greater", "question", + "at", "A", "B", "C", "D", + /* 40 */ + "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", + /* 50 */ + "O", "P", "Q", "R", "S", + "T", "U", "V", "W", "X", + /* 60 */ + "Y", "Z", "bracketleft", "backslash", "bracketright", + "asciicircum", "underscore", "grave", "a", "b", + /* 70 */ + "c", "d", "e", "f", "g", + "h", "i", "j", "k", "l", + /* 80 */ + "m", "n", "o", "p", "q", + "r", "s", "t", "u", "v", + /* 90 */ + "w", "x", "y", "z", "braceleft", + "bar", "braceright", "asciitilde", "Adieresis", "Aring", + /* 100 */ + "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", + "aacute", "agrave", "acircumflex", "adieresis", "atilde", + /* 110 */ + "aring", "ccedilla", "eacute", "egrave", "ecircumflex", + "edieresis", "iacute", "igrave", "icircumflex", "idieresis", + /* 120 */ + "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", + "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", + /* 130 */ + "dagger", "degree", "cent", "sterling", "section", + "bullet", "paragraph", "germandbls", "registered", "copyright", + /* 140 */ + "trademark", "acute", "dieresis", "notequal", "AE", + "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", + /* 150 */ + "yen", "mu", "partialdiff", "summation", "product", + "pi", "integral", "ordfeminine", "ordmasculine", "Omega", + /* 160 */ + "ae", "oslash", "questiondown", "exclamdown", "logicalnot", + "radical", "florin", "approxequal", "Delta", "guillemotleft", + /* 170 */ + "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", + "Otilde", "OE", "oe", "endash", "emdash", + /* 180 */ + "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", + "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", + /* 190 */ + "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", + "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", + /* 200 */ + "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", + "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", + /* 210 */ + "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", + "dotlessi", "circumflex", "tilde", "macron", "breve", + /* 220 */ + "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", + "caron", "Lslash", "lslash", "Scaron", "scaron", + /* 230 */ + "Zcaron", "zcaron", "brokenbar", "Eth", "eth", + "Yacute", "yacute", "Thorn", "thorn", "minus", + /* 240 */ + "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", + "onequarter", "threequarters", "franc", "Gbreve", "gbreve", + /* 250 */ + "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", + "Ccaron", "ccaron", "dcroat", + }; + + +#endif /* !FT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + + static FT_Error + load_format_20( TT_Post_Names names, + FT_Stream stream, + FT_UShort num_glyphs, + FT_ULong post_len ) + { + FT_Memory memory = stream->memory; + FT_Error error; + + FT_UShort n; + FT_UShort num_names = 0; + + FT_UShort* glyph_indices = NULL; + FT_Byte** name_strings = NULL; + FT_Byte* q; + + + if ( (FT_ULong)num_glyphs * 2 > post_len ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* load the indices and note their maximum */ + if ( FT_QNEW_ARRAY( glyph_indices, num_glyphs ) || + FT_FRAME_ENTER( num_glyphs * 2 ) ) + goto Fail; + + q = (FT_Byte*)stream->cursor; + + for ( n = 0; n < num_glyphs; n++ ) + { + FT_UShort idx = FT_NEXT_USHORT( q ); + + + if ( idx > num_names ) + num_names = idx; + + glyph_indices[n] = idx; + } + + FT_FRAME_EXIT(); + + /* compute number of names stored in the table */ + num_names = num_names > 257 ? num_names - 257 : 0; + + /* now load the name strings */ + if ( num_names ) + { + FT_Byte* p; + FT_Byte* p_end; + + + post_len -= (FT_ULong)num_glyphs * 2; + + if ( FT_QALLOC( name_strings, num_names * sizeof ( FT_Byte* ) + + post_len + 1 ) ) + goto Fail; + + p = (FT_Byte*)( name_strings + num_names ); + if ( FT_STREAM_READ( p, post_len ) ) + goto Fail; + + p_end = p + post_len; + + /* convert from Pascal- to C-strings and set pointers */ + for ( n = 0; p < p_end && n < num_names; n++ ) + { + FT_UInt len = *p; + + + /* names in the Adobe Glyph List are shorter than 40 characters */ + if ( len >= 40U ) + FT_TRACE4(( "load_format_20: unusual %u-char name found\n", len )); + + *p++ = 0; + name_strings[n] = p; + p += len; + } + *p_end = 0; + + /* deal with missing or insufficient string data */ + if ( n < num_names ) + { + FT_TRACE4(( "load_format_20: %hu PostScript names are truncated\n", + (FT_UShort)( num_names - n ) )); + + for ( ; n < num_names; n++ ) + name_strings[n] = p_end; + } + } + + /* all right, set table fields and exit successfully */ + names->num_glyphs = num_glyphs; + names->num_names = num_names; + names->glyph_indices = glyph_indices; + names->glyph_names = name_strings; + + return FT_Err_Ok; + + Fail: + FT_FREE( name_strings ); + FT_FREE( glyph_indices ); + + Exit: + return error; + } + + + static FT_Error + load_format_25( TT_Post_Names names, + FT_Stream stream, + FT_UShort num_glyphs, + FT_ULong post_len ) + { + FT_Memory memory = stream->memory; + FT_Error error; + + FT_UShort n; + FT_UShort* glyph_indices = NULL; + FT_Byte* q; + + + /* check the number of glyphs, including the theoretical limit */ + if ( num_glyphs > post_len || + num_glyphs > 258 + 128 ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* load the indices and check their Mac range */ + if ( FT_QNEW_ARRAY( glyph_indices, num_glyphs ) || + FT_FRAME_ENTER( num_glyphs ) ) + goto Fail; + + q = (FT_Byte*)stream->cursor; + + for ( n = 0; n < num_glyphs; n++ ) + { + FT_Int idx = n + FT_NEXT_CHAR( q ); + + + if ( idx < 0 || idx > 257 ) + idx = 0; + + glyph_indices[n] = (FT_UShort)idx; + } + + FT_FRAME_EXIT(); + + /* OK, set table fields and exit successfully */ + names->num_glyphs = num_glyphs; + names->glyph_indices = glyph_indices; + + return FT_Err_Ok; + + Fail: + FT_FREE( glyph_indices ); + + Exit: + return error; + } + + + static FT_Error + load_post_names( TT_Face face ) + { + FT_Error error = FT_Err_Ok; + FT_Stream stream = face->root.stream; + FT_Fixed format = face->postscript.FormatType; + FT_ULong post_len; + FT_UShort num_glyphs; + + + /* seek to the beginning of the PS names table */ + error = face->goto_table( face, TTAG_post, stream, &post_len ); + if ( error ) + goto Exit; + + /* UNDOCUMENTED! The number of glyphs in this table can be smaller */ + /* than the value in the maxp table (cf. cyberbit.ttf). */ + if ( post_len < 34 || + FT_STREAM_SKIP( 32 ) || + FT_READ_USHORT( num_glyphs ) || + num_glyphs > face->max_profile.numGlyphs || + num_glyphs == 0 ) + goto Exit; + + /* now read postscript names data */ + if ( format == 0x00020000L ) + error = load_format_20( &face->postscript_names, stream, + num_glyphs, post_len - 34 ); + else if ( format == 0x00025000L ) + error = load_format_25( &face->postscript_names, stream, + num_glyphs, post_len - 34 ); + + Exit: + face->postscript_names.loaded = 1; /* even if failed */ + return error; + } + + + FT_LOCAL_DEF( void ) + tt_face_free_ps_names( TT_Face face ) + { + FT_Memory memory = face->root.memory; + TT_Post_Names names = &face->postscript_names; + + + if ( names->num_glyphs ) + { + FT_FREE( names->glyph_indices ); + names->num_glyphs = 0; + } + + if ( names->num_names ) + { + FT_FREE( names->glyph_names ); + names->num_names = 0; + } + + names->loaded = 0; + } + + + /************************************************************************** + * + * @Function: + * tt_face_get_ps_name + * + * @Description: + * Get the PostScript glyph name of a glyph. + * + * @Input: + * face :: + * A handle to the parent face. + * + * idx :: + * The glyph index. + * + * @InOut: + * PSname :: + * The address of a string pointer. Undefined in case of + * error, otherwise it is a pointer to the glyph name. + * + * You must not modify the returned string! + * + * @Output: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_get_ps_name( TT_Face face, + FT_UInt idx, + FT_String** PSname ) + { + FT_Error error; + FT_Fixed format; + +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + FT_Service_PsCMaps psnames; +#endif + + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + + if ( idx >= (FT_UInt)face->max_profile.numGlyphs ) + return FT_THROW( Invalid_Glyph_Index ); + +#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES + psnames = (FT_Service_PsCMaps)face->psnames; + if ( !psnames ) + return FT_THROW( Unimplemented_Feature ); +#endif + + /* `.notdef' by default */ + *PSname = MAC_NAME( 0 ); + + format = face->postscript.FormatType; + + if ( format == 0x00020000L || + format == 0x00025000L ) + { + TT_Post_Names names = &face->postscript_names; + + + if ( !names->loaded ) + { + error = load_post_names( face ); + if ( error ) + goto End; + } + + if ( idx < (FT_UInt)names->num_glyphs ) + { + FT_UShort name_index = names->glyph_indices[idx]; + + + if ( name_index < 258 ) + *PSname = MAC_NAME( name_index ); + else /* only for version 2.0 */ + *PSname = (FT_String*)names->glyph_names[name_index - 258]; + } + } + + /* version 1.0 is only valid with 258 glyphs */ + else if ( format == 0x00010000L && + face->max_profile.numGlyphs == 258 ) + *PSname = MAC_NAME( idx ); + + /* nothing to do for format == 0x00030000L */ + + End: + /* post format errors ignored */ + return FT_Err_Ok; + } + +#else /* !TT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_post_dummy_; + +#endif /* !TT_CONFIG_OPTION_POSTSCRIPT_NAMES */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttpost.h b/non-source/foreign/freetype2/src/sfnt/ttpost.h new file mode 100644 index 000000000..150db6c39 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttpost.h @@ -0,0 +1,46 @@ +/**************************************************************************** + * + * ttpost.h + * + * PostScript name table processing for TrueType and OpenType fonts + * (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTPOST_H_ +#define TTPOST_H_ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + tt_face_get_ps_name( TT_Face face, + FT_UInt idx, + FT_String** PSname ); + + FT_LOCAL( void ) + tt_face_free_ps_names( TT_Face face ); + + +FT_END_HEADER + +#endif /* TTPOST_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttsbit.c b/non-source/foreign/freetype2/src/sfnt/ttsbit.c new file mode 100644 index 000000000..cb3a8abf1 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttsbit.c @@ -0,0 +1,1685 @@ +/**************************************************************************** + * + * ttsbit.c + * + * TrueType and OpenType embedded bitmap support (body). + * + * Copyright (C) 2005-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * Copyright 2013 by Google, Inc. + * Google Author(s): Behdad Esfahbod. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include <freetype/ftbitmap.h> + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + +#include "ttsbit.h" + +#include "sferrors.h" + +#include "ttmtx.h" +#include "pngshim.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttsbit + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_sbit( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_ULong table_size; + FT_ULong table_start; + + + face->sbit_table = NULL; + face->sbit_table_size = 0; + face->sbit_table_type = TT_SBIT_TABLE_TYPE_NONE; + face->sbit_num_strikes = 0; + + error = face->goto_table( face, TTAG_CBLC, stream, &table_size ); + if ( !error ) + face->sbit_table_type = TT_SBIT_TABLE_TYPE_CBLC; + else + { + error = face->goto_table( face, TTAG_EBLC, stream, &table_size ); + if ( error ) + error = face->goto_table( face, TTAG_bloc, stream, &table_size ); + if ( !error ) + face->sbit_table_type = TT_SBIT_TABLE_TYPE_EBLC; + } + + if ( error ) + { + error = face->goto_table( face, TTAG_sbix, stream, &table_size ); + if ( !error ) + face->sbit_table_type = TT_SBIT_TABLE_TYPE_SBIX; + } + if ( error ) + goto Exit; + + if ( table_size < 8 ) + { + FT_ERROR(( "tt_face_load_sbit_strikes: table too short\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + table_start = FT_STREAM_POS(); + + switch ( (FT_UInt)face->sbit_table_type ) + { + case TT_SBIT_TABLE_TYPE_EBLC: + case TT_SBIT_TABLE_TYPE_CBLC: + { + FT_Byte* p; + FT_Fixed version; + FT_ULong num_strikes; + FT_UInt count; + + + if ( FT_FRAME_EXTRACT( table_size, face->sbit_table ) ) + goto Exit; + + face->sbit_table_size = table_size; + + p = face->sbit_table; + + version = FT_NEXT_LONG( p ); + num_strikes = FT_NEXT_ULONG( p ); + + /* there's at least one font (FZShuSong-Z01, version 3) */ + /* that uses the wrong byte order for the `version' field */ + if ( ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00020000UL && + ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000200UL && + ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00030000UL && + ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000300UL ) + { + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + + if ( num_strikes >= 0x10000UL ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* + * Count the number of strikes available in the table. We are a bit + * paranoid there and don't trust the data. + */ + count = (FT_UInt)num_strikes; + if ( 8 + 48UL * count > table_size ) + count = (FT_UInt)( ( table_size - 8 ) / 48 ); + + face->sbit_num_strikes = count; + } + break; + + case TT_SBIT_TABLE_TYPE_SBIX: + { + FT_UShort version; + FT_UShort flags; + FT_ULong num_strikes; + FT_UInt count; + + + if ( FT_FRAME_ENTER( 8 ) ) + goto Exit; + + version = FT_GET_USHORT(); + flags = FT_GET_USHORT(); + num_strikes = FT_GET_ULONG(); + + FT_FRAME_EXIT(); + + if ( version < 1 ) + { + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + + /* Bit 0 must always be `1'. */ + /* Bit 1 controls the overlay of bitmaps with outlines. */ + /* All other bits should be zero. */ + if ( !( flags == 1 || flags == 3 ) || + num_strikes >= 0x10000UL ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + if ( flags == 3 ) + face->root.face_flags |= FT_FACE_FLAG_SBIX_OVERLAY; + + /* + * Count the number of strikes available in the table. We are a bit + * paranoid there and don't trust the data. + */ + count = (FT_UInt)num_strikes; + if ( 8 + 4UL * count > table_size ) + count = (FT_UInt)( ( table_size - 8 ) / 4 ); + + if ( FT_STREAM_SEEK( FT_STREAM_POS() - 8 ) ) + goto Exit; + + face->sbit_table_size = 8 + count * 4; + if ( FT_FRAME_EXTRACT( face->sbit_table_size, face->sbit_table ) ) + goto Exit; + + face->sbit_num_strikes = count; + } + break; + + default: + /* we ignore unknown table formats */ + error = FT_THROW( Unknown_File_Format ); + break; + } + + if ( !error ) + FT_TRACE3(( "tt_face_load_sbit_strikes: found %u strikes\n", + face->sbit_num_strikes )); + + face->ebdt_start = 0; + face->ebdt_size = 0; + + if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX ) + { + /* the `sbix' table is self-contained; */ + /* it has no associated data table */ + face->ebdt_start = table_start; + face->ebdt_size = table_size; + } + else if ( face->sbit_table_type != TT_SBIT_TABLE_TYPE_NONE ) + { + FT_ULong ebdt_size; + + + error = face->goto_table( face, TTAG_CBDT, stream, &ebdt_size ); + if ( error ) + error = face->goto_table( face, TTAG_EBDT, stream, &ebdt_size ); + if ( error ) + error = face->goto_table( face, TTAG_bdat, stream, &ebdt_size ); + + if ( !error ) + { + face->ebdt_start = FT_STREAM_POS(); + face->ebdt_size = ebdt_size; + } + } + + if ( !face->ebdt_size ) + { + FT_TRACE2(( "tt_face_load_sbit_strikes:" + " no embedded bitmap data table found;\n" )); + FT_TRACE2(( " " + " resetting number of strikes to zero\n" )); + face->sbit_num_strikes = 0; + } + + return FT_Err_Ok; + + Exit: + if ( error ) + { + if ( face->sbit_table ) + FT_FRAME_RELEASE( face->sbit_table ); + face->sbit_table_size = 0; + face->sbit_table_type = TT_SBIT_TABLE_TYPE_NONE; + } + + return error; + } + + + FT_LOCAL_DEF( void ) + tt_face_free_sbit( TT_Face face ) + { + FT_Stream stream = face->root.stream; + + + FT_FRAME_RELEASE( face->sbit_table ); + face->sbit_table_size = 0; + face->sbit_table_type = TT_SBIT_TABLE_TYPE_NONE; + face->sbit_num_strikes = 0; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_set_sbit_strike( TT_Face face, + FT_Size_Request req, + FT_ULong* astrike_index ) + { + return FT_Match_Size( (FT_Face)face, req, 0, astrike_index ); + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_strike_metrics( TT_Face face, + FT_ULong strike_index, + FT_Size_Metrics* metrics ) + { + /* we have to test for the existence of `sbit_strike_map' */ + /* because the function gets also used at the very beginning */ + /* to construct `sbit_strike_map' itself */ + if ( face->sbit_strike_map ) + { + if ( strike_index >= (FT_ULong)face->root.num_fixed_sizes ) + return FT_THROW( Invalid_Argument ); + + /* map to real index */ + strike_index = face->sbit_strike_map[strike_index]; + } + else + { + if ( strike_index >= (FT_ULong)face->sbit_num_strikes ) + return FT_THROW( Invalid_Argument ); + } + + switch ( (FT_UInt)face->sbit_table_type ) + { + case TT_SBIT_TABLE_TYPE_EBLC: + case TT_SBIT_TABLE_TYPE_CBLC: + { + FT_Byte* strike; + FT_Char max_before_bl; + FT_Char min_after_bl; + + + strike = face->sbit_table + 8 + strike_index * 48; + + metrics->x_ppem = (FT_UShort)strike[44]; + metrics->y_ppem = (FT_UShort)strike[45]; + + metrics->ascender = (FT_Char)strike[16] * 64; /* hori.ascender */ + metrics->descender = (FT_Char)strike[17] * 64; /* hori.descender */ + + /* Due to fuzzy wording in the EBLC documentation, we find both */ + /* positive and negative values for `descender'. Additionally, */ + /* many fonts have both `ascender' and `descender' set to zero */ + /* (which is definitely wrong). MS Windows simply ignores all */ + /* those values... For these reasons we apply some heuristics */ + /* to get a reasonable, non-zero value for the height. */ + + max_before_bl = (FT_Char)strike[24]; + min_after_bl = (FT_Char)strike[25]; + + if ( metrics->descender > 0 ) + { + /* compare sign of descender with `min_after_bl' */ + if ( min_after_bl < 0 ) + metrics->descender = -metrics->descender; + } + + else if ( metrics->descender == 0 ) + { + if ( metrics->ascender == 0 ) + { + FT_TRACE2(( "tt_face_load_strike_metrics:" + " sanitizing invalid ascender and descender\n" )); + FT_TRACE2(( " " + " values for strike %ld (%dppem, %dppem)\n", + strike_index, + metrics->x_ppem, metrics->y_ppem )); + + /* sanitize buggy ascender and descender values */ + if ( max_before_bl || min_after_bl ) + { + metrics->ascender = max_before_bl * 64; + metrics->descender = min_after_bl * 64; + } + else + { + metrics->ascender = metrics->y_ppem * 64; + metrics->descender = 0; + } + } + } + +#if 0 + else + ; /* if we have a negative descender, simply use it */ +#endif + + metrics->height = metrics->ascender - metrics->descender; + if ( metrics->height == 0 ) + { + FT_TRACE2(( "tt_face_load_strike_metrics:" + " sanitizing invalid height value\n" )); + FT_TRACE2(( " " + " for strike (%d, %d)\n", + metrics->x_ppem, metrics->y_ppem )); + metrics->height = metrics->y_ppem * 64; + metrics->descender = metrics->ascender - metrics->height; + } + + /* Is this correct? */ + metrics->max_advance = ( (FT_Char)strike[22] + /* min_origin_SB */ + strike[18] + /* max_width */ + (FT_Char)strike[23] /* min_advance_SB */ + ) * 64; + + /* set the scale values (in 16.16 units) so advances */ + /* from the hmtx and vmtx table are scaled correctly */ + metrics->x_scale = FT_DivFix( metrics->x_ppem * 64, + face->header.Units_Per_EM ); + metrics->y_scale = FT_DivFix( metrics->y_ppem * 64, + face->header.Units_Per_EM ); + + return FT_Err_Ok; + } + + case TT_SBIT_TABLE_TYPE_SBIX: + { + FT_Stream stream = face->root.stream; + FT_UInt offset; + FT_UShort ppem, resolution; + TT_HoriHeader *hori; + FT_Fixed scale; + + FT_Error error; + FT_Byte* p; + + + p = face->sbit_table + 8 + 4 * strike_index; + offset = FT_NEXT_ULONG( p ); + + if ( offset + 4 > face->ebdt_size ) + return FT_THROW( Invalid_File_Format ); + + if ( FT_STREAM_SEEK( face->ebdt_start + offset ) || + FT_FRAME_ENTER( 4 ) ) + return error; + + ppem = FT_GET_USHORT(); + resolution = FT_GET_USHORT(); + + FT_UNUSED( resolution ); /* What to do with this? */ + + FT_FRAME_EXIT(); + + metrics->x_ppem = ppem; + metrics->y_ppem = ppem; + + scale = FT_DivFix( ppem * 64, face->header.Units_Per_EM ); + hori = &face->horizontal; + + metrics->ascender = FT_MulFix( hori->Ascender, scale ); + metrics->descender = FT_MulFix( hori->Descender, scale ); + metrics->height = + FT_MulFix( hori->Ascender - hori->Descender + hori->Line_Gap, + scale ); + metrics->max_advance = FT_MulFix( hori->advance_Width_Max, scale ); + + /* set the scale values (in 16.16 units) so advances */ + /* from the hmtx and vmtx table are scaled correctly */ + metrics->x_scale = scale; + metrics->y_scale = scale; + + return error; + } + + default: + return FT_THROW( Unknown_File_Format ); + } + } + + + typedef struct TT_SBitDecoderRec_ + { + TT_Face face; + FT_Stream stream; + FT_Bitmap* bitmap; + TT_SBit_Metrics metrics; + FT_Bool metrics_loaded; + FT_Bool bitmap_allocated; + FT_Byte bit_depth; + + FT_ULong ebdt_start; + FT_ULong ebdt_size; + + FT_ULong strike_index_array; + FT_ULong strike_index_count; + FT_Byte* eblc_base; + FT_Byte* eblc_limit; + + } TT_SBitDecoderRec, *TT_SBitDecoder; + + + static FT_Error + tt_sbit_decoder_init( TT_SBitDecoder decoder, + TT_Face face, + FT_ULong strike_index, + TT_SBit_MetricsRec* metrics ) + { + FT_Error error = FT_ERR( Table_Missing ); + FT_Stream stream = face->root.stream; + + + strike_index = face->sbit_strike_map[strike_index]; + + if ( !face->ebdt_size ) + goto Exit; + if ( FT_STREAM_SEEK( face->ebdt_start ) ) + goto Exit; + + decoder->face = face; + decoder->stream = stream; + decoder->bitmap = &face->root.glyph->bitmap; + decoder->metrics = metrics; + + decoder->metrics_loaded = 0; + decoder->bitmap_allocated = 0; + + decoder->ebdt_start = face->ebdt_start; + decoder->ebdt_size = face->ebdt_size; + + decoder->eblc_base = face->sbit_table; + decoder->eblc_limit = face->sbit_table + face->sbit_table_size; + + /* now find the strike corresponding to the index */ + { + FT_Byte* p; + + + if ( 8 + 48 * strike_index + 3 * 4 + 34 + 1 > face->sbit_table_size ) + { + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + p = decoder->eblc_base + 8 + 48 * strike_index; + + decoder->strike_index_array = FT_NEXT_ULONG( p ); + p += 4; + decoder->strike_index_count = FT_NEXT_ULONG( p ); + p += 34; + decoder->bit_depth = *p; + + /* decoder->strike_index_array + */ + /* 8 * decoder->strike_index_count > face->sbit_table_size ? */ + if ( decoder->strike_index_array > face->sbit_table_size || + decoder->strike_index_count > + ( face->sbit_table_size - decoder->strike_index_array ) / 8 ) + error = FT_THROW( Invalid_File_Format ); + } + + Exit: + return error; + } + + + static void + tt_sbit_decoder_done( TT_SBitDecoder decoder ) + { + FT_UNUSED( decoder ); + } + + + static FT_Error + tt_sbit_decoder_alloc_bitmap( TT_SBitDecoder decoder, + FT_Bool metrics_only ) + { + FT_Error error = FT_Err_Ok; + FT_UInt width, height; + FT_Bitmap* map = decoder->bitmap; + FT_ULong size; + + + if ( !decoder->metrics_loaded ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + width = decoder->metrics->width; + height = decoder->metrics->height; + + map->width = width; + map->rows = height; + + switch ( decoder->bit_depth ) + { + case 1: + map->pixel_mode = FT_PIXEL_MODE_MONO; + map->pitch = (int)( ( map->width + 7 ) >> 3 ); + map->num_grays = 2; + break; + + case 2: + map->pixel_mode = FT_PIXEL_MODE_GRAY2; + map->pitch = (int)( ( map->width + 3 ) >> 2 ); + map->num_grays = 4; + break; + + case 4: + map->pixel_mode = FT_PIXEL_MODE_GRAY4; + map->pitch = (int)( ( map->width + 1 ) >> 1 ); + map->num_grays = 16; + break; + + case 8: + map->pixel_mode = FT_PIXEL_MODE_GRAY; + map->pitch = (int)( map->width ); + map->num_grays = 256; + break; + + case 32: + map->pixel_mode = FT_PIXEL_MODE_BGRA; + map->pitch = (int)( map->width * 4 ); + map->num_grays = 256; + break; + + default: + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + size = map->rows * (FT_ULong)map->pitch; + + /* check that there is no empty image */ + if ( size == 0 ) + goto Exit; /* exit successfully! */ + + if ( metrics_only ) + goto Exit; /* only metrics are requested */ + + error = ft_glyphslot_alloc_bitmap( decoder->face->root.glyph, size ); + if ( error ) + goto Exit; + + decoder->bitmap_allocated = 1; + + Exit: + return error; + } + + + static FT_Error + tt_sbit_decoder_load_metrics( TT_SBitDecoder decoder, + FT_Byte* *pp, + FT_Byte* limit, + FT_Bool big ) + { + FT_Byte* p = *pp; + TT_SBit_Metrics metrics = decoder->metrics; + + + if ( p + 5 > limit ) + goto Fail; + + metrics->height = p[0]; + metrics->width = p[1]; + metrics->horiBearingX = (FT_Char)p[2]; + metrics->horiBearingY = (FT_Char)p[3]; + metrics->horiAdvance = p[4]; + + p += 5; + if ( big ) + { + if ( p + 3 > limit ) + goto Fail; + + metrics->vertBearingX = (FT_Char)p[0]; + metrics->vertBearingY = (FT_Char)p[1]; + metrics->vertAdvance = p[2]; + + p += 3; + } + else + { + /* avoid uninitialized data in case there is no vertical info -- */ + metrics->vertBearingX = 0; + metrics->vertBearingY = 0; + metrics->vertAdvance = 0; + } + + decoder->metrics_loaded = 1; + *pp = p; + return FT_Err_Ok; + + Fail: + FT_TRACE1(( "tt_sbit_decoder_load_metrics: broken table\n" )); + return FT_THROW( Invalid_Argument ); + } + + + /* forward declaration */ + static FT_Error + tt_sbit_decoder_load_image( TT_SBitDecoder decoder, + FT_UInt glyph_index, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count, + FT_Bool metrics_only ); + + typedef FT_Error (*TT_SBitDecoder_LoadFunc)( + TT_SBitDecoder decoder, + FT_Byte* p, + FT_Byte* plimit, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count ); + + + static FT_Error + tt_sbit_decoder_load_byte_aligned( TT_SBitDecoder decoder, + FT_Byte* p, + FT_Byte* limit, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count ) + { + FT_Error error = FT_Err_Ok; + FT_Byte* line; + FT_Int pitch, width, height, line_bits, h; + FT_UInt bit_height, bit_width; + FT_Bitmap* bitmap; + + FT_UNUSED( recurse_count ); + + + /* check that we can write the glyph into the bitmap */ + bitmap = decoder->bitmap; + bit_width = bitmap->width; + bit_height = bitmap->rows; + pitch = bitmap->pitch; + line = bitmap->buffer; + + if ( !line ) + goto Exit; + + width = decoder->metrics->width; + height = decoder->metrics->height; + + line_bits = width * decoder->bit_depth; + + if ( x_pos < 0 || (FT_UInt)( x_pos + width ) > bit_width || + y_pos < 0 || (FT_UInt)( y_pos + height ) > bit_height ) + { + FT_TRACE1(( "tt_sbit_decoder_load_byte_aligned:" + " invalid bitmap dimensions\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + if ( p + ( ( line_bits + 7 ) >> 3 ) * height > limit ) + { + FT_TRACE1(( "tt_sbit_decoder_load_byte_aligned: broken bitmap\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + /* now do the blit */ + line += y_pos * pitch + ( x_pos >> 3 ); + x_pos &= 7; + + if ( x_pos == 0 ) /* the easy one */ + { + for ( h = height; h > 0; h--, line += pitch ) + { + FT_Byte* pwrite = line; + FT_Int w; + + + for ( w = line_bits; w >= 8; w -= 8 ) + { + pwrite[0] = (FT_Byte)( pwrite[0] | *p++ ); + pwrite += 1; + } + + if ( w > 0 ) + pwrite[0] = (FT_Byte)( pwrite[0] | ( *p++ & ( 0xFF00U >> w ) ) ); + } + } + else /* x_pos > 0 */ + { + for ( h = height; h > 0; h--, line += pitch ) + { + FT_Byte* pwrite = line; + FT_Int w; + FT_UInt wval = 0; + + + for ( w = line_bits; w >= 8; w -= 8 ) + { + wval = (FT_UInt)( wval | *p++ ); + pwrite[0] = (FT_Byte)( pwrite[0] | ( wval >> x_pos ) ); + pwrite += 1; + wval <<= 8; + } + + if ( w > 0 ) + wval = (FT_UInt)( wval | ( *p++ & ( 0xFF00U >> w ) ) ); + + /* all bits read and there are `x_pos + w' bits to be written */ + + pwrite[0] = (FT_Byte)( pwrite[0] | ( wval >> x_pos ) ); + + if ( x_pos + w > 8 ) + { + pwrite++; + wval <<= 8; + pwrite[0] = (FT_Byte)( pwrite[0] | ( wval >> x_pos ) ); + } + } + } + + Exit: + if ( !error ) + FT_TRACE3(( "tt_sbit_decoder_load_byte_aligned: loaded\n" )); + return error; + } + + + /* + * Load a bit-aligned bitmap (with pointer `p') into a line-aligned bitmap + * (with pointer `pwrite'). In the example below, the width is 3 pixel, + * and `x_pos' is 1 pixel. + * + * p p+1 + * | | | + * | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 |... + * | | | + * +-------+ +-------+ +-------+ ... + * . . . + * . . . + * v . . + * +-------+ . . + * | | . + * | 7 6 5 4 3 2 1 0 | . + * | | . + * pwrite . . + * . . + * v . + * +-------+ . + * | | + * | 7 6 5 4 3 2 1 0 | + * | | + * pwrite+1 . + * . + * v + * +-------+ + * | | + * | 7 6 5 4 3 2 1 0 | + * | | + * pwrite+2 + * + */ + + static FT_Error + tt_sbit_decoder_load_bit_aligned( TT_SBitDecoder decoder, + FT_Byte* p, + FT_Byte* limit, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count ) + { + FT_Error error = FT_Err_Ok; + FT_Byte* line; + FT_Int pitch, width, height, line_bits, h, nbits; + FT_UInt bit_height, bit_width; + FT_Bitmap* bitmap; + FT_UShort rval; + + FT_UNUSED( recurse_count ); + + + /* check that we can write the glyph into the bitmap */ + bitmap = decoder->bitmap; + bit_width = bitmap->width; + bit_height = bitmap->rows; + pitch = bitmap->pitch; + line = bitmap->buffer; + + width = decoder->metrics->width; + height = decoder->metrics->height; + + line_bits = width * decoder->bit_depth; + + if ( x_pos < 0 || (FT_UInt)( x_pos + width ) > bit_width || + y_pos < 0 || (FT_UInt)( y_pos + height ) > bit_height ) + { + FT_TRACE1(( "tt_sbit_decoder_load_bit_aligned:" + " invalid bitmap dimensions\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + if ( p + ( ( line_bits * height + 7 ) >> 3 ) > limit ) + { + FT_TRACE1(( "tt_sbit_decoder_load_bit_aligned: broken bitmap\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + if ( !line_bits || !height ) + { + /* nothing to do */ + goto Exit; + } + + /* now do the blit */ + + /* adjust `line' to point to the first byte of the bitmap */ + line += y_pos * pitch + ( x_pos >> 3 ); + x_pos &= 7; + + /* the higher byte of `rval' is used as a buffer */ + rval = 0; + nbits = 0; + + for ( h = height; h > 0; h--, line += pitch ) + { + FT_Byte* pwrite = line; + FT_Int w = line_bits; + + + /* handle initial byte (in target bitmap) specially if necessary */ + if ( x_pos ) + { + w = ( line_bits < 8 - x_pos ) ? line_bits : 8 - x_pos; + + if ( h == height ) + { + rval = *p++; + nbits = x_pos; + } + else if ( nbits < w ) + { + if ( p < limit ) + rval |= *p++; + nbits += 8 - w; + } + else + { + rval >>= 8; + nbits -= w; + } + + *pwrite++ |= ( ( rval >> nbits ) & 0xFF ) & + ( ~( 0xFFU << w ) << ( 8 - w - x_pos ) ); + rval <<= 8; + + w = line_bits - w; + } + + /* handle medial bytes */ + for ( ; w >= 8; w -= 8 ) + { + rval |= *p++; + *pwrite++ |= ( rval >> nbits ) & 0xFF; + + rval <<= 8; + } + + /* handle final byte if necessary */ + if ( w > 0 ) + { + if ( nbits < w ) + { + if ( p < limit ) + rval |= *p++; + *pwrite |= ( ( rval >> nbits ) & 0xFF ) & ( 0xFF00U >> w ); + nbits += 8 - w; + + rval <<= 8; + } + else + { + *pwrite |= ( ( rval >> nbits ) & 0xFF ) & ( 0xFF00U >> w ); + nbits -= w; + } + } + } + + Exit: + if ( !error ) + FT_TRACE3(( "tt_sbit_decoder_load_bit_aligned: loaded\n" )); + return error; + } + + + static FT_Error + tt_sbit_decoder_load_compound( TT_SBitDecoder decoder, + FT_Byte* p, + FT_Byte* limit, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count ) + { + FT_Error error = FT_Err_Ok; + FT_UInt num_components, nn; + + FT_Char horiBearingX = (FT_Char)decoder->metrics->horiBearingX; + FT_Char horiBearingY = (FT_Char)decoder->metrics->horiBearingY; + FT_Byte horiAdvance = (FT_Byte)decoder->metrics->horiAdvance; + FT_Char vertBearingX = (FT_Char)decoder->metrics->vertBearingX; + FT_Char vertBearingY = (FT_Char)decoder->metrics->vertBearingY; + FT_Byte vertAdvance = (FT_Byte)decoder->metrics->vertAdvance; + + + if ( p + 2 > limit ) + goto Fail; + + num_components = FT_NEXT_USHORT( p ); + if ( p + 4 * num_components > limit ) + { + FT_TRACE1(( "tt_sbit_decoder_load_compound: broken table\n" )); + goto Fail; + } + + FT_TRACE3(( "tt_sbit_decoder_load_compound: loading %d component%s\n", + num_components, + num_components == 1 ? "" : "s" )); + + for ( nn = 0; nn < num_components; nn++ ) + { + FT_UInt gindex = FT_NEXT_USHORT( p ); + FT_Char dx = FT_NEXT_CHAR( p ); + FT_Char dy = FT_NEXT_CHAR( p ); + + + /* NB: a recursive call */ + error = tt_sbit_decoder_load_image( decoder, + gindex, + x_pos + dx, + y_pos + dy, + recurse_count + 1, + /* request full bitmap image */ + FALSE ); + if ( error ) + break; + } + + FT_TRACE3(( "tt_sbit_decoder_load_compound: done\n" )); + + decoder->metrics->horiBearingX = horiBearingX; + decoder->metrics->horiBearingY = horiBearingY; + decoder->metrics->horiAdvance = horiAdvance; + decoder->metrics->vertBearingX = vertBearingX; + decoder->metrics->vertBearingY = vertBearingY; + decoder->metrics->vertAdvance = vertAdvance; + decoder->metrics->width = (FT_Byte)decoder->bitmap->width; + decoder->metrics->height = (FT_Byte)decoder->bitmap->rows; + + Exit: + return error; + + Fail: + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + +#ifdef FT_CONFIG_OPTION_USE_PNG + + static FT_Error + tt_sbit_decoder_load_png( TT_SBitDecoder decoder, + FT_Byte* p, + FT_Byte* limit, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count ) + { + FT_Error error = FT_Err_Ok; + FT_ULong png_len; + + FT_UNUSED( recurse_count ); + + + if ( limit - p < 4 ) + { + FT_TRACE1(( "tt_sbit_decoder_load_png: broken bitmap\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + png_len = FT_NEXT_ULONG( p ); + if ( (FT_ULong)( limit - p ) < png_len ) + { + FT_TRACE1(( "tt_sbit_decoder_load_png: broken bitmap\n" )); + error = FT_THROW( Invalid_File_Format ); + goto Exit; + } + + error = Load_SBit_Png( decoder->face->root.glyph, + x_pos, + y_pos, + decoder->bit_depth, + decoder->metrics, + decoder->stream->memory, + p, + png_len, + FALSE, + FALSE ); + + Exit: + if ( !error ) + FT_TRACE3(( "tt_sbit_decoder_load_png: loaded\n" )); + return error; + } + +#endif /* FT_CONFIG_OPTION_USE_PNG */ + + + static FT_Error + tt_sbit_decoder_load_bitmap( TT_SBitDecoder decoder, + FT_UInt glyph_format, + FT_ULong glyph_start, + FT_ULong glyph_size, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count, + FT_Bool metrics_only ) + { + FT_Error error; + FT_Stream stream = decoder->stream; + FT_Byte* p; + FT_Byte* p_limit; + FT_Byte* data; + + + /* seek into the EBDT table now */ + if ( !glyph_size || + glyph_start + glyph_size > decoder->ebdt_size ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + if ( FT_STREAM_SEEK( decoder->ebdt_start + glyph_start ) || + FT_FRAME_EXTRACT( glyph_size, data ) ) + goto Exit; + + p = data; + p_limit = p + glyph_size; + + /* read the data, depending on the glyph format */ + switch ( glyph_format ) + { + case 1: + case 2: + case 8: + case 17: + error = tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 0 ); + break; + + case 6: + case 7: + case 9: + case 18: + error = tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 1 ); + break; + + default: + error = FT_Err_Ok; + } + + if ( error ) + goto Fail; + + { + TT_SBitDecoder_LoadFunc loader; + + + switch ( glyph_format ) + { + case 1: + case 6: + loader = tt_sbit_decoder_load_byte_aligned; + break; + + case 2: + case 7: + { + /* Don't trust `glyph_format'. For example, Apple's main Korean */ + /* system font, `AppleMyungJo.ttf' (version 7.0d2e6), uses glyph */ + /* format 7, but the data is format 6. We check whether we have */ + /* an excessive number of bytes in the image: If it is equal to */ + /* the value for a byte-aligned glyph, use the other loading */ + /* routine. */ + /* */ + /* Note that for some (width,height) combinations, where the */ + /* width is not a multiple of 8, the sizes for bit- and */ + /* byte-aligned data are equal, for example (7,7) or (15,6). We */ + /* then prefer what `glyph_format' specifies. */ + + FT_UInt width = decoder->metrics->width; + FT_UInt height = decoder->metrics->height; + + FT_UInt bit_size = ( width * height + 7 ) >> 3; + FT_UInt byte_size = height * ( ( width + 7 ) >> 3 ); + + + if ( bit_size < byte_size && + byte_size == (FT_UInt)( p_limit - p ) ) + loader = tt_sbit_decoder_load_byte_aligned; + else + loader = tt_sbit_decoder_load_bit_aligned; + } + break; + + case 5: + loader = tt_sbit_decoder_load_bit_aligned; + break; + + case 8: + if ( p + 1 > p_limit ) + goto Fail; + + p += 1; /* skip padding */ + FALL_THROUGH; + + case 9: + loader = tt_sbit_decoder_load_compound; + break; + + case 17: /* small metrics, PNG image data */ + case 18: /* big metrics, PNG image data */ + case 19: /* metrics in EBLC, PNG image data */ +#ifdef FT_CONFIG_OPTION_USE_PNG + loader = tt_sbit_decoder_load_png; + break; +#else + error = FT_THROW( Unimplemented_Feature ); + goto Fail; +#endif /* FT_CONFIG_OPTION_USE_PNG */ + + default: + error = FT_THROW( Invalid_Table ); + goto Fail; + } + + if ( !decoder->bitmap_allocated ) + { + error = tt_sbit_decoder_alloc_bitmap( decoder, metrics_only ); + + if ( error ) + goto Fail; + } + + if ( metrics_only ) + goto Fail; /* this is not an error */ + + error = loader( decoder, p, p_limit, x_pos, y_pos, recurse_count ); + } + + Fail: + FT_FRAME_RELEASE( data ); + + Exit: + return error; + } + + + static FT_Error + tt_sbit_decoder_load_image( TT_SBitDecoder decoder, + FT_UInt glyph_index, + FT_Int x_pos, + FT_Int y_pos, + FT_UInt recurse_count, + FT_Bool metrics_only ) + { + FT_Byte* p = decoder->eblc_base + decoder->strike_index_array; + FT_Byte* p_limit = decoder->eblc_limit; + FT_ULong num_ranges = decoder->strike_index_count; + FT_UInt start, end, index_format, image_format; + FT_ULong image_start = 0, image_end = 0, image_offset; + + + /* arbitrary recursion limit */ + if ( recurse_count > 100 ) + { + FT_TRACE4(( "tt_sbit_decoder_load_image:" + " recursion depth exceeded\n" )); + goto Failure; + } + + + /* First, we find the correct strike range that applies to this */ + /* glyph index. */ + for ( ; num_ranges > 0; num_ranges-- ) + { + start = FT_NEXT_USHORT( p ); + end = FT_NEXT_USHORT( p ); + + if ( glyph_index >= start && glyph_index <= end ) + goto FoundRange; + + p += 4; /* ignore index offset */ + } + goto NoBitmap; + + FoundRange: + image_offset = FT_NEXT_ULONG( p ); + + /* overflow check */ + p = decoder->eblc_base + decoder->strike_index_array; + if ( image_offset > (FT_ULong)( p_limit - p ) ) + goto Failure; + + p += image_offset; + if ( p + 8 > p_limit ) + goto NoBitmap; + + /* now find the glyph's location and extend within the ebdt table */ + index_format = FT_NEXT_USHORT( p ); + image_format = FT_NEXT_USHORT( p ); + image_offset = FT_NEXT_ULONG ( p ); + + switch ( index_format ) + { + case 1: /* 4-byte offsets relative to `image_offset' */ + p += 4 * ( glyph_index - start ); + if ( p + 8 > p_limit ) + goto NoBitmap; + + image_start = FT_NEXT_ULONG( p ); + image_end = FT_NEXT_ULONG( p ); + + if ( image_start == image_end ) /* missing glyph */ + goto NoBitmap; + break; + + case 2: /* big metrics, constant image size */ + { + FT_ULong image_size; + + + if ( p + 12 > p_limit ) + goto NoBitmap; + + image_size = FT_NEXT_ULONG( p ); + + if ( tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 1 ) ) + goto NoBitmap; + + image_start = image_size * ( glyph_index - start ); + image_end = image_start + image_size; + } + break; + + case 3: /* 2-byte offsets relative to 'image_offset' */ + p += 2 * ( glyph_index - start ); + if ( p + 4 > p_limit ) + goto NoBitmap; + + image_start = FT_NEXT_USHORT( p ); + image_end = FT_NEXT_USHORT( p ); + + if ( image_start == image_end ) /* missing glyph */ + goto NoBitmap; + break; + + case 4: /* sparse glyph array with (glyph,offset) pairs */ + { + FT_ULong mm, num_glyphs; + + + if ( p + 4 > p_limit ) + goto NoBitmap; + + num_glyphs = FT_NEXT_ULONG( p ); + + /* overflow check for p + ( num_glyphs + 1 ) * 4 */ + if ( p + 4 > p_limit || + num_glyphs > (FT_ULong)( ( ( p_limit - p ) >> 2 ) - 1 ) ) + goto NoBitmap; + + for ( mm = 0; mm < num_glyphs; mm++ ) + { + FT_UInt gindex = FT_NEXT_USHORT( p ); + + + if ( gindex == glyph_index ) + { + image_start = FT_NEXT_USHORT( p ); + p += 2; + image_end = FT_PEEK_USHORT( p ); + break; + } + p += 2; + } + + if ( mm >= num_glyphs ) + goto NoBitmap; + } + break; + + case 5: /* constant metrics with sparse glyph codes */ + case 19: + { + FT_ULong image_size, mm, num_glyphs; + + + if ( p + 16 > p_limit ) + goto NoBitmap; + + image_size = FT_NEXT_ULONG( p ); + + if ( tt_sbit_decoder_load_metrics( decoder, &p, p_limit, 1 ) ) + goto NoBitmap; + + num_glyphs = FT_NEXT_ULONG( p ); + + /* overflow check for p + 2 * num_glyphs */ + if ( num_glyphs > (FT_ULong)( ( p_limit - p ) >> 1 ) ) + goto NoBitmap; + + for ( mm = 0; mm < num_glyphs; mm++ ) + { + FT_UInt gindex = FT_NEXT_USHORT( p ); + + + if ( gindex == glyph_index ) + break; + } + + if ( mm >= num_glyphs ) + goto NoBitmap; + + image_start = image_size * mm; + image_end = image_start + image_size; + } + break; + + default: + goto NoBitmap; + } + + if ( image_start > image_end ) + goto NoBitmap; + + image_end -= image_start; + image_start = image_offset + image_start; + + FT_TRACE3(( "tt_sbit_decoder_load_image:" + " found sbit (format %d) for glyph index %d\n", + image_format, glyph_index )); + + return tt_sbit_decoder_load_bitmap( decoder, + image_format, + image_start, + image_end, + x_pos, + y_pos, + recurse_count, + metrics_only ); + + Failure: + return FT_THROW( Invalid_Table ); + + NoBitmap: + if ( recurse_count ) + { + FT_TRACE4(( "tt_sbit_decoder_load_image:" + " missing subglyph sbit with glyph index %d\n", + glyph_index )); + return FT_THROW( Invalid_Composite ); + } + + FT_TRACE4(( "tt_sbit_decoder_load_image:" + " no sbit found for glyph index %d\n", glyph_index )); + return FT_THROW( Missing_Bitmap ); + } + + + static FT_Error + tt_face_load_sbix_image( TT_Face face, + FT_ULong strike_index, + FT_UInt glyph_index, + FT_Stream stream, + FT_Bitmap *map, + TT_SBit_MetricsRec *metrics, + FT_Bool metrics_only ) + { + FT_UInt strike_offset, glyph_start, glyph_end; + FT_Int originOffsetX, originOffsetY; + FT_Tag graphicType; + FT_Int recurse_depth = 0; + + FT_Error error; + FT_Byte* p; + + FT_UNUSED( map ); +#ifndef FT_CONFIG_OPTION_USE_PNG + FT_UNUSED( metrics_only ); +#endif + + + strike_index = face->sbit_strike_map[strike_index]; + + metrics->width = 0; + metrics->height = 0; + + p = face->sbit_table + 8 + 4 * strike_index; + strike_offset = FT_NEXT_ULONG( p ); + + retry: + if ( glyph_index > (FT_UInt)face->root.num_glyphs ) + return FT_THROW( Invalid_Argument ); + + if ( strike_offset >= face->ebdt_size || + face->ebdt_size - strike_offset < 4 + glyph_index * 4 + 8 ) + return FT_THROW( Invalid_File_Format ); + + if ( FT_STREAM_SEEK( face->ebdt_start + + strike_offset + 4 + + glyph_index * 4 ) || + FT_FRAME_ENTER( 8 ) ) + return error; + + glyph_start = FT_GET_ULONG(); + glyph_end = FT_GET_ULONG(); + + FT_FRAME_EXIT(); + + if ( glyph_start == glyph_end ) + return FT_THROW( Missing_Bitmap ); + if ( glyph_start > glyph_end || + glyph_end - glyph_start < 8 || + face->ebdt_size - strike_offset < glyph_end ) + return FT_THROW( Invalid_File_Format ); + + if ( FT_STREAM_SEEK( face->ebdt_start + strike_offset + glyph_start ) || + FT_FRAME_ENTER( glyph_end - glyph_start ) ) + return error; + + originOffsetX = FT_GET_SHORT(); + originOffsetY = FT_GET_SHORT(); + + graphicType = FT_GET_TAG4(); + + switch ( graphicType ) + { + case FT_MAKE_TAG( 'd', 'u', 'p', 'e' ): + if ( recurse_depth < 4 ) + { + glyph_index = FT_GET_USHORT(); + FT_FRAME_EXIT(); + recurse_depth++; + goto retry; + } + error = FT_THROW( Invalid_File_Format ); + break; + + case FT_MAKE_TAG( 'p', 'n', 'g', ' ' ): +#ifdef FT_CONFIG_OPTION_USE_PNG + error = Load_SBit_Png( face->root.glyph, + 0, + 0, + 32, + metrics, + stream->memory, + stream->cursor, + glyph_end - glyph_start - 8, + TRUE, + metrics_only ); +#else + error = FT_THROW( Unimplemented_Feature ); +#endif + break; + + case FT_MAKE_TAG( 'j', 'p', 'g', ' ' ): + case FT_MAKE_TAG( 't', 'i', 'f', 'f' ): + case FT_MAKE_TAG( 'r', 'g', 'b', 'l' ): /* used on iOS 7.1 */ + error = FT_THROW( Unknown_File_Format ); + break; + + default: + error = FT_THROW( Unimplemented_Feature ); + break; + } + + FT_FRAME_EXIT(); + + if ( !error ) + { + FT_Short abearing; /* not used here */ + FT_UShort aadvance; + + + tt_face_get_metrics( face, FALSE, glyph_index, &abearing, &aadvance ); + + metrics->horiBearingX = (FT_Short)originOffsetX; + metrics->vertBearingX = (FT_Short)originOffsetX; + + metrics->horiBearingY = (FT_Short)( originOffsetY + metrics->height ); + metrics->vertBearingY = (FT_Short)originOffsetY; + + metrics->horiAdvance = (FT_UShort)( aadvance * + face->root.size->metrics.x_ppem / + face->header.Units_Per_EM ); + + if ( face->vertical_info ) + tt_face_get_metrics( face, TRUE, glyph_index, &abearing, &aadvance ); + else if ( face->os2.version != 0xFFFFU ) + aadvance = (FT_UShort)FT_ABS( face->os2.sTypoAscender - + face->os2.sTypoDescender ); + else + aadvance = (FT_UShort)FT_ABS( face->horizontal.Ascender - + face->horizontal.Descender ); + + metrics->vertAdvance = (FT_UShort)( aadvance * + face->root.size->metrics.x_ppem / + face->header.Units_Per_EM ); + } + + return error; + } + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_sbit_image( TT_Face face, + FT_ULong strike_index, + FT_UInt glyph_index, + FT_UInt load_flags, + FT_Stream stream, + FT_Bitmap *map, + TT_SBit_MetricsRec *metrics ) + { + FT_Error error = FT_Err_Ok; + + + switch ( (FT_UInt)face->sbit_table_type ) + { + case TT_SBIT_TABLE_TYPE_EBLC: + case TT_SBIT_TABLE_TYPE_CBLC: + { + TT_SBitDecoderRec decoder[1]; + + + error = tt_sbit_decoder_init( decoder, face, strike_index, metrics ); + if ( !error ) + { + error = tt_sbit_decoder_load_image( + decoder, + glyph_index, + 0, + 0, + 0, + ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 ); + tt_sbit_decoder_done( decoder ); + } + } + break; + + case TT_SBIT_TABLE_TYPE_SBIX: + error = tt_face_load_sbix_image( + face, + strike_index, + glyph_index, + stream, + map, + metrics, + ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 ); + break; + + default: + error = FT_THROW( Unknown_File_Format ); + break; + } + + /* Flatten color bitmaps if color was not requested. */ + if ( !error && + !( load_flags & FT_LOAD_COLOR ) && + !( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) && + map->pixel_mode == FT_PIXEL_MODE_BGRA ) + { + FT_Bitmap new_map; + FT_Library library = face->root.glyph->library; + + + FT_Bitmap_Init( &new_map ); + + /* Convert to 8bit grayscale. */ + error = FT_Bitmap_Convert( library, map, &new_map, 1 ); + if ( error ) + FT_Bitmap_Done( library, &new_map ); + else + { + map->pixel_mode = new_map.pixel_mode; + map->pitch = new_map.pitch; + map->num_grays = new_map.num_grays; + + ft_glyphslot_set_bitmap( face->root.glyph, new_map.buffer ); + face->root.glyph->internal->flags |= FT_GLYPH_OWN_BITMAP; + } + } + + return error; + } + +#else /* !TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_sbit_dummy_; + +#endif /* !TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttsbit.h b/non-source/foreign/freetype2/src/sfnt/ttsbit.h new file mode 100644 index 000000000..96f80a584 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttsbit.h @@ -0,0 +1,62 @@ +/**************************************************************************** + * + * ttsbit.h + * + * TrueType and OpenType embedded bitmap support (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTSBIT_H_ +#define TTSBIT_H_ + + +#include "ttload.h" + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + tt_face_load_sbit( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( void ) + tt_face_free_sbit( TT_Face face ); + + + FT_LOCAL( FT_Error ) + tt_face_set_sbit_strike( TT_Face face, + FT_Size_Request req, + FT_ULong* astrike_index ); + + FT_LOCAL( FT_Error ) + tt_face_load_strike_metrics( TT_Face face, + FT_ULong strike_index, + FT_Size_Metrics* metrics ); + + FT_LOCAL( FT_Error ) + tt_face_load_sbit_image( TT_Face face, + FT_ULong strike_index, + FT_UInt glyph_index, + FT_UInt load_flags, + FT_Stream stream, + FT_Bitmap *map, + TT_SBit_MetricsRec *metrics ); + + +FT_END_HEADER + +#endif /* TTSBIT_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttsvg.c b/non-source/foreign/freetype2/src/sfnt/ttsvg.c new file mode 100644 index 000000000..298afd8b5 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttsvg.c @@ -0,0 +1,413 @@ +/**************************************************************************** + * + * ttsvg.c + * + * OpenType SVG Color (specification). + * + * Copyright (C) 2022-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * 'SVG' table specification: + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/svg + * + */ + +#include <ft2build.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/tttags.h> +#include <freetype/ftgzip.h> +#include <freetype/otsvg.h> + + +#ifdef FT_CONFIG_OPTION_SVG + +#include "ttsvg.h" + + + /* NOTE: These table sizes are given by the specification. */ +#define SVG_TABLE_HEADER_SIZE (10U) +#define SVG_DOCUMENT_RECORD_SIZE (12U) +#define SVG_DOCUMENT_LIST_MINIMUM_SIZE (2U + SVG_DOCUMENT_RECORD_SIZE) +#define SVG_MINIMUM_SIZE (SVG_TABLE_HEADER_SIZE + \ + SVG_DOCUMENT_LIST_MINIMUM_SIZE) + + + typedef struct Svg_ + { + FT_UShort version; /* table version (starting at 0) */ + FT_UShort num_entries; /* number of SVG document records */ + + FT_Byte* svg_doc_list; /* pointer to the start of SVG Document List */ + + void* table; /* memory that backs up SVG */ + FT_ULong table_size; + + } Svg; + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, usued to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttsvg + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_svg( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_Memory memory = face->root.memory; + + FT_ULong table_size; + FT_Byte* table = NULL; + FT_Byte* p = NULL; + Svg* svg = NULL; + FT_ULong offsetToSVGDocumentList; + + + error = face->goto_table( face, TTAG_SVG, stream, &table_size ); + if ( error ) + goto NoSVG; + + if ( table_size < SVG_MINIMUM_SIZE ) + goto InvalidTable; + + if ( FT_FRAME_EXTRACT( table_size, table ) ) + goto NoSVG; + + /* Allocate memory for the SVG object */ + if ( FT_NEW( svg ) ) + goto NoSVG; + + p = table; + svg->version = FT_NEXT_USHORT( p ); + offsetToSVGDocumentList = FT_NEXT_ULONG( p ); + + if ( offsetToSVGDocumentList < SVG_TABLE_HEADER_SIZE || + offsetToSVGDocumentList > table_size - + SVG_DOCUMENT_LIST_MINIMUM_SIZE ) + goto InvalidTable; + + svg->svg_doc_list = (FT_Byte*)( table + offsetToSVGDocumentList ); + + p = svg->svg_doc_list; + svg->num_entries = FT_NEXT_USHORT( p ); + + FT_TRACE3(( "version: %d\n", svg->version )); + FT_TRACE3(( "number of entries: %d\n", svg->num_entries )); + + if ( offsetToSVGDocumentList + 2U + + svg->num_entries * SVG_DOCUMENT_RECORD_SIZE > table_size ) + goto InvalidTable; + + svg->table = table; + svg->table_size = table_size; + + face->svg = svg; + face->root.face_flags |= FT_FACE_FLAG_SVG; + + return FT_Err_Ok; + + InvalidTable: + error = FT_THROW( Invalid_Table ); + + NoSVG: + FT_FRAME_RELEASE( table ); + FT_FREE( svg ); + face->svg = NULL; + + return error; + } + + + FT_LOCAL_DEF( void ) + tt_face_free_svg( TT_Face face ) + { + FT_Memory memory = face->root.memory; + FT_Stream stream = face->root.stream; + + Svg* svg = (Svg*)face->svg; + + + if ( svg ) + { + FT_FRAME_RELEASE( svg->table ); + FT_FREE( svg ); + } + } + + + typedef struct Svg_doc_ + { + FT_UShort start_glyph_id; + FT_UShort end_glyph_id; + + FT_ULong offset; + FT_ULong length; + + } Svg_doc; + + + static Svg_doc + extract_svg_doc( FT_Byte* stream ) + { + Svg_doc doc; + + + doc.start_glyph_id = FT_NEXT_USHORT( stream ); + doc.end_glyph_id = FT_NEXT_USHORT( stream ); + + doc.offset = FT_NEXT_ULONG( stream ); + doc.length = FT_NEXT_ULONG( stream ); + + return doc; + } + + + static FT_Int + compare_svg_doc( Svg_doc doc, + FT_UInt glyph_index ) + { + if ( glyph_index < doc.start_glyph_id ) + return -1; + else if ( glyph_index > doc.end_glyph_id ) + return 1; + else + return 0; + } + + + static FT_Error + find_doc( FT_Byte* document_records, + FT_UShort num_entries, + FT_UInt glyph_index, + FT_ULong *doc_offset, + FT_ULong *doc_length, + FT_UShort *start_glyph, + FT_UShort *end_glyph ) + { + FT_Error error; + + Svg_doc start_doc; + Svg_doc mid_doc = { 0, 0, 0, 0 }; /* pacify compiler */ + Svg_doc end_doc; + + FT_Bool found = FALSE; + FT_UInt i = 0; + + FT_UInt start_index = 0; + FT_UInt end_index = num_entries - 1; + FT_Int comp_res; + + + /* search algorithm */ + if ( num_entries == 0 ) + { + error = FT_THROW( Invalid_Table ); + return error; + } + + start_doc = extract_svg_doc( document_records + start_index * 12 ); + end_doc = extract_svg_doc( document_records + end_index * 12 ); + + if ( ( compare_svg_doc( start_doc, glyph_index ) == -1 ) || + ( compare_svg_doc( end_doc, glyph_index ) == 1 ) ) + { + error = FT_THROW( Invalid_Glyph_Index ); + return error; + } + + while ( start_index <= end_index ) + { + i = ( start_index + end_index ) / 2; + mid_doc = extract_svg_doc( document_records + i * 12 ); + comp_res = compare_svg_doc( mid_doc, glyph_index ); + + if ( comp_res == 1 ) + { + start_index = i + 1; + start_doc = extract_svg_doc( document_records + start_index * 4 ); + } + else if ( comp_res == -1 ) + { + end_index = i - 1; + end_doc = extract_svg_doc( document_records + end_index * 4 ); + } + else + { + found = TRUE; + break; + } + } + /* search algorithm end */ + + if ( found != TRUE ) + { + FT_TRACE5(( "SVG glyph not found\n" )); + error = FT_THROW( Invalid_Glyph_Index ); + } + else + { + *doc_offset = mid_doc.offset; + *doc_length = mid_doc.length; + + *start_glyph = mid_doc.start_glyph_id; + *end_glyph = mid_doc.end_glyph_id; + + error = FT_Err_Ok; + } + + return error; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_svg_doc( FT_GlyphSlot glyph, + FT_UInt glyph_index ) + { + FT_Error error = FT_Err_Ok; + TT_Face face = (TT_Face)glyph->face; + FT_Memory memory = face->root.memory; + Svg* svg = (Svg*)face->svg; + + FT_Byte* doc_list; + FT_ULong doc_limit; + + FT_Byte* doc; + FT_ULong doc_offset; + FT_ULong doc_length; + FT_UShort doc_start_glyph_id; + FT_UShort doc_end_glyph_id; + + FT_SVG_Document svg_document = (FT_SVG_Document)glyph->other; + + + FT_ASSERT( !( svg == NULL ) ); + + doc_list = svg->svg_doc_list; + + error = find_doc( doc_list + 2, svg->num_entries, glyph_index, + &doc_offset, &doc_length, + &doc_start_glyph_id, &doc_end_glyph_id ); + if ( error != FT_Err_Ok ) + goto Exit; + + doc_limit = svg->table_size - + (FT_ULong)( doc_list - (FT_Byte*)svg->table ); + if ( doc_offset > doc_limit || + doc_length > doc_limit - doc_offset ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + doc = doc_list + doc_offset; + + if ( doc_length > 6 && + doc[0] == 0x1F && + doc[1] == 0x8B && + doc[2] == 0x08 ) + { +#ifdef FT_CONFIG_OPTION_USE_ZLIB + + FT_ULong uncomp_size; + FT_Byte* uncomp_buffer = NULL; + + + /* + * Get the size of the original document. This helps in allotting the + * buffer to accommodate the uncompressed version. The last 4 bytes + * of the compressed document are equal to the original size modulo + * 2^32. Since the size of SVG documents is less than 2^32 bytes we + * can use this accurately. The four bytes are stored in + * little-endian format. + */ + FT_TRACE4(( "SVG document is GZIP compressed\n" )); + uncomp_size = (FT_ULong)doc[doc_length - 1] << 24 | + (FT_ULong)doc[doc_length - 2] << 16 | + (FT_ULong)doc[doc_length - 3] << 8 | + (FT_ULong)doc[doc_length - 4]; + + if ( FT_QALLOC( uncomp_buffer, uncomp_size ) ) + goto Exit; + + error = FT_Gzip_Uncompress( memory, + uncomp_buffer, + &uncomp_size, + doc, + doc_length ); + if ( error ) + { + FT_FREE( uncomp_buffer ); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + glyph->internal->flags |= FT_GLYPH_OWN_GZIP_SVG; + + doc = uncomp_buffer; + doc_length = uncomp_size; + +#else /* !FT_CONFIG_OPTION_USE_ZLIB */ + + error = FT_THROW( Unimplemented_Feature ); + goto Exit; + +#endif /* !FT_CONFIG_OPTION_USE_ZLIB */ + } + + svg_document->svg_document = doc; + svg_document->svg_document_length = doc_length; + + svg_document->metrics = glyph->face->size->metrics; + svg_document->units_per_EM = glyph->face->units_per_EM; + + svg_document->start_glyph_id = doc_start_glyph_id; + svg_document->end_glyph_id = doc_end_glyph_id; + + svg_document->transform.xx = 0x10000; + svg_document->transform.xy = 0; + svg_document->transform.yx = 0; + svg_document->transform.yy = 0x10000; + + svg_document->delta.x = 0; + svg_document->delta.y = 0; + + FT_TRACE5(( "start_glyph_id: %d\n", doc_start_glyph_id )); + FT_TRACE5(( "end_glyph_id: %d\n", doc_end_glyph_id )); + FT_TRACE5(( "svg_document:\n" )); + FT_TRACE5(( " %.*s\n", (FT_UInt)doc_length, doc )); + + glyph->other = svg_document; + + Exit: + return error; + } + +#else /* !FT_CONFIG_OPTION_SVG */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_svg_dummy_; + +#endif /* !FT_CONFIG_OPTION_SVG */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/ttsvg.h b/non-source/foreign/freetype2/src/sfnt/ttsvg.h new file mode 100644 index 000000000..20f9e47c9 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/ttsvg.h @@ -0,0 +1,43 @@ +/**************************************************************************** + * + * ttsvg.h + * + * OpenType SVG Color (specification). + * + * Copyright (C) 2022-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +#ifndef TTSVG_H_ +#define TTSVG_H_ + +#include <freetype/internal/ftstream.h> +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + FT_LOCAL( FT_Error ) + tt_face_load_svg( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( void ) + tt_face_free_svg( TT_Face face ); + + FT_LOCAL( FT_Error ) + tt_face_load_svg_doc( FT_GlyphSlot glyph, + FT_UInt glyph_index ); + +FT_END_HEADER + +#endif /* TTSVG_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/woff2tags.c b/non-source/foreign/freetype2/src/sfnt/woff2tags.c new file mode 100644 index 000000000..532ccfa17 --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/woff2tags.c @@ -0,0 +1,119 @@ +/**************************************************************************** + * + * woff2tags.c + * + * WOFF2 Font table tags (base). + * + * Copyright (C) 2019-2024 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 <freetype/tttags.h> + +#ifdef FT_CONFIG_OPTION_USE_BROTLI + +#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_Tag ) + woff2_known_tags( FT_Byte index ) + { + static const FT_Tag 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]; + } + +#else /* !FT_CONFIG_OPTION_USE_BROTLI */ + + /* ANSI C doesn't like empty source files */ + typedef int woff2tags_dummy_; + +#endif /* !FT_CONFIG_OPTION_USE_BROTLI */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/sfnt/woff2tags.h b/non-source/foreign/freetype2/src/sfnt/woff2tags.h new file mode 100644 index 000000000..d03b4b41b --- /dev/null +++ b/non-source/foreign/freetype2/src/sfnt/woff2tags.h @@ -0,0 +1,41 @@ +/**************************************************************************** + * + * woff2tags.h + * + * WOFF2 Font table tags (specification). + * + * Copyright (C) 2019-2024 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 WOFF2TAGS_H +#define WOFF2TAGS_H + + +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/compiler-macros.h> + + +FT_BEGIN_HEADER + +#ifdef FT_CONFIG_OPTION_USE_BROTLI + + FT_LOCAL( FT_Tag ) + woff2_known_tags( FT_Byte index ); + +#endif + +FT_END_HEADER + +#endif /* WOFF2TAGS_H */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/smooth/ftgrays.c b/non-source/foreign/freetype2/src/smooth/ftgrays.c new file mode 100644 index 000000000..b7c0632a6 --- /dev/null +++ b/non-source/foreign/freetype2/src/smooth/ftgrays.c @@ -0,0 +1,2149 @@ +/**************************************************************************** + * + * ftgrays.c + * + * A new `perfect' anti-aliasing renderer (body). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * This file can be compiled without the rest of the FreeType engine, by + * defining the STANDALONE_ macro when compiling it. You also need to + * put the files `ftgrays.h' and `ftimage.h' into the current + * compilation directory. Typically, you could do something like + * + * - copy `src/smooth/ftgrays.c' (this file) to your current directory + * + * - copy `include/freetype/ftimage.h' and `src/smooth/ftgrays.h' to the + * same directory + * + * - compile `ftgrays' with the STANDALONE_ macro defined, as in + * + * cc -c -DSTANDALONE_ ftgrays.c + * + * The renderer can be initialized with a call to + * `ft_gray_raster.raster_new'; an anti-aliased bitmap can be generated + * with a call to `ft_gray_raster.raster_render'. + * + * See the comments and documentation in the file `ftimage.h' for more + * details on how the raster works. + * + */ + + /************************************************************************** + * + * This is a new anti-aliasing scan-converter for FreeType 2. The + * algorithm used here is _very_ different from the one in the standard + * `ftraster' module. Actually, `ftgrays' computes the _exact_ + * coverage of the outline on each pixel cell by straight segments. + * + * It is based on ideas that I initially found in Raph Levien's + * excellent LibArt graphics library (see https://www.levien.com/libart + * for more information, though the web pages do not tell anything + * about the renderer; you'll have to dive into the source code to + * understand how it works). + * + * Note, however, that this is a _very_ different implementation + * compared to Raph's. Coverage information is stored in a very + * different way, and I don't use sorted vector paths. Also, it doesn't + * use floating point values. + * + * Bézier segments are flattened by splitting them until their deviation + * from straight line becomes much smaller than a pixel. Therefore, the + * pixel coverage by a Bézier curve is calculated approximately. To + * estimate the deviation, we use the distance from the control point + * to the conic chord centre or the cubic chord trisection. These + * distances vanish fast after each split. In the conic case, they vanish + * predictably and the number of necessary splits can be calculated. + * + * This renderer has the following advantages: + * + * - It doesn't need an intermediate bitmap. Instead, one can supply a + * callback function that will be called by the renderer to draw gray + * spans on any target surface. You can thus do direct composition on + * any kind of bitmap, provided that you give the renderer the right + * callback. + * + * - A perfect anti-aliaser, i.e., it computes the _exact_ coverage on + * each pixel cell by straight segments. + * + * - It performs a single pass on the outline (the `standard' FT2 + * renderer makes two passes). + * + * - It can easily be modified to render to _any_ number of gray levels + * cheaply. + * + * - For small (< 80) pixel sizes, it is faster than the standard + * renderer. + * + */ + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT smooth + + +#ifdef STANDALONE_ + + + /* The size in bytes of the render pool used by the scan-line converter */ + /* to do all of its work. */ +#define FT_RENDER_POOL_SIZE 16384L + + + /* Auxiliary macros for token concatenation. */ +#define FT_ERR_XCAT( x, y ) x ## y +#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) + +#define FT_BEGIN_STMNT do { +#define FT_END_STMNT } while ( 0 ) + +#define FT_MIN( a, b ) ( (a) < (b) ? (a) : (b) ) +#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) ) +#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) ) + + + /* + * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min' + * algorithm. We use alpha = 1, beta = 3/8, giving us results with a + * largest error less than 7% compared to the exact value. + */ +#define FT_HYPOT( x, y ) \ + ( x = FT_ABS( x ), \ + y = FT_ABS( y ), \ + x > y ? x + ( 3 * y >> 3 ) \ + : y + ( 3 * x >> 3 ) ) + + + /* define this to dump debugging information */ +/* #define FT_DEBUG_LEVEL_TRACE */ + + +#ifdef FT_DEBUG_LEVEL_TRACE +#include <stdio.h> +#include <stdarg.h> +#endif + +#include <stddef.h> +#include <string.h> +#include <setjmp.h> +#include <limits.h> +#define FT_CHAR_BIT CHAR_BIT +#define FT_UINT_MAX UINT_MAX +#define FT_INT_MAX INT_MAX +#define FT_ULONG_MAX ULONG_MAX + +#define ADD_INT( a, b ) \ + (int)( (unsigned int)(a) + (unsigned int)(b) ) + +#define FT_STATIC_BYTE_CAST( type, var ) (type)(unsigned char)(var) + + +#define ft_memset memset + +#define ft_setjmp setjmp +#define ft_longjmp longjmp +#define ft_jmp_buf jmp_buf + +typedef ptrdiff_t FT_PtrDist; + + +#define Smooth_Err_Ok 0 +#define Smooth_Err_Invalid_Outline -1 +#define Smooth_Err_Cannot_Render_Glyph -2 +#define Smooth_Err_Invalid_Argument -3 +#define Smooth_Err_Raster_Overflow -4 + +#define FT_BEGIN_HEADER +#define FT_END_HEADER + +#include "ftimage.h" +#include "ftgrays.h" + + + /* This macro is used to indicate that a function parameter is unused. */ + /* Its purpose is simply to reduce compiler warnings. Note also that */ + /* simply defining it as `(void)x' doesn't avoid warnings with certain */ + /* ANSI compilers (e.g. LCC). */ +#define FT_UNUSED( x ) (x) = (x) + + + /* we only use level 5 & 7 tracing messages; cf. ftdebug.h */ + +#ifdef FT_DEBUG_LEVEL_TRACE + + void + FT_Message( const char* fmt, + ... ) + { + va_list ap; + + + va_start( ap, fmt ); + vfprintf( stderr, fmt, ap ); + va_end( ap ); + } + + + /* empty function useful for setting a breakpoint to catch errors */ + int + FT_Throw( int error, + int line, + const char* file ) + { + FT_UNUSED( error ); + FT_UNUSED( line ); + FT_UNUSED( file ); + + return 0; + } + + + /* we don't handle tracing levels in stand-alone mode; */ +#ifndef FT_TRACE5 +#define FT_TRACE5( varformat ) FT_Message varformat +#endif +#ifndef FT_TRACE7 +#define FT_TRACE7( varformat ) FT_Message varformat +#endif +#ifndef FT_ERROR +#define FT_ERROR( varformat ) FT_Message varformat +#endif + +#define FT_THROW( e ) \ + ( FT_Throw( FT_ERR_CAT( Smooth_Err_, e ), \ + __LINE__, \ + __FILE__ ) | \ + FT_ERR_CAT( Smooth_Err_, e ) ) + +#else /* !FT_DEBUG_LEVEL_TRACE */ + +#define FT_TRACE5( x ) do { } while ( 0 ) /* nothing */ +#define FT_TRACE7( x ) do { } while ( 0 ) /* nothing */ +#define FT_ERROR( x ) do { } while ( 0 ) /* nothing */ +#define FT_THROW( e ) FT_ERR_CAT( Smooth_Err_, e ) + +#endif /* !FT_DEBUG_LEVEL_TRACE */ + + +#define FT_Trace_Enable() do { } while ( 0 ) /* nothing */ +#define FT_Trace_Disable() do { } while ( 0 ) /* nothing */ + + +#define FT_DEFINE_OUTLINE_FUNCS( class_, \ + move_to_, line_to_, \ + conic_to_, cubic_to_, \ + shift_, delta_ ) \ + static const FT_Outline_Funcs class_ = \ + { \ + move_to_, \ + line_to_, \ + conic_to_, \ + cubic_to_, \ + shift_, \ + delta_ \ + }; + +#define FT_DEFINE_RASTER_FUNCS( class_, glyph_format_, \ + raster_new_, raster_reset_, \ + raster_set_mode_, raster_render_, \ + raster_done_ ) \ + const FT_Raster_Funcs class_ = \ + { \ + glyph_format_, \ + raster_new_, \ + raster_reset_, \ + raster_set_mode_, \ + raster_render_, \ + raster_done_ \ + }; + + +#else /* !STANDALONE_ */ + + +#include <ft2build.h> +#include FT_CONFIG_CONFIG_H +#include "ftgrays.h" +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/ftoutln.h> + +#include "ftsmerrs.h" + + +#endif /* !STANDALONE_ */ + + +#ifndef FT_MEM_SET +#define FT_MEM_SET( d, s, c ) ft_memset( d, s, c ) +#endif + +#ifndef FT_MEM_ZERO +#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count ) +#endif + +#ifndef FT_ZERO +#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) ) +#endif + + /* as usual, for the speed hungry :-) */ + +#undef RAS_ARG +#undef RAS_ARG_ +#undef RAS_VAR +#undef RAS_VAR_ + +#ifndef FT_STATIC_RASTER + +#define RAS_ARG gray_PWorker worker +#define RAS_ARG_ gray_PWorker worker, + +#define RAS_VAR worker +#define RAS_VAR_ worker, + +#else /* FT_STATIC_RASTER */ + +#define RAS_ARG void +#define RAS_ARG_ /* empty */ +#define RAS_VAR /* empty */ +#define RAS_VAR_ /* empty */ + +#endif /* FT_STATIC_RASTER */ + + + /* must be at least 6 bits! */ +#define PIXEL_BITS 8 + +#define ONE_PIXEL ( 1 << PIXEL_BITS ) +#undef TRUNC +#define TRUNC( x ) (TCoord)( (x) >> PIXEL_BITS ) +#undef FRACT +#define FRACT( x ) (TCoord)( (x) & ( ONE_PIXEL - 1 ) ) + +#if PIXEL_BITS >= 6 +#define UPSCALE( x ) ( (x) * ( ONE_PIXEL >> 6 ) ) +#define DOWNSCALE( x ) ( (x) >> ( PIXEL_BITS - 6 ) ) +#else +#define UPSCALE( x ) ( (x) >> ( 6 - PIXEL_BITS ) ) +#define DOWNSCALE( x ) ( (x) * ( 64 >> PIXEL_BITS ) ) +#endif + + + /* Compute `dividend / divisor' and return both its quotient and */ + /* remainder, cast to a specific type. This macro also ensures that */ + /* the remainder is always positive. We use the remainder to keep */ + /* track of accumulating errors and compensate for them. */ +#define FT_DIV_MOD( type, dividend, divisor, quotient, remainder ) \ + FT_BEGIN_STMNT \ + (quotient) = (type)( (dividend) / (divisor) ); \ + (remainder) = (type)( (dividend) % (divisor) ); \ + if ( (remainder) < 0 ) \ + { \ + (quotient)--; \ + (remainder) += (type)(divisor); \ + } \ + FT_END_STMNT + +#if defined( __GNUC__ ) && __GNUC__ < 7 && defined( __arm__ ) + /* Work around a bug specific to GCC which make the compiler fail to */ + /* optimize a division and modulo operation on the same parameters */ + /* into a single call to `__aeabi_idivmod'. See */ + /* */ + /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43721 */ +#undef FT_DIV_MOD +#define FT_DIV_MOD( type, dividend, divisor, quotient, remainder ) \ + FT_BEGIN_STMNT \ + (quotient) = (type)( (dividend) / (divisor) ); \ + (remainder) = (type)( (dividend) - (quotient) * (divisor) ); \ + if ( (remainder) < 0 ) \ + { \ + (quotient)--; \ + (remainder) += (type)(divisor); \ + } \ + FT_END_STMNT +#endif /* __arm__ */ + + + /* Calculating coverages for a slanted line requires a division each */ + /* time the line crosses from cell to cell. These macros speed up */ + /* the repetitive divisions by replacing them with multiplications */ + /* and right shifts so that at most two divisions are performed for */ + /* each slanted line. Nevertheless, these divisions are noticeable */ + /* in the overall performance because flattened curves produce a */ + /* very large number of slanted lines. */ + /* */ + /* The division results here are always within ONE_PIXEL. Therefore */ + /* the shift magnitude should be at least PIXEL_BITS wider than the */ + /* divisors to provide sufficient accuracy of the multiply-shift. */ + /* It should not exceed (64 - PIXEL_BITS) to prevent overflowing and */ + /* leave enough room for 64-bit unsigned multiplication however. */ +#define FT_UDIVPREP( c, b ) \ + FT_Int64 b ## _r = c ? (FT_Int64)0xFFFFFFFF / ( b ) : 0 +#define FT_UDIV( a, b ) \ + (TCoord)( ( (FT_UInt64)( a ) * (FT_UInt64)( b ## _r ) ) >> 32 ) + + + /* Scale area and apply fill rule to calculate the coverage byte. */ + /* The top fill bit is used for the non-zero rule. The eighth */ + /* fill bit is used for the even-odd rule. The higher coverage */ + /* bytes are either clamped for the non-zero-rule or discarded */ + /* later for the even-odd rule. */ +#define FT_FILL_RULE( coverage, area, fill ) \ + FT_BEGIN_STMNT \ + coverage = (int)( area >> ( PIXEL_BITS * 2 + 1 - 8 ) ); \ + if ( coverage & fill ) \ + coverage = ~coverage; \ + if ( coverage > 255 && fill & INT_MIN ) \ + coverage = 255; \ + FT_END_STMNT + + + /* It is faster to write small spans byte-by-byte than calling */ + /* `memset'. This is mainly due to the cost of the function call. */ +#define FT_GRAY_SET( d, s, count ) \ + FT_BEGIN_STMNT \ + unsigned char* q = d; \ + switch ( count ) \ + { \ + case 7: *q++ = (unsigned char)s; FALL_THROUGH; \ + case 6: *q++ = (unsigned char)s; FALL_THROUGH; \ + case 5: *q++ = (unsigned char)s; FALL_THROUGH; \ + case 4: *q++ = (unsigned char)s; FALL_THROUGH; \ + case 3: *q++ = (unsigned char)s; FALL_THROUGH; \ + case 2: *q++ = (unsigned char)s; FALL_THROUGH; \ + case 1: *q = (unsigned char)s; FALL_THROUGH; \ + case 0: break; \ + default: FT_MEM_SET( d, s, count ); \ + } \ + FT_END_STMNT + + + /************************************************************************** + * + * TYPE DEFINITIONS + */ + + /* don't change the following types to FT_Int or FT_Pos, since we might */ + /* need to define them to "float" or "double" when experimenting with */ + /* new algorithms */ + + typedef long TPos; /* subpixel coordinate */ + typedef int TCoord; /* integer scanline/pixel coordinate */ + typedef int TArea; /* cell areas, coordinate products */ + + + typedef struct TCell_* PCell; + + typedef struct TCell_ + { + TCoord x; /* same with gray_TWorker.ex */ + TCoord cover; /* same with gray_TWorker.cover */ + TArea area; + PCell next; + + } TCell; + + typedef struct TPixmap_ + { + unsigned char* origin; /* pixmap origin at the bottom-left */ + int pitch; /* pitch to go down one row */ + + } TPixmap; + + /* maximum number of gray cells in the buffer */ +#if FT_RENDER_POOL_SIZE > 2048 +#define FT_MAX_GRAY_POOL ( FT_RENDER_POOL_SIZE / sizeof ( TCell ) ) +#else +#define FT_MAX_GRAY_POOL ( 2048 / sizeof ( TCell ) ) +#endif + + /* FT_Span buffer size for direct rendering only */ +#define FT_MAX_GRAY_SPANS 16 + + +#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */ + /* We disable the warning `structure was padded due to */ + /* __declspec(align())' in order to compile cleanly with */ + /* the maximum level of warnings. */ +#pragma warning( push ) +#pragma warning( disable : 4324 ) +#endif /* _MSC_VER */ + + typedef struct gray_TWorker_ + { + FT_BBox cbox; + + TCoord min_ex, max_ex; /* min and max integer pixel coordinates */ + TCoord min_ey, max_ey; + TCoord count_ey; /* same as (max_ey - min_ey) */ + + PCell cell; /* current cell */ + PCell cell_free; /* call allocation next free slot */ + PCell cell_null; /* last cell, used as dumpster and limit */ + + PCell* ycells; /* array of cell linked-lists; one per */ + /* vertical coordinate in the current band */ + + TPos x, y; /* last point position */ + + FT_Outline outline; /* input outline */ + TPixmap target; /* target pixmap */ + + FT_Raster_Span_Func render_span; + void* render_span_data; + + ft_jmp_buf jump_buffer; + + } gray_TWorker, *gray_PWorker; + +#if defined( _MSC_VER ) +#pragma warning( pop ) +#endif + +#ifndef FT_STATIC_RASTER +#define ras (*worker) +#else + static gray_TWorker ras; +#endif + + /* The |x| value of the null cell. Must be the largest possible */ + /* integer value stored in a `TCell.x` field. */ +#define CELL_MAX_X_VALUE INT_MAX + + +#define FT_INTEGRATE( ras, a, b ) \ + ras.cell->cover = ADD_INT( ras.cell->cover, a ), \ + ras.cell->area = ADD_INT( ras.cell->area, (a) * (TArea)(b) ) + + + typedef struct gray_TRaster_ + { + void* memory; + + } gray_TRaster, *gray_PRaster; + + +#ifdef FT_DEBUG_LEVEL_TRACE + + /* to be called while in the debugger -- */ + /* this function causes a compiler warning since it is unused otherwise */ + static void + gray_dump_cells( RAS_ARG ) + { + int y; + + + for ( y = ras.min_ey; y < ras.max_ey; y++ ) + { + PCell cell = ras.ycells[y - ras.min_ey]; + + + printf( "%3d:", y ); + + for ( ; cell != ras.cell_null; cell = cell->next ) + printf( " (%3d, c:%4d, a:%6d)", + cell->x, cell->cover, cell->area ); + printf( "\n" ); + } + } + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + + /************************************************************************** + * + * Set the current cell to a new position. + */ + static void + gray_set_cell( RAS_ARG_ TCoord ex, + TCoord ey ) + { + /* Move the cell pointer to a new position in the linked list. We use */ + /* a dumpster null cell for everything outside of the clipping region */ + /* during the render phase. This means that: */ + /* */ + /* . the new vertical position must be within min_ey..max_ey-1. */ + /* . the new horizontal position must be strictly less than max_ex */ + /* */ + /* Note that if a cell is to the left of the clipping region, it is */ + /* actually set to the (min_ex-1) horizontal position. */ + + TCoord ey_index = ey - ras.min_ey; + + + if ( ey_index < 0 || ey_index >= ras.count_ey || ex >= ras.max_ex ) + ras.cell = ras.cell_null; + else + { + PCell* pcell = ras.ycells + ey_index; + PCell cell; + + + ex = FT_MAX( ex, ras.min_ex - 1 ); + + while ( 1 ) + { + cell = *pcell; + + if ( cell->x > ex ) + break; + + if ( cell->x == ex ) + goto Found; + + pcell = &cell->next; + } + + /* insert new cell */ + cell = ras.cell_free++; + if ( cell >= ras.cell_null ) + ft_longjmp( ras.jump_buffer, 1 ); + + cell->x = ex; + cell->area = 0; + cell->cover = 0; + + cell->next = *pcell; + *pcell = cell; + + Found: + ras.cell = cell; + } + } + + +#ifndef FT_INT64 + + /************************************************************************** + * + * Render a scanline as one or more cells. + */ + static void + gray_render_scanline( RAS_ARG_ TCoord ey, + TPos x1, + TCoord y1, + TPos x2, + TCoord y2 ) + { + TCoord ex1, ex2, fx1, fx2, first, dy, delta, mod; + TPos p, dx; + int incr; + + + ex1 = TRUNC( x1 ); + ex2 = TRUNC( x2 ); + + /* trivial case. Happens often */ + if ( y1 == y2 ) + { + gray_set_cell( RAS_VAR_ ex2, ey ); + return; + } + + fx1 = FRACT( x1 ); + fx2 = FRACT( x2 ); + + /* everything is located in a single cell. That is easy! */ + /* */ + if ( ex1 == ex2 ) + goto End; + + /* ok, we'll have to render a run of adjacent cells on the same */ + /* scanline... */ + /* */ + dx = x2 - x1; + dy = y2 - y1; + + if ( dx > 0 ) + { + p = ( ONE_PIXEL - fx1 ) * dy; + first = ONE_PIXEL; + incr = 1; + } + else + { + p = fx1 * dy; + first = 0; + incr = -1; + dx = -dx; + } + + /* 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 ); + + FT_INTEGRATE( ras, delta, fx1 + first ); + y1 += delta; + ex1 += incr; + gray_set_cell( RAS_VAR_ ex1, ey ); + + if ( ex1 != ex2 ) + { + TCoord lift, rem; + + + p = ONE_PIXEL * dy; + FT_DIV_MOD( TCoord, p, dx, lift, rem ); + + do + { + delta = lift; + mod += rem; + if ( mod >= (TCoord)dx ) + { + mod -= (TCoord)dx; + delta++; + } + + FT_INTEGRATE( ras, delta, ONE_PIXEL ); + y1 += delta; + ex1 += incr; + gray_set_cell( RAS_VAR_ ex1, ey ); + } while ( ex1 != ex2 ); + } + + fx1 = ONE_PIXEL - first; + + End: + FT_INTEGRATE( ras, y2 - y1, fx1 + fx2 ); + } + + + /************************************************************************** + * + * Render a given line as a series of scanlines. + */ + static void + gray_render_line( RAS_ARG_ TPos to_x, + TPos to_y ) + { + TCoord ey1, ey2, fy1, fy2, first, delta, mod; + TPos p, dx, dy, x, x2; + int incr; + + + ey1 = TRUNC( ras.y ); + ey2 = TRUNC( to_y ); /* if (ey2 >= ras.max_ey) ey2 = ras.max_ey-1; */ + + /* perform vertical clipping */ + if ( ( ey1 >= ras.max_ey && ey2 >= ras.max_ey ) || + ( ey1 < ras.min_ey && ey2 < ras.min_ey ) ) + goto End; + + fy1 = FRACT( ras.y ); + fy2 = FRACT( to_y ); + + /* everything is on a single scanline */ + if ( ey1 == ey2 ) + { + gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, to_x, fy2 ); + goto End; + } + + dx = to_x - ras.x; + dy = to_y - ras.y; + + /* vertical line - avoid calling gray_render_scanline */ + if ( dx == 0 ) + { + TCoord ex = TRUNC( ras.x ); + TCoord two_fx = FRACT( ras.x ) << 1; + + + if ( dy > 0) + { + first = ONE_PIXEL; + incr = 1; + } + else + { + first = 0; + incr = -1; + } + + delta = first - fy1; + FT_INTEGRATE( ras, delta, two_fx); + ey1 += incr; + + gray_set_cell( RAS_VAR_ ex, ey1 ); + + delta = first + first - ONE_PIXEL; + while ( ey1 != ey2 ) + { + FT_INTEGRATE( ras, delta, two_fx); + ey1 += incr; + + gray_set_cell( RAS_VAR_ ex, ey1 ); + } + + delta = fy2 - ONE_PIXEL + first; + FT_INTEGRATE( ras, delta, two_fx); + + goto End; + } + + /* ok, we have to render several scanlines */ + if ( dy > 0) + { + p = ( ONE_PIXEL - fy1 ) * dx; + first = ONE_PIXEL; + incr = 1; + } + else + { + p = fy1 * dx; + first = 0; + incr = -1; + dy = -dy; + } + + /* 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; + gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, x, first ); + + ey1 += incr; + gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 ); + + if ( ey1 != ey2 ) + { + TCoord lift, rem; + + + p = ONE_PIXEL * dx; + FT_DIV_MOD( TCoord, p, dy, lift, rem ); + + do + { + delta = lift; + mod += rem; + if ( mod >= (TCoord)dy ) + { + mod -= (TCoord)dy; + delta++; + } + + x2 = x + delta; + gray_render_scanline( RAS_VAR_ ey1, + x, ONE_PIXEL - first, + x2, first ); + x = x2; + + ey1 += incr; + gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 ); + } while ( ey1 != ey2 ); + } + + gray_render_scanline( RAS_VAR_ ey1, + x, ONE_PIXEL - first, + to_x, fy2 ); + + End: + ras.x = to_x; + ras.y = to_y; + } + +#else + + /************************************************************************** + * + * Render a straight line across multiple cells in any direction. + */ + static void + gray_render_line( RAS_ARG_ TPos to_x, + TPos to_y ) + { + TPos dx, dy; + TCoord fx1, fy1, fx2, fy2; + TCoord ex1, ey1, ex2, ey2; + + + ey1 = TRUNC( ras.y ); + ey2 = TRUNC( to_y ); + + /* perform vertical clipping */ + if ( ( ey1 >= ras.max_ey && ey2 >= ras.max_ey ) || + ( ey1 < ras.min_ey && ey2 < ras.min_ey ) ) + goto End; + + ex1 = TRUNC( ras.x ); + ex2 = TRUNC( to_x ); + + fx1 = FRACT( ras.x ); + fy1 = FRACT( ras.y ); + + dx = to_x - ras.x; + dy = to_y - ras.y; + + if ( ex1 == ex2 && ey1 == ey2 ) /* inside one cell */ + ; + else if ( dy == 0 ) /* ex1 != ex2 */ /* any horizontal line */ + { + gray_set_cell( RAS_VAR_ ex2, ey2 ); + goto End; + } + else if ( dx == 0 ) + { + if ( dy > 0 ) /* vertical line up */ + do + { + fy2 = ONE_PIXEL; + FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 ); + fy1 = 0; + ey1++; + gray_set_cell( RAS_VAR_ ex1, ey1 ); + } while ( ey1 != ey2 ); + else /* vertical line down */ + do + { + fy2 = 0; + FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 ); + fy1 = ONE_PIXEL; + ey1--; + gray_set_cell( RAS_VAR_ ex1, ey1 ); + } while ( ey1 != ey2 ); + } + else /* any other line */ + { + FT_Int64 prod = dx * (FT_Int64)fy1 - dy * (FT_Int64)fx1; + FT_UDIVPREP( ex1 != ex2, dx ); + FT_UDIVPREP( ey1 != ey2, dy ); + + + /* The fundamental value `prod' determines which side and the */ + /* exact coordinate where the line exits current cell. It is */ + /* also easily updated when moving from one cell to the next. */ + do + { + if ( prod - dx * ONE_PIXEL > 0 && + prod <= 0 ) /* left */ + { + fx2 = 0; + fy2 = FT_UDIV( -prod, -dx ); + prod -= dy * ONE_PIXEL; + FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); + fx1 = ONE_PIXEL; + fy1 = fy2; + ex1--; + } + else if ( prod - dx * ONE_PIXEL + dy * ONE_PIXEL > 0 && + prod - dx * ONE_PIXEL <= 0 ) /* up */ + { + prod -= dx * ONE_PIXEL; + fx2 = FT_UDIV( -prod, dy ); + fy2 = ONE_PIXEL; + FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); + fx1 = fx2; + fy1 = 0; + ey1++; + } + else if ( prod + dy * ONE_PIXEL >= 0 && + prod - dx * ONE_PIXEL + dy * ONE_PIXEL <= 0 ) /* right */ + { + prod += dy * ONE_PIXEL; + fx2 = ONE_PIXEL; + fy2 = FT_UDIV( prod, dx ); + FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); + fx1 = 0; + fy1 = fy2; + ex1++; + } + else /* ( prod > 0 && + prod + dy * ONE_PIXEL < 0 ) down */ + { + fx2 = FT_UDIV( prod, -dy ); + fy2 = 0; + prod += dx * ONE_PIXEL; + FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); + fx1 = fx2; + fy1 = ONE_PIXEL; + ey1--; + } + + gray_set_cell( RAS_VAR_ ex1, ey1 ); + + } while ( ex1 != ex2 || ey1 != ey2 ); + } + + fx2 = FRACT( to_x ); + fy2 = FRACT( to_y ); + + FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 ); + + End: + ras.x = to_x; + ras.y = to_y; + } + +#endif + + /* + * For now, the code that uses DDA to render conic curves requires + * `FT_Int64` to be defined. See for example + * https://gitlab.freedesktop.org/freetype/freetype/-/issues/1071. + */ + +#ifdef FT_INT64 + +#define LEFT_SHIFT( a, b ) (FT_Int64)( (FT_UInt64)(a) << (b) ) + + + static void + gray_render_conic( RAS_ARG_ const FT_Vector* control, + const FT_Vector* to ) + { + FT_Vector p0, p1, p2; + TPos ax, ay, bx, by, dx, dy; + int shift; + + FT_Int64 rx, ry; + FT_Int64 qx, qy; + FT_Int64 px, py; + + FT_UInt count; + + + p0.x = ras.x; + p0.y = ras.y; + p1.x = UPSCALE( control->x ); + p1.y = UPSCALE( control->y ); + p2.x = UPSCALE( to->x ); + p2.y = UPSCALE( to->y ); + + /* short-cut the arc that crosses the current band */ + if ( ( TRUNC( p0.y ) >= ras.max_ey && + TRUNC( p1.y ) >= ras.max_ey && + TRUNC( p2.y ) >= ras.max_ey ) || + ( TRUNC( p0.y ) < ras.min_ey && + TRUNC( p1.y ) < ras.min_ey && + TRUNC( p2.y ) < ras.min_ey ) ) + { + ras.x = p2.x; + ras.y = p2.y; + return; + } + + bx = p1.x - p0.x; + by = p1.y - p0.y; + ax = p2.x - p1.x - bx; /* p0.x + p2.x - 2 * p1.x */ + ay = p2.y - p1.y - by; /* p0.y + p2.y - 2 * p1.y */ + + dx = FT_ABS( ax ); + dy = FT_ABS( ay ); + if ( dx < dy ) + dx = dy; + + if ( dx <= ONE_PIXEL / 4 ) + { + gray_render_line( RAS_VAR_ p2.x, p2.y ); + return; + } + + /* We can calculate the number of necessary segments because */ + /* each bisection predictably reduces deviation exactly 4-fold. */ + /* Even 32-bit deviation would vanish after 16 bisections. */ + shift = 16; + do + { + dx >>= 2; + shift--; + + } while ( dx > ONE_PIXEL / 4 ); + count = 0x10000U >> shift; + + /* + * The (P0,P1,P2) arc equation, for t in [0,1] range: + * + * P(t) = P0*(1-t)^2 + P1*2*t*(1-t) + P2*t^2 + * + * P(t) = P0 + 2*(P1-P0)*t + (P0+P2-2*P1)*t^2 + * = P0 + 2*B*t + A*t^2 + * + * for A = P0 + P2 - 2*P1 + * and B = P1 - P0 + * + * Let's consider the difference when advancing by a small + * parameter h: + * + * Q(h,t) = P(t+h) - P(t) = 2*B*h + A*h^2 + 2*A*h*t + * + * And then its own difference: + * + * R(h,t) = Q(h,t+h) - Q(h,t) = 2*A*h*h = R (constant) + * + * Since R is always a constant, it is possible to compute + * successive positions with: + * + * P = P0 + * Q = Q(h,0) = 2*B*h + A*h*h + * R = 2*A*h*h + * + * loop: + * P += Q + * Q += R + * EMIT(P) + * + * To ensure accurate results, perform computations on 64-bit + * values, after scaling them by 2^32. + * + * h = 1 / 2^N + * + * R << 32 = 2 * A << (32 - N - N) + * = A << (33 - 2*N) + * + * Q << 32 = (2 * B << (32 - N)) + (A << (32 - N - N)) + * = (B << (33 - N)) + (A << (32 - 2*N)) + */ + + rx = LEFT_SHIFT( ax, shift + shift ); + ry = LEFT_SHIFT( ay, shift + shift ); + + qx = LEFT_SHIFT( bx, shift + 17 ) + rx; + qy = LEFT_SHIFT( by, shift + 17 ) + ry; + + rx *= 2; + ry *= 2; + + px = LEFT_SHIFT( p0.x, 32 ); + py = LEFT_SHIFT( p0.y, 32 ); + + do + { + px += qx; + py += qy; + qx += rx; + qy += ry; + + gray_render_line( RAS_VAR_ (FT_Pos)( px >> 32 ), + (FT_Pos)( py >> 32 ) ); + } while ( --count ); + } + +#else /* !FT_INT64 */ + + /* + * Note that multiple attempts to speed up the function below + * with SSE2 intrinsics, using various data layouts, have turned + * out to be slower than the non-SIMD code below. + */ + static void + gray_split_conic( FT_Vector* base ) + { + TPos a, b; + + + base[4].x = base[2].x; + 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; + 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; + } + + + static void + gray_render_conic( RAS_ARG_ const FT_Vector* control, + const FT_Vector* to ) + { + FT_Vector bez_stack[16 * 2 + 1]; /* enough to accommodate bisections */ + FT_Vector* arc = bez_stack; + TPos dx, dy; + int draw; + + + arc[0].x = UPSCALE( to->x ); + arc[0].y = UPSCALE( to->y ); + arc[1].x = UPSCALE( control->x ); + arc[1].y = UPSCALE( control->y ); + arc[2].x = ras.x; + arc[2].y = ras.y; + + /* short-cut the arc that crosses the current band */ + if ( ( TRUNC( arc[0].y ) >= ras.max_ey && + TRUNC( arc[1].y ) >= ras.max_ey && + TRUNC( arc[2].y ) >= ras.max_ey ) || + ( TRUNC( arc[0].y ) < ras.min_ey && + TRUNC( arc[1].y ) < ras.min_ey && + TRUNC( arc[2].y ) < ras.min_ey ) ) + { + ras.x = arc[0].x; + ras.y = arc[0].y; + return; + } + + dx = FT_ABS( arc[2].x + arc[0].x - 2 * arc[1].x ); + dy = FT_ABS( arc[2].y + arc[0].y - 2 * arc[1].y ); + if ( dx < dy ) + dx = dy; + + /* We can calculate the number of necessary bisections because */ + /* each bisection predictably reduces deviation exactly 4-fold. */ + /* Even 32-bit deviation would vanish after 16 bisections. */ + draw = 1; + while ( dx > ONE_PIXEL / 4 ) + { + dx >>= 2; + draw <<= 1; + } + + /* We use decrement counter to count the total number of segments */ + /* to draw starting from 2^level. Before each draw we split as */ + /* many times as there are trailing zeros in the counter. */ + do + { + int split = draw & ( -draw ); /* isolate the rightmost 1-bit */ + + + while ( ( split >>= 1 ) ) + { + gray_split_conic( arc ); + arc += 2; + } + + gray_render_line( RAS_VAR_ arc[0].x, arc[0].y ); + arc -= 2; + + } while ( --draw ); + } + +#endif /* !FT_INT64 */ + + + /* + * For cubic Bézier, binary splits are still faster than DDA + * because the splits are adaptive to how quickly each sub-arc + * approaches their chord trisection points. + * + * It might be useful to experiment with SSE2 to speed up + * `gray_split_cubic`, though. + */ + static void + gray_split_cubic( FT_Vector* base ) + { + TPos a, b, c; + + + base[6].x = base[3].x; + 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; + 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; + } + + + static void + gray_render_cubic( RAS_ARG_ const FT_Vector* control1, + const FT_Vector* control2, + const FT_Vector* to ) + { + FT_Vector bez_stack[16 * 3 + 1]; /* enough to accommodate bisections */ + FT_Vector* arc = bez_stack; + + + arc[0].x = UPSCALE( to->x ); + arc[0].y = UPSCALE( to->y ); + arc[1].x = UPSCALE( control2->x ); + arc[1].y = UPSCALE( control2->y ); + arc[2].x = UPSCALE( control1->x ); + arc[2].y = UPSCALE( control1->y ); + arc[3].x = ras.x; + arc[3].y = ras.y; + + /* short-cut the arc that crosses the current band */ + if ( ( TRUNC( arc[0].y ) >= ras.max_ey && + TRUNC( arc[1].y ) >= ras.max_ey && + TRUNC( arc[2].y ) >= ras.max_ey && + TRUNC( arc[3].y ) >= ras.max_ey ) || + ( TRUNC( arc[0].y ) < ras.min_ey && + TRUNC( arc[1].y ) < ras.min_ey && + TRUNC( arc[2].y ) < ras.min_ey && + TRUNC( arc[3].y ) < ras.min_ey ) ) + { + ras.x = arc[0].x; + ras.y = arc[0].y; + return; + } + + for (;;) + { + /* 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 ); + + if ( arc == bez_stack ) + return; + + arc -= 3; + continue; + + Split: + gray_split_cubic( arc ); + arc += 3; + } + } + + + static int + gray_move_to( const FT_Vector* to, + void* worker_ ) /* gray_PWorker */ + { + gray_PWorker worker = (gray_PWorker)worker_; + + TPos x, y; + + + /* start to a new position */ + x = UPSCALE( to->x ); + y = UPSCALE( to->y ); + + gray_set_cell( RAS_VAR_ TRUNC( x ), TRUNC( y ) ); + + ras.x = x; + ras.y = y; + return 0; + } + + + static int + gray_line_to( const FT_Vector* to, + void* worker_ ) /* gray_PWorker */ + { + gray_PWorker worker = (gray_PWorker)worker_; + + + gray_render_line( RAS_VAR_ UPSCALE( to->x ), UPSCALE( to->y ) ); + return 0; + } + + + static int + gray_conic_to( const FT_Vector* control, + const FT_Vector* to, + void* worker_ ) /* gray_PWorker */ + { + gray_PWorker worker = (gray_PWorker)worker_; + + + gray_render_conic( RAS_VAR_ control, to ); + return 0; + } + + + static int + gray_cubic_to( const FT_Vector* control1, + const FT_Vector* control2, + const FT_Vector* to, + void* worker_ ) /* gray_PWorker */ + { + gray_PWorker worker = (gray_PWorker)worker_; + + + gray_render_cubic( RAS_VAR_ control1, control2, to ); + return 0; + } + + +#ifdef STANDALONE_ + + /************************************************************************** + * + * The following functions should only compile in stand-alone mode, + * i.e., when building this component without the rest of FreeType. + * + */ + + /************************************************************************** + * + * @Function: + * FT_Outline_Decompose + * + * @Description: + * Walk over an outline's structure to decompose it into individual + * segments and Bézier arcs. This function is also able to emit + * `move to' and `close to' operations to indicate the start and end + * of new contours in the outline. + * + * @Input: + * outline :: + * A pointer to the source target. + * + * func_interface :: + * A table of `emitters', i.e., function pointers + * called during decomposition to indicate path + * operations. + * + * @InOut: + * user :: + * A typeless pointer which is passed to each + * emitter during the decomposition. It can be + * used to store the state during the + * decomposition. + * + * @Return: + * Error code. 0 means success. + */ + static int + FT_Outline_Decompose( const FT_Outline* outline, + const FT_Outline_Funcs* func_interface, + void* user ) + { +#undef SCALED +#define SCALED( x ) ( (x) * ( 1L << shift ) - delta ) + + FT_Vector v_last; + FT_Vector v_control; + FT_Vector v_start; + + FT_Vector* point; + FT_Vector* limit; + char* tags; + + int error; + + int n; /* index of contour in outline */ + int first; /* index of first point in contour */ + int last; /* index of last point in contour */ + + char tag; /* current point's state */ + + int shift; + TPos delta; + + + if ( !outline ) + return FT_THROW( Invalid_Outline ); + + if ( !func_interface ) + return FT_THROW( Invalid_Argument ); + + shift = func_interface->shift; + delta = func_interface->delta; + + last = -1; + for ( n = 0; n < outline->n_contours; n++ ) + { + FT_TRACE5(( "FT_Outline_Decompose: Contour %d\n", n )); + + first = last + 1; + last = outline->contours[n]; + if ( last < first ) + goto Invalid_Outline; + + limit = outline->points + last; + + v_start = outline->points[first]; + v_start.x = SCALED( v_start.x ); + v_start.y = SCALED( v_start.y ); + + v_last = outline->points[last]; + v_last.x = SCALED( v_last.x ); + v_last.y = SCALED( v_last.y ); + + v_control = v_start; + + point = outline->points + first; + tags = outline->tags + first; + tag = FT_CURVE_TAG( tags[0] ); + + /* A contour cannot start with a cubic control point! */ + if ( tag == FT_CURVE_TAG_CUBIC ) + goto Invalid_Outline; + + /* check first point to determine origin */ + if ( tag == FT_CURVE_TAG_CONIC ) + { + /* first point is conic control. Yes, this happens. */ + if ( FT_CURVE_TAG( outline->tags[last] ) == FT_CURVE_TAG_ON ) + { + /* start at last point if it is on the curve */ + v_start = v_last; + limit--; + } + else + { + /* if both first and last points are conic, */ + /* start at their middle and record its position */ + /* for closure */ + v_start.x = ( v_start.x + v_last.x ) / 2; + v_start.y = ( v_start.y + v_last.y ) / 2; + + v_last = v_start; + } + point--; + tags--; + } + + FT_TRACE5(( " move to (%.2f, %.2f)\n", + v_start.x / 64.0, v_start.y / 64.0 )); + error = func_interface->move_to( &v_start, user ); + if ( error ) + goto Exit; + + while ( point < limit ) + { + point++; + tags++; + + tag = FT_CURVE_TAG( tags[0] ); + switch ( tag ) + { + case FT_CURVE_TAG_ON: /* emit a single line_to */ + { + FT_Vector vec; + + + vec.x = SCALED( point->x ); + vec.y = SCALED( point->y ); + + FT_TRACE5(( " line to (%.2f, %.2f)\n", + vec.x / 64.0, vec.y / 64.0 )); + error = func_interface->line_to( &vec, user ); + if ( error ) + goto Exit; + continue; + } + + case FT_CURVE_TAG_CONIC: /* consume conic arcs */ + v_control.x = SCALED( point->x ); + v_control.y = SCALED( point->y ); + + Do_Conic: + if ( point < limit ) + { + FT_Vector vec; + FT_Vector v_middle; + + + point++; + tags++; + tag = FT_CURVE_TAG( tags[0] ); + + vec.x = SCALED( point->x ); + vec.y = SCALED( point->y ); + + if ( tag == FT_CURVE_TAG_ON ) + { + FT_TRACE5(( " conic to (%.2f, %.2f)" + " with control (%.2f, %.2f)\n", + vec.x / 64.0, vec.y / 64.0, + v_control.x / 64.0, v_control.y / 64.0 )); + error = func_interface->conic_to( &v_control, &vec, user ); + if ( error ) + goto Exit; + continue; + } + + if ( tag != FT_CURVE_TAG_CONIC ) + goto Invalid_Outline; + + v_middle.x = ( v_control.x + vec.x ) / 2; + v_middle.y = ( v_control.y + vec.y ) / 2; + + FT_TRACE5(( " conic to (%.2f, %.2f)" + " with control (%.2f, %.2f)\n", + v_middle.x / 64.0, v_middle.y / 64.0, + v_control.x / 64.0, v_control.y / 64.0 )); + error = func_interface->conic_to( &v_control, &v_middle, user ); + if ( error ) + goto Exit; + + v_control = vec; + goto Do_Conic; + } + + FT_TRACE5(( " conic to (%.2f, %.2f)" + " with control (%.2f, %.2f)\n", + v_start.x / 64.0, v_start.y / 64.0, + v_control.x / 64.0, v_control.y / 64.0 )); + error = func_interface->conic_to( &v_control, &v_start, user ); + goto Close; + + default: /* FT_CURVE_TAG_CUBIC */ + { + FT_Vector vec1, vec2; + + + if ( point + 1 > limit || + FT_CURVE_TAG( tags[1] ) != FT_CURVE_TAG_CUBIC ) + goto Invalid_Outline; + + point += 2; + tags += 2; + + vec1.x = SCALED( point[-2].x ); + vec1.y = SCALED( point[-2].y ); + + vec2.x = SCALED( point[-1].x ); + vec2.y = SCALED( point[-1].y ); + + if ( point <= limit ) + { + FT_Vector vec; + + + vec.x = SCALED( point->x ); + vec.y = SCALED( point->y ); + + FT_TRACE5(( " cubic to (%.2f, %.2f)" + " with controls (%.2f, %.2f) and (%.2f, %.2f)\n", + vec.x / 64.0, vec.y / 64.0, + vec1.x / 64.0, vec1.y / 64.0, + vec2.x / 64.0, vec2.y / 64.0 )); + error = func_interface->cubic_to( &vec1, &vec2, &vec, user ); + if ( error ) + goto Exit; + continue; + } + + FT_TRACE5(( " cubic to (%.2f, %.2f)" + " with controls (%.2f, %.2f) and (%.2f, %.2f)\n", + v_start.x / 64.0, v_start.y / 64.0, + vec1.x / 64.0, vec1.y / 64.0, + vec2.x / 64.0, vec2.y / 64.0 )); + error = func_interface->cubic_to( &vec1, &vec2, &v_start, user ); + goto Close; + } + } + } + + /* close the contour with a line segment */ + FT_TRACE5(( " line to (%.2f, %.2f)\n", + v_start.x / 64.0, v_start.y / 64.0 )); + error = func_interface->line_to( &v_start, user ); + + Close: + if ( error ) + goto Exit; + } + + FT_TRACE5(( "FT_Outline_Decompose: Done\n", n )); + return Smooth_Err_Ok; + + Exit: + FT_TRACE5(( "FT_Outline_Decompose: Error 0x%x\n", error )); + return error; + + Invalid_Outline: + return FT_THROW( Invalid_Outline ); + } + +#endif /* STANDALONE_ */ + + + FT_DEFINE_OUTLINE_FUNCS( + func_interface, + + (FT_Outline_MoveTo_Func) gray_move_to, /* move_to */ + (FT_Outline_LineTo_Func) gray_line_to, /* line_to */ + (FT_Outline_ConicTo_Func)gray_conic_to, /* conic_to */ + (FT_Outline_CubicTo_Func)gray_cubic_to, /* cubic_to */ + + 0, /* shift */ + 0 /* delta */ + ) + + + static int + gray_convert_glyph_inner( RAS_ARG_ + int continued ) + { + volatile int error; + + + if ( ft_setjmp( ras.jump_buffer ) == 0 ) + { + if ( continued ) + FT_Trace_Disable(); + error = FT_Outline_Decompose( &ras.outline, &func_interface, &ras ); + if ( continued ) + FT_Trace_Enable(); + + FT_TRACE7(( "band [%d..%d]: %td cell%s remaining\n", + ras.min_ey, + ras.max_ey, + ras.cell_null - ras.cell_free, + ras.cell_null - ras.cell_free == 1 ? "" : "s" )); + } + else + { + error = FT_THROW( Raster_Overflow ); + + FT_TRACE7(( "band [%d..%d]: to be bisected\n", + ras.min_ey, ras.max_ey )); + } + + return error; + } + + + static void + gray_sweep( RAS_ARG ) + { + int fill = ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL ) ? 0x100 + : INT_MIN; + int coverage; + int y; + + + for ( y = ras.min_ey; y < ras.max_ey; y++ ) + { + PCell cell = ras.ycells[y - ras.min_ey]; + TCoord x = ras.min_ex; + TArea cover = 0; + + unsigned char* line = ras.target.origin - ras.target.pitch * y; + + + for ( ; cell != ras.cell_null; cell = cell->next ) + { + TArea area; + + + if ( cover != 0 && cell->x > x ) + { + FT_FILL_RULE( coverage, cover, fill ); + FT_GRAY_SET( line + x, coverage, cell->x - x ); + } + + cover += (TArea)cell->cover * ( ONE_PIXEL * 2 ); + area = cover - cell->area; + + if ( area != 0 && cell->x >= ras.min_ex ) + { + FT_FILL_RULE( coverage, area, fill ); + line[cell->x] = (unsigned char)coverage; + } + + x = cell->x + 1; + } + + if ( cover != 0 ) /* only if cropped */ + { + FT_FILL_RULE( coverage, cover, fill ); + FT_GRAY_SET( line + x, coverage, ras.max_ex - x ); + } + } + } + + + static void + gray_sweep_direct( RAS_ARG ) + { + int fill = ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL ) ? 0x100 + : INT_MIN; + int coverage; + int y; + + FT_Span span[FT_MAX_GRAY_SPANS]; + int n = 0; + + + for ( y = ras.min_ey; y < ras.max_ey; y++ ) + { + PCell cell = ras.ycells[y - ras.min_ey]; + TCoord x = ras.min_ex; + TArea cover = 0; + + + for ( ; cell != ras.cell_null; cell = cell->next ) + { + TArea area; + + + if ( cover != 0 && cell->x > x ) + { + FT_FILL_RULE( coverage, cover, fill ); + + span[n].coverage = (unsigned char)coverage; + span[n].x = (short)x; + span[n].len = (unsigned short)( cell->x - x ); + + if ( ++n == FT_MAX_GRAY_SPANS ) + { + /* flush the span buffer and reset the count */ + ras.render_span( y, n, span, ras.render_span_data ); + n = 0; + } + } + + cover += (TArea)cell->cover * ( ONE_PIXEL * 2 ); + area = cover - cell->area; + + if ( area != 0 && cell->x >= ras.min_ex ) + { + FT_FILL_RULE( coverage, area, fill ); + + span[n].coverage = (unsigned char)coverage; + span[n].x = (short)cell->x; + span[n].len = 1; + + if ( ++n == FT_MAX_GRAY_SPANS ) + { + /* flush the span buffer and reset the count */ + ras.render_span( y, n, span, ras.render_span_data ); + n = 0; + } + } + + x = cell->x + 1; + } + + if ( cover != 0 ) /* only if cropped */ + { + FT_FILL_RULE( coverage, cover, fill ); + + span[n].coverage = (unsigned char)coverage; + span[n].x = (short)x; + span[n].len = (unsigned short)( ras.max_ex - x ); + + ++n; + } + + if ( n ) + { + /* flush the span buffer and reset the count */ + ras.render_span( y, n, span, ras.render_span_data ); + n = 0; + } + } + } + + + static int + gray_convert_glyph( RAS_ARG ) + { + TCell buffer[FT_MAX_GRAY_POOL]; + size_t height = (size_t)( ras.cbox.yMax - ras.cbox.yMin ); + size_t n = FT_MAX_GRAY_POOL / 8; + TCoord y; + TCoord bands[32]; /* enough to accommodate bisections */ + TCoord* band; + + int continued = 0; + + + /* Initialize the null cell at the end of the poll. */ + ras.cell_null = buffer + FT_MAX_GRAY_POOL - 1; + ras.cell_null->x = CELL_MAX_X_VALUE; + ras.cell_null->area = 0; + ras.cell_null->cover = 0; + ras.cell_null->next = NULL; + + /* set up vertical bands */ + ras.ycells = (PCell*)buffer; + + if ( height > n ) + { + /* two divisions rounded up */ + n = ( height + n - 1 ) / n; + height = ( height + n - 1 ) / n; + } + + for ( y = ras.cbox.yMin; y < ras.cbox.yMax; ) + { + ras.min_ey = y; + y += height; + ras.max_ey = FT_MIN( y, ras.cbox.yMax ); + + ras.count_ey = ras.max_ey - ras.min_ey; + + band = bands; + band[1] = ras.cbox.xMin; + band[0] = ras.cbox.xMax; + + do + { + TCoord i; + int error; + + + ras.min_ex = band[1]; + ras.max_ex = band[0]; + + /* memory management: zero out and skip ycells */ + for ( i = 0; i < ras.count_ey; ++i ) + ras.ycells[i] = ras.cell_null; + + n = ( (size_t)ras.count_ey * sizeof ( PCell ) + sizeof ( TCell ) - 1 ) + / sizeof ( TCell ); + + ras.cell_free = buffer + n; + ras.cell = ras.cell_null; + + error = gray_convert_glyph_inner( RAS_VAR_ continued ); + continued = 1; + + if ( !error ) + { + if ( ras.render_span ) /* for FT_RASTER_FLAG_DIRECT only */ + gray_sweep_direct( RAS_VAR ); + else + gray_sweep( RAS_VAR ); + band--; + continue; + } + else if ( error != Smooth_Err_Raster_Overflow ) + return error; + + /* render pool overflow; we will reduce the render band by half */ + i = ( band[0] - band[1] ) >> 1; + + /* this should never happen even with tiny rendering pool */ + if ( i == 0 ) + { + FT_TRACE7(( "gray_convert_glyph: rotten glyph\n" )); + return FT_THROW( Raster_Overflow ); + } + + band++; + band[1] = band[0]; + band[0] += i; + } while ( band >= bands ); + } + + return Smooth_Err_Ok; + } + + + static int + gray_raster_render( FT_Raster raster, + const FT_Raster_Params* params ) + { + const FT_Outline* outline = (const FT_Outline*)params->source; + const FT_Bitmap* target_map = params->target; + +#ifndef FT_STATIC_RASTER + gray_TWorker worker[1]; +#endif + + + if ( !raster ) + return FT_THROW( Invalid_Argument ); + + /* this version does not support monochrome rendering */ + if ( !( params->flags & FT_RASTER_FLAG_AA ) ) + return FT_THROW( Cannot_Render_Glyph ); + + if ( !outline ) + return FT_THROW( Invalid_Outline ); + + /* return immediately if the outline is empty */ + if ( outline->n_points == 0 || outline->n_contours == 0 ) + return Smooth_Err_Ok; + + if ( !outline->contours || !outline->points ) + return FT_THROW( Invalid_Outline ); + + if ( outline->n_points != + outline->contours[outline->n_contours - 1] + 1 ) + return FT_THROW( Invalid_Outline ); + + ras.outline = *outline; + + if ( params->flags & FT_RASTER_FLAG_DIRECT ) + { + if ( !params->gray_spans ) + return Smooth_Err_Ok; + + ras.render_span = (FT_Raster_Span_Func)params->gray_spans; + ras.render_span_data = params->user; + + ras.cbox = params->clip_box; + } + else + { + /* if direct mode is not set, we must have a target bitmap */ + if ( !target_map ) + return FT_THROW( Invalid_Argument ); + + /* nothing to do */ + if ( !target_map->width || !target_map->rows ) + return Smooth_Err_Ok; + + if ( !target_map->buffer ) + return FT_THROW( Invalid_Argument ); + + if ( target_map->pitch < 0 ) + ras.target.origin = target_map->buffer; + else + ras.target.origin = target_map->buffer + + ( target_map->rows - 1 ) * (unsigned int)target_map->pitch; + + ras.target.pitch = target_map->pitch; + + ras.render_span = (FT_Raster_Span_Func)NULL; + ras.render_span_data = NULL; + + ras.cbox.xMin = 0; + ras.cbox.yMin = 0; + ras.cbox.xMax = (FT_Pos)target_map->width; + ras.cbox.yMax = (FT_Pos)target_map->rows; + } + + /* exit if nothing to do */ + if ( ras.cbox.xMin >= ras.cbox.xMax || ras.cbox.yMin >= ras.cbox.yMax ) + return Smooth_Err_Ok; + + return gray_convert_glyph( RAS_VAR ); + } + + + /**** RASTER OBJECT CREATION: In stand-alone mode, we simply use *****/ + /**** a static object. *****/ + +#ifdef STANDALONE_ + + static int + gray_raster_new( void* memory, + FT_Raster* araster ) + { + static gray_TRaster the_raster; + + FT_UNUSED( memory ); + + + *araster = (FT_Raster)&the_raster; + FT_ZERO( &the_raster ); + + return 0; + } + + + static void + gray_raster_done( FT_Raster raster ) + { + /* nothing */ + FT_UNUSED( raster ); + } + +#else /* !STANDALONE_ */ + + static int + gray_raster_new( void* memory_, + FT_Raster* araster_ ) + { + FT_Memory memory = (FT_Memory)memory_; + gray_PRaster* araster = (gray_PRaster*)araster_; + + FT_Error error; + gray_PRaster raster = NULL; + + + if ( !FT_NEW( raster ) ) + raster->memory = memory; + + *araster = raster; + + return error; + } + + + static void + gray_raster_done( FT_Raster raster ) + { + FT_Memory memory = (FT_Memory)((gray_PRaster)raster)->memory; + + + FT_FREE( raster ); + } + +#endif /* !STANDALONE_ */ + + + static void + gray_raster_reset( FT_Raster raster, + unsigned char* pool_base, + unsigned long pool_size ) + { + FT_UNUSED( raster ); + FT_UNUSED( pool_base ); + FT_UNUSED( pool_size ); + } + + + static int + gray_raster_set_mode( FT_Raster raster, + unsigned long mode, + void* args ) + { + FT_UNUSED( raster ); + FT_UNUSED( mode ); + FT_UNUSED( args ); + + + return 0; /* nothing to do */ + } + + + FT_DEFINE_RASTER_FUNCS( + ft_grays_raster, + + FT_GLYPH_FORMAT_OUTLINE, + + (FT_Raster_New_Func) gray_raster_new, /* raster_new */ + (FT_Raster_Reset_Func) gray_raster_reset, /* raster_reset */ + (FT_Raster_Set_Mode_Func)gray_raster_set_mode, /* raster_set_mode */ + (FT_Raster_Render_Func) gray_raster_render, /* raster_render */ + (FT_Raster_Done_Func) gray_raster_done /* raster_done */ + ) + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/non-source/foreign/freetype2/src/smooth/ftgrays.h b/non-source/foreign/freetype2/src/smooth/ftgrays.h new file mode 100644 index 000000000..940fbe8c7 --- /dev/null +++ b/non-source/foreign/freetype2/src/smooth/ftgrays.h @@ -0,0 +1,57 @@ +/**************************************************************************** + * + * ftgrays.h + * + * FreeType smooth renderer declaration + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTGRAYS_H_ +#define FTGRAYS_H_ + +#ifdef __cplusplus + extern "C" { +#endif + + +#ifdef STANDALONE_ +#include "ftimage.h" +#else +#include <ft2build.h> +#include <freetype/ftimage.h> +#endif + + + /************************************************************************** + * + * To make ftgrays.h independent from configuration files we check + * whether FT_EXPORT_VAR has been defined already. + * + * On some systems and compilers (Win32 mostly), an extra keyword is + * necessary to compile the library as a DLL. + */ +#ifndef FT_EXPORT_VAR +#define FT_EXPORT_VAR( x ) extern x +#endif + + FT_EXPORT_VAR( const FT_Raster_Funcs ) ft_grays_raster; + + +#ifdef __cplusplus + } +#endif + +#endif /* FTGRAYS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/smooth/ftsmerrs.h b/non-source/foreign/freetype2/src/smooth/ftsmerrs.h new file mode 100644 index 000000000..6d41fb8e0 --- /dev/null +++ b/non-source/foreign/freetype2/src/smooth/ftsmerrs.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * + * ftsmerrs.h + * + * smooth renderer error codes (specification only). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the smooth renderer error enumeration + * constants. + * + */ + +#ifndef FTSMERRS_H_ +#define FTSMERRS_H_ + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX Smooth_Err_ +#define FT_ERR_BASE FT_Mod_Err_Smooth + +#include <freetype/fterrors.h> + +#endif /* FTSMERRS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/smooth/ftsmooth.c b/non-source/foreign/freetype2/src/smooth/ftsmooth.c new file mode 100644 index 000000000..f0acc1ea4 --- /dev/null +++ b/non-source/foreign/freetype2/src/smooth/ftsmooth.c @@ -0,0 +1,605 @@ +/**************************************************************************** + * + * ftsmooth.c + * + * Anti-aliasing renderer interface (body). + * + * Copyright (C) 2000-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/ftoutln.h> +#include "ftsmooth.h" +#include "ftgrays.h" + +#include "ftsmerrs.h" + + + /* sets render-specific mode */ + static FT_Error + ft_smooth_set_mode( FT_Renderer render, + FT_ULong mode_tag, + FT_Pointer data ) + { + /* we simply pass it to the raster */ + return render->clazz->raster_class->raster_set_mode( render->raster, + mode_tag, + data ); + } + + /* transform a given glyph image */ + static FT_Error + ft_smooth_transform( FT_Renderer render, + FT_GlyphSlot slot, + const FT_Matrix* matrix, + const FT_Vector* delta ) + { + FT_Error error = FT_Err_Ok; + + + if ( slot->format != render->glyph_format ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + if ( matrix ) + FT_Outline_Transform( &slot->outline, matrix ); + + if ( delta ) + FT_Outline_Translate( &slot->outline, delta->x, delta->y ); + + Exit: + return error; + } + + + /* return the glyph's control box */ + static void + ft_smooth_get_cbox( FT_Renderer render, + FT_GlyphSlot slot, + FT_BBox* cbox ) + { + FT_ZERO( cbox ); + + if ( slot->format == render->glyph_format ) + FT_Outline_Get_CBox( &slot->outline, cbox ); + } + + typedef struct TOrigin_ + { + unsigned char* origin; /* pixmap origin at the bottom-left */ + int pitch; /* pitch to go down one row */ + + } TOrigin; + +#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING + + /* initialize renderer -- init its raster */ + static FT_Error + ft_smooth_init( FT_Module module ) /* FT_Renderer */ + { + FT_Renderer render = (FT_Renderer)module; + + 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, + void* target_ ) /* TOrigin* */ + { + TOrigin* target = (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_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_Module module ) /* FT_Renderer */ + { + FT_Renderer render = (FT_Renderer)module; + + + /* 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, + void* target_ ) + { + TOrigin* target = (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_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; + FT_Bitmap* bitmap = &slot->bitmap; + FT_Memory memory = render->root.memory; + FT_Pos x_shift = 0; + FT_Pos y_shift = 0; + + + /* check glyph image format */ + if ( slot->format != render->glyph_format ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + + /* check 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; + } + + /* release old bitmap buffer */ + if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) + { + FT_FREE( bitmap->buffer ); + slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP; + } + + if ( ft_glyphslot_preset_bitmap( slot, mode, origin ) ) + { + error = FT_THROW( Raster_Overflow ); + goto Exit; + } + + if ( !bitmap->rows || !bitmap->pitch ) + goto Exit; + + /* allocate new one */ + if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) ) + goto Exit; + + slot->internal->flags |= FT_GLYPH_OWN_BITMAP; + + x_shift = 64 * -slot->bitmap_left; + y_shift = 64 * -slot->bitmap_top; + if ( bitmap->pixel_mode == FT_PIXEL_MODE_LCD_V ) + y_shift += 64 * (FT_Int)bitmap->rows / 3; + else + y_shift += 64 * (FT_Int)bitmap->rows; + + if ( origin ) + { + x_shift += origin->x; + y_shift += origin->y; + } + + /* translate outline to render it into the bitmap */ + if ( x_shift || y_shift ) + FT_Outline_Translate( outline, x_shift, y_shift ); + + 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 + + /* finally apply filtering */ + { + 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 ) + { + 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, lcd_weights ); + } + +#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + } + + Exit: + if ( !error ) + { + /* everything is fine; the glyph is now officially a bitmap */ + slot->format = FT_GLYPH_FORMAT_BITMAP; + } + else if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) + { + FT_FREE( bitmap->buffer ); + slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP; + } + + if ( x_shift || y_shift ) + FT_Outline_Translate( outline, -x_shift, -y_shift ); + + return error; + } + + + FT_DEFINE_RENDERER( + ft_smooth_renderer_class, + + FT_MODULE_RENDERER, + sizeof ( FT_RendererRec ), + + "smooth", + 0x10000L, + 0x20000L, + + NULL, /* module specific interface */ + + (FT_Module_Constructor)ft_smooth_init, /* module_init */ + (FT_Module_Destructor) NULL, /* module_done */ + (FT_Module_Requester) NULL, /* get_interface */ + + FT_GLYPH_FORMAT_OUTLINE, + + (FT_Renderer_RenderFunc) ft_smooth_render, /* render_glyph */ + (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */ + (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */ + (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */ + + (FT_Raster_Funcs*)&ft_grays_raster /* raster_class */ + ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/smooth/ftsmooth.h b/non-source/foreign/freetype2/src/smooth/ftsmooth.h new file mode 100644 index 000000000..d7b61a9e6 --- /dev/null +++ b/non-source/foreign/freetype2/src/smooth/ftsmooth.h @@ -0,0 +1,37 @@ +/**************************************************************************** + * + * ftsmooth.h + * + * Anti-aliasing renderer interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTSMOOTH_H_ +#define FTSMOOTH_H_ + + +#include <freetype/ftrender.h> + + +FT_BEGIN_HEADER + + + FT_DECLARE_RENDERER( ft_smooth_renderer_class ) + + +FT_END_HEADER + +#endif /* FTSMOOTH_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/smooth/smooth.c b/non-source/foreign/freetype2/src/smooth/smooth.c new file mode 100644 index 000000000..8c5068180 --- /dev/null +++ b/non-source/foreign/freetype2/src/smooth/smooth.c @@ -0,0 +1,25 @@ +/**************************************************************************** + * + * smooth.c + * + * FreeType anti-aliasing rasterer module component (body only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "ftgrays.c" +#include "ftsmooth.c" + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/truetype.c b/non-source/foreign/freetype2/src/truetype/truetype.c new file mode 100644 index 000000000..fe9cb9247 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/truetype.c @@ -0,0 +1,29 @@ +/**************************************************************************** + * + * truetype.c + * + * FreeType TrueType driver component (body only). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.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 "ttdriver.c" /* driver interface */ +#include "ttgload.c" /* glyph loader */ +#include "ttgxvar.c" /* gx distortable font */ +#include "ttinterp.c" +#include "ttobjs.c" /* object manager */ +#include "ttpload.c" /* tables loader */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttdriver.c b/non-source/foreign/freetype2/src/truetype/ttdriver.c new file mode 100644 index 000000000..4ab68eb9a --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttdriver.c @@ -0,0 +1,704 @@ +/**************************************************************************** + * + * ttdriver.c + * + * TrueType font driver implementation (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/sfnt.h> +#include <freetype/internal/services/svfntfmt.h> + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include <freetype/ftmm.h> +#include <freetype/internal/services/svmm.h> +#include <freetype/internal/services/svmetric.h> +#endif + +#include <freetype/internal/services/svtteng.h> +#include <freetype/internal/services/svttglyf.h> +#include <freetype/internal/services/svprop.h> +#include <freetype/ftdriver.h> + +#include "ttdriver.h" +#include "ttgload.h" +#include "ttpload.h" + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include "ttgxvar.h" +#endif + +#include "tterrors.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttdriver + + + /* + * PROPERTY SERVICE + * + */ + FT_CALLBACK_DEF( FT_Error ) + tt_property_set( FT_Module module, /* TT_Driver */ + const char* property_name, + const void* value, + FT_Bool value_is_string ) + { + FT_Error error = FT_Err_Ok; + TT_Driver driver = (TT_Driver)module; + +#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + FT_UNUSED( value_is_string ); +#endif + + + if ( !ft_strcmp( property_name, "interpreter-version" ) ) + { + FT_UInt interpreter_version; + + +#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + if ( value_is_string ) + { + const char* s = (const char*)value; + + + interpreter_version = (FT_UInt)ft_strtol( s, NULL, 10 ); + } + else +#endif + { + FT_UInt* iv = (FT_UInt*)value; + + + interpreter_version = *iv; + } + + switch ( interpreter_version ) + { + case TT_INTERPRETER_VERSION_35: + driver->interpreter_version = TT_INTERPRETER_VERSION_35; + break; + + case TT_INTERPRETER_VERSION_38: + case TT_INTERPRETER_VERSION_40: +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + driver->interpreter_version = TT_INTERPRETER_VERSION_40; + break; +#endif + + default: + error = FT_ERR( Unimplemented_Feature ); + } + + return error; + } + + FT_TRACE2(( "tt_property_set: missing property `%s'\n", + property_name )); + return FT_THROW( Missing_Property ); + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_property_get( FT_Module module, /* TT_Driver */ + const char* property_name, + void* value ) + { + FT_Error error = FT_Err_Ok; + TT_Driver driver = (TT_Driver)module; + + FT_UInt interpreter_version = driver->interpreter_version; + + + if ( !ft_strcmp( property_name, "interpreter-version" ) ) + { + FT_UInt* val = (FT_UInt*)value; + + + *val = interpreter_version; + + return error; + } + + FT_TRACE2(( "tt_property_get: missing property `%s'\n", + property_name )); + return FT_THROW( Missing_Property ); + } + + + FT_DEFINE_SERVICE_PROPERTIESREC( + tt_service_properties, + + tt_property_set, /* FT_Properties_SetFunc set_property */ + tt_property_get /* FT_Properties_GetFunc get_property */ + ) + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** F A C E S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @Function: + * tt_get_kerning + * + * @Description: + * A driver method used to return the kerning vector between two + * glyphs of the same face. + * + * @Input: + * face :: + * A handle to the source face object. + * + * left_glyph :: + * The index of the left glyph in the kern pair. + * + * right_glyph :: + * The index of the right glyph in the kern pair. + * + * @Output: + * kerning :: + * The kerning vector. This is in font units for + * scalable formats, and in pixels for fixed-sizes + * formats. + * + * @Return: + * FreeType error code. 0 means success. + * + * @Note: + * Only horizontal layouts (left-to-right & right-to-left) are + * supported by this function. Other layouts, or more sophisticated + * kernings, are out of scope of this method (the basic driver + * interface is meant to be simple). + * + * They can be implemented by format-specific interfaces. + */ + FT_CALLBACK_DEF( FT_Error ) + tt_get_kerning( FT_Face face, /* TT_Face */ + FT_UInt left_glyph, + FT_UInt right_glyph, + FT_Vector* kerning ) + { + TT_Face ttface = (TT_Face)face; + SFNT_Service sfnt = (SFNT_Service)ttface->sfnt; + + + kerning->x = 0; + kerning->y = 0; + + if ( sfnt ) + { + /* Use 'kern' table if available since that can be faster; otherwise */ + /* use GPOS kerning pairs if available. */ + if ( ttface->kern_avail_bits != 0 ) + kerning->x = sfnt->get_kerning( ttface, + left_glyph, + right_glyph ); +#ifdef TT_CONFIG_OPTION_GPOS_KERNING + else if ( ttface->gpos_kerning_available ) + kerning->x = sfnt->get_gpos_kerning( ttface, + left_glyph, + right_glyph ); +#endif + } + + return 0; + } + + + FT_CALLBACK_DEF( FT_Error ) + tt_get_advances( FT_Face face, /* TT_Face */ + FT_UInt start, + FT_UInt count, + FT_Int32 flags, + FT_Fixed *advances ) + { + FT_UInt nn; + TT_Face ttface = (TT_Face)face; + + + /* XXX: TODO: check for sbits */ + + if ( flags & FT_LOAD_VERTICAL_LAYOUT ) + { +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* no fast retrieval for blended MM fonts without VVAR table */ + if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) && + !( ttface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) ) + return FT_THROW( Unimplemented_Feature ); +#endif + + for ( nn = 0; nn < count; nn++ ) + { + FT_Short tsb; + FT_UShort ah; + + + /* since we don't need `tsb', we use zero for `yMax' parameter */ + TT_Get_VMetrics( ttface, start + nn, 0, &tsb, &ah ); + advances[nn] = ah; + } + } + else + { +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* no fast retrieval for blended MM fonts without HVAR table */ + if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) && + !( ttface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) ) + return FT_THROW( Unimplemented_Feature ); +#endif + + for ( nn = 0; nn < count; nn++ ) + { + FT_Short lsb; + FT_UShort aw; + + + TT_Get_HMetrics( ttface, start + nn, &lsb, &aw ); + advances[nn] = aw; + } + } + + return FT_Err_Ok; + } + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** S I Z E S ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + FT_CALLBACK_DEF( FT_Error ) + tt_size_select( FT_Size size, + FT_ULong strike_index ) + { + TT_Face ttface = (TT_Face)size->face; + TT_Size ttsize = (TT_Size)size; + FT_Error error = FT_Err_Ok; + + + ttsize->strike_index = strike_index; + + if ( FT_IS_SCALABLE( size->face ) ) + { + /* use the scaled metrics, even when tt_size_reset fails */ + FT_Select_Metrics( size->face, strike_index ); + + tt_size_reset( ttsize ); /* ignore return value */ + } + else + { + SFNT_Service sfnt = (SFNT_Service)ttface->sfnt; + FT_Size_Metrics* size_metrics = &size->metrics; + + + error = sfnt->load_strike_metrics( ttface, + strike_index, + size_metrics ); + if ( error ) + ttsize->strike_index = 0xFFFFFFFFUL; + } + + return error; + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + + FT_CALLBACK_DEF( FT_Error ) + tt_size_request( FT_Size size, + FT_Size_Request req ) + { + TT_Size ttsize = (TT_Size)size; + FT_Error error = FT_Err_Ok; + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + if ( FT_HAS_FIXED_SIZES( size->face ) ) + { + TT_Face ttface = (TT_Face)size->face; + SFNT_Service sfnt = (SFNT_Service)ttface->sfnt; + FT_ULong strike_index; + + + error = sfnt->set_sbit_strike( ttface, req, &strike_index ); + + if ( error ) + ttsize->strike_index = 0xFFFFFFFFUL; + else + return tt_size_select( size, strike_index ); + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + { + FT_Error err = FT_Request_Metrics( size->face, req ); + + + if ( err ) + { + error = err; + goto Exit; + } + } + + if ( FT_IS_SCALABLE( size->face ) ) + { + error = tt_size_reset( ttsize ); + +#ifdef TT_USE_BYTECODE_INTERPRETER + /* for the `MPS' bytecode instruction we need the point size */ + if ( !error ) + { + FT_UInt resolution = + ttsize->metrics->x_ppem > ttsize->metrics->y_ppem + ? req->horiResolution + : req->vertResolution; + + + /* if we don't have a resolution value, assume 72dpi */ + if ( req->type == FT_SIZE_REQUEST_TYPE_SCALES || + !resolution ) + resolution = 72; + + ttsize->point_size = FT_MulDiv( ttsize->ttmetrics.ppem, + 64 * 72, + resolution ); + } +#endif + } + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_glyph_load + * + * @Description: + * A driver method used to load a glyph within a given glyph slot. + * + * @Input: + * slot :: + * A handle to the target slot object where the glyph + * will be loaded. + * + * size :: + * A handle to the source face size at which the glyph + * must be scaled, loaded, etc. + * + * glyph_index :: + * The index of the glyph in the font file. + * + * load_flags :: + * A flag indicating what to load for this glyph. The + * FT_LOAD_XXX constants can be used to control the + * glyph loading process (e.g., whether the outline + * should be scaled, whether to load bitmaps or not, + * whether to hint the outline, etc). + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_CALLBACK_DEF( FT_Error ) + tt_glyph_load( FT_GlyphSlot slot, /* TT_GlyphSlot */ + FT_Size size, /* TT_Size */ + FT_UInt glyph_index, + FT_Int32 load_flags ) + { + TT_GlyphSlot ttslot = (TT_GlyphSlot)slot; + TT_Size ttsize = (TT_Size)size; + FT_Face face = ttslot->face; + FT_Error error; + + + if ( !slot ) + return FT_THROW( Invalid_Slot_Handle ); + + if ( !size ) + return FT_THROW( Invalid_Size_Handle ); + + if ( !face ) + return FT_THROW( Invalid_Face_Handle ); + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( glyph_index >= (FT_UInt)face->num_glyphs && + !face->internal->incremental_interface ) +#else + if ( glyph_index >= (FT_UInt)face->num_glyphs ) +#endif + return FT_THROW( Invalid_Argument ); + + if ( load_flags & FT_LOAD_NO_HINTING ) + { + /* both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT */ + /* are necessary to disable hinting for tricky fonts */ + + if ( FT_IS_TRICKY( face ) ) + load_flags &= ~FT_LOAD_NO_HINTING; + + if ( load_flags & FT_LOAD_NO_AUTOHINT ) + load_flags |= FT_LOAD_NO_HINTING; + } + + if ( load_flags & ( FT_LOAD_NO_RECURSE | FT_LOAD_NO_SCALE ) ) + { + load_flags |= FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE; + + if ( !FT_IS_TRICKY( face ) ) + load_flags |= FT_LOAD_NO_HINTING; + } + + /* use hinted metrics only if we load a glyph with hinting */ + ttsize->metrics = ( load_flags & FT_LOAD_NO_HINTING ) + ? &size->metrics + : &ttsize->hinted_metrics; + + /* now fill in the glyph slot with outline/bitmap/layered */ + error = TT_Load_Glyph( ttsize, ttslot, glyph_index, load_flags ); + + /* force drop-out mode to 2 - irrelevant now */ + /* slot->outline.dropout_mode = 2; */ + + return error; + } + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** ****/ + /**** D R I V E R I N T E R F A C E ****/ + /**** ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + FT_DEFINE_SERVICE_MULTIMASTERSREC( + tt_service_gx_multi_masters, + + NULL, /* FT_Get_MM_Func get_mm */ + NULL, /* FT_Set_MM_Design_Func set_mm_design */ + TT_Set_MM_Blend, /* FT_Set_MM_Blend_Func set_mm_blend */ + TT_Get_MM_Blend, /* FT_Get_MM_Blend_Func get_mm_blend */ + TT_Get_MM_Var, /* FT_Get_MM_Var_Func get_mm_var */ + TT_Set_Var_Design, /* FT_Set_Var_Design_Func set_var_design */ + TT_Get_Var_Design, /* FT_Get_Var_Design_Func get_var_design */ + TT_Set_Named_Instance, /* FT_Set_Named_Instance_Func set_named_instance */ + TT_Get_Default_Named_Instance, + /* FT_Get_Default_Named_Instance_Func get_default_named_instance */ + NULL, /* FT_Set_MM_WeightVector_Func set_mm_weightvector */ + NULL, /* FT_Get_MM_WeightVector_Func get_mm_weightvector */ + + tt_construct_ps_name, /* FT_Construct_PS_Name_Func construct_ps_name */ + tt_var_load_delta_set_index_mapping, + /* FT_Var_Load_Delta_Set_Idx_Map_Func load_delta_set_idx_map */ + tt_var_load_item_variation_store, + /* FT_Var_Load_Item_Var_Store_Func load_item_variation_store */ + tt_var_get_item_delta, /* FT_Var_Get_Item_Delta_Func get_item_delta */ + tt_var_done_item_variation_store, + /* FT_Var_Done_Item_Var_Store_Func done_item_variation_store */ + tt_var_done_delta_set_index_map, + /* FT_Var_Done_Delta_Set_Idx_Map_Func done_delta_set_index_map */ + tt_get_var_blend, /* FT_Get_Var_Blend_Func get_var_blend */ + tt_done_blend /* FT_Done_Blend_Func done_blend */ + ) + + FT_DEFINE_SERVICE_METRICSVARIATIONSREC( + tt_service_metrics_variations, + + tt_hadvance_adjust, /* FT_HAdvance_Adjust_Func hadvance_adjust */ + NULL, /* FT_LSB_Adjust_Func lsb_adjust */ + NULL, /* FT_RSB_Adjust_Func rsb_adjust */ + + tt_vadvance_adjust, /* FT_VAdvance_Adjust_Func vadvance_adjust */ + NULL, /* FT_TSB_Adjust_Func tsb_adjust */ + NULL, /* FT_BSB_Adjust_Func bsb_adjust */ + NULL, /* FT_VOrg_Adjust_Func vorg_adjust */ + + tt_apply_mvar, /* FT_Metrics_Adjust_Func metrics_adjust */ + tt_size_reset_height /* FT_Size_Reset_Func size_reset */ + ) + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + + static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine = + { +#ifdef TT_USE_BYTECODE_INTERPRETER + + FT_TRUETYPE_ENGINE_TYPE_PATENTED + +#else /* !TT_USE_BYTECODE_INTERPRETER */ + + FT_TRUETYPE_ENGINE_TYPE_NONE + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + }; + + + FT_DEFINE_SERVICE_TTGLYFREC( + tt_service_truetype_glyf, + + (TT_Glyf_GetLocationFunc)tt_face_get_location /* get_location */ + ) + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_DEFINE_SERVICEDESCREC6( + tt_services, + + FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE, + FT_SERVICE_ID_MULTI_MASTERS, &tt_service_gx_multi_masters, + FT_SERVICE_ID_METRICS_VARIATIONS, &tt_service_metrics_variations, + FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, + FT_SERVICE_ID_TT_GLYF, &tt_service_truetype_glyf, + FT_SERVICE_ID_PROPERTIES, &tt_service_properties ) +#else + FT_DEFINE_SERVICEDESCREC4( + tt_services, + + FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE, + FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, + FT_SERVICE_ID_TT_GLYF, &tt_service_truetype_glyf, + FT_SERVICE_ID_PROPERTIES, &tt_service_properties ) +#endif + + + FT_CALLBACK_DEF( FT_Module_Interface ) + tt_get_interface( FT_Module driver, /* TT_Driver */ + const char* tt_interface ) + { + FT_Library library; + FT_Module_Interface result; + FT_Module sfntd; + SFNT_Service sfnt; + + + result = ft_service_list_lookup( tt_services, tt_interface ); + if ( result ) + return result; + + if ( !driver ) + return NULL; + library = driver->library; + if ( !library ) + return NULL; + + /* only return the default interface from the SFNT module */ + sfntd = FT_Get_Module( library, "sfnt" ); + if ( sfntd ) + { + sfnt = (SFNT_Service)( sfntd->clazz->module_interface ); + if ( sfnt ) + return sfnt->get_interface( driver, tt_interface ); + } + + return 0; + } + + + /* The FT_DriverInterface structure is defined in ftdriver.h. */ + +#ifdef TT_USE_BYTECODE_INTERPRETER +#define TT_HINTER_FLAG FT_MODULE_DRIVER_HAS_HINTER +#else +#define TT_HINTER_FLAG 0 +#endif + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS +#define TT_SIZE_SELECT tt_size_select +#else +#define TT_SIZE_SELECT 0 +#endif + + FT_DEFINE_DRIVER( + tt_driver_class, + + FT_MODULE_FONT_DRIVER | + FT_MODULE_DRIVER_SCALABLE | + TT_HINTER_FLAG, + + sizeof ( TT_DriverRec ), + + "truetype", /* driver name */ + 0x10000L, /* driver version == 1.0 */ + 0x20000L, /* driver requires FreeType 2.0 or above */ + + NULL, /* module-specific interface */ + + tt_driver_init, /* FT_Module_Constructor module_init */ + tt_driver_done, /* FT_Module_Destructor module_done */ + tt_get_interface, /* FT_Module_Requester get_interface */ + + sizeof ( TT_FaceRec ), + sizeof ( TT_SizeRec ), + sizeof ( FT_GlyphSlotRec ), + + tt_face_init, /* FT_Face_InitFunc init_face */ + tt_face_done, /* FT_Face_DoneFunc done_face */ + tt_size_init, /* FT_Size_InitFunc init_size */ + tt_size_done, /* FT_Size_DoneFunc done_size */ + tt_slot_init, /* FT_Slot_InitFunc init_slot */ + NULL, /* FT_Slot_DoneFunc done_slot */ + + tt_glyph_load, /* FT_Slot_LoadFunc load_glyph */ + + tt_get_kerning, /* FT_Face_GetKerningFunc get_kerning */ + NULL, /* FT_Face_AttachFunc attach_file */ + tt_get_advances, /* FT_Face_GetAdvancesFunc get_advances */ + + tt_size_request, /* FT_Size_RequestFunc request_size */ + TT_SIZE_SELECT /* FT_Size_SelectFunc select_size */ + ) + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttdriver.h b/non-source/foreign/freetype2/src/truetype/ttdriver.h new file mode 100644 index 000000000..3e1cf234f --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttdriver.h @@ -0,0 +1,35 @@ +/**************************************************************************** + * + * ttdriver.h + * + * High-level TrueType driver interface (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTDRIVER_H_ +#define TTDRIVER_H_ + + +#include <freetype/internal/ftdrv.h> + + +FT_BEGIN_HEADER + + FT_DECLARE_DRIVER( tt_driver_class ) + +FT_END_HEADER + +#endif /* TTDRIVER_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/tterrors.h b/non-source/foreign/freetype2/src/truetype/tterrors.h new file mode 100644 index 000000000..7ad937bd0 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/tterrors.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * + * tterrors.h + * + * TrueType error codes (specification only). + * + * Copyright (C) 2001-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the TrueType error enumeration + * constants. + * + */ + +#ifndef TTERRORS_H_ +#define TTERRORS_H_ + +#include <freetype/ftmoderr.h> + +#undef FTERRORS_H_ + +#undef FT_ERR_PREFIX +#define FT_ERR_PREFIX TT_Err_ +#define FT_ERR_BASE FT_Mod_Err_TrueType + +#include <freetype/fterrors.h> + +#endif /* TTERRORS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttgload.c b/non-source/foreign/freetype2/src/truetype/ttgload.c new file mode 100644 index 000000000..b656ccf04 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttgload.c @@ -0,0 +1,2740 @@ +/**************************************************************************** + * + * ttgload.c + * + * TrueType Glyph Loader (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <ft2build.h> +#include <freetype/internal/ftdebug.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/sfnt.h> +#include <freetype/tttags.h> +#include <freetype/ftoutln.h> +#include <freetype/ftdriver.h> +#include <freetype/ftlist.h> + +#include "ttgload.h" +#include "ttpload.h" + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include "ttgxvar.h" +#endif + +#include "tterrors.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttgload + + + /************************************************************************** + * + * Simple glyph flags. + */ +#define ON_CURVE_POINT 0x01 /* same value as FT_CURVE_TAG_ON */ +#define X_SHORT_VECTOR 0x02 +#define Y_SHORT_VECTOR 0x04 +#define REPEAT_FLAG 0x08 +#define X_POSITIVE 0x10 /* two meanings depending on X_SHORT_VECTOR */ +#define SAME_X 0x10 +#define Y_POSITIVE 0x20 /* two meanings depending on Y_SHORT_VECTOR */ +#define SAME_Y 0x20 +#define OVERLAP_SIMPLE 0x40 /* retained as FT_OUTLINE_OVERLAP */ + + + /************************************************************************** + * + * Composite glyph flags. + */ +#define ARGS_ARE_WORDS 0x0001 +#define ARGS_ARE_XY_VALUES 0x0002 +#define ROUND_XY_TO_GRID 0x0004 +#define WE_HAVE_A_SCALE 0x0008 +/* reserved 0x0010 */ +#define MORE_COMPONENTS 0x0020 +#define WE_HAVE_AN_XY_SCALE 0x0040 +#define WE_HAVE_A_2X2 0x0080 +#define WE_HAVE_INSTR 0x0100 +#define USE_MY_METRICS 0x0200 +#define OVERLAP_COMPOUND 0x0400 /* 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. + */ + FT_LOCAL_DEF( void ) + TT_Get_HMetrics( TT_Face face, + FT_UInt idx, + FT_Short* lsb, + FT_UShort* aw ) + { + ( (SFNT_Service)face->sfnt )->get_metrics( face, 0, idx, lsb, aw ); + + FT_TRACE5(( " advance width (font units): %d\n", *aw )); + FT_TRACE5(( " left side bearing (font units): %d\n", *lsb )); + } + + + /************************************************************************** + * + * Return the vertical metrics in font units for a given glyph. + * See function `tt_loader_set_pp' below for explanations. + */ + FT_LOCAL_DEF( void ) + TT_Get_VMetrics( TT_Face face, + FT_UInt idx, + FT_Pos yMax, + FT_Short* tsb, + FT_UShort* ah ) + { + if ( face->vertical_info ) + ( (SFNT_Service)face->sfnt )->get_metrics( face, 1, idx, tsb, ah ); + + else if ( face->os2.version != 0xFFFFU ) + { + *tsb = (FT_Short)( face->os2.sTypoAscender - yMax ); + *ah = (FT_UShort)FT_ABS( face->os2.sTypoAscender - + face->os2.sTypoDescender ); + } + + else + { + *tsb = (FT_Short)( face->horizontal.Ascender - yMax ); + *ah = (FT_UShort)FT_ABS( face->horizontal.Ascender - + face->horizontal.Descender ); + } + +#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 )); + } + + + static FT_Error + tt_get_metrics( TT_Loader loader, + FT_UInt glyph_index ) + { + TT_Face face = loader->face; + + FT_Error error; + FT_Stream stream = loader->stream; + + FT_Short left_bearing = 0, top_bearing = 0; + FT_UShort advance_width = 0, advance_height = 0; + + /* we must preserve the stream position */ + /* (which gets altered by the metrics functions) */ + FT_ULong pos = FT_STREAM_POS(); + + + TT_Get_HMetrics( face, glyph_index, + &left_bearing, + &advance_width ); + TT_Get_VMetrics( face, glyph_index, + loader->bbox.yMax, + &top_bearing, + &advance_height ); + + if ( FT_STREAM_SEEK( pos ) ) + return error; + + loader->left_bearing = left_bearing; + loader->advance = advance_width; + loader->top_bearing = top_bearing; + loader->vadvance = advance_height; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* With the incremental interface, these values are set by */ + /* a call to `tt_get_metrics_incremental'. */ + if ( face->root.internal->incremental_interface == NULL ) +#endif + { + if ( !loader->linear_def ) + { + loader->linear_def = 1; + loader->linear = advance_width; + } + } + + return FT_Err_Ok; + } + + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + + static void + tt_get_metrics_incremental( TT_Loader loader, + FT_UInt glyph_index ) + { + TT_Face face = loader->face; + + FT_Short left_bearing = 0, top_bearing = 0; + FT_UShort advance_width = 0, advance_height = 0; + + + /* If this is an incrementally loaded font check whether there are */ + /* overriding metrics for this glyph. */ + if ( face->root.internal->incremental_interface && + face->root.internal->incremental_interface->funcs->get_glyph_metrics ) + { + FT_Incremental_MetricsRec incr_metrics; + FT_Error error; + + + incr_metrics.bearing_x = loader->left_bearing; + incr_metrics.bearing_y = 0; + incr_metrics.advance = loader->advance; + incr_metrics.advance_v = 0; + + error = face->root.internal->incremental_interface->funcs->get_glyph_metrics( + face->root.internal->incremental_interface->object, + glyph_index, FALSE, &incr_metrics ); + if ( error ) + goto Exit; + + left_bearing = (FT_Short)incr_metrics.bearing_x; + advance_width = (FT_UShort)incr_metrics.advance; + +#if 0 + + /* GWW: Do I do the same for vertical metrics? */ + incr_metrics.bearing_x = 0; + incr_metrics.bearing_y = loader->top_bearing; + incr_metrics.advance = loader->vadvance; + + error = face->root.internal->incremental_interface->funcs->get_glyph_metrics( + face->root.internal->incremental_interface->object, + glyph_index, TRUE, &incr_metrics ); + if ( error ) + goto Exit; + + top_bearing = (FT_Short)incr_metrics.bearing_y; + advance_height = (FT_UShort)incr_metrics.advance; + +#endif /* 0 */ + + loader->left_bearing = left_bearing; + loader->advance = advance_width; + loader->top_bearing = top_bearing; + loader->vadvance = advance_height; + + if ( !loader->linear_def ) + { + loader->linear_def = 1; + loader->linear = advance_width; + } + } + + Exit: + return; + } + +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + + + /************************************************************************** + * + * The following functions are used by default with TrueType fonts. + * However, they can be replaced by alternatives if we need to support + * TrueType-compressed formats (like MicroType) in the future. + * + */ + + FT_CALLBACK_DEF( FT_Error ) + TT_Access_Glyph_Frame( TT_Loader loader, + FT_UInt glyph_index, + FT_ULong offset, + FT_UInt byte_count ) + { + FT_Error error; + FT_Stream stream = loader->stream; + + FT_UNUSED( glyph_index ); + + + /* the following line sets the `error' variable through macros! */ + if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( byte_count ) ) + return error; + + loader->cursor = stream->cursor; + loader->limit = stream->limit; + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( void ) + TT_Forget_Glyph_Frame( TT_Loader loader ) + { + FT_Stream stream = loader->stream; + + + FT_FRAME_EXIT(); + } + + + FT_CALLBACK_DEF( FT_Error ) + TT_Load_Glyph_Header( TT_Loader loader ) + { + FT_Byte* p = loader->cursor; + FT_Byte* limit = loader->limit; + + + if ( p + 10 > limit ) + return FT_THROW( Invalid_Outline ); + + loader->n_contours = FT_NEXT_SHORT( p ); + + loader->bbox.xMin = FT_NEXT_SHORT( p ); + loader->bbox.yMin = FT_NEXT_SHORT( p ); + loader->bbox.xMax = FT_NEXT_SHORT( p ); + loader->bbox.yMax = FT_NEXT_SHORT( p ); + + FT_TRACE5(( " # of contours: %d\n", loader->n_contours )); + FT_TRACE5(( " xMin: %4ld xMax: %4ld\n", loader->bbox.xMin, + loader->bbox.xMax )); + FT_TRACE5(( " yMin: %4ld yMax: %4ld\n", loader->bbox.yMin, + loader->bbox.yMax )); + loader->cursor = p; + + return FT_Err_Ok; + } + + + FT_CALLBACK_DEF( FT_Error ) + TT_Load_Simple_Glyph( TT_Loader load ) + { + FT_Error error; + FT_Byte* p = load->cursor; + FT_Byte* limit = load->limit; + FT_GlyphLoader gloader = load->gloader; + FT_Outline* outline = &gloader->current.outline; + FT_Int n_contours = load->n_contours; + FT_Int n_points; + FT_UShort n_ins; + + FT_Byte *flag, *flag_limit; + FT_Byte c, count; + FT_Vector *vec, *vec_limit; + FT_Pos x, y; + FT_UShort *cont, *cont_limit; + FT_Int last; + + + /* check that we can add the contours to the glyph */ + error = FT_GLYPHLOADER_CHECK_POINTS( gloader, 0, n_contours ); + if ( error ) + goto Fail; + + /* check space for contours array + instructions count */ + if ( n_contours >= 0xFFF || p + 2 * n_contours + 2 > limit ) + goto Invalid_Outline; + + /* reading the contours' endpoints & number of points */ + cont = outline->contours; + cont_limit = cont + n_contours; + + last = -1; + for ( ; cont < cont_limit; cont++ ) + { + *cont = FT_NEXT_USHORT( p ); + + if ( *cont <= last ) + goto Invalid_Outline; + + last = *cont; + } + + n_points = last + 1; + + FT_TRACE5(( " # of points: %d\n", n_points )); + + /* note that we will add four phantom points later */ + error = FT_GLYPHLOADER_CHECK_POINTS( gloader, n_points + 4, 0 ); + if ( error ) + goto Fail; + + /* space checked above */ + n_ins = FT_NEXT_USHORT( p ); + + FT_TRACE5(( " Instructions size: %u\n", n_ins )); + + /* check instructions size */ + if ( p + n_ins > limit ) + { + FT_TRACE1(( "TT_Load_Simple_Glyph: excessive instruction count\n" )); + error = FT_THROW( Too_Many_Hints ); + goto Fail; + } + +#ifdef TT_USE_BYTECODE_INTERPRETER + + if ( IS_HINTED( load->load_flags ) ) + { + TT_ExecContext exec = load->exec; + FT_Memory memory = exec->memory; + + + if ( exec->glyphSize ) + FT_FREE( exec->glyphIns ); + exec->glyphSize = 0; + + /* we don't trust `maxSizeOfInstructions' in the `maxp' table */ + /* and thus allocate the bytecode array size by ourselves */ + if ( n_ins ) + { + if ( FT_DUP( exec->glyphIns, p, n_ins ) ) + return error; + + exec->glyphSize = n_ins; + } + } + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + p += n_ins; + + /* reading the point tags */ + flag = outline->tags; + flag_limit = flag + n_points; + + FT_ASSERT( flag ); + + while ( flag < flag_limit ) + { + if ( p + 1 > limit ) + goto Invalid_Outline; + + *flag++ = c = FT_NEXT_BYTE( p ); + if ( c & REPEAT_FLAG ) + { + if ( p + 1 > limit ) + goto Invalid_Outline; + + count = FT_NEXT_BYTE( p ); + if ( flag + (FT_Int)count > flag_limit ) + goto Invalid_Outline; + + for ( ; count > 0; count-- ) + *flag++ = c; + } + } + + /* 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; + vec_limit = vec + n_points; + flag = outline->tags; + x = 0; + + for ( ; vec < vec_limit; vec++, flag++ ) + { + FT_Pos delta = 0; + FT_Byte f = *flag; + + + if ( f & X_SHORT_VECTOR ) + { + if ( p + 1 > limit ) + goto Invalid_Outline; + + delta = (FT_Pos)FT_NEXT_BYTE( p ); + if ( !( f & X_POSITIVE ) ) + delta = -delta; + } + else if ( !( f & SAME_X ) ) + { + if ( p + 2 > limit ) + goto Invalid_Outline; + + delta = (FT_Pos)FT_NEXT_SHORT( p ); + } + + x += delta; + vec->x = x; + } + + /* reading the Y coordinates */ + + vec = outline->points; + vec_limit = vec + n_points; + flag = outline->tags; + y = 0; + + for ( ; vec < vec_limit; vec++, flag++ ) + { + FT_Pos delta = 0; + FT_Byte f = *flag; + + + if ( f & Y_SHORT_VECTOR ) + { + if ( p + 1 > limit ) + goto Invalid_Outline; + + delta = (FT_Pos)FT_NEXT_BYTE( p ); + if ( !( f & Y_POSITIVE ) ) + delta = -delta; + } + else if ( !( f & SAME_Y ) ) + { + if ( p + 2 > limit ) + goto Invalid_Outline; + + delta = (FT_Pos)FT_NEXT_SHORT( p ); + } + + y += delta; + vec->y = y; + + /* the cast is for stupid compilers */ + *flag = (FT_Byte)( f & ON_CURVE_POINT ); + } + + outline->n_points = (FT_UShort)n_points; + outline->n_contours = (FT_UShort)n_contours; + + load->cursor = p; + + Fail: + return error; + + Invalid_Outline: + error = FT_THROW( Invalid_Outline ); + goto Fail; + } + + + FT_CALLBACK_DEF( FT_Error ) + TT_Load_Composite_Glyph( TT_Loader loader ) + { + FT_Error error; + FT_Byte* p = loader->cursor; + FT_Byte* limit = loader->limit; + FT_GlyphLoader gloader = loader->gloader; + FT_Long num_glyphs = loader->face->root.num_glyphs; + FT_SubGlyph subglyph; + FT_UInt num_subglyphs; + + + num_subglyphs = 0; + + do + { + FT_Fixed xx, xy, yy, yx; + FT_UInt count; + + + /* check that we can load a new subglyph */ + error = FT_GlyphLoader_CheckSubGlyphs( gloader, num_subglyphs + 1 ); + if ( error ) + goto Fail; + + /* check space */ + if ( p + 4 > limit ) + goto Invalid_Composite; + + subglyph = gloader->current.subglyphs + num_subglyphs; + + subglyph->arg1 = subglyph->arg2 = 0; + + subglyph->flags = FT_NEXT_USHORT( p ); + subglyph->index = FT_NEXT_USHORT( p ); + + /* we reject composites that have components */ + /* with invalid glyph indices */ + if ( subglyph->index >= num_glyphs ) + goto Invalid_Composite; + + /* check space */ + count = 2; + if ( subglyph->flags & ARGS_ARE_WORDS ) + count += 2; + if ( subglyph->flags & WE_HAVE_A_SCALE ) + count += 2; + else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE ) + count += 4; + else if ( subglyph->flags & WE_HAVE_A_2X2 ) + count += 8; + + if ( p + count > limit ) + goto Invalid_Composite; + + /* read arguments */ + if ( subglyph->flags & ARGS_ARE_XY_VALUES ) + { + if ( subglyph->flags & ARGS_ARE_WORDS ) + { + subglyph->arg1 = FT_NEXT_SHORT( p ); + subglyph->arg2 = FT_NEXT_SHORT( p ); + } + else + { + subglyph->arg1 = FT_NEXT_CHAR( p ); + subglyph->arg2 = FT_NEXT_CHAR( p ); + } + } + else + { + if ( subglyph->flags & ARGS_ARE_WORDS ) + { + subglyph->arg1 = (FT_Int)FT_NEXT_USHORT( p ); + subglyph->arg2 = (FT_Int)FT_NEXT_USHORT( p ); + } + else + { + subglyph->arg1 = (FT_Int)FT_NEXT_BYTE( p ); + subglyph->arg2 = (FT_Int)FT_NEXT_BYTE( p ); + } + } + + /* read transform */ + xx = yy = 0x10000L; + xy = yx = 0; + + if ( subglyph->flags & WE_HAVE_A_SCALE ) + { + xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4; + yy = xx; + } + else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE ) + { + xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4; + yy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4; + } + else if ( subglyph->flags & WE_HAVE_A_2X2 ) + { + xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4; + yx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4; + xy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4; + yy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4; + } + + subglyph->transform.xx = xx; + subglyph->transform.xy = xy; + subglyph->transform.yx = yx; + subglyph->transform.yy = yy; + + num_subglyphs++; + + } while ( subglyph->flags & MORE_COMPONENTS ); + + gloader->current.num_subglyphs = num_subglyphs; + FT_TRACE5(( " %d component%s\n", + num_subglyphs, + num_subglyphs > 1 ? "s" : "" )); + +#ifdef FT_DEBUG_LEVEL_TRACE + { + FT_UInt i; + + + subglyph = gloader->current.subglyphs; + + for ( i = 0; i < num_subglyphs; i++ ) + { + if ( num_subglyphs > 1 ) + FT_TRACE7(( " subglyph %d:\n", i )); + + FT_TRACE7(( " glyph index: %d\n", subglyph->index )); + + if ( subglyph->flags & ARGS_ARE_XY_VALUES ) + FT_TRACE7(( " offset: x=%d, y=%d\n", + subglyph->arg1, + subglyph->arg2 )); + else + FT_TRACE7(( " matching points: base=%d, component=%d\n", + subglyph->arg1, + subglyph->arg2 )); + + if ( subglyph->flags & WE_HAVE_A_SCALE ) + FT_TRACE7(( " scaling: %f\n", + (double)subglyph->transform.xx / 65536 )); + else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE ) + FT_TRACE7(( " scaling: x=%f, y=%f\n", + (double)subglyph->transform.xx / 65536, + (double)subglyph->transform.yy / 65536 )); + else if ( subglyph->flags & WE_HAVE_A_2X2 ) + { + FT_TRACE7(( " scaling: xx=%f, yx=%f\n", + (double)subglyph->transform.xx / 65536, + (double)subglyph->transform.yx / 65536 )); + FT_TRACE7(( " xy=%f, yy=%f\n", + (double)subglyph->transform.xy / 65536, + (double)subglyph->transform.yy / 65536 )); + } + + subglyph++; + } + } +#endif /* FT_DEBUG_LEVEL_TRACE */ + +#ifdef TT_USE_BYTECODE_INTERPRETER + + { + FT_Stream stream = loader->stream; + + + /* we must undo the FT_FRAME_ENTER in order to point */ + /* to the composite instructions, if we find some. */ + /* We will process them later. */ + /* */ + loader->ins_pos = (FT_ULong)( FT_STREAM_POS() + + p - limit ); + } + +#endif + + loader->cursor = p; + + Fail: + return error; + + Invalid_Composite: + error = FT_THROW( Invalid_Composite ); + goto Fail; + } + + + FT_LOCAL_DEF( void ) + TT_Init_Glyph_Loading( TT_Face face ) + { + face->access_glyph_frame = TT_Access_Glyph_Frame; + face->read_glyph_header = TT_Load_Glyph_Header; + face->read_simple_glyph = TT_Load_Simple_Glyph; + face->read_composite_glyph = TT_Load_Composite_Glyph; + face->forget_glyph_frame = TT_Forget_Glyph_Frame; + } + + + static void + tt_prepare_zone( TT_GlyphZone zone, + FT_GlyphLoad load, + FT_UInt start_point, + FT_UInt start_contour ) + { + zone->n_points = load->outline.n_points + 4 - (FT_UShort)start_point; + zone->n_contours = load->outline.n_contours - (FT_UShort)start_contour; + zone->org = load->extra_points + start_point; + zone->cur = load->outline.points + start_point; + zone->orus = load->extra_points2 + start_point; + zone->tags = load->outline.tags + start_point; + zone->contours = load->outline.contours + start_contour; + zone->first_point = (FT_UShort)start_point; + } + + + /************************************************************************** + * + * @Function: + * TT_Hint_Glyph + * + * @Description: + * Hint the glyph using the zone prepared by the caller. Note that + * the zone is supposed to include four phantom points. + */ + static FT_Error + TT_Hint_Glyph( TT_Loader loader, + FT_Bool is_composite ) + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + TT_Face face = loader->face; + TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face ); +#endif + + TT_GlyphZone zone = &loader->zone; + +#ifdef TT_USE_BYTECODE_INTERPRETER + TT_ExecContext exec = loader->exec; + FT_Long n_ins = exec->glyphSize; +#else + FT_UNUSED( is_composite ); +#endif + + +#ifdef TT_USE_BYTECODE_INTERPRETER + /* save original point positions in `org' array */ + if ( n_ins > 0 ) + FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points ); + + /* Reset graphics state. */ + exec->GS = loader->size->GS; + + /* XXX: UNDOCUMENTED! Hinting instructions of a composite glyph */ + /* completely refer to the (already) hinted subglyphs. */ + if ( is_composite ) + { + exec->metrics.x_scale = 1 << 16; + exec->metrics.y_scale = 1 << 16; + + FT_ARRAY_COPY( zone->orus, zone->cur, zone->n_points ); + } + else + { + exec->metrics.x_scale = loader->size->metrics->x_scale; + exec->metrics.y_scale = loader->size->metrics->y_scale; + } +#endif + + /* round phantom points */ + zone->cur[zone->n_points - 4].x = + FT_PIX_ROUND( zone->cur[zone->n_points - 4].x ); + zone->cur[zone->n_points - 3].x = + FT_PIX_ROUND( zone->cur[zone->n_points - 3].x ); + zone->cur[zone->n_points - 2].y = + FT_PIX_ROUND( zone->cur[zone->n_points - 2].y ); + zone->cur[zone->n_points - 1].y = + FT_PIX_ROUND( zone->cur[zone->n_points - 1].y ); + +#ifdef TT_USE_BYTECODE_INTERPRETER + + if ( n_ins > 0 ) + { + FT_Error error; + + + TT_Set_CodeRange( exec, tt_coderange_glyph, exec->glyphIns, n_ins ); + + exec->is_composite = is_composite; + exec->pts = *zone; + + error = TT_Run_Context( exec ); + if ( error && exec->pedantic_hinting ) + return error; + + /* store drop-out mode in bits 5-7; set bit 2 also as a marker */ + loader->gloader->current.outline.tags[0] |= + ( exec->GS.scan_type << 5 ) | FT_CURVE_TAG_HAS_SCANMODE; + } + +#endif + + /* Save possibly modified glyph phantom points unless in v40 backward */ + /* compatibility mode, where no movement on the x axis means no reason */ + /* to change bearings or advance widths. */ + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 && + exec->backward_compatibility ) + return FT_Err_Ok; +#endif + + loader->pp1 = zone->cur[zone->n_points - 4]; + loader->pp2 = zone->cur[zone->n_points - 3]; + loader->pp3 = zone->cur[zone->n_points - 2]; + loader->pp4 = zone->cur[zone->n_points - 1]; + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * TT_Process_Simple_Glyph + * + * @Description: + * Once a simple glyph has been loaded, it needs to be processed. + * Usually, this means scaling and hinting through bytecode + * interpretation. + */ + static FT_Error + TT_Process_Simple_Glyph( TT_Loader loader ) + { + FT_Error error = FT_Err_Ok; + FT_GlyphLoader gloader = loader->gloader; + FT_Outline* outline = &gloader->current.outline; + FT_Int n_points = outline->n_points; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + FT_Memory memory = loader->face->root.memory; + FT_Vector* unrounded = NULL; +#endif + + + /* set phantom points */ + outline->points[n_points ] = loader->pp1; + outline->points[n_points + 1] = loader->pp2; + outline->points[n_points + 2] = loader->pp3; + outline->points[n_points + 3] = loader->pp4; + + n_points += 4; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) ) + { + if ( FT_QNEW_ARRAY( unrounded, n_points ) ) + goto Exit; + + /* Deltas apply to the unscaled data. */ + error = TT_Vary_Apply_Glyph_Deltas( loader, + outline, + unrounded ); + if ( error ) + goto Exit; + } + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + if ( IS_HINTED( loader->load_flags ) ) + { + tt_prepare_zone( &loader->zone, &gloader->current, 0, 0 ); + + FT_ARRAY_COPY( loader->zone.orus, loader->zone.cur, + loader->zone.n_points ); + } + + { + FT_Vector* vec = outline->points; + FT_Vector* limit = outline->points + n_points; + + FT_Fixed x_scale = 0; /* pacify compiler */ + FT_Fixed y_scale = 0; + + FT_Bool do_scale = FALSE; + + + { + /* scale the glyph */ + if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ) + { + x_scale = loader->size->metrics->x_scale; + y_scale = loader->size->metrics->y_scale; + + do_scale = TRUE; + } + } + + if ( do_scale ) + { +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) ) + { + FT_Vector* u = unrounded; + + + for ( ; vec < limit; vec++, u++ ) + { + vec->x = ADD_LONG( FT_MulFix( u->x, x_scale ), 32 ) >> 6; + vec->y = ADD_LONG( 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 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]; + loader->pp2 = outline->points[n_points - 3]; + } + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /* 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]; + loader->pp4 = outline->points[n_points - 1]; + } + } + + if ( IS_HINTED( loader->load_flags ) ) + error = TT_Hint_Glyph( loader, 0 ); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + Exit: + FT_FREE( unrounded ); +#endif + + return error; + } + + + /************************************************************************** + * + * @Function: + * TT_Process_Composite_Component + * + * @Description: + * Once a composite component has been loaded, it needs to be + * processed. Usually, this means transforming and translating. + */ + static FT_Error + TT_Process_Composite_Component( TT_Loader loader, + FT_SubGlyph subglyph, + FT_UInt start_point, + FT_UInt num_base_points ) + { + FT_GlyphLoader gloader = loader->gloader; + FT_Outline current; + FT_Bool have_scale; + FT_Pos x, y; + + + current.points = gloader->base.outline.points + + num_base_points; + current.n_points = gloader->base.outline.n_points - + (FT_UShort)num_base_points; + + have_scale = FT_BOOL( subglyph->flags & ( WE_HAVE_A_SCALE | + WE_HAVE_AN_XY_SCALE | + WE_HAVE_A_2X2 ) ); + + /* perform the transform required for this subglyph */ + if ( have_scale ) + FT_Outline_Transform( ¤t, &subglyph->transform ); + + /* get offset */ + if ( !( subglyph->flags & ARGS_ARE_XY_VALUES ) ) + { + FT_UInt num_points = gloader->base.outline.n_points; + FT_UInt k = (FT_UInt)subglyph->arg1; + FT_UInt l = (FT_UInt)subglyph->arg2; + FT_Vector* p1; + FT_Vector* p2; + + + /* match l-th point of the newly loaded component to the k-th point */ + /* of the previously loaded components. */ + + /* change to the point numbers used by our outline */ + k += start_point; + l += num_base_points; + if ( k >= num_base_points || + l >= num_points ) + return FT_THROW( Invalid_Composite ); + + p1 = gloader->base.outline.points + k; + p2 = gloader->base.outline.points + l; + + x = SUB_LONG( p1->x, p2->x ); + y = SUB_LONG( p1->y, p2->y ); + } + else + { + x = subglyph->arg1; + y = subglyph->arg2; + + if ( !x && !y ) + return FT_Err_Ok; + + /* Use a default value dependent on */ + /* TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED. This is useful for old */ + /* TT fonts which don't set the xxx_COMPONENT_OFFSET bit. */ + + if ( have_scale && +#ifdef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED + !( subglyph->flags & UNSCALED_COMPONENT_OFFSET ) ) +#else + ( subglyph->flags & SCALED_COMPONENT_OFFSET ) ) +#endif + { + +#if 0 + + /******************************************************************** + * + * This algorithm is what Apple documents. But it doesn't work. + */ + int a = subglyph->transform.xx > 0 ? subglyph->transform.xx + : -subglyph->transform.xx; + int b = subglyph->transform.yx > 0 ? subglyph->transform.yx + : -subglyph->transform.yx; + int c = subglyph->transform.xy > 0 ? subglyph->transform.xy + : -subglyph->transform.xy; + int d = subglyph->transform.yy > 0 ? subglyph->transform.yy + : -subglyph->transform.yy; + int m = a > b ? a : b; + int n = c > d ? c : d; + + + if ( a - b <= 33 && a - b >= -33 ) + m *= 2; + if ( c - d <= 33 && c - d >= -33 ) + n *= 2; + x = FT_MulFix( x, m ); + y = FT_MulFix( y, n ); + +#else /* 1 */ + + /******************************************************************** + * + * This algorithm is a guess and works much better than the above. + */ + FT_Fixed mac_xscale = FT_Hypot( subglyph->transform.xx, + subglyph->transform.xy ); + FT_Fixed mac_yscale = FT_Hypot( subglyph->transform.yy, + subglyph->transform.yx ); + + + x = FT_MulFix( x, mac_xscale ); + y = FT_MulFix( y, mac_yscale ); + +#endif /* 1 */ + + } + + if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) ) + { + FT_Fixed x_scale = loader->size->metrics->x_scale; + FT_Fixed y_scale = loader->size->metrics->y_scale; + + + x = FT_MulFix( x, x_scale ); + y = FT_MulFix( y, y_scale ); + + if ( subglyph->flags & ROUND_XY_TO_GRID ) + { + TT_Face face = loader->face; + TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face ); + + + if ( IS_HINTED( loader->load_flags ) ) + { + /* + * We round the horizontal offset only if there is hinting along + * the x axis; this corresponds to integer advance width values. + * + * Theoretically, a glyph's bytecode can toggle ClearType's + * `backward compatibility' mode, which would allow modification + * of the advance width. In reality, however, applications + * neither allow nor expect modified advance widths if subpixel + * rendering is active. + * + */ + if ( driver->interpreter_version == TT_INTERPRETER_VERSION_35 ) + x = FT_PIX_ROUND( x ); + + y = FT_PIX_ROUND( y ); + } + } + } + } + + if ( x || y ) + FT_Outline_Translate( ¤t, x, y ); + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * TT_Process_Composite_Glyph + * + * @Description: + * This is slightly different from TT_Process_Simple_Glyph, in that + * its sole purpose is to hint the glyph. Thus this function is + * only available when bytecode interpreter is enabled. + */ + static FT_Error + TT_Process_Composite_Glyph( TT_Loader loader, + FT_UInt start_point, + FT_UInt start_contour ) + { + FT_Error error; + FT_Outline* outline = &loader->gloader->base.outline; + FT_Stream stream = loader->stream; + FT_UShort n_ins; + FT_UInt i; + + + /* make room for phantom points */ + error = FT_GLYPHLOADER_CHECK_POINTS( loader->gloader, + outline->n_points + 4, + 0 ); + if ( error ) + return error; + + outline->points[outline->n_points ] = loader->pp1; + outline->points[outline->n_points + 1] = loader->pp2; + outline->points[outline->n_points + 2] = loader->pp3; + outline->points[outline->n_points + 3] = loader->pp4; + +#ifdef TT_USE_BYTECODE_INTERPRETER + + { + TT_ExecContext exec = loader->exec; + FT_Memory memory = exec->memory; + + + if ( exec->glyphSize ) + FT_FREE( exec->glyphIns ); + exec->glyphSize = 0; + + /* TT_Load_Composite_Glyph only gives us the offset of instructions */ + /* so we read them here */ + if ( FT_STREAM_SEEK( loader->ins_pos ) || + FT_READ_USHORT( n_ins ) ) + return error; + + FT_TRACE5(( " Instructions size = %hu\n", n_ins )); + + if ( !n_ins ) + return FT_Err_Ok; + + /* don't trust `maxSizeOfInstructions'; */ + /* only do a rough safety check */ + if ( n_ins > loader->byte_len ) + { + FT_TRACE1(( "TT_Process_Composite_Glyph:" + " too many instructions (%hu) for glyph with length %u\n", + n_ins, loader->byte_len )); + return FT_THROW( Too_Many_Hints ); + } + + if ( FT_QNEW_ARRAY( exec->glyphIns, n_ins ) || + FT_STREAM_READ( exec->glyphIns, n_ins ) ) + return error; + + exec->glyphSize = n_ins; + } + +#endif + + tt_prepare_zone( &loader->zone, &loader->gloader->base, + start_point, start_contour ); + + /* Some points are likely touched during execution of */ + /* instructions on components. So let's untouch them. */ + for ( i = 0; i < loader->zone.n_points - 4U; i++ ) + loader->zone.tags[i] &= ~FT_CURVE_TAG_TOUCH_BOTH; + + return TT_Hint_Glyph( loader, 1 ); + } + + + /* + * Calculate the phantom points + * + * Defining the right side bearing (rsb) as + * + * rsb = aw - (lsb + xmax - xmin) + * + * (with `aw' the advance width, `lsb' the left side bearing, and `xmin' + * and `xmax' the glyph's minimum and maximum x value), the OpenType + * specification defines the initial position of horizontal phantom points + * as + * + * pp1 = (round(xmin - lsb), 0) , + * pp2 = (round(pp1 + aw), 0) . + * + * Note that the rounding to the grid (in the device space) is not + * documented currently in the specification. + * + * However, the specification lacks the precise definition of vertical + * phantom points. Greg Hitchcock provided the following explanation. + * + * - a `vmtx' table is present + * + * For any glyph, the minimum and maximum y values (`ymin' and `ymax') + * are given in the `glyf' table, the top side bearing (tsb) and advance + * height (ah) are given in the `vmtx' table. The bottom side bearing + * (bsb) is then calculated as + * + * bsb = ah - (tsb + ymax - ymin) , + * + * and the initial position of vertical phantom points is + * + * pp3 = (x, round(ymax + tsb)) , + * pp4 = (x, round(pp3 - ah)) . + * + * See below for value `x'. + * + * - no `vmtx' table in the font + * + * If there is an `OS/2' table, we set + * + * DefaultAscender = sTypoAscender , + * DefaultDescender = sTypoDescender , + * + * otherwise we use data from the `hhea' table: + * + * DefaultAscender = Ascender , + * DefaultDescender = Descender . + * + * With these two variables we can now set + * + * ah = DefaultAscender - sDefaultDescender , + * tsb = DefaultAscender - yMax , + * + * and proceed as if a `vmtx' table was present. + * + * Usually we have + * + * x = aw / 2 , (1) + * + * but there is one compatibility case where it can be set to + * + * x = -DefaultDescender - + * ((DefaultAscender - DefaultDescender - aw) / 2) . (2) + * + * and another one with + * + * x = 0 . (3) + * + * In Windows, the history of those values is quite complicated, + * depending on the hinting engine (that is, the graphics framework). + * + * framework from to formula + * ---------------------------------------------------------- + * GDI Windows 98 current (1) + * (Windows 2000 for NT) + * GDI+ Windows XP Windows 7 (2) + * GDI+ Windows 8 current (3) + * DWrite Windows 7 current (3) + * + * For simplicity, FreeType uses (1) for grayscale subpixel hinting and + * (3) for everything else. + * + */ + static void + tt_loader_set_pp( TT_Loader loader ) + { + loader->pp1.x = loader->bbox.xMin - loader->left_bearing; + loader->pp1.y = 0; + loader->pp2.x = loader->pp1.x + loader->advance; + loader->pp2.y = 0; + + loader->pp3.x = 0; + loader->pp3.y = loader->bbox.yMax + loader->top_bearing; + loader->pp4.x = 0; + loader->pp4.y = loader->pp3.y - loader->vadvance; + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + { + TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( loader->face ); + + + if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 && + loader->exec && + loader->exec->subpixel_hinting_lean && + loader->exec->grayscale_cleartype ) + { + loader->pp3.x = loader->advance / 2; + loader->pp4.x = loader->advance / 2; + } + } +#endif + } + + + /* a utility function to retrieve i-th node from given FT_List */ + static FT_ListNode + ft_list_get_node_at( FT_List list, + FT_UInt idx ) + { + FT_ListNode cur; + + + if ( !list ) + return NULL; + + for ( cur = list->head; cur; cur = cur->next ) + { + if ( !idx ) + return cur; + + idx--; + } + + return NULL; + } + + + /************************************************************************** + * + * @Function: + * load_truetype_glyph + * + * @Description: + * Loads a given truetype glyph. Handles composites and uses a + * TT_Loader object. + */ + static FT_Error + load_truetype_glyph( TT_Loader loader, + FT_UInt glyph_index, + FT_UInt recurse_count, + FT_Bool header_only ) + { + FT_Error error = FT_Err_Ok; + FT_Fixed x_scale, y_scale; + FT_ULong offset; + TT_Face face = loader->face; + FT_GlyphLoader gloader = loader->gloader; + + FT_Bool opened_frame = 0; + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + FT_StreamRec inc_stream; + FT_Data glyph_data; + FT_Bool glyph_data_loaded = 0; +#endif + + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( recurse_count ) + FT_TRACE5(( " nesting level: %d\n", recurse_count )); +#endif + + /* some fonts have an incorrect value of `maxComponentDepth' */ + if ( recurse_count > face->max_profile.maxComponentDepth ) + { + FT_TRACE1(( "load_truetype_glyph: maxComponentDepth set to %d\n", + recurse_count )); + face->max_profile.maxComponentDepth = (FT_UShort)recurse_count; + } + +#ifndef FT_CONFIG_OPTION_INCREMENTAL + /* check glyph index */ + if ( glyph_index >= (FT_UInt)face->root.num_glyphs ) + { + error = FT_THROW( Invalid_Glyph_Index ); + goto Exit; + } +#endif + + loader->glyph_index = glyph_index; + + if ( loader->load_flags & FT_LOAD_NO_SCALE ) + { + x_scale = 0x10000L; + y_scale = 0x10000L; + } + else + { + x_scale = loader->size->metrics->x_scale; + y_scale = loader->size->metrics->y_scale; + } + + /* Set `offset' to the start of the glyph relative to the start of */ + /* the `glyf' table, and `byte_len' to the length of the glyph in */ + /* bytes. */ + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + + /* If we are loading glyph data via the incremental interface, set */ + /* the loader stream to a memory stream reading the data returned */ + /* by the interface. */ + if ( face->root.internal->incremental_interface ) + { + error = face->root.internal->incremental_interface->funcs->get_glyph_data( + face->root.internal->incremental_interface->object, + glyph_index, &glyph_data ); + if ( error ) + goto Exit; + + glyph_data_loaded = 1; + offset = 0; + loader->byte_len = glyph_data.length; + + FT_ZERO( &inc_stream ); + FT_Stream_OpenMemory( &inc_stream, + glyph_data.pointer, + glyph_data.length ); + + loader->stream = &inc_stream; + } + else + +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + { + FT_ULong len; + + + offset = tt_face_get_location( FT_FACE( face ), glyph_index, &len ); + + loader->byte_len = (FT_UInt)len; + } + + if ( loader->byte_len > 0 ) + { +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* for the incremental interface, `glyf_offset' is always zero */ + if ( !face->glyf_offset && + !face->root.internal->incremental_interface ) +#else + if ( !face->glyf_offset ) +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + { + FT_TRACE2(( "no `glyf' table but non-zero `loca' entry\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + error = face->access_glyph_frame( loader, glyph_index, + face->glyf_offset + offset, + loader->byte_len ); + if ( error ) + goto Exit; + + /* read glyph header first */ + error = face->read_glyph_header( loader ); + + face->forget_glyph_frame( loader ); + + if ( error ) + goto Exit; + } + + /* a space glyph */ + if ( loader->byte_len == 0 || loader->n_contours == 0 ) + { + loader->bbox.xMin = 0; + loader->bbox.xMax = 0; + loader->bbox.yMin = 0; + loader->bbox.yMax = 0; + } + + /* the metrics must be computed after loading the glyph header */ + /* since we need the glyph's `yMax' value in case the vertical */ + /* metrics must be emulated */ + error = tt_get_metrics( loader, glyph_index ); + if ( error ) + goto Exit; + + if ( header_only ) + goto Exit; + + if ( loader->byte_len == 0 || loader->n_contours == 0 ) + { +#ifdef FT_CONFIG_OPTION_INCREMENTAL + tt_get_metrics_incremental( loader, glyph_index ); +#endif + tt_loader_set_pp( loader ); + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) || + FT_IS_VARIATION( FT_FACE( face ) ) ) + { + /* a small outline structure with four elements for */ + /* communication with `TT_Vary_Apply_Glyph_Deltas' */ + FT_Vector points[4]; + FT_Outline outline; + + /* unrounded values */ + FT_Vector unrounded[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} }; + + + points[0] = loader->pp1; + points[1] = loader->pp2; + points[2] = loader->pp3; + points[3] = loader->pp4; + + outline.n_points = 0; + outline.n_contours = 0; + outline.points = points; + outline.tags = NULL; + outline.contours = NULL; + + /* this must be done before scaling */ + error = TT_Vary_Apply_Glyph_Deltas( loader, + &outline, + unrounded ); + if ( error ) + goto Exit; + } + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + /* scale phantom points, if necessary; */ + /* they get rounded in `TT_Hint_Glyph' */ + if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ) + { + loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale ); + loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale ); + /* pp1.y and pp2.y are always zero */ + + loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale ); + loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale ); + loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale ); + loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale ); + } + + error = FT_Err_Ok; + goto Exit; + } + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + tt_get_metrics_incremental( loader, glyph_index ); +#endif + tt_loader_set_pp( loader ); + + + /***********************************************************************/ + /***********************************************************************/ + /***********************************************************************/ + + /* we now open a frame again, right after the glyph header */ + /* (which consists of 10 bytes) */ + error = face->access_glyph_frame( loader, glyph_index, + face->glyf_offset + offset + 10, + loader->byte_len - 10 ); + if ( error ) + goto Exit; + + opened_frame = 1; + + /* if it is a simple glyph, load it */ + + if ( loader->n_contours > 0 ) + { + error = face->read_simple_glyph( loader ); + if ( error ) + goto Exit; + + /* all data have been read */ + face->forget_glyph_frame( loader ); + opened_frame = 0; + + error = TT_Process_Simple_Glyph( loader ); + if ( error ) + goto Exit; + + FT_GlyphLoader_Add( gloader ); + } + + /***********************************************************************/ + /***********************************************************************/ + /***********************************************************************/ + + /* otherwise, load a composite! */ + else if ( loader->n_contours < 0 ) + { + FT_Memory memory = face->root.memory; + + FT_UInt start_point; + FT_UInt start_contour; + FT_ULong ins_pos; /* position of composite instructions, if any */ + + FT_ListNode node, node2; + + + /* normalize the `n_contours' value */ + loader->n_contours = -1; + + /* + * We store the glyph index directly in the `node->data' pointer, + * following the glib solution (cf. macro `GUINT_TO_POINTER') with a + * double cast to make this portable. Note, however, that this needs + * pointers with a width of at least 32 bits. + */ + + /* clear the nodes filled by sibling chains */ + node = ft_list_get_node_at( &loader->composites, recurse_count ); + for ( node2 = node; node2; node2 = node2->next ) + node2->data = (void*)-1; + + /* check whether we already have a composite glyph with this index */ + if ( FT_List_Find( &loader->composites, + FT_UINT_TO_POINTER( glyph_index ) ) ) + { + FT_TRACE1(( "TT_Load_Composite_Glyph:" + " infinite recursion detected\n" )); + error = FT_THROW( Invalid_Composite ); + goto Exit; + } + + else if ( node ) + node->data = FT_UINT_TO_POINTER( glyph_index ); + + else + { + if ( FT_QNEW( node ) ) + goto Exit; + node->data = FT_UINT_TO_POINTER( glyph_index ); + FT_List_Add( &loader->composites, node ); + } + + start_point = gloader->base.outline.n_points; + start_contour = gloader->base.outline.n_contours; + + /* for each subglyph, read composite header */ + error = face->read_composite_glyph( loader ); + if ( error ) + goto Exit; + + /* store the offset of instructions */ + ins_pos = loader->ins_pos; + + /* all data we need are read */ + face->forget_glyph_frame( loader ); + opened_frame = 0; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) || + FT_IS_VARIATION( FT_FACE( face ) ) ) + { + FT_UShort i, limit; + FT_SubGlyph subglyph; + + FT_Outline outline = { 0, 0, NULL, NULL, NULL, 0 }; + FT_Vector* unrounded = NULL; + + + limit = (FT_UShort)gloader->current.num_subglyphs; + + /* construct an outline structure for */ + /* communication with `TT_Vary_Apply_Glyph_Deltas' */ + if ( FT_QNEW_ARRAY( outline.points, limit + 4 ) || + FT_QNEW_ARRAY( outline.tags, limit ) || + FT_QNEW_ARRAY( outline.contours, limit ) || + FT_QNEW_ARRAY( unrounded, limit + 4 ) ) + goto Exit1; + + outline.n_contours = outline.n_points = limit; + + subglyph = gloader->current.subglyphs; + + for ( i = 0; i < limit; i++, subglyph++ ) + { + /* applying deltas for anchor points doesn't make sense, */ + /* but we don't have to specially check this since */ + /* unused delta values are zero anyways */ + outline.points[i].x = subglyph->arg1; + outline.points[i].y = subglyph->arg2; + outline.tags[i] = ON_CURVE_POINT; + outline.contours[i] = i; + } + + outline.points[i++] = loader->pp1; + outline.points[i++] = loader->pp2; + outline.points[i++] = loader->pp3; + outline.points[i ] = loader->pp4; + + /* this call provides additional offsets */ + /* for each component's translation */ + if ( FT_SET_ERROR( TT_Vary_Apply_Glyph_Deltas( loader, + &outline, + unrounded ) ) ) + goto Exit1; + + subglyph = gloader->current.subglyphs; + + for ( i = 0; i < limit; i++, subglyph++ ) + { + if ( subglyph->flags & ARGS_ARE_XY_VALUES ) + { + subglyph->arg1 = (FT_Int16)outline.points[i].x; + subglyph->arg2 = (FT_Int16)outline.points[i].y; + } + } + + Exit1: + FT_FREE( outline.points ); + FT_FREE( outline.tags ); + FT_FREE( outline.contours ); + FT_FREE( unrounded ); + + if ( error ) + goto Exit; + } + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + /* scale phantom points, if necessary; */ + /* they get rounded in `TT_Hint_Glyph' */ + if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ) + { + loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale ); + loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale ); + /* pp1.y and pp2.y are always zero */ + + loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale ); + loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale ); + loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale ); + loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale ); + } + + /* if the flag FT_LOAD_NO_RECURSE is set, we return the subglyph */ + /* `as is' in the glyph slot (the client application will be */ + /* responsible for interpreting these data)... */ + if ( loader->load_flags & FT_LOAD_NO_RECURSE ) + { + FT_GlyphLoader_Add( gloader ); + loader->glyph->format = FT_GLYPH_FORMAT_COMPOSITE; + + goto Exit; + } + + /*********************************************************************/ + /*********************************************************************/ + /*********************************************************************/ + + { + FT_UInt n, num_base_points; + FT_SubGlyph subglyph = NULL; + + FT_UInt num_points = start_point; + FT_UInt num_subglyphs = gloader->current.num_subglyphs; + FT_UInt num_base_subgs = gloader->base.num_subglyphs; + + FT_Stream old_stream = loader->stream; + FT_UInt old_byte_len = loader->byte_len; + + + FT_GlyphLoader_Add( gloader ); + + /* read each subglyph independently */ + for ( n = 0; n < num_subglyphs; n++ ) + { + FT_Vector pp[4]; + + FT_Int linear_hadvance; + FT_Int linear_vadvance; + + + /* Each time we call `load_truetype_glyph' in this loop, the */ + /* value of `gloader.base.subglyphs' can change due to table */ + /* reallocations. We thus need to recompute the subglyph */ + /* pointer on each iteration. */ + subglyph = gloader->base.subglyphs + num_base_subgs + n; + + pp[0] = loader->pp1; + pp[1] = loader->pp2; + pp[2] = loader->pp3; + pp[3] = loader->pp4; + + linear_hadvance = loader->linear; + linear_vadvance = loader->vadvance; + + num_base_points = gloader->base.outline.n_points; + + error = load_truetype_glyph( loader, + (FT_UInt)subglyph->index, + recurse_count + 1, + FALSE ); + if ( error ) + goto Exit; + + /* restore subglyph pointer */ + subglyph = gloader->base.subglyphs + num_base_subgs + n; + + /* restore phantom points if necessary */ + if ( !( subglyph->flags & USE_MY_METRICS ) ) + { + loader->pp1 = pp[0]; + loader->pp2 = pp[1]; + loader->pp3 = pp[2]; + loader->pp4 = pp[3]; + + loader->linear = linear_hadvance; + loader->vadvance = linear_vadvance; + } + + num_points = gloader->base.outline.n_points; + + if ( num_points == num_base_points ) + continue; + + /* gloader->base.outline consists of three parts: */ + /* */ + /* 0 ----> start_point ----> num_base_points ----> n_points */ + /* (1) (2) (3) */ + /* */ + /* (1) points that exist from the beginning */ + /* (2) component points that have been loaded so far */ + /* (3) points of the newly loaded component */ + error = TT_Process_Composite_Component( loader, + subglyph, + start_point, + num_base_points ); + if ( error ) + goto Exit; + } + + loader->stream = old_stream; + loader->byte_len = old_byte_len; + + /* process the glyph */ + loader->ins_pos = ins_pos; + if ( IS_HINTED( loader->load_flags ) && +#ifdef TT_USE_BYTECODE_INTERPRETER + subglyph && + subglyph->flags & WE_HAVE_INSTR && +#endif + num_points > start_point ) + { + error = TT_Process_Composite_Glyph( loader, + start_point, + start_contour ); + if ( error ) + 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; + } + + /***********************************************************************/ + /***********************************************************************/ + /***********************************************************************/ + + Exit: + + if ( opened_frame ) + face->forget_glyph_frame( loader ); + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + + if ( glyph_data_loaded ) + face->root.internal->incremental_interface->funcs->free_glyph_data( + face->root.internal->incremental_interface->object, + &glyph_data ); + +#endif + + return error; + } + + + static FT_Error + compute_glyph_metrics( TT_Loader loader, + FT_UInt glyph_index ) + { + TT_Face face = loader->face; + TT_Size size = loader->size; + TT_GlyphSlot glyph = loader->glyph; + FT_BBox bbox; + FT_Fixed y_scale; + + + y_scale = 0x10000L; + if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ) + y_scale = size->metrics->y_scale; + + if ( glyph->format != FT_GLYPH_FORMAT_COMPOSITE ) + FT_Outline_Get_CBox( &glyph->outline, &bbox ); + else + bbox = loader->bbox; + + /* get the device-independent horizontal advance; it is scaled later */ + /* by the base layer. */ + glyph->linearHoriAdvance = loader->linear; + + glyph->metrics.horiBearingX = bbox.xMin; + glyph->metrics.horiBearingY = bbox.yMax; + if ( loader->widthp ) + glyph->metrics.horiAdvance = loader->widthp[glyph_index] * 64; + else + glyph->metrics.horiAdvance = SUB_LONG( loader->pp2.x, loader->pp1.x ); + + /* set glyph dimensions */ + glyph->metrics.width = SUB_LONG( bbox.xMax, bbox.xMin ); + glyph->metrics.height = SUB_LONG( bbox.yMax, bbox.yMin ); + + /* Now take care of vertical metrics. In the case where there is */ + /* no vertical information within the font (relatively common), */ + /* create some metrics manually */ + { + FT_Pos top; /* scaled vertical top side bearing */ + FT_Pos advance; /* scaled vertical advance height */ + + + /* Get the unscaled top bearing and advance height. */ + if ( face->vertical_info && + face->vertical.number_Of_VMetrics > 0 ) + { + top = (FT_Short)FT_DivFix( SUB_LONG( loader->pp3.y, bbox.yMax ), + y_scale ); + + if ( loader->pp3.y <= loader->pp4.y ) + advance = 0; + else + advance = (FT_UShort)FT_DivFix( SUB_LONG( loader->pp3.y, + loader->pp4.y ), + y_scale ); + } + else + { + FT_Pos height; + + + /* XXX Compute top side bearing and advance height in */ + /* Get_VMetrics instead of here. */ + + /* NOTE: The OS/2 values are the only `portable' ones, */ + /* which is why we use them, if there is an OS/2 */ + /* table in the font. Otherwise, we use the */ + /* values defined in the horizontal header. */ + + height = (FT_Short)FT_DivFix( SUB_LONG( bbox.yMax, + bbox.yMin ), + y_scale ); + if ( face->os2.version != 0xFFFFU ) + advance = (FT_Pos)( face->os2.sTypoAscender - + face->os2.sTypoDescender ); + else + advance = (FT_Pos)( face->horizontal.Ascender - + face->horizontal.Descender ); + + top = ( advance - height ) / 2; + } + +#ifdef FT_CONFIG_OPTION_INCREMENTAL + { + FT_Incremental_InterfaceRec* incr; + FT_Incremental_MetricsRec incr_metrics; + FT_Error error; + + + incr = face->root.internal->incremental_interface; + + /* If this is an incrementally loaded font see if there are */ + /* overriding metrics for this glyph. */ + if ( incr && incr->funcs->get_glyph_metrics ) + { + incr_metrics.bearing_x = 0; + incr_metrics.bearing_y = top; + incr_metrics.advance = advance; + + error = incr->funcs->get_glyph_metrics( incr->object, + glyph_index, + TRUE, + &incr_metrics ); + if ( error ) + return error; + + top = incr_metrics.bearing_y; + advance = incr_metrics.advance; + } + } + + /* GWW: Do vertical metrics get loaded incrementally too? */ + +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + + glyph->linearVertAdvance = advance; + + /* scale the metrics */ + if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) ) + { + top = FT_MulFix( top, y_scale ); + advance = FT_MulFix( advance, y_scale ); + } + + /* XXX: for now, we have no better algorithm for the lsb, but it */ + /* should work fine. */ + /* */ + glyph->metrics.vertBearingX = SUB_LONG( glyph->metrics.horiBearingX, + glyph->metrics.horiAdvance / 2 ); + glyph->metrics.vertBearingY = top; + glyph->metrics.vertAdvance = advance; + } + + return FT_Err_Ok; + } + + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + static FT_Error + load_sbit_image( TT_Size size, + TT_GlyphSlot glyph, + FT_UInt glyph_index, + FT_Int32 load_flags ) + { + TT_Face face = (TT_Face)glyph->face; + SFNT_Service sfnt = (SFNT_Service)face->sfnt; + FT_Stream stream = face->root.stream; + FT_Error error; + TT_SBit_MetricsRec sbit_metrics; + + + error = sfnt->load_sbit_image( face, + size->strike_index, + glyph_index, + (FT_UInt)load_flags, + stream, + &glyph->bitmap, + &sbit_metrics ); + if ( !error ) + { + glyph->outline.n_points = 0; + glyph->outline.n_contours = 0; + + glyph->metrics.width = (FT_Pos)sbit_metrics.width * 64; + glyph->metrics.height = (FT_Pos)sbit_metrics.height * 64; + + glyph->metrics.horiBearingX = (FT_Pos)sbit_metrics.horiBearingX * 64; + glyph->metrics.horiBearingY = (FT_Pos)sbit_metrics.horiBearingY * 64; + glyph->metrics.horiAdvance = (FT_Pos)sbit_metrics.horiAdvance * 64; + + glyph->metrics.vertBearingX = (FT_Pos)sbit_metrics.vertBearingX * 64; + glyph->metrics.vertBearingY = (FT_Pos)sbit_metrics.vertBearingY * 64; + glyph->metrics.vertAdvance = (FT_Pos)sbit_metrics.vertAdvance * 64; + + glyph->format = FT_GLYPH_FORMAT_BITMAP; + + if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) + { + glyph->bitmap_left = sbit_metrics.vertBearingX; + glyph->bitmap_top = sbit_metrics.vertBearingY; + } + else + { + glyph->bitmap_left = sbit_metrics.horiBearingX; + glyph->bitmap_top = sbit_metrics.horiBearingY; + } + } + + return error; + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + + static FT_Error + tt_loader_init( TT_Loader loader, + TT_Size size, + TT_GlyphSlot glyph, + FT_Int32 load_flags, + FT_Bool glyf_table_only ) + { + TT_Face face = (TT_Face)glyph->face; + FT_Stream stream = face->root.stream; + +#ifdef TT_USE_BYTECODE_INTERPRETER + FT_Error error; + FT_Bool pedantic = FT_BOOL( load_flags & FT_LOAD_PEDANTIC ); +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( glyph->face ); +#endif +#endif + + + FT_ZERO( loader ); + +#ifdef TT_USE_BYTECODE_INTERPRETER + + /* load execution context */ + if ( IS_HINTED( load_flags ) && !glyf_table_only ) + { + TT_ExecContext exec; + FT_Bool grayscale = TRUE; +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + FT_Bool subpixel_hinting_lean; + FT_Bool grayscale_cleartype; +#endif + + FT_Bool reexecute = FALSE; + + + if ( size->bytecode_ready < 0 || size->cvt_ready < 0 ) + { + error = tt_size_ready_bytecode( size, pedantic ); + if ( error ) + return error; + } + else if ( size->bytecode_ready ) + return size->bytecode_ready; + else if ( size->cvt_ready ) + return size->cvt_ready; + + /* query new execution context */ + exec = size->context; + if ( !exec ) + return FT_THROW( Could_Not_Find_Context ); + + grayscale = FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) != + FT_RENDER_MODE_MONO ); + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 ) + { + subpixel_hinting_lean = + FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) != + FT_RENDER_MODE_MONO ); + grayscale_cleartype = + FT_BOOL( subpixel_hinting_lean && + !( ( load_flags & + FT_LOAD_TARGET_LCD ) || + ( load_flags & + FT_LOAD_TARGET_LCD_V ) ) ); + exec->vertical_lcd_lean = + FT_BOOL( subpixel_hinting_lean && + ( load_flags & + FT_LOAD_TARGET_LCD_V ) ); + grayscale = FT_BOOL( grayscale && !subpixel_hinting_lean ); + } + else + { + subpixel_hinting_lean = FALSE; + grayscale_cleartype = FALSE; + exec->vertical_lcd_lean = FALSE; + } +#endif + + error = TT_Load_Context( exec, face, size ); + if ( error ) + return error; + + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 ) + { + /* a change from mono to subpixel rendering (and vice versa) */ + /* requires a re-execution of the CVT program */ + if ( subpixel_hinting_lean != exec->subpixel_hinting_lean ) + { + FT_TRACE4(( "tt_loader_init: subpixel hinting change," + " re-executing `prep' table\n" )); + + exec->subpixel_hinting_lean = subpixel_hinting_lean; + reexecute = TRUE; + } + + /* a change from colored to grayscale subpixel rendering (and */ + /* vice versa) requires a re-execution of the CVT program */ + if ( grayscale_cleartype != exec->grayscale_cleartype ) + { + FT_TRACE4(( "tt_loader_init: grayscale subpixel hinting change," + " re-executing `prep' table\n" )); + + exec->grayscale_cleartype = grayscale_cleartype; + reexecute = TRUE; + } + } +#endif + + /* a change from mono to grayscale rendering (and vice versa) */ + /* requires a re-execution of the CVT program */ + if ( grayscale != exec->grayscale ) + { + FT_TRACE4(( "tt_loader_init: grayscale hinting change," + " re-executing `prep' table\n" )); + + exec->grayscale = grayscale; + reexecute = TRUE; + } + } + + if ( reexecute ) + { + error = tt_size_run_prep( size, pedantic ); + if ( error ) + return error; + error = TT_Load_Context( exec, face, size ); + if ( error ) + return error; + } + + /* check whether the cvt program has disabled hinting */ + if ( exec->GS.instruct_control & 1 ) + load_flags |= FT_LOAD_NO_HINTING; + + /* load default graphics state -- if needed */ + if ( exec->GS.instruct_control & 2 ) + exec->GS = tt_default_graphics_state; + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* + * Toggle backward compatibility according to what font wants, except + * when + * + * 1) we have a `tricky' font that heavily relies on the interpreter to + * render glyphs correctly, for example DFKai-SB, or + * 2) FT_RENDER_MODE_MONO (i.e, monochrome rendering) is requested. + * + * In those cases, backward compatibility needs to be turned off to get + * correct rendering. The rendering is then completely up to the + * font's programming. + * + */ + if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 && + subpixel_hinting_lean && + !FT_IS_TRICKY( glyph->face ) ) + exec->backward_compatibility = !( exec->GS.instruct_control & 4 ); + else + exec->backward_compatibility = FALSE; +#endif /* TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL */ + + exec->pedantic_hinting = FT_BOOL( load_flags & FT_LOAD_PEDANTIC ); + loader->exec = exec; + loader->instructions = exec->glyphIns; + + /* Use the hdmx table if any unless FT_LOAD_COMPUTE_METRICS */ + /* is set or backward compatibility mode of the v38 or v40 */ + /* interpreters is active. See `ttinterp.h' for details on */ + /* backward compatibility mode. */ + if ( IS_HINTED( loader->load_flags ) && + !( loader->load_flags & FT_LOAD_COMPUTE_METRICS ) && +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + !( driver->interpreter_version == TT_INTERPRETER_VERSION_40 && + exec->backward_compatibility ) && +#endif + !face->postscript.isFixedPitch ) + { + loader->widthp = size->widthp; + } + else + loader->widthp = NULL; + } + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + /* get face's glyph loader */ + if ( !glyf_table_only ) + { + FT_GlyphLoader gloader = glyph->internal->loader; + + + FT_GlyphLoader_Rewind( gloader ); + loader->gloader = gloader; + } + + loader->load_flags = (FT_ULong)load_flags; + + loader->face = face; + loader->size = size; + loader->glyph = (FT_GlyphSlot)glyph; + loader->stream = stream; + + loader->composites.head = NULL; + loader->composites.tail = NULL; + + return FT_Err_Ok; + } + + + static void + tt_loader_done( TT_Loader loader ) + { + FT_List_Finalize( &loader->composites, + NULL, + loader->face->root.memory, + NULL ); + } + + + /************************************************************************** + * + * @Function: + * TT_Load_Glyph + * + * @Description: + * A function used to load a single glyph within a given glyph slot, + * for a given size. + * + * @InOut: + * glyph :: + * A handle to a target slot object where the glyph + * will be loaded. + * + * @Input: + * size :: + * A handle to the source face size at which the glyph + * must be scaled/loaded. + * + * glyph_index :: + * The index of the glyph in the font file. + * + * load_flags :: + * A flag indicating what to load for this glyph. The + * FT_LOAD_XXX constants can be used to control the + * glyph loading process (e.g., whether the outline + * should be scaled, whether to load bitmaps or not, + * whether to hint the outline, etc). + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Load_Glyph( TT_Size size, + TT_GlyphSlot glyph, + FT_UInt glyph_index, + FT_Int32 load_flags ) + { + TT_Face face = (TT_Face)glyph->face; + FT_Error error; + TT_LoaderRec loader; + + + FT_TRACE1(( "TT_Load_Glyph: glyph index %d\n", glyph_index )); + +#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + /* try to load embedded bitmap (if any) */ + if ( size->strike_index != 0xFFFFFFFFUL && + ( load_flags & FT_LOAD_NO_BITMAP ) == 0 && + IS_DEFAULT_INSTANCE( glyph->face ) ) + { + FT_Fixed x_scale = size->root.metrics.x_scale; + FT_Fixed y_scale = size->root.metrics.y_scale; + + + error = load_sbit_image( size, glyph, glyph_index, load_flags ); + if ( FT_ERR_EQ( error, Missing_Bitmap ) ) + { + /* the bitmap strike is incomplete and misses the requested glyph; */ + /* if we have a bitmap-only font, return an empty glyph */ + if ( !FT_IS_SCALABLE( glyph->face ) ) + { + FT_Short left_bearing = 0; + FT_Short top_bearing = 0; + + FT_UShort advance_width = 0; + FT_UShort advance_height = 0; + + + /* to return an empty glyph, however, we need metrics data */ + /* from the `hmtx' (or `vmtx') table; the assumption is that */ + /* empty glyphs are missing intentionally, representing */ + /* whitespace - not having at least horizontal metrics is */ + /* thus considered an error */ + if ( !face->horz_metrics_size ) + return error; + + /* we now construct an empty bitmap glyph */ + TT_Get_HMetrics( face, glyph_index, + &left_bearing, + &advance_width ); + TT_Get_VMetrics( face, glyph_index, + 0, + &top_bearing, + &advance_height ); + + glyph->outline.n_points = 0; + glyph->outline.n_contours = 0; + + glyph->metrics.width = 0; + glyph->metrics.height = 0; + + glyph->metrics.horiBearingX = FT_MulFix( left_bearing, x_scale ); + glyph->metrics.horiBearingY = 0; + glyph->metrics.horiAdvance = FT_MulFix( advance_width, x_scale ); + + glyph->metrics.vertBearingX = 0; + glyph->metrics.vertBearingY = FT_MulFix( top_bearing, y_scale ); + glyph->metrics.vertAdvance = FT_MulFix( advance_height, y_scale ); + + glyph->format = FT_GLYPH_FORMAT_BITMAP; + glyph->bitmap.pixel_mode = FT_PIXEL_MODE_MONO; + + glyph->bitmap_left = 0; + glyph->bitmap_top = 0; + + return FT_Err_Ok; + } + } + else if ( error ) + { + /* return error if font is not scalable */ + if ( !FT_IS_SCALABLE( glyph->face ) ) + return error; + } + else + { + if ( FT_IS_SCALABLE( glyph->face ) || + FT_HAS_SBIX( glyph->face ) ) + { + /* for the bbox we need the header only */ + (void)tt_loader_init( &loader, size, glyph, load_flags, TRUE ); + (void)load_truetype_glyph( &loader, glyph_index, 0, TRUE ); + tt_loader_done( &loader ); + glyph->linearHoriAdvance = loader.linear; + glyph->linearVertAdvance = loader.vadvance; + + /* Bitmaps from the 'sbix' table need special treatment: */ + /* if there is a glyph contour, the bitmap origin must be */ + /* shifted to be relative to the lower left corner of the */ + /* glyph bounding box, also taking the left-side bearing */ + /* (or top bearing) into account. */ + if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX && + loader.n_contours > 0 ) + { + FT_Int bitmap_left; + FT_Int bitmap_top; + + + if ( load_flags & FT_LOAD_VERTICAL_LAYOUT ) + { + /* This is a guess, since Apple's CoreText engine doesn't */ + /* really do vertical typesetting. */ + bitmap_left = loader.bbox.xMin; + bitmap_top = loader.top_bearing; + } + else + { + bitmap_left = loader.left_bearing; + bitmap_top = loader.bbox.yMin; + } + + glyph->bitmap_left += FT_MulFix( bitmap_left, x_scale ) >> 6; + glyph->bitmap_top += FT_MulFix( bitmap_top, y_scale ) >> 6; + } + + /* sanity checks: if `xxxAdvance' in the sbit metric */ + /* structure isn't set, use `linearXXXAdvance' */ + if ( !glyph->metrics.horiAdvance && glyph->linearHoriAdvance ) + glyph->metrics.horiAdvance = FT_MulFix( glyph->linearHoriAdvance, + x_scale ); + if ( !glyph->metrics.vertAdvance && glyph->linearVertAdvance ) + glyph->metrics.vertAdvance = FT_MulFix( glyph->linearVertAdvance, + y_scale ); + } + + return FT_Err_Ok; + } + } + + if ( load_flags & FT_LOAD_SBITS_ONLY ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + +#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ + + /* if FT_LOAD_NO_SCALE is not set, `ttmetrics' must be valid */ + if ( !( load_flags & FT_LOAD_NO_SCALE ) && !size->ttmetrics.valid ) + { + error = FT_THROW( Invalid_Size_Handle ); + goto Exit; + } + +#ifdef FT_CONFIG_OPTION_SVG + + /* check for OT-SVG */ + if ( ( load_flags & FT_LOAD_NO_SVG ) == 0 && + ( load_flags & FT_LOAD_COLOR ) && + face->svg ) + { + SFNT_Service sfnt = (SFNT_Service)face->sfnt; + + + FT_TRACE3(( "Trying to load SVG glyph\n" )); + + error = sfnt->load_svg_doc( glyph, glyph_index ); + if ( !error ) + { + FT_Fixed x_scale = size->root.metrics.x_scale; + FT_Fixed y_scale = size->root.metrics.y_scale; + + FT_Short leftBearing; + FT_Short topBearing; + FT_UShort advanceX; + FT_UShort advanceY; + + + FT_TRACE3(( "Successfully loaded SVG glyph\n" )); + + glyph->format = FT_GLYPH_FORMAT_SVG; + + sfnt->get_metrics( face, + FALSE, + glyph_index, + &leftBearing, + &advanceX ); + sfnt->get_metrics( face, + TRUE, + glyph_index, + &topBearing, + &advanceY ); + + glyph->linearHoriAdvance = advanceX; + glyph->linearVertAdvance = advanceY; + + glyph->metrics.horiAdvance = FT_MulFix( advanceX, x_scale ); + glyph->metrics.vertAdvance = FT_MulFix( advanceY, y_scale ); + + return error; + } + + FT_TRACE3(( "Failed to load SVG glyph\n" )); + } + + /* return immediately if we only want SVG glyphs */ + if ( load_flags & FT_LOAD_SVG_ONLY ) + { + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + +#endif /* FT_CONFIG_OPTION_SVG */ + + error = tt_loader_init( &loader, size, glyph, load_flags, FALSE ); + if ( error ) + goto Exit; + + /* done if we are only interested in the `hdmx` advance */ + if ( load_flags & FT_LOAD_ADVANCE_ONLY && + !( load_flags & FT_LOAD_VERTICAL_LAYOUT ) && + loader.widthp ) + { + glyph->metrics.horiAdvance = loader.widthp[glyph_index] * 64; + goto Done; + } + + glyph->format = FT_GLYPH_FORMAT_OUTLINE; + glyph->num_subglyphs = 0; + glyph->outline.flags = 0; + + /* main loading loop */ + error = load_truetype_glyph( &loader, glyph_index, 0, FALSE ); + if ( !error ) + { + if ( glyph->format == FT_GLYPH_FORMAT_COMPOSITE ) + { + glyph->num_subglyphs = loader.gloader->base.num_subglyphs; + glyph->subglyphs = loader.gloader->base.subglyphs; + } + else + { + glyph->outline = loader.gloader->base.outline; + glyph->outline.flags &= ~FT_OUTLINE_SINGLE_PASS; + + /* Translate array so that (0,0) is the glyph's origin. Note */ + /* that this behaviour is independent on the value of bit 1 of */ + /* the `flags' field in the `head' table -- at least major */ + /* applications like Acroread indicate that. */ + if ( loader.pp1.x ) + FT_Outline_Translate( &glyph->outline, -loader.pp1.x, 0 ); + } + +#ifdef TT_USE_BYTECODE_INTERPRETER + + if ( IS_HINTED( load_flags ) ) + { + glyph->control_data = loader.exec->glyphIns; + glyph->control_len = loader.exec->glyphSize; + + if ( loader.exec->GS.scan_control ) + { + /* convert scan conversion mode to FT_OUTLINE_XXX flags */ + switch ( loader.exec->GS.scan_type ) + { + case 0: /* simple drop-outs including stubs */ + glyph->outline.flags |= FT_OUTLINE_INCLUDE_STUBS; + break; + case 1: /* simple drop-outs excluding stubs */ + /* nothing; it's the default rendering mode */ + break; + case 4: /* smart drop-outs including stubs */ + glyph->outline.flags |= FT_OUTLINE_SMART_DROPOUTS | + FT_OUTLINE_INCLUDE_STUBS; + break; + case 5: /* smart drop-outs excluding stubs */ + glyph->outline.flags |= FT_OUTLINE_SMART_DROPOUTS; + break; + + default: /* no drop-out control */ + glyph->outline.flags |= FT_OUTLINE_IGNORE_DROPOUTS; + break; + } + } + else + glyph->outline.flags |= FT_OUTLINE_IGNORE_DROPOUTS; + } + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + error = compute_glyph_metrics( &loader, glyph_index ); + } + + /* Set the `high precision' bit flag. */ + /* This is _critical_ to get correct output for monochrome */ + /* TrueType glyphs at all sizes using the bytecode interpreter. */ + /* */ + if ( !( load_flags & FT_LOAD_NO_SCALE ) && + size->metrics->y_ppem < 24 ) + glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION; + + FT_TRACE1(( " subglyphs = %u, contours = %hu, points = %hu," + " flags = 0x%.3x\n", + loader.gloader->base.num_subglyphs, + glyph->outline.n_contours, + glyph->outline.n_points, + glyph->outline.flags )); + + Done: + tt_loader_done( &loader ); + + Exit: +#ifdef FT_DEBUG_LEVEL_TRACE + if ( error ) + FT_TRACE1(( " failed (error code 0x%x)\n", + error )); +#endif + + return error; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttgload.h b/non-source/foreign/freetype2/src/truetype/ttgload.h new file mode 100644 index 000000000..22ea967f3 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttgload.h @@ -0,0 +1,61 @@ +/**************************************************************************** + * + * ttgload.h + * + * TrueType Glyph Loader (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTGLOAD_H_ +#define TTGLOAD_H_ + + +#include "ttobjs.h" + +#ifdef TT_USE_BYTECODE_INTERPRETER +#include "ttinterp.h" +#endif + + +FT_BEGIN_HEADER + + + FT_LOCAL( void ) + TT_Init_Glyph_Loading( TT_Face face ); + + FT_LOCAL( void ) + TT_Get_HMetrics( TT_Face face, + FT_UInt idx, + FT_Short* lsb, + FT_UShort* aw ); + + FT_LOCAL( void ) + TT_Get_VMetrics( TT_Face face, + FT_UInt idx, + FT_Pos yMax, + FT_Short* tsb, + FT_UShort* ah ); + + FT_LOCAL( FT_Error ) + TT_Load_Glyph( TT_Size size, + TT_GlyphSlot glyph, + FT_UInt glyph_index, + FT_Int32 load_flags ); + + +FT_END_HEADER + +#endif /* TTGLOAD_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttgxvar.c b/non-source/foreign/freetype2/src/truetype/ttgxvar.c new file mode 100644 index 000000000..4f0083c96 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttgxvar.c @@ -0,0 +1,4594 @@ +/**************************************************************************** + * + * ttgxvar.c + * + * TrueType GX Font Variation loader + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * Apple documents the `fvar', `gvar', `cvar', and `avar' tables at + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6[fgca]var.html + * + * The documentation for `gvar' is not intelligible; `cvar' refers you + * to `gvar' and is thus also incomprehensible. + * + * The documentation for `avar' appears correct, but Apple has no fonts + * with an `avar' table, so it is hard to test. + * + * Many thanks to John Jenkins (at Apple) in figuring this out. + * + * + * Apple's `kern' table has some references to tuple indices, but as + * there is no indication where these indices are defined, nor how to + * interpolate the kerning values (different tuples have different + * classes) this issue is ignored. + * + */ + + +#include <ft2build.h> +#include <freetype/internal/ftdebug.h> +#include FT_CONFIG_CONFIG_H +#include <freetype/internal/ftcalc.h> +#include <freetype/internal/ftstream.h> +#include <freetype/internal/sfnt.h> +#include <freetype/internal/services/svmetric.h> +#include <freetype/tttags.h> +#include <freetype/ttnameid.h> +#include <freetype/ftmm.h> +#include <freetype/ftlist.h> + +#include "ttpload.h" +#include "ttgxvar.h" + +#include "tterrors.h" + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + +#define FT_Stream_FTell( stream ) \ + (FT_ULong)( (stream)->cursor - (stream)->base ) +#define FT_Stream_SeekSet( stream, off ) \ + (stream)->cursor = \ + ( (off) < (FT_ULong)( (stream)->limit - (stream)->base ) ) \ + ? (stream)->base + (off) \ + : (stream)->limit + + + /* some macros we need */ +#define FT_fdot14ToFixed( x ) \ + ( (FT_Fixed)( (FT_ULong)(x) << 2 ) ) +#define FT_intToFixed( i ) \ + ( (FT_Fixed)( (FT_ULong)(i) << 16 ) ) +#define FT_fdot6ToFixed( i ) \ + ( (FT_Fixed)( (FT_ULong)(i) << 10 ) ) +#define FT_fixedToInt( x ) \ + ( (FT_Short)( ( (x) + 0x8000U ) >> 16 ) ) +#define FT_fixedToFdot6( x ) \ + ( (FT_Pos)( ( (x) + 0x200 ) >> 10 ) ) + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttgxvar + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** Internal Routines *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * The macro ALL_POINTS is used in `ft_var_readpackedpoints'. It + * indicates that there is a delta for every point without needing to + * enumerate all of them. + */ + + /* ensure that value `0' has the same width as a pointer */ +#define ALL_POINTS (FT_UShort*)~(FT_PtrDist)0 + + +#define GX_PT_POINTS_ARE_WORDS 0x80U +#define GX_PT_POINT_RUN_COUNT_MASK 0x7FU + + + /************************************************************************** + * + * @Function: + * ft_var_readpackedpoints + * + * @Description: + * Read a set of points to which the following deltas will apply. + * Points are packed with a run length encoding. + * + * @Input: + * stream :: + * The data stream. + * + * @Output: + * point_cnt :: + * The number of points read. A zero value means that + * all points in the glyph will be affected, without + * enumerating them individually. + * + * @Return: + * An array of FT_UShort containing the affected points or the + * special value ALL_POINTS. + */ + static FT_UShort* + ft_var_readpackedpoints( FT_Stream stream, + FT_UInt *point_cnt ) + { + FT_UShort *points = NULL; + FT_UInt n; + FT_UInt runcnt, cnt; + FT_UInt i, j; + FT_UShort first; + FT_Byte* p; + FT_Memory memory = stream->memory; + FT_Error error; + + + *point_cnt = 0; + + n = FT_GET_BYTE(); + if ( n == 0 ) + return ALL_POINTS; + + if ( n & GX_PT_POINTS_ARE_WORDS ) + { + n &= GX_PT_POINT_RUN_COUNT_MASK; + n <<= 8; + n |= FT_GET_BYTE(); + } + + if ( FT_QNEW_ARRAY( points, n ) ) + return NULL; + + p = stream->cursor; + first = 0; + i = 0; + while ( i < n ) + { + if ( p >= stream->limit ) + goto Fail; + + runcnt = FT_NEXT_BYTE( p ); + cnt = runcnt & GX_PT_POINT_RUN_COUNT_MASK; + + /* first point not included in run count */ + cnt++; + if ( cnt > n - i ) + cnt = n - i; + + if ( runcnt & GX_PT_POINTS_ARE_WORDS ) + { + if ( 2 * cnt > (FT_UInt)( stream->limit - p ) ) + goto Fail; + + for ( j = 0; j < cnt; j++ ) + { + first += FT_NEXT_USHORT( p ); + points[i++] = first; + } + } + else + { + if ( cnt > (FT_UInt)( stream->limit - p ) ) + goto Fail; + + for ( j = 0; j < cnt; j++ ) + { + first += FT_NEXT_BYTE( p ); + points[i++] = first; + } + } + } + + stream->cursor = p; + + *point_cnt = n; + + return points; + + Fail: + FT_TRACE1(( "ft_var_readpackedpoints: invalid table\n" )); + + FT_FREE( points ); + return NULL; + } + + +#define GX_DT_DELTAS_ARE_ZERO 0x80U +#define GX_DT_DELTAS_ARE_WORDS 0x40U +#define GX_DT_DELTA_RUN_COUNT_MASK 0x3FU + + + /************************************************************************** + * + * @Function: + * ft_var_readpackeddeltas + * + * @Description: + * Read a set of deltas. These are packed slightly differently than + * points. In particular there is no overall count. + * + * @Input: + * stream :: + * The data stream. + * + * delta_cnt :: + * The number of deltas to be read. + * + * @Return: + * An array of FT_Fixed containing the deltas for the affected + * points. (This only gets the deltas for one dimension. It will + * generally be called twice, once for x, once for y. When used in + * cvt table, it will only be called once.) + * + * We use FT_Fixed to avoid accumulation errors while summing up all + * deltas (the rounding to integer values happens as the very last + * step). + */ + static FT_Fixed* + ft_var_readpackeddeltas( FT_Stream stream, + FT_UInt delta_cnt ) + { + FT_Fixed *deltas = NULL; + FT_UInt runcnt, cnt; + FT_UInt i, j; + FT_Byte* p; + FT_Memory memory = stream->memory; + FT_Error error; + + + if ( FT_QNEW_ARRAY( deltas, delta_cnt ) ) + return NULL; + + p = stream->cursor; + i = 0; + while ( i < delta_cnt ) + { + if ( p >= stream->limit ) + goto Fail; + + runcnt = FT_NEXT_BYTE( p ); + cnt = runcnt & GX_DT_DELTA_RUN_COUNT_MASK; + + /* first point not included in run count */ + cnt++; + if ( cnt > delta_cnt - i ) + cnt = delta_cnt - i; + + if ( runcnt & GX_DT_DELTAS_ARE_ZERO ) + { + for ( j = 0; j < cnt; j++ ) + deltas[i++] = 0; + } + else if ( runcnt & GX_DT_DELTAS_ARE_WORDS ) + { + if ( 2 * cnt > (FT_UInt)( stream->limit - p ) ) + goto Fail; + + for ( j = 0; j < cnt; j++ ) + deltas[i++] = FT_intToFixed( FT_NEXT_SHORT( p ) ); + } + else + { + if ( cnt > (FT_UInt)( stream->limit - p ) ) + goto Fail; + + for ( j = 0; j < cnt; j++ ) + deltas[i++] = FT_intToFixed( FT_NEXT_CHAR( p ) ); + } + } + + stream->cursor = p; + + return deltas; + + Fail: + FT_TRACE1(( "ft_var_readpackeddeltas: invalid table\n" )); + + FT_FREE( deltas ); + return NULL; + } + + + /************************************************************************** + * + * @Function: + * ft_var_load_avar + * + * @Description: + * Parse the `avar' table if present. It need not be, so we return + * nothing. + * + * @InOut: + * face :: + * The font face. + */ + static void + ft_var_load_avar( TT_Face face ) + { + FT_Error error; + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = stream->memory; + FT_Int i, j; + + GX_Blend blend = face->blend; + GX_AVarSegment segment; + GX_AVarTable table; + + FT_Long version; + FT_Long axisCount; + FT_ULong table_len; + +#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION + FT_ULong table_offset; + FT_ULong store_offset; + FT_ULong axisMap_offset; +#endif + + + FT_TRACE2(( "AVAR " )); + + blend->avar_loaded = TRUE; + error = face->goto_table( face, TTAG_avar, stream, &table_len ); + if ( error ) + { + FT_TRACE2(( "is missing\n" )); + return; + } + +#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION + table_offset = FT_STREAM_POS(); +#endif + + if ( FT_FRAME_ENTER( table_len ) ) + return; + + version = FT_GET_LONG(); + axisCount = FT_GET_LONG(); + + if ( version != 0x00010000L +#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION + && version != 0x00020000L +#endif + ) + { + FT_TRACE2(( "bad table version\n" )); + goto Exit; + } + + FT_TRACE2(( "loaded\n" )); + + if ( axisCount != (FT_Long)blend->mmvar->num_axis ) + { + FT_TRACE2(( "ft_var_load_avar:" + " number of axes in `avar' and `fvar'\n" )); + FT_TRACE2(( " table are different\n" )); + goto Exit; + } + + if ( FT_NEW( blend->avar_table ) ) + goto Exit; + table = blend->avar_table; + + if ( FT_QNEW_ARRAY( table->avar_segment, axisCount ) ) + goto Exit; + + segment = &table->avar_segment[0]; + for ( i = 0; i < axisCount; i++, segment++ ) + { + FT_TRACE5(( " axis %d:\n", i )); + + segment->pairCount = FT_GET_USHORT(); + if ( (FT_ULong)segment->pairCount * 4 > table_len || + FT_QNEW_ARRAY( segment->correspondence, segment->pairCount ) ) + { + /* Failure. Free everything we have done so far. We must do */ + /* it right now since loading the `avar' table is optional. */ + + for ( j = i - 1; j >= 0; j-- ) + FT_FREE( table->avar_segment[j].correspondence ); + + FT_FREE( table->avar_segment ); + goto Exit; + } + + for ( j = 0; j < segment->pairCount; j++ ) + { + 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", + (double)segment->correspondence[j].fromCoord / 65536, + (double)segment->correspondence[j].toCoord / 65536 )); + } + + FT_TRACE5(( "\n" )); + } + +#ifndef TT_CONFIG_OPTION_NO_BORING_EXPANSION + if ( version < 0x00020000L ) + goto Exit; + + axisMap_offset = FT_GET_ULONG(); + store_offset = FT_GET_ULONG(); + + if ( store_offset ) + { + error = tt_var_load_item_variation_store( + FT_FACE( face ), + table_offset + store_offset, + &table->itemStore ); + if ( error ) + goto Exit; + } + + if ( axisMap_offset ) + { + error = tt_var_load_delta_set_index_mapping( + FT_FACE( face ), + table_offset + axisMap_offset, + &table->axisMap, + &table->itemStore, + table_len ); + if ( error ) + goto Exit; + } +#endif + + + Exit: + FT_FRAME_EXIT(); + } + + + FT_LOCAL_DEF( FT_Error ) + tt_var_load_item_variation_store( FT_Face face, /* TT_Face */ + FT_ULong offset, + GX_ItemVarStore itemStore ) + { + TT_Face ttface = (TT_Face)face; + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = stream->memory; + + FT_Error error; + FT_UShort format; + FT_ULong region_offset; + + FT_UInt data_count; + FT_UShort axis_count; + FT_UInt region_count; + + FT_UInt i, j; + FT_Bool long_words; + + GX_Blend blend = ttface->blend; + FT_ULong* dataOffsetArray = NULL; + + + if ( FT_STREAM_SEEK( offset ) || + FT_READ_USHORT( format ) ) + goto Exit; + + if ( format != 1 ) + { + FT_TRACE2(( "tt_var_load_item_variation_store: bad store format %d\n", + format )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* read top level fields */ + if ( FT_READ_ULONG( region_offset ) || + FT_READ_USHORT( data_count ) ) + goto Exit; + + /* we need at least one entry in `itemStore->varData' */ + if ( !data_count ) + { + FT_TRACE2(( "tt_var_load_item_variation_store: missing varData\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* make temporary copy of item variation data offsets; */ + /* we will parse region list first, then come back */ + if ( FT_QNEW_ARRAY( dataOffsetArray, data_count ) ) + goto Exit; + + for ( i = 0; i < data_count; i++ ) + { + if ( FT_READ_ULONG( dataOffsetArray[i] ) ) + goto Exit; + } + + /* parse array of region records (region list) */ + if ( FT_STREAM_SEEK( offset + region_offset ) ) + goto Exit; + + if ( FT_READ_USHORT( axis_count ) || + FT_READ_USHORT( region_count ) ) + goto Exit; + + if ( axis_count != (FT_Long)blend->mmvar->num_axis ) + { + FT_TRACE2(( "tt_var_load_item_variation_store:" + " number of axes in item variation store\n" )); + FT_TRACE2(( " " + " and `fvar' table are different\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + itemStore->axisCount = axis_count; + + /* new constraint in OpenType 1.8.4 */ + if ( region_count >= 32768U ) + { + FT_TRACE2(( "tt_var_load_item_variation_store:" + " too many variation region tables\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( FT_NEW_ARRAY( itemStore->varRegionList, region_count ) ) + goto Exit; + itemStore->regionCount = region_count; + + for ( i = 0; i < itemStore->regionCount; i++ ) + { + GX_AxisCoords axisCoords; + + + if ( FT_NEW_ARRAY( itemStore->varRegionList[i].axisList, axis_count ) ) + goto Exit; + + axisCoords = itemStore->varRegionList[i].axisList; + + for ( j = 0; j < itemStore->axisCount; j++ ) + { + FT_Int start, peak, end; + + + if ( FT_READ_SHORT( start ) || + FT_READ_SHORT( peak ) || + FT_READ_SHORT( end ) ) + goto Exit; + + /* immediately tag invalid ranges with special peak = 0 */ + if ( ( start < 0 && end > 0 ) || start > peak || peak > end ) + peak = 0; + + axisCoords[j].startCoord = FT_fdot14ToFixed( start ); + axisCoords[j].peakCoord = FT_fdot14ToFixed( peak ); + axisCoords[j].endCoord = FT_fdot14ToFixed( end ); + } + } + + /* end of region list parse */ + + /* use dataOffsetArray now to parse varData items */ + if ( FT_NEW_ARRAY( itemStore->varData, data_count ) ) + goto Exit; + itemStore->dataCount = data_count; + + for ( i = 0; i < data_count; i++ ) + { + GX_ItemVarData varData = &itemStore->varData[i]; + + FT_UInt item_count; + FT_UShort word_delta_count; + FT_UInt region_idx_count; + FT_UInt per_region_size; + + + if ( FT_STREAM_SEEK( offset + dataOffsetArray[i] ) ) + goto Exit; + + if ( FT_READ_USHORT( item_count ) || + FT_READ_USHORT( word_delta_count ) || + FT_READ_USHORT( region_idx_count ) ) + goto Exit; + + long_words = !!( word_delta_count & 0x8000 ); + word_delta_count &= 0x7FFF; + + /* check some data consistency */ + if ( word_delta_count > region_idx_count ) + { + FT_TRACE2(( "bad short count %d or region count %d\n", + word_delta_count, + region_idx_count )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( region_idx_count > itemStore->regionCount ) + { + FT_TRACE2(( "inconsistent regionCount %d in varData[%d]\n", + region_idx_count, + i )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* parse region indices */ + if ( FT_NEW_ARRAY( varData->regionIndices, region_idx_count ) ) + goto Exit; + varData->regionIdxCount = region_idx_count; + varData->wordDeltaCount = word_delta_count; + varData->longWords = long_words; + + for ( j = 0; j < varData->regionIdxCount; j++ ) + { + if ( FT_READ_USHORT( varData->regionIndices[j] ) ) + goto Exit; + + if ( varData->regionIndices[j] >= itemStore->regionCount ) + { + FT_TRACE2(( "bad region index %d\n", + varData->regionIndices[j] )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + } + + per_region_size = word_delta_count + region_idx_count; + if ( long_words ) + per_region_size *= 2; + + if ( FT_NEW_ARRAY( varData->deltaSet, per_region_size * item_count ) ) + goto Exit; + if ( FT_Stream_Read( stream, + varData->deltaSet, + per_region_size * item_count ) ) + { + FT_TRACE2(( "deltaSet read failed." )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + varData->itemCount = item_count; + } + + Exit: + FT_FREE( dataOffsetArray ); + + return error; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_var_load_delta_set_index_mapping( FT_Face face, /* TT_Face */ + FT_ULong offset, + GX_DeltaSetIdxMap map, + GX_ItemVarStore itemStore, + FT_ULong table_len ) + { + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = stream->memory; + + FT_Error error; + + FT_Byte format; + FT_Byte entryFormat; + FT_UInt entrySize; + FT_UInt innerBitCount; + FT_UInt innerIndexMask; + FT_ULong i; + FT_UInt j; + + + if ( FT_STREAM_SEEK( offset ) || + FT_READ_BYTE( format ) || + FT_READ_BYTE( entryFormat ) ) + goto Exit; + + if ( format == 0 ) + { + if ( FT_READ_USHORT( map->mapCount ) ) + goto Exit; + } + else if ( format == 1 ) /* new in OpenType 1.9 */ + { + if ( FT_READ_ULONG( map->mapCount ) ) + goto Exit; + } + else + { + FT_TRACE2(( "bad map format %d\n", format )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( entryFormat & 0xC0 ) + { + FT_TRACE2(( "bad entry format %d\n", format )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* bytes per entry: 1, 2, 3, or 4 */ + entrySize = ( ( entryFormat & 0x30 ) >> 4 ) + 1; + innerBitCount = ( entryFormat & 0x0F ) + 1; + innerIndexMask = ( 1 << innerBitCount ) - 1; + + /* rough sanity check */ + if ( map->mapCount * entrySize > table_len ) + { + FT_TRACE1(( "tt_var_load_delta_set_index_mapping:" + " invalid number of delta-set index mappings\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( FT_NEW_ARRAY( map->innerIndex, map->mapCount ) ) + goto Exit; + + if ( FT_NEW_ARRAY( map->outerIndex, map->mapCount ) ) + goto Exit; + + for ( i = 0; i < map->mapCount; i++ ) + { + FT_UInt mapData = 0; + FT_UInt outerIndex, innerIndex; + + + /* read map data one unsigned byte at a time, big endian */ + for ( j = 0; j < entrySize; j++ ) + { + FT_Byte data; + + + if ( FT_READ_BYTE( data ) ) + goto Exit; + + mapData = ( mapData << 8 ) | data; + } + + /* new in OpenType 1.8.4 */ + if ( mapData == 0xFFFFFFFFUL ) + { + /* no variation data for this item */ + map->outerIndex[i] = 0xFFFFU; + map->innerIndex[i] = 0xFFFFU; + + continue; + } + + outerIndex = mapData >> innerBitCount; + + if ( outerIndex >= itemStore->dataCount ) + { + FT_TRACE2(( "outerIndex[%ld] == %d out of range\n", + i, + outerIndex )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + map->outerIndex[i] = outerIndex; + + innerIndex = mapData & innerIndexMask; + + if ( innerIndex >= itemStore->varData[outerIndex].itemCount ) + { + FT_TRACE2(( "innerIndex[%ld] == %d out of range\n", + i, + innerIndex )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + map->innerIndex[i] = innerIndex; + } + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * ft_var_load_hvvar + * + * @Description: + * If `vertical' is zero, parse the `HVAR' table and set + * `blend->hvar_loaded' to TRUE. On success, `blend->hvar_checked' + * is set to TRUE. + * + * If `vertical' is not zero, parse the `VVAR' table and set + * `blend->vvar_loaded' to TRUE. On success, `blend->vvar_checked' + * is set to TRUE. + * + * Some memory may remain allocated on error; it is always freed in + * `tt_done_blend', however. + * + * @InOut: + * face :: + * The font face. + * + * @Return: + * FreeType error code. 0 means success. + */ + static FT_Error + ft_var_load_hvvar( TT_Face face, + FT_Bool vertical ) + { + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = stream->memory; + + GX_Blend blend = face->blend; + + GX_HVVarTable table; + + FT_Error error; + FT_UShort majorVersion; + FT_ULong table_len; + FT_ULong table_offset; + FT_ULong store_offset; + FT_ULong widthMap_offset; + + + if ( vertical ) + { + blend->vvar_loaded = TRUE; + + FT_TRACE2(( "VVAR " )); + + error = face->goto_table( face, TTAG_VVAR, stream, &table_len ); + } + else + { + blend->hvar_loaded = TRUE; + + FT_TRACE2(( "HVAR " )); + + error = face->goto_table( face, TTAG_HVAR, stream, &table_len ); + } + + if ( error ) + { + FT_TRACE2(( "is missing\n" )); + goto Exit; + } + + table_offset = FT_STREAM_POS(); + + /* skip minor version */ + if ( FT_READ_USHORT( majorVersion ) || + FT_STREAM_SKIP( 2 ) ) + goto Exit; + + if ( majorVersion != 1 ) + { + FT_TRACE2(( "bad table version %d\n", majorVersion )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( FT_READ_ULONG( store_offset ) || + FT_READ_ULONG( widthMap_offset ) ) + goto Exit; + + if ( vertical ) + { + if ( FT_NEW( blend->vvar_table ) ) + goto Exit; + table = blend->vvar_table; + } + else + { + if ( FT_NEW( blend->hvar_table ) ) + goto Exit; + table = blend->hvar_table; + } + + error = tt_var_load_item_variation_store( + FT_FACE( face ), + table_offset + store_offset, + &table->itemStore ); + if ( error ) + goto Exit; + + if ( widthMap_offset ) + { + error = tt_var_load_delta_set_index_mapping( + FT_FACE( face ), + table_offset + widthMap_offset, + &table->widthMap, + &table->itemStore, + table_len ); + if ( error ) + goto Exit; + } + + FT_TRACE2(( "loaded\n" )); + error = FT_Err_Ok; + + Exit: + if ( !error ) + { + if ( vertical ) + { + blend->vvar_checked = TRUE; + + /* FreeType doesn't provide functions to quickly retrieve */ + /* TSB, BSB, or VORG values; we thus don't have to implement */ + /* support for those three item variation stores. */ + + face->variation_support |= TT_FACE_FLAG_VAR_VADVANCE; + } + else + { + blend->hvar_checked = TRUE; + + /* FreeType doesn't provide functions to quickly retrieve */ + /* LSB or RSB values; we thus don't have to implement */ + /* support for those two item variation stores. */ + + face->variation_support |= TT_FACE_FLAG_VAR_HADVANCE; + } + } + + return error; + } + + + FT_LOCAL_DEF( FT_ItemVarDelta ) + tt_var_get_item_delta( FT_Face face, /* TT_Face */ + GX_ItemVarStore itemStore, + FT_UInt outerIndex, + FT_UInt innerIndex ) + { + TT_Face ttface = (TT_Face)face; + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = stream->memory; + FT_Error error = FT_Err_Ok; + + GX_ItemVarData varData; + FT_ItemVarDelta* deltaSet = NULL; + FT_ItemVarDelta deltaSetStack[16]; + + FT_Fixed* scalars = NULL; + FT_Fixed scalarsStack[16]; + + FT_UInt master, j; + FT_ItemVarDelta returnValue = 0; + FT_UInt per_region_size; + FT_Byte* bytes; + + + if ( !ttface->blend || !ttface->blend->normalizedcoords ) + return 0; + + /* OpenType 1.8.4+: No variation data for this item */ + /* as indices have special value 0xFFFF. */ + if ( outerIndex == 0xFFFF && innerIndex == 0xFFFF ) + return 0; + + /* See pseudo code from `Font Variations Overview' */ + /* in the OpenType specification. */ + + if ( outerIndex >= itemStore->dataCount ) + return 0; /* Out of range. */ + + varData = &itemStore->varData[outerIndex]; + + if ( innerIndex >= varData->itemCount ) + return 0; /* Out of range. */ + + if ( varData->regionIdxCount == 0 ) + return 0; /* Avoid "applying zero offset to null pointer". */ + + if ( varData->regionIdxCount < 16 ) + { + deltaSet = deltaSetStack; + scalars = scalarsStack; + } + else + { + if ( FT_QNEW_ARRAY( deltaSet, varData->regionIdxCount ) ) + goto Exit; + if ( FT_QNEW_ARRAY( scalars, varData->regionIdxCount ) ) + goto Exit; + } + + /* Parse delta set. */ + /* */ + /* Deltas are (word_delta_count + region_idx_count) bytes each */ + /* if `longWords` isn't set, and twice as much otherwise. */ + per_region_size = varData->wordDeltaCount + varData->regionIdxCount; + if ( varData->longWords ) + per_region_size *= 2; + + bytes = varData->deltaSet + per_region_size * innerIndex; + + if ( varData->longWords ) + { + for ( master = 0; master < varData->wordDeltaCount; master++ ) + deltaSet[master] = FT_NEXT_LONG( bytes ); + for ( ; master < varData->regionIdxCount; master++ ) + deltaSet[master] = FT_NEXT_SHORT( bytes ); + } + else + { + for ( master = 0; master < varData->wordDeltaCount; master++ ) + deltaSet[master] = FT_NEXT_SHORT( bytes ); + for ( ; master < varData->regionIdxCount; master++ ) + deltaSet[master] = FT_NEXT_CHAR( bytes ); + } + + /* outer loop steps through master designs to be blended */ + for ( master = 0; master < varData->regionIdxCount; master++ ) + { + FT_Fixed scalar = 0x10000L; + FT_UInt regionIndex = varData->regionIndices[master]; + + GX_AxisCoords axis = itemStore->varRegionList[regionIndex].axisList; + + + /* inner loop steps through axes in this region */ + for ( j = 0; j < itemStore->axisCount; j++, axis++ ) + { + FT_Fixed ncv = ttface->blend->normalizedcoords[j]; + + + /* compute the scalar contribution of this axis */ + /* with peak of 0 used for invalid axes */ + if ( axis->peakCoord == ncv || + axis->peakCoord == 0 ) + continue; + + /* ignore this region if coords are out of range */ + else if ( ncv <= axis->startCoord || + ncv >= axis->endCoord ) + { + scalar = 0; + break; + } + + /* cumulative product of all the axis scalars */ + else if ( ncv < axis->peakCoord ) + scalar = FT_MulDiv( scalar, + ncv - axis->startCoord, + axis->peakCoord - axis->startCoord ); + else /* ncv > axis->peakCoord */ + scalar = FT_MulDiv( scalar, + axis->endCoord - ncv, + axis->endCoord - axis->peakCoord ); + + } /* per-axis loop */ + + scalars[master] = scalar; + + } /* per-region loop */ + + + /* Compute the scaled delta for this region. + * + * From: https://docs.microsoft.com/en-us/typography/opentype/spec/otvarcommonformats#item-variation-store-header-and-item-variation-data-subtables: + * + * `Fixed` is a 32-bit (16.16) type and, in the general case, requires + * 32-bit deltas. As described above, the `DeltaSet` record can + * accommodate deltas that are, logically, either 16-bit or 32-bit. + * When scaled deltas are applied to `Fixed` values, the `Fixed` value + * is treated like a 32-bit integer. + * + * `FT_MulAddFix` internally uses 64-bit precision; it thus can handle + * deltas ranging from small 8-bit to large 32-bit values that are + * applied to 16.16 `FT_Fixed` / OpenType `Fixed` values. + */ + returnValue = FT_MulAddFix( scalars, deltaSet, varData->regionIdxCount ); + + Exit: + if ( scalars != scalarsStack ) + FT_FREE( scalars ); + if ( deltaSet != deltaSetStack ) + FT_FREE( deltaSet ); + + return returnValue; + } + + + /************************************************************************** + * + * @Function: + * tt_hvadvance_adjust + * + * @Description: + * Apply `HVAR' advance width or `VVAR' advance height adjustment of + * a given glyph. + * + * @Input: + * gindex :: + * The glyph index. + * + * vertical :: + * If set, handle `VVAR' table. + * + * @InOut: + * face :: + * The font face. + * + * adelta :: + * Points to width or height value that gets modified. + */ + static FT_Error + tt_hvadvance_adjust( TT_Face face, + FT_UInt gindex, + FT_Int *avalue, + FT_Bool vertical ) + { + FT_Error error = FT_Err_Ok; + FT_UInt innerIndex, outerIndex; + FT_Int delta; + + GX_HVVarTable table; + + + if ( !face->doblend || !face->blend ) + goto Exit; + + if ( vertical ) + { + if ( !face->blend->vvar_loaded ) + { + /* initialize vvar table */ + face->blend->vvar_error = ft_var_load_hvvar( face, 1 ); + } + + if ( !face->blend->vvar_checked ) + { + error = face->blend->vvar_error; + goto Exit; + } + + table = face->blend->vvar_table; + } + else + { + if ( !face->blend->hvar_loaded ) + { + /* initialize hvar table */ + face->blend->hvar_error = ft_var_load_hvvar( face, 0 ); + } + + if ( !face->blend->hvar_checked ) + { + error = face->blend->hvar_error; + goto Exit; + } + + table = face->blend->hvar_table; + } + + /* advance width or height adjustments are always present in an */ + /* `HVAR' or `VVAR' table; no need to test for this capability */ + + if ( table->widthMap.innerIndex ) + { + FT_UInt idx = gindex; + + + if ( idx >= table->widthMap.mapCount ) + idx = table->widthMap.mapCount - 1; + + /* trust that HVAR parser has checked indices */ + outerIndex = table->widthMap.outerIndex[idx]; + innerIndex = table->widthMap.innerIndex[idx]; + } + else + { + /* no widthMap data */ + outerIndex = 0; + innerIndex = gindex; + } + + delta = tt_var_get_item_delta( FT_FACE( face ), + &table->itemStore, + outerIndex, + innerIndex ); + + if ( delta ) + { + FT_TRACE5(( "%s value %d adjusted by %d unit%s (%s)\n", + vertical ? "vertical height" : "horizontal width", + *avalue, + delta, + delta == 1 ? "" : "s", + vertical ? "VVAR" : "HVAR" )); + + *avalue = ADD_INT( *avalue, delta ); + } + + Exit: + return error; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_hadvance_adjust( FT_Face face, /* TT_Face */ + FT_UInt gindex, + FT_Int *avalue ) + { + return tt_hvadvance_adjust( (TT_Face)face, gindex, avalue, 0 ); + } + + + FT_LOCAL_DEF( FT_Error ) + tt_vadvance_adjust( FT_Face face, /* TT_Face */ + FT_UInt gindex, + FT_Int *avalue ) + { + return tt_hvadvance_adjust( (TT_Face)face, gindex, avalue, 1 ); + } + + +#define GX_VALUE_SIZE 8 + + /* all values are FT_Short or FT_UShort entities; */ + /* we treat them consistently as FT_Short */ +#define GX_VALUE_CASE( tag, dflt ) \ + case MVAR_TAG_ ## tag : \ + p = (FT_Short*)&face->dflt; \ + break + +#define GX_GASP_CASE( idx ) \ + case MVAR_TAG_GASP_ ## idx : \ + if ( idx < face->gasp.numRanges - 1 ) \ + p = (FT_Short*)&face->gasp.gaspRanges[idx].maxPPEM; \ + else \ + p = NULL; \ + break + + + static FT_Short* + ft_var_get_value_pointer( TT_Face face, + FT_ULong mvar_tag ) + { + FT_Short* p; + + + switch ( mvar_tag ) + { + GX_GASP_CASE( 0 ); + GX_GASP_CASE( 1 ); + GX_GASP_CASE( 2 ); + GX_GASP_CASE( 3 ); + GX_GASP_CASE( 4 ); + GX_GASP_CASE( 5 ); + GX_GASP_CASE( 6 ); + GX_GASP_CASE( 7 ); + GX_GASP_CASE( 8 ); + GX_GASP_CASE( 9 ); + + GX_VALUE_CASE( CPHT, os2.sCapHeight ); + GX_VALUE_CASE( HASC, os2.sTypoAscender ); + GX_VALUE_CASE( HCLA, os2.usWinAscent ); + GX_VALUE_CASE( HCLD, os2.usWinDescent ); + GX_VALUE_CASE( HCOF, horizontal.caret_Offset ); + GX_VALUE_CASE( HCRN, horizontal.caret_Slope_Run ); + GX_VALUE_CASE( HCRS, horizontal.caret_Slope_Rise ); + GX_VALUE_CASE( HDSC, os2.sTypoDescender ); + GX_VALUE_CASE( HLGP, os2.sTypoLineGap ); + GX_VALUE_CASE( SBXO, os2.ySubscriptXOffset); + GX_VALUE_CASE( SBXS, os2.ySubscriptXSize ); + GX_VALUE_CASE( SBYO, os2.ySubscriptYOffset ); + GX_VALUE_CASE( SBYS, os2.ySubscriptYSize ); + GX_VALUE_CASE( SPXO, os2.ySuperscriptXOffset ); + GX_VALUE_CASE( SPXS, os2.ySuperscriptXSize ); + GX_VALUE_CASE( SPYO, os2.ySuperscriptYOffset ); + GX_VALUE_CASE( SPYS, os2.ySuperscriptYSize ); + GX_VALUE_CASE( STRO, os2.yStrikeoutPosition ); + GX_VALUE_CASE( STRS, os2.yStrikeoutSize ); + GX_VALUE_CASE( UNDO, postscript.underlinePosition ); + GX_VALUE_CASE( UNDS, postscript.underlineThickness ); + GX_VALUE_CASE( VASC, vertical.Ascender ); + GX_VALUE_CASE( VCOF, vertical.caret_Offset ); + GX_VALUE_CASE( VCRN, vertical.caret_Slope_Run ); + GX_VALUE_CASE( VCRS, vertical.caret_Slope_Rise ); + GX_VALUE_CASE( VDSC, vertical.Descender ); + GX_VALUE_CASE( VLGP, vertical.Line_Gap ); + GX_VALUE_CASE( XHGT, os2.sxHeight ); + + default: + /* ignore unknown tag */ + p = NULL; + } + + return p; + } + + + /************************************************************************** + * + * @Function: + * ft_var_load_mvar + * + * @Description: + * Parse the `MVAR' table. + * + * Some memory may remain allocated on error; it is always freed in + * `tt_done_blend', however. + * + * @InOut: + * face :: + * The font face. + */ + static void + ft_var_load_mvar( TT_Face face ) + { + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = stream->memory; + + GX_Blend blend = face->blend; + GX_ItemVarStore itemStore; + GX_Value value, limit; + + FT_Error error; + FT_UShort majorVersion; + FT_ULong table_len; + FT_ULong table_offset; + FT_UShort store_offset; + FT_ULong records_offset; + + + FT_TRACE2(( "MVAR " )); + + error = face->goto_table( face, TTAG_MVAR, stream, &table_len ); + if ( error ) + { + FT_TRACE2(( "is missing\n" )); + return; + } + + table_offset = FT_STREAM_POS(); + + /* skip minor version */ + if ( FT_READ_USHORT( majorVersion ) || + FT_STREAM_SKIP( 2 ) ) + return; + + if ( majorVersion != 1 ) + { + FT_TRACE2(( "bad table version %d\n", majorVersion )); + return; + } + + if ( FT_NEW( blend->mvar_table ) ) + return; + + /* skip reserved entry and value record size */ + if ( FT_STREAM_SKIP( 4 ) || + FT_READ_USHORT( blend->mvar_table->valueCount ) || + FT_READ_USHORT( store_offset ) ) + return; + + records_offset = FT_STREAM_POS(); + + error = tt_var_load_item_variation_store( + FT_FACE( face ), + table_offset + store_offset, + &blend->mvar_table->itemStore ); + if ( error ) + return; + + if ( FT_NEW_ARRAY( blend->mvar_table->values, + blend->mvar_table->valueCount ) ) + return; + + if ( FT_STREAM_SEEK( records_offset ) || + FT_FRAME_ENTER( blend->mvar_table->valueCount * GX_VALUE_SIZE ) ) + return; + + value = blend->mvar_table->values; + limit = FT_OFFSET( value, blend->mvar_table->valueCount ); + itemStore = &blend->mvar_table->itemStore; + + for ( ; value < limit; value++ ) + { + value->tag = FT_GET_ULONG(); + value->outerIndex = FT_GET_USHORT(); + value->innerIndex = FT_GET_USHORT(); + + /* new in OpenType 1.8.4 */ + if ( value->outerIndex == 0xFFFFU && value->innerIndex == 0xFFFFU ) + { + /* no variation data for this item */ + continue; + } + + if ( value->outerIndex >= itemStore->dataCount || + value->innerIndex >= itemStore->varData[value->outerIndex] + .itemCount ) + { + error = FT_THROW( Invalid_Table ); + break; + } + } + + FT_FRAME_EXIT(); + + if ( error ) + return; + + FT_TRACE2(( "loaded\n" )); + + value = blend->mvar_table->values; + limit = FT_OFFSET( value, blend->mvar_table->valueCount ); + + /* save original values of the data MVAR is going to modify */ + for ( ; value < limit; value++ ) + { + FT_Short* p = ft_var_get_value_pointer( face, value->tag ); + + + if ( p ) + value->unmodified = *p; +#ifdef FT_DEBUG_LEVEL_TRACE + else + FT_TRACE1(( "ft_var_load_mvar: Ignoring unknown tag `%c%c%c%c'\n", + (FT_Char)( value->tag >> 24 ), + (FT_Char)( value->tag >> 16 ), + (FT_Char)( value->tag >> 8 ), + (FT_Char)( value->tag ) )); +#endif + } + + face->variation_support |= TT_FACE_FLAG_VAR_MVAR; + } + + + static FT_Error + ft_size_reset_iterator( FT_ListNode node, + void* user ) + { + FT_Size size = (FT_Size)node->data; + FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)user; + + + var->size_reset( size ); + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * tt_apply_mvar + * + * @Description: + * Apply `MVAR' table adjustments. + * + * @InOut: + * face :: + * The font face. + */ + FT_LOCAL_DEF( void ) + tt_apply_mvar( FT_Face face ) /* TT_Face */ + { + TT_Face ttface = (TT_Face)face; + + GX_Blend blend = ttface->blend; + GX_Value value, limit; + + FT_Short mvar_hasc_delta = 0; + FT_Short mvar_hdsc_delta = 0; + FT_Short mvar_hlgp_delta = 0; + + + if ( !( ttface->variation_support & TT_FACE_FLAG_VAR_MVAR ) ) + return; + + value = blend->mvar_table->values; + limit = FT_OFFSET( value, blend->mvar_table->valueCount ); + + for ( ; value < limit; value++ ) + { + FT_Short* p = ft_var_get_value_pointer( ttface, value->tag ); + FT_Int delta; + + + delta = tt_var_get_item_delta( face, + &blend->mvar_table->itemStore, + value->outerIndex, + value->innerIndex ); + + if ( p && delta ) + { + FT_TRACE5(( "value %c%c%c%c (%d unit%s) adjusted by %d unit%s (MVAR)\n", + (FT_Char)( value->tag >> 24 ), + (FT_Char)( value->tag >> 16 ), + (FT_Char)( value->tag >> 8 ), + (FT_Char)( value->tag ), + value->unmodified, + value->unmodified == 1 ? "" : "s", + delta, + delta == 1 ? "" : "s" )); + + /* since we handle both signed and unsigned values as FT_Short, */ + /* ensure proper overflow arithmetic */ + *p = (FT_Short)( value->unmodified + (FT_Short)delta ); + + /* Treat hasc, hdsc and hlgp specially, see below. */ + if ( value->tag == MVAR_TAG_HASC ) + mvar_hasc_delta = (FT_Short)delta; + else if ( value->tag == MVAR_TAG_HDSC ) + mvar_hdsc_delta = (FT_Short)delta; + else if ( value->tag == MVAR_TAG_HLGP ) + mvar_hlgp_delta = (FT_Short)delta; + } + } + + /* adjust all derived values */ + { + FT_Service_MetricsVariations var = + (FT_Service_MetricsVariations)ttface->face_var; + + /* + * Apply the deltas of hasc, hdsc and hlgp to the FT_Face's ascender, + * descender and height attributes, no matter how they were originally + * computed. + * + * (Code that ignores those and accesses the font's metrics values + * directly is already served by the delta application code above.) + * + * The MVAR table supports variations for both typo and win metrics. + * According to Behdad Esfahbod, the thinking of the working group was + * that no one uses win metrics anymore for setting line metrics (the + * specification even calls these metrics "horizontal clipping + * ascent/descent", probably for their role on the Windows platform in + * computing clipping boxes), and new fonts should use typo metrics, so + * typo deltas should be applied to whatever sfnt_load_face decided the + * line metrics should be. + * + * Before, the following led to different line metrics between default + * outline and instances, visible when e.g. the default outlines were + * used as the regular face and instances for everything else: + * + * 1. sfnt_load_face applied the hhea metrics by default. + * 2. This code later applied the typo metrics by default, regardless of + * whether they were actually changed or the font had the OS/2 table's + * fsSelection's bit 7 (USE_TYPO_METRICS) set. + */ + FT_Short current_line_gap = face->height - face->ascender + + face->descender; + + + face->ascender = face->ascender + mvar_hasc_delta; + face->descender = face->descender + mvar_hdsc_delta; + face->height = face->ascender - face->descender + + current_line_gap + mvar_hlgp_delta; + + face->underline_position = ttface->postscript.underlinePosition - + ttface->postscript.underlineThickness / 2; + face->underline_thickness = ttface->postscript.underlineThickness; + + /* iterate over all FT_Size objects and call `var->size_reset' */ + /* to propagate the metrics changes */ + if ( var && var->size_reset ) + FT_List_Iterate( &face->sizes_list, + ft_size_reset_iterator, + (void*)var ); + } + } + + + typedef struct GX_GVar_Head_ + { + FT_Long version; + FT_UShort axisCount; + FT_UShort globalCoordCount; + FT_ULong offsetToCoord; + FT_UShort glyphCount; + FT_UShort flags; + FT_ULong offsetToData; + + } GX_GVar_Head; + + + /************************************************************************** + * + * @Function: + * ft_var_load_gvar + * + * @Description: + * Parse the `gvar' table if present. If `fvar' is there, `gvar' had + * better be there too. + * + * @InOut: + * face :: + * The font face. + * + * @Return: + * FreeType error code. 0 means success. + */ + static FT_Error + ft_var_load_gvar( TT_Face face ) + { + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = stream->memory; + GX_Blend blend = face->blend; + FT_Error error; + FT_UInt i, j; + FT_ULong table_len; + FT_ULong gvar_start; + FT_ULong offsetToData; + FT_ULong offsets_len; + GX_GVar_Head gvar_head; + + static const FT_Frame_Field gvar_fields[] = + { + +#undef FT_STRUCTURE +#define FT_STRUCTURE GX_GVar_Head + + FT_FRAME_START( 20 ), + FT_FRAME_LONG ( version ), + FT_FRAME_USHORT( axisCount ), + FT_FRAME_USHORT( globalCoordCount ), + FT_FRAME_ULONG ( offsetToCoord ), + FT_FRAME_USHORT( glyphCount ), + FT_FRAME_USHORT( flags ), + FT_FRAME_ULONG ( offsetToData ), + FT_FRAME_END + }; + + + FT_TRACE2(( "GVAR " )); + + if ( FT_SET_ERROR( face->goto_table( face, + TTAG_gvar, + stream, + &table_len ) ) ) + { + FT_TRACE2(( "is missing\n" )); + goto Exit; + } + + gvar_start = FT_STREAM_POS( ); + if ( FT_STREAM_READ_FIELDS( gvar_fields, &gvar_head ) ) + goto Exit; + + if ( gvar_head.version != 0x00010000L ) + { + FT_TRACE1(( "bad table version\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis ) + { + FT_TRACE1(( "ft_var_load_gvar:" + " number of axes in `gvar' and `cvar'\n" )); + FT_TRACE1(( " table are different\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* rough sanity check, ignoring offsets */ + if ( (FT_ULong)gvar_head.globalCoordCount * gvar_head.axisCount > + table_len / 2 ) + { + FT_TRACE1(( "ft_var_load_gvar:" + " invalid number of global coordinates\n" )); + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + /* 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 ); + goto Exit; + } + + FT_TRACE2(( "loaded\n" )); + + blend->gvar_size = table_len; + offsetToData = gvar_start + gvar_head.offsetToData; + + FT_TRACE5(( "gvar: there %s %d shared coordinate%s:\n", + gvar_head.globalCoordCount == 1 ? "is" : "are", + gvar_head.globalCoordCount, + gvar_head.globalCoordCount == 1 ? "" : "s" )); + + if ( FT_FRAME_ENTER( offsets_len ) ) + goto Exit; + + /* offsets (one more offset than glyphs, to mark size of last) */ + if ( FT_QNEW_ARRAY( blend->glyphoffsets, gvar_head.glyphCount + 1 ) ) + goto Fail2; + + if ( gvar_head.flags & 1 ) + { + FT_ULong limit = gvar_start + table_len; + FT_ULong max_offset = 0; + + + for ( i = 0; i <= gvar_head.glyphCount; i++ ) + { + blend->glyphoffsets[i] = offsetToData + FT_GET_ULONG(); + + if ( max_offset <= blend->glyphoffsets[i] ) + max_offset = blend->glyphoffsets[i]; + else + { + FT_TRACE2(( "ft_var_load_gvar:" + " glyph variation data offset %d not monotonic\n", + i )); + 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 max_offset = 0; + + + for ( i = 0; i <= gvar_head.glyphCount; i++ ) + { + blend->glyphoffsets[i] = offsetToData + FT_GET_USHORT() * 2; + + if ( max_offset <= blend->glyphoffsets[i] ) + max_offset = blend->glyphoffsets[i]; + else + { + FT_TRACE2(( "ft_var_load_gvar:" + " glyph variation data offset %d not monotonic\n", + i )); + 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 ( 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_QNEW_ARRAY( blend->tuplecoords, + gvar_head.axisCount * gvar_head.globalCoordCount ) ) + goto Fail2; + + 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_fdot14ToFixed( FT_GET_SHORT() ); + FT_TRACE5(( "%.5f ", + (double)blend->tuplecoords[i * gvar_head.axisCount + j] / 65536 )); + } + FT_TRACE5(( "]\n" )); + } + + blend->tuplecount = gvar_head.globalCoordCount; + + FT_TRACE5(( "\n" )); + + FT_FRAME_EXIT(); + } + + Exit: + return error; + + Fail2: + FT_FRAME_EXIT(); + + Fail: + FT_FREE( blend->glyphoffsets ); + blend->gv_glyphcnt = 0; + goto Exit; + } + + + /************************************************************************** + * + * @Function: + * ft_var_apply_tuple + * + * @Description: + * Figure out whether a given tuple (design) applies to the current + * blend, and if so, what is the scaling factor. + * + * @Input: + * blend :: + * The current blend of the font. + * + * tupleIndex :: + * A flag saying whether this is an intermediate + * tuple or not. + * + * tuple_coords :: + * The coordinates of the tuple in normalized axis + * units. + * + * im_start_coords :: + * The initial coordinates where this tuple starts + * to apply (for intermediate coordinates). + * + * im_end_coords :: + * The final coordinates after which this tuple no + * longer applies (for intermediate coordinates). + * + * @Return: + * An FT_Fixed value containing the scaling factor. + */ + static FT_Fixed + ft_var_apply_tuple( GX_Blend blend, + FT_UShort tupleIndex, + FT_Fixed* tuple_coords, + FT_Fixed* im_start_coords, + FT_Fixed* im_end_coords ) + { + FT_UInt i; + FT_Fixed apply = 0x10000L; + + + for ( i = 0; i < blend->num_axis; i++ ) + { + FT_Fixed ncv = blend->normalizedcoords[i]; + + + FT_TRACE6(( " axis %d coordinate %.5f:\n", i, (double)ncv / 65536 )); + + /* It's not clear why (for intermediate tuples) we don't need */ + /* to check against start/end -- the documentation says we don't. */ + /* Similarly, it's unclear why we don't need to scale along the */ + /* axis. */ + + if ( tuple_coords[i] == ncv ) + { + FT_TRACE6(( " tuple coordinate %.5f fits perfectly\n", + (double)tuple_coords[i] / 65536 )); + /* `apply' does not change */ + continue; + } + + if ( tuple_coords[i] == 0 ) + { + FT_TRACE6(( " tuple coordinate is zero, ignore\n" )); + continue; + } + + if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) ) + { + /* not an intermediate tuple */ + + if ( ( tuple_coords[i] > ncv && ncv > 0 ) || + ( tuple_coords[i] < ncv && ncv < 0 ) ) + { + FT_TRACE6(( " tuple coordinate %.5f fits\n", + (double)tuple_coords[i] / 65536 )); + apply = FT_MulDiv( apply, ncv, tuple_coords[i] ); + } + else + { + FT_TRACE6(( " tuple coordinate %.5f is exceeded, stop\n", + (double)tuple_coords[i] / 65536 )); + apply = 0; + break; + } + } + else + { + /* intermediate tuple */ + + if ( ncv <= im_start_coords[i] || + ncv >= im_end_coords[i] ) + { + FT_TRACE6(( " intermediate tuple range ]%.5f;%.5f[ is exceeded," + " stop\n", + (double)im_start_coords[i] / 65536, + (double)im_end_coords[i] / 65536 )); + apply = 0; + break; + } + + FT_TRACE6(( " intermediate tuple range ]%.5f;%.5f[ fits\n", + (double)im_start_coords[i] / 65536, + (double)im_end_coords[i] / 65536 )); + if ( ncv < tuple_coords[i] ) + apply = FT_MulDiv( apply, + ncv - im_start_coords[i], + tuple_coords[i] - im_start_coords[i] ); + else /* ncv > tuple_coords[i] */ + apply = FT_MulDiv( apply, + im_end_coords[i] - ncv, + im_end_coords[i] - tuple_coords[i] ); + } + } + + FT_TRACE6(( " apply factor is %.5f\n", (double)apply / 65536 )); + + return apply; + } + + + /* convert from design coordinates to normalized coordinates */ + + static void + ft_var_to_normalized( TT_Face face, + FT_UInt num_coords, + FT_Fixed* coords, + FT_Fixed* normalized ) + { + FT_Error error = FT_Err_Ok; + FT_Memory memory = face->root.memory; + FT_UInt i, j; + + GX_Blend blend; + FT_MM_Var* mmvar; + FT_Var_Axis* a; + GX_AVarSegment av; + + FT_Fixed* new_normalized = NULL; + FT_Fixed* old_normalized; + + + blend = face->blend; + mmvar = blend->mmvar; + + if ( num_coords > mmvar->num_axis ) + { + FT_TRACE2(( "ft_var_to_normalized:" + " only using first %d of %d coordinates\n", + mmvar->num_axis, num_coords )); + num_coords = mmvar->num_axis; + } + + /* Axis normalization is a two-stage process. First we normalize */ + /* based on the [min,def,max] values for the axis to be [-1,0,1]. */ + /* Then, if there's an `avar' table, we renormalize this range. */ + + a = mmvar->axis; + for ( i = 0; i < num_coords; i++, a++ ) + { + FT_Fixed coord = coords[i]; + + + FT_TRACE5(( " %d: %.5f\n", i, (double)coord / 65536 )); + if ( coord > a->maximum || coord < a->minimum ) + { + FT_TRACE1(( "ft_var_to_normalized: design coordinate %.5f\n", + (double)coord / 65536 )); + FT_TRACE1(( " is out of range [%.5f;%.5f];" + " clamping\n", + (double)a->minimum / 65536, + (double)a->maximum / 65536 )); + } + + if ( coord > a->def ) + normalized[i] = coord >= a->maximum ? 0x10000L : + FT_DivFix( SUB_LONG( coord, a->def ), + SUB_LONG( a->maximum, a->def ) ); + else if ( coord < a->def ) + normalized[i] = coord <= a->minimum ? -0x10000L : + FT_DivFix( SUB_LONG( coord, a->def ), + SUB_LONG( a->def, a->minimum ) ); + else + normalized[i] = 0; + } + + FT_TRACE5(( "\n" )); + + for ( ; i < mmvar->num_axis; i++ ) + normalized[i] = 0; + + if ( blend->avar_table ) + { + GX_AVarTable table = blend->avar_table; + + + FT_TRACE5(( "normalized design coordinates" + " before applying `avar' data:\n" )); + + if ( table->avar_segment ) + { + av = table->avar_segment; + + for ( i = 0; i < mmvar->num_axis; i++, av++ ) + { + for ( j = 1; j < (FT_UInt)av->pairCount; j++ ) + { + if ( normalized[i] < av->correspondence[j].fromCoord ) + { + FT_TRACE5(( " %.5f\n", (double)normalized[i] / 65536 )); + + normalized[i] = + FT_MulDiv( normalized[i] - av->correspondence[j - 1].fromCoord, + av->correspondence[j].toCoord - + av->correspondence[j - 1].toCoord, + av->correspondence[j].fromCoord - + av->correspondence[j - 1].fromCoord ) + + av->correspondence[j - 1].toCoord; + break; + } + } + } + } + + if ( table->itemStore.varData ) + { + if ( FT_QNEW_ARRAY( new_normalized, mmvar->num_axis ) ) + return; + + /* Install our half-normalized coordinates for the next */ + /* Item Variation Store to work with. */ + old_normalized = face->blend->normalizedcoords; + face->blend->normalizedcoords = normalized; + + for ( i = 0; i < mmvar->num_axis; i++ ) + { + FT_Fixed v = normalized[i]; + FT_UInt innerIndex = i; + FT_UInt outerIndex = 0; + FT_Int delta; + + + if ( table->axisMap.innerIndex ) + { + FT_UInt idx = i; + + + if ( idx >= table->axisMap.mapCount ) + idx = table->axisMap.mapCount - 1; + + outerIndex = table->axisMap.outerIndex[idx]; + innerIndex = table->axisMap.innerIndex[idx]; + } + + delta = tt_var_get_item_delta( FT_FACE( face ), + &table->itemStore, + outerIndex, + innerIndex ); + + /* Convert delta in F2DOT14 to 16.16 before adding. */ + v += MUL_INT( delta, 4 ); + + /* Clamp value to range [-1, 1]. */ + v = v >= 0x10000L ? 0x10000 : v; + v = v <= -0x10000L ? -0x10000 : v; + + new_normalized[i] = v; + } + + for ( i = 0; i < mmvar->num_axis; i++ ) + { + normalized[i] = new_normalized[i]; + } + + face->blend->normalizedcoords = old_normalized; + + FT_FREE( new_normalized ); + } + } + } + + + /* convert from normalized coordinates to design coordinates */ + + static void + ft_var_to_design( TT_Face face, + FT_UInt num_coords, + FT_Fixed* coords, + FT_Fixed* design ) + { + GX_Blend blend; + FT_MM_Var* mmvar; + FT_Var_Axis* a; + + FT_UInt i, j, nc; + + + blend = face->blend; + + nc = num_coords; + if ( num_coords > blend->num_axis ) + { + FT_TRACE2(( "ft_var_to_design:" + " only using first %d of %d coordinates\n", + blend->num_axis, num_coords )); + nc = blend->num_axis; + } + + for ( i = 0; i < nc; i++ ) + design[i] = coords[i]; + + for ( ; i < num_coords; i++ ) + design[i] = 0; + + if ( blend->avar_table && blend->avar_table->avar_segment ) + { + GX_AVarSegment av = blend->avar_table->avar_segment; + + + FT_TRACE5(( "design coordinates" + " after removing `avar' distortion:\n" )); + + for ( i = 0; i < nc; i++, av++ ) + { + for ( j = 1; j < (FT_UInt)av->pairCount; j++ ) + { + if ( design[i] < av->correspondence[j].toCoord ) + { + design[i] = + FT_MulDiv( design[i] - av->correspondence[j - 1].toCoord, + av->correspondence[j].fromCoord - + av->correspondence[j - 1].fromCoord, + av->correspondence[j].toCoord - + av->correspondence[j - 1].toCoord ) + + av->correspondence[j - 1].fromCoord; + + FT_TRACE5(( " %.5f\n", (double)design[i] / 65536 )); + break; + } + } + } + } + + mmvar = blend->mmvar; + a = mmvar->axis; + + for ( i = 0; i < nc; i++, a++ ) + { + if ( design[i] < 0 ) + design[i] = a->def + FT_MulFix( design[i], + a->def - a->minimum ); + else if ( design[i] > 0 ) + design[i] = a->def + FT_MulFix( design[i], + a->maximum - a->def ); + else + design[i] = a->def; + } + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** MULTIPLE MASTERS SERVICE FUNCTIONS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + + typedef struct GX_FVar_Head_ + { + FT_Long version; + FT_UShort offsetToData; + FT_UShort axisCount; + FT_UShort axisSize; + FT_UShort instanceCount; + FT_UShort instanceSize; + + } GX_FVar_Head; + + + typedef struct fvar_axis_ + { + FT_ULong axisTag; + FT_Fixed minValue; + FT_Fixed defaultValue; + FT_Fixed maxValue; + FT_UShort flags; + FT_UShort nameID; + + } GX_FVar_Axis; + + + /************************************************************************** + * + * @Function: + * TT_Get_MM_Var + * + * @Description: + * Check that the font's `fvar' table is valid, parse it, and return + * those data. It also loads (and parses) the `MVAR' table, if + * possible. + * + * @InOut: + * face :: + * The font face. + * TT_Get_MM_Var initializes the blend structure. + * + * @Output: + * master :: + * The `fvar' data (must be freed by caller). Can be NULL, + * which makes this function simply load MM support. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Get_MM_Var( FT_Face face, /* TT_Face */ + FT_MM_Var* *master ) + { + TT_Face ttface = (TT_Face)face; + FT_Stream stream = FT_FACE_STREAM( face ); + FT_Memory memory = FT_FACE_MEMORY( face ); + FT_ULong table_len; + FT_Error error = FT_Err_Ok; + FT_ULong fvar_start = 0; + FT_UInt i, j; + FT_MM_Var* mmvar = NULL; + FT_Fixed* next_coords; + FT_Fixed* nsc; + FT_String* next_name; + FT_Var_Axis* a; + FT_Fixed* c; + FT_Var_Named_Style* ns; + GX_FVar_Head fvar_head = { 0, 0, 0, 0, 0, 0 }; + FT_Bool usePsName = 0; + FT_UInt num_instances; + FT_UInt num_axes; + FT_UShort* axis_flags; + + FT_Offset mmvar_size; + FT_Offset axis_flags_size; + FT_Offset axis_size; + FT_Offset namedstyle_size; + FT_Offset next_coords_size; + FT_Offset next_name_size; + + FT_Bool need_init; + + static const FT_Frame_Field fvar_fields[] = + { + +#undef FT_STRUCTURE +#define FT_STRUCTURE GX_FVar_Head + + FT_FRAME_START( 16 ), + FT_FRAME_LONG ( version ), + FT_FRAME_USHORT ( offsetToData ), + FT_FRAME_SKIP_SHORT, + FT_FRAME_USHORT ( axisCount ), + FT_FRAME_USHORT ( axisSize ), + FT_FRAME_USHORT ( instanceCount ), + FT_FRAME_USHORT ( instanceSize ), + FT_FRAME_END + }; + + static const FT_Frame_Field fvaraxis_fields[] = + { + +#undef FT_STRUCTURE +#define FT_STRUCTURE GX_FVar_Axis + + FT_FRAME_START( 20 ), + FT_FRAME_ULONG ( axisTag ), + FT_FRAME_LONG ( minValue ), + FT_FRAME_LONG ( defaultValue ), + FT_FRAME_LONG ( maxValue ), + FT_FRAME_USHORT( flags ), + FT_FRAME_USHORT( nameID ), + FT_FRAME_END + }; + + /* `num_instances` holds the number of all named instances including */ + /* the default instance, which might be missing in the table of named */ + /* instances (in 'fvar'). This value is validated in `sfobjs.c` and */ + /* may be reset to 0 if consistency checks fail. */ + num_instances = (FT_UInt)face->style_flags >> 16; + + /* read the font data and set up the internal representation */ + /* if not already done */ + + need_init = !ttface->blend; + + if ( need_init ) + { + FT_TRACE2(( "FVAR " )); + + if ( FT_SET_ERROR( ttface->goto_table( ttface, TTAG_fvar, + stream, &table_len ) ) ) + { + FT_TRACE1(( "is missing\n" )); + goto Exit; + } + + fvar_start = FT_STREAM_POS( ); + + /* the validity of the `fvar' header data was already checked */ + /* in function `sfnt_init_face' */ + if ( FT_STREAM_READ_FIELDS( fvar_fields, &fvar_head ) ) + goto Exit; + + /* If `num_instances` is larger, synthetization of the default */ + /* instance is required. If `num_instances` is smaller, */ + /* however, the value has been reset to 0 in `sfnt_init_face` */ + /* (in `sfobjs.c`); in this case we have underallocated `mmvar` */ + /* structs. */ + if ( num_instances < fvar_head.instanceCount ) + { + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + usePsName = FT_BOOL( fvar_head.instanceSize == + 6 + 4 * fvar_head.axisCount ); + + FT_TRACE2(( "loaded\n" )); + + FT_TRACE5(( "%d variation ax%s\n", + fvar_head.axisCount, + fvar_head.axisCount == 1 ? "is" : "es" )); + + if ( FT_NEW( ttface->blend ) ) + goto Exit; + + num_axes = fvar_head.axisCount; + ttface->blend->num_axis = num_axes; + } + else + num_axes = ttface->blend->num_axis; + + /* prepare storage area for MM data; this cannot overflow */ + /* 32-bit arithmetic because of the size limits used in the */ + /* `fvar' table validity check in `sfnt_init_face' */ + + /* 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( num_axes * + sizeof ( FT_UShort ) ); + axis_size = ALIGN_SIZE( num_axes * + sizeof ( FT_Var_Axis ) ); + namedstyle_size = ALIGN_SIZE( num_instances * + sizeof ( FT_Var_Named_Style ) ); + next_coords_size = ALIGN_SIZE( num_instances * + num_axes * + sizeof ( FT_Fixed ) ); + next_name_size = num_axes * 5; + + if ( need_init ) + { + ttface->blend->mmvar_len = mmvar_size + + axis_flags_size + + axis_size + + namedstyle_size + + next_coords_size + + next_name_size; + + if ( FT_ALLOC( mmvar, ttface->blend->mmvar_len ) ) + goto Exit; + ttface->blend->mmvar = mmvar; + + /* set up pointers and offsets into the `mmvar' array; */ + /* the data gets filled in later on */ + + mmvar->num_axis = + num_axes; + mmvar->num_designs = + ~0U; /* meaningless in this context; each glyph */ + /* may have a different number of designs */ + /* (or tuples, as called by Apple) */ + mmvar->num_namedstyles = + num_instances; + + /* alas, no public field in `FT_Var_Axis' for axis flags */ + axis_flags = + (FT_UShort*)( (char*)mmvar + mmvar_size ); + mmvar->axis = + (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size ); + mmvar->namedstyle = + (FT_Var_Named_Style*)( (char*)mmvar->axis + axis_size ); + + next_coords = (FT_Fixed*)( (char*)mmvar->namedstyle + + namedstyle_size ); + for ( i = 0; i < num_instances; i++ ) + { + mmvar->namedstyle[i].coords = next_coords; + next_coords += num_axes; + } + + next_name = (FT_String*)( (char*)mmvar->namedstyle + + namedstyle_size + next_coords_size ); + for ( i = 0; i < num_axes; i++ ) + { + mmvar->axis[i].name = next_name; + next_name += 5; + } + + /* now fill in the data */ + + if ( FT_STREAM_SEEK( fvar_start + fvar_head.offsetToData ) ) + goto Exit; + + a = mmvar->axis; + for ( i = 0; i < num_axes; i++ ) + { + GX_FVar_Axis axis_rec; + +#ifdef FT_DEBUG_LEVEL_TRACE + int invalid = 0; +#endif + + + if ( FT_STREAM_READ_FIELDS( fvaraxis_fields, &axis_rec ) ) + goto Exit; + a->tag = axis_rec.axisTag; + a->minimum = axis_rec.minValue; + a->def = axis_rec.defaultValue; + a->maximum = axis_rec.maxValue; + a->strid = axis_rec.nameID; + + a->name[0] = (FT_String)( a->tag >> 24 ); + a->name[1] = (FT_String)( ( a->tag >> 16 ) & 0xFF ); + a->name[2] = (FT_String)( ( a->tag >> 8 ) & 0xFF ); + a->name[3] = (FT_String)( ( a->tag ) & 0xFF ); + a->name[4] = '\0'; + + *axis_flags = axis_rec.flags; + + if ( a->minimum > a->def || + a->def > a->maximum ) + { + a->minimum = a->def; + a->maximum = a->def; + +#ifdef FT_DEBUG_LEVEL_TRACE + invalid = 1; +#endif + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( i == 0 ) + FT_TRACE5(( " idx tag " + /* " XXX `XXXX'" */ + " minimum default maximum flags\n" )); + /* " XXXX.XXXXX XXXX.XXXXX XXXX.XXXXX 0xXXXX" */ + + FT_TRACE5(( " %3d `%s'" + " %10.5f %10.5f %10.5f 0x%04X%s\n", + i, + a->name, + (double)a->minimum / 65536, + (double)a->def / 65536, + (double)a->maximum / 65536, + *axis_flags, + invalid ? " (invalid, disabled)" : "" )); +#endif + + a++; + axis_flags++; + } + + FT_TRACE5(( "\n" )); + + /* named instance coordinates are stored as design coordinates; */ + /* we have to convert them to normalized coordinates also */ + if ( FT_NEW_ARRAY( ttface->blend->normalized_stylecoords, + num_axes * num_instances ) ) + goto Exit; + + if ( fvar_head.instanceCount && !ttface->blend->avar_loaded ) + { + FT_ULong offset = FT_STREAM_POS(); + + + ft_var_load_avar( ttface ); + + if ( FT_STREAM_SEEK( offset ) ) + goto Exit; + } + + FT_TRACE5(( "%d named instance%s\n", + fvar_head.instanceCount, + fvar_head.instanceCount == 1 ? "" : "s" )); + + ns = mmvar->namedstyle; + nsc = ttface->blend->normalized_stylecoords; + for ( i = 0; i < fvar_head.instanceCount; i++, ns++ ) + { + /* PostScript names add 2 bytes to the instance record size */ + if ( FT_FRAME_ENTER( ( usePsName ? 6L : 4L ) + + 4L * num_axes ) ) + goto Exit; + + ns->strid = FT_GET_USHORT(); + (void) /* flags = */ FT_GET_USHORT(); + + c = ns->coords; + for ( j = 0; j < num_axes; j++, c++ ) + *c = FT_GET_LONG(); + + /* valid psid values are 6, [256;32767], and 0xFFFF */ + if ( usePsName ) + ns->psid = FT_GET_USHORT(); + else + ns->psid = 0xFFFF; + +#ifdef FT_DEBUG_LEVEL_TRACE + { + SFNT_Service sfnt = (SFNT_Service)ttface->sfnt; + + FT_String* strname = NULL; + FT_String* psname = NULL; + + FT_ULong pos; + + + pos = FT_STREAM_POS(); + + if ( ns->strid != 0xFFFF ) + { + (void)sfnt->get_name( ttface, + (FT_UShort)ns->strid, + &strname ); + if ( strname && !ft_strcmp( strname, ".notdef" ) ) + strname = NULL; + } + + if ( ns->psid != 0xFFFF ) + { + (void)sfnt->get_name( ttface, + (FT_UShort)ns->psid, + &psname ); + if ( psname && !ft_strcmp( psname, ".notdef" ) ) + psname = NULL; + } + + (void)FT_STREAM_SEEK( pos ); + + FT_TRACE5(( " named instance %d (%s%s%s, %s%s%s)\n", + i, + strname ? "name: `" : "", + strname ? strname : "unnamed", + strname ? "'" : "", + psname ? "PS name: `" : "", + psname ? psname : "no PS name", + psname ? "'" : "" )); + + FT_FREE( strname ); + FT_FREE( psname ); + } +#endif /* FT_DEBUG_LEVEL_TRACE */ + + ft_var_to_normalized( ttface, num_axes, ns->coords, nsc ); + nsc += num_axes; + + FT_FRAME_EXIT(); + } + + if ( num_instances != fvar_head.instanceCount ) + { + SFNT_Service sfnt = (SFNT_Service)ttface->sfnt; + + FT_Int found, dummy1, dummy2; + FT_UInt strid = ~0U; + + + /* The default instance is missing in array the */ + /* of named instances; try to synthesize an entry. */ + /* If this fails, `default_named_instance` remains */ + /* at value zero, which doesn't do any harm. */ + found = sfnt->get_name_id( ttface, + TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY, + &dummy1, + &dummy2 ); + if ( found ) + strid = TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY; + else + { + found = sfnt->get_name_id( ttface, + TT_NAME_ID_FONT_SUBFAMILY, + &dummy1, + &dummy2 ); + if ( found ) + strid = TT_NAME_ID_FONT_SUBFAMILY; + } + + if ( found ) + { + found = sfnt->get_name_id( ttface, + TT_NAME_ID_PS_NAME, + &dummy1, + &dummy2 ); + if ( found ) + { + FT_TRACE5(( "TT_Get_MM_Var:" + " Adding default instance to named instances\n" )); + + /* named instance indices start with value 1 */ + ttface->var_default_named_instance = num_instances; + + ns = &mmvar->namedstyle[fvar_head.instanceCount]; + + ns->strid = strid; + ns->psid = TT_NAME_ID_PS_NAME; + + a = mmvar->axis; + c = ns->coords; + for ( j = 0; j < num_axes; j++, a++, c++ ) + *c = a->def; + } + } + } + + ft_var_load_mvar( ttface ); + } + + /* fill the output array if requested */ + + if ( master ) + { + FT_UInt n; + + + if ( FT_DUP( mmvar, ttface->blend->mmvar, ttface->blend->mmvar_len ) ) + goto Exit; + + axis_flags = + (FT_UShort*)( (char*)mmvar + mmvar_size ); + mmvar->axis = + (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size ); + mmvar->namedstyle = + (FT_Var_Named_Style*)( (char*)mmvar->axis+ axis_size ); + + next_coords = (FT_Fixed*)( (char*)mmvar->namedstyle + + namedstyle_size ); + for ( n = 0; n < mmvar->num_namedstyles; n++ ) + { + mmvar->namedstyle[n].coords = next_coords; + next_coords += num_axes; + } + + a = mmvar->axis; + next_name = (FT_String*)( (char*)mmvar->namedstyle + + namedstyle_size + next_coords_size ); + for ( n = 0; n < num_axes; n++ ) + { + a->name = next_name; + + /* standard PostScript names for some standard apple tags */ + if ( a->tag == TTAG_wght ) + a->name = (char*)"Weight"; + else if ( a->tag == TTAG_wdth ) + a->name = (char*)"Width"; + else if ( a->tag == TTAG_opsz ) + a->name = (char*)"OpticalSize"; + else if ( a->tag == TTAG_slnt ) + a->name = (char*)"Slant"; + else if ( a->tag == TTAG_ital ) + a->name = (char*)"Italic"; + + next_name += 5; + a++; + } + + *master = mmvar; + } + + Exit: + return error; + } + + + static FT_Error + tt_set_mm_blend( TT_Face face, + FT_UInt num_coords, + FT_Fixed* coords, + FT_Bool set_design_coords ) + { + FT_Error error = FT_Err_Ok; + GX_Blend blend; + FT_MM_Var* mmvar; + FT_UInt i; + + FT_Bool all_design_coords = FALSE; + + FT_Memory memory = face->root.memory; + + enum + { + mcvt_retain, + mcvt_modify, + mcvt_load + + } manageCvt; + + + face->doblend = FALSE; + + if ( !face->blend ) + { + if ( FT_SET_ERROR( TT_Get_MM_Var( FT_FACE( face ), NULL ) ) ) + goto Exit; + } + + blend = face->blend; + mmvar = blend->mmvar; + + if ( num_coords > mmvar->num_axis ) + { + FT_TRACE2(( "TT_Set_MM_Blend:" + " only using first %d of %d coordinates\n", + mmvar->num_axis, num_coords )); + num_coords = mmvar->num_axis; + } + + FT_TRACE5(( "TT_Set_MM_Blend:\n" )); + FT_TRACE5(( " normalized design coordinates:\n" )); + + for ( i = 0; i < num_coords; i++ ) + { + FT_TRACE5(( " %.5f\n", (double)coords[i] / 65536 )); + if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L ) + { + FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.5f\n", + (double)coords[i] / 65536 )); + FT_TRACE1(( " is out of range [-1;1]\n" )); + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + } + + FT_TRACE5(( "\n" )); + + if ( !face->is_cff2 && !blend->glyphoffsets ) + { + /* While a missing 'gvar' table is acceptable, for example for */ + /* fonts that only vary metrics information or 'COLR' v1 */ + /* `PaintVar*` tables, an incorrect SFNT table offset or size */ + /* for 'gvar', or an inconsistent 'gvar' table is not. */ + error = ft_var_load_gvar( face ); + if ( error != FT_Err_Table_Missing && error != FT_Err_Ok ) + goto Exit; + error = FT_Err_Ok; + } + + if ( !blend->coords ) + { + if ( FT_NEW_ARRAY( blend->coords, mmvar->num_axis ) ) + goto Exit; + + /* the first time we have to compute all design coordinates */ + all_design_coords = TRUE; + } + + if ( !blend->normalizedcoords ) + { + if ( FT_NEW_ARRAY( blend->normalizedcoords, mmvar->num_axis ) ) + goto Exit; + + manageCvt = mcvt_modify; + + /* If we have not set the blend coordinates before this, then the */ + /* cvt table will still be what we read from the `cvt ' table and */ + /* we don't need to reload it. We may need to change it though... */ + } + else + { + FT_Bool have_diff = 0; + FT_UInt j; + FT_Fixed* c; + FT_Fixed* n; + + + manageCvt = mcvt_retain; + + for ( i = 0; i < num_coords; i++ ) + { + if ( blend->normalizedcoords[i] != coords[i] ) + { + manageCvt = mcvt_load; + have_diff = 1; + break; + } + } + + if ( !have_diff ) + { + if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) ) + { + FT_UInt instance_index = (FT_UInt)face->root.face_index >> 16; + + + c = blend->normalizedcoords + i; + n = blend->normalized_stylecoords + + ( instance_index - 1 ) * mmvar->num_axis + + i; + + for ( j = i; j < mmvar->num_axis; j++, n++, c++ ) + if ( *c != *n ) + have_diff = 1; + } + else + { + c = blend->normalizedcoords + i; + for ( j = i; j < mmvar->num_axis; j++, c++ ) + if ( *c != 0 ) + have_diff = 1; + } + } + + /* return value -1 indicates `no change' */ + if ( !have_diff ) + { + face->doblend = TRUE; + + return -1; + } + + for ( ; i < mmvar->num_axis; i++ ) + { + if ( blend->normalizedcoords[i] != 0 ) + { + manageCvt = mcvt_load; + break; + } + } + + /* If we don't change the blend coords then we don't need to do */ + /* anything to the cvt table. It will be correct. Otherwise we */ + /* no longer have the original cvt (it was modified when we set */ + /* the blend last time), so we must reload and then modify it. */ + } + + blend->num_axis = mmvar->num_axis; + if ( coords ) + FT_MEM_COPY( blend->normalizedcoords, + coords, + num_coords * sizeof ( FT_Fixed ) ); + + if ( set_design_coords ) + ft_var_to_design( face, + all_design_coords ? blend->num_axis : num_coords, + blend->normalizedcoords, + blend->coords ); + + face->doblend = TRUE; + + if ( face->cvt ) + { + switch ( manageCvt ) + { + case mcvt_load: + /* The cvt table has been loaded already; every time we change the */ + /* blend we may need to reload and remodify the cvt table. */ + FT_FREE( face->cvt ); + + error = tt_face_load_cvt( face, face->root.stream ); + break; + + case mcvt_modify: + /* The original cvt table is in memory. All we need to do is */ + /* apply the `cvar' table (if any). */ + error = tt_face_vary_cvt( face, face->root.stream ); + break; + + case mcvt_retain: + /* The cvt table is correct for this set of coordinates. */ + break; + } + } + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * TT_Set_MM_Blend + * + * @Description: + * Set the blend (normalized) coordinates for this instance of the + * font. Check that the `gvar' table is reasonable and does some + * initial preparation. + * + * @InOut: + * face :: + * The font. + * Initialize the blend structure with `gvar' data. + * + * @Input: + * num_coords :: + * The number of available coordinates. If it is + * larger than the number of axes, ignore the excess + * values. If it is smaller than the number of axes, + * use the default value (0) for the remaining axes. + * + * coords :: + * An array of `num_coords', each between [-1,1]. + * + * @Return: + * FreeType error code. 0 means success, -1 means success and unchanged + * axis values. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Set_MM_Blend( FT_Face face, /* TT_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + return tt_set_mm_blend( (TT_Face)face, num_coords, coords, 1 ); + } + + + /************************************************************************** + * + * @Function: + * TT_Get_MM_Blend + * + * @Description: + * Get the blend (normalized) coordinates for this instance of the + * font. + * + * @InOut: + * face :: + * The font. + * Initialize the blend structure with `gvar' data. + * + * @Input: + * num_coords :: + * The number of available coordinates. If it is + * larger than the number of axes, set the excess + * values to 0. + * + * coords :: + * An array of `num_coords', each between [-1,1]. + * + * @Return: + * FreeType error code. 0 means success, -1 means success and unchanged + * axis values. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Get_MM_Blend( FT_Face face, /* TT_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + TT_Face ttface = (TT_Face)face; + + FT_Error error = FT_Err_Ok; + GX_Blend blend; + FT_UInt i, nc; + + + if ( !ttface->blend ) + { + if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) ) + return error; + } + + blend = ttface->blend; + + if ( !blend->coords ) + { + /* select default instance coordinates */ + /* if no instance is selected yet */ + if ( FT_SET_ERROR( tt_set_mm_blend( ttface, 0, NULL, 1 ) ) ) + return error; + } + + nc = num_coords; + if ( num_coords > blend->num_axis ) + { + FT_TRACE2(( "TT_Get_MM_Blend:" + " only using first %d of %d coordinates\n", + blend->num_axis, num_coords )); + nc = blend->num_axis; + } + + if ( ttface->doblend ) + { + for ( i = 0; i < nc; i++ ) + coords[i] = blend->normalizedcoords[i]; + } + else + { + for ( i = 0; i < nc; i++ ) + coords[i] = 0; + } + + for ( ; i < num_coords; i++ ) + coords[i] = 0; + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * TT_Set_Var_Design + * + * @Description: + * Set the coordinates for the instance, measured in the user + * coordinate system. Parse the `avar' table (if present) to convert + * from user to normalized coordinates. + * + * @InOut: + * face :: + * The font face. + * Initialize the blend struct with `gvar' data. + * + * @Input: + * num_coords :: + * The number of available coordinates. If it is + * larger than the number of axes, ignore the excess + * values. If it is smaller than the number of axes, + * use the default values for the remaining axes. + * + * coords :: + * A coordinate array with `num_coords' elements. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Set_Var_Design( FT_Face face, /* TT_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + TT_Face ttface = (TT_Face)face; + FT_Error error = FT_Err_Ok; + GX_Blend blend; + FT_MM_Var* mmvar; + FT_UInt i; + FT_Memory memory = FT_FACE_MEMORY( face ); + + FT_Fixed* c; + FT_Fixed* n; + FT_Fixed* normalized = NULL; + + FT_Bool have_diff = 0; + + + if ( !ttface->blend ) + { + if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) ) + goto Exit; + } + + blend = ttface->blend; + mmvar = blend->mmvar; + + if ( num_coords > mmvar->num_axis ) + { + FT_TRACE2(( "TT_Set_Var_Design:" + " only using first %d of %d coordinates\n", + mmvar->num_axis, num_coords )); + num_coords = mmvar->num_axis; + } + + if ( !blend->coords ) + { + if ( FT_NEW_ARRAY( blend->coords, mmvar->num_axis ) ) + goto Exit; + } + + c = blend->coords; + n = coords; + for ( i = 0; i < num_coords; i++, n++, c++ ) + { + if ( *c != *n ) + { + *c = *n; + have_diff = 1; + } + } + + if ( FT_IS_NAMED_INSTANCE( face ) ) + { + FT_UInt instance_index; + FT_Var_Named_Style* named_style; + + + instance_index = (FT_UInt)face->face_index >> 16; + named_style = mmvar->namedstyle + instance_index - 1; + + n = named_style->coords + num_coords; + for ( ; i < mmvar->num_axis; i++, n++, c++ ) + { + if ( *c != *n ) + { + *c = *n; + have_diff = 1; + } + } + } + else + { + FT_Var_Axis* a; + + + a = mmvar->axis + num_coords; + for ( ; i < mmvar->num_axis; i++, a++, c++ ) + { + if ( *c != a->def ) + { + *c = a->def; + have_diff = 1; + } + } + } + + /* return value -1 indicates `no change'; */ + /* we can exit early if `normalizedcoords' is already computed */ + if ( blend->normalizedcoords && !have_diff ) + return -1; + + if ( FT_NEW_ARRAY( normalized, mmvar->num_axis ) ) + goto Exit; + + if ( !ttface->blend->avar_loaded ) + ft_var_load_avar( ttface ); + + FT_TRACE5(( "TT_Set_Var_Design:\n" )); + FT_TRACE5(( " normalized design coordinates:\n" )); + ft_var_to_normalized( ttface, num_coords, blend->coords, normalized ); + + error = tt_set_mm_blend( ttface, mmvar->num_axis, normalized, 0 ); + if ( error ) + goto Exit; + + Exit: + FT_FREE( normalized ); + return error; + } + + + /************************************************************************** + * + * @Function: + * TT_Get_Var_Design + * + * @Description: + * Get the design coordinates of the currently selected interpolated + * font. + * + * @Input: + * face :: + * A handle to the source face. + * + * num_coords :: + * The number of design coordinates to retrieve. If it + * is larger than the number of axes, set the excess + * values to~0. + * + * @Output: + * coords :: + * The design coordinates array. + * + * @Return: + * FreeType error code. 0~means success. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Get_Var_Design( FT_Face face, /* TT_Face */ + FT_UInt num_coords, + FT_Fixed* coords ) + { + TT_Face ttface = (TT_Face)face; + FT_Error error = FT_Err_Ok; + GX_Blend blend; + FT_UInt i, nc; + + + if ( !ttface->blend ) + { + if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) ) + return error; + } + + blend = ttface->blend; + + if ( !blend->coords ) + { + /* select default instance coordinates */ + /* if no instance is selected yet */ + if ( FT_SET_ERROR( tt_set_mm_blend( ttface, 0, NULL, 1 ) ) ) + return error; + } + + nc = num_coords; + if ( num_coords > blend->num_axis ) + { + FT_TRACE2(( "TT_Get_Var_Design:" + " only using first %d of %d coordinates\n", + blend->num_axis, num_coords )); + nc = blend->num_axis; + } + + if ( ttface->doblend ) + { + for ( i = 0; i < nc; i++ ) + coords[i] = blend->coords[i]; + } + else + { + for ( i = 0; i < nc; i++ ) + coords[i] = 0; + } + + for ( ; i < num_coords; i++ ) + coords[i] = 0; + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * TT_Set_Named_Instance + * + * @Description: + * Set the given named instance, also resetting any further + * variation. + * + * @Input: + * face :: + * A handle to the source face. + * + * instance_index :: + * The instance index, starting with value 1. + * Value 0 indicates to not use an instance. + * + * @Return: + * FreeType error code. 0~means success, -1 means success and unchanged + * axis values. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Set_Named_Instance( FT_Face face, /* TT_Face */ + FT_UInt instance_index ) + { + TT_Face ttface = (TT_Face)face; + FT_Error error; + GX_Blend blend; + FT_MM_Var* mmvar; + + FT_Memory memory = FT_FACE_MEMORY( face ); + + FT_UInt num_instances; + + + if ( !ttface->blend ) + { + if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) ) + goto Exit; + } + + blend = ttface->blend; + mmvar = blend->mmvar; + + num_instances = (FT_UInt)face->style_flags >> 16; + + /* `instance_index' starts with value 1, thus `>' */ + if ( instance_index > num_instances ) + { + error = FT_ERR( Invalid_Argument ); + goto Exit; + } + + if ( instance_index > 0 ) + { + SFNT_Service sfnt = (SFNT_Service)ttface->sfnt; + + FT_Var_Named_Style* named_style; + FT_String* style_name; + + + named_style = mmvar->namedstyle + instance_index - 1; + + error = sfnt->get_name( ttface, + (FT_UShort)named_style->strid, + &style_name ); + if ( error ) + goto Exit; + + /* set (or replace) style name */ + FT_FREE( face->style_name ); + face->style_name = style_name; + + /* finally, select the named instance */ + error = TT_Set_Var_Design( face, + mmvar->num_axis, + named_style->coords ); + } + else + { + /* restore non-VF style name */ + FT_FREE( face->style_name ); + if ( FT_STRDUP( face->style_name, ttface->non_var_style_name ) ) + goto Exit; + error = TT_Set_Var_Design( face, 0, NULL ); + } + + Exit: + return error; + } + + + /************************************************************************** + * + * @Function: + * TT_Get_Default_Named_Instance + * + * @Description: + * Get the default named instance. + * + * @Input: + * face :: + * A handle to the source face. + * + * @Output: + * instance_index :: + * The default named instance index. + * + * @Return: + * FreeType error code. 0~means success. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Get_Default_Named_Instance( FT_Face face, + FT_UInt *instance_index ) + { + TT_Face ttface = (TT_Face)face; + FT_Error error = FT_Err_Ok; + + + if ( !ttface->blend ) + { + if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) ) + goto Exit; + } + + *instance_index = ttface->var_default_named_instance; + + Exit: + return error; + } + + + /* This function triggers (lazy) recomputation of the `postscript_name` */ + /* field in `TT_Face`. */ + + FT_LOCAL_DEF( void ) + tt_construct_ps_name( FT_Face face ) + { + TT_Face ttface = (TT_Face)face; + FT_Memory memory = FT_FACE_MEMORY( face ); + + + FT_FREE( ttface->postscript_name ); + } + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** GX VAR PARSING ROUTINES *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + +#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER + + 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; + } + +#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */ + + + + /************************************************************************** + * + * @Function: + * tt_face_vary_cvt + * + * @Description: + * Modify the loaded cvt table according to the `cvar' table and the + * font's blend. + * + * @InOut: + * face :: + * A handle to the target face object. + * + * @Input: + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + * + * Most errors are ignored. It is perfectly valid not to have a + * `cvar' table even if there is a `gvar' and `fvar' table. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_vary_cvt( TT_Face face, + FT_Stream stream ) + { +#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER + + FT_Error error; + FT_Memory memory = stream->memory; + + FT_Face root = &face->root; + + FT_ULong table_start; + FT_ULong table_len; + + FT_UInt tupleCount; + FT_ULong offsetToData; + + FT_ULong here; + FT_UInt i, j; + + FT_Fixed* peak_coords = NULL; + FT_Fixed* tuple_coords; + FT_Fixed* im_start_coords; + FT_Fixed* im_end_coords; + + GX_Blend blend = face->blend; + + FT_UInt point_count; + FT_UInt spoint_count = 0; + + FT_UShort* sharedpoints = NULL; + FT_UShort* localpoints = NULL; + FT_UShort* points; + + FT_Fixed* deltas = NULL; + FT_Fixed* cvt_deltas = NULL; + + + FT_TRACE2(( "CVAR " )); + + if ( !blend ) + { + FT_TRACE2(( "\n" )); + FT_TRACE2(( "tt_face_vary_cvt: no blend specified\n" )); + + return FT_Err_Ok; + } + + if ( !face->cvt ) + { + FT_TRACE2(( "\n" )); + FT_TRACE2(( "tt_face_vary_cvt: no `cvt ' table\n" )); + + return FT_Err_Ok; + } + + error = face->goto_table( face, TTAG_cvar, stream, &table_len ); + if ( error ) + { + FT_TRACE2(( "is missing\n" )); + + return FT_Err_Ok; + } + + if ( FT_FRAME_ENTER( table_len ) ) + return FT_Err_Ok; + + table_start = FT_Stream_FTell( stream ); + if ( FT_GET_LONG() != 0x00010000L ) + { + FT_TRACE2(( "bad table version\n" )); + + error = FT_Err_Ok; + goto FExit; + } + + FT_TRACE2(( "loaded\n" )); + + tupleCount = FT_GET_USHORT(); + offsetToData = FT_GET_USHORT(); + + /* rough sanity test */ + if ( offsetToData + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 > + table_len ) + { + FT_TRACE2(( "tt_face_vary_cvt:" + " invalid CVT variation array header\n" )); + + error = FT_THROW( Invalid_Table ); + goto FExit; + } + + offsetToData += table_start; + + if ( tupleCount & GX_TC_TUPLES_SHARE_POINT_NUMBERS ) + { + here = FT_Stream_FTell( stream ); + + FT_Stream_SeekSet( stream, offsetToData ); + + sharedpoints = ft_var_readpackedpoints( stream, &spoint_count ); + + offsetToData = FT_Stream_FTell( stream ); + + FT_Stream_SeekSet( stream, here ); + } + + FT_TRACE5(( "cvar: there %s %d tuple%s:\n", + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "is" : "are", + tupleCount & GX_TC_TUPLE_COUNT_MASK, + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "" : "s" )); + + if ( FT_QNEW_ARRAY( peak_coords, 3 * blend->num_axis ) || + FT_NEW_ARRAY( cvt_deltas, face->cvt_size ) ) + goto Exit; + + im_start_coords = peak_coords + blend->num_axis; + im_end_coords = im_start_coords + blend->num_axis; + + for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ ) + { + FT_UInt tupleDataSize; + FT_UInt tupleIndex; + FT_Fixed apply; + + + FT_TRACE6(( " tuple %d:\n", i )); + + tupleDataSize = FT_GET_USHORT(); + tupleIndex = FT_GET_USHORT(); + + if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD ) + { + for ( j = 0; j < blend->num_axis; j++ ) + peak_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() ); + tuple_coords = peak_coords; + } + else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) < blend->tuplecount ) + tuple_coords = blend->tuplecoords + + ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) * blend->num_axis; + else + { + FT_TRACE2(( "tt_face_vary_cvt:" + " invalid tuple index\n" )); + + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) + { + for ( j = 0; j < blend->num_axis; j++ ) + im_start_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() ); + for ( j = 0; j < blend->num_axis; j++ ) + im_end_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() ); + } + + apply = ft_var_apply_tuple( blend, + (FT_UShort)tupleIndex, + tuple_coords, + im_start_coords, + im_end_coords ); + + if ( apply == 0 ) /* tuple isn't active for our blend */ + { + offsetToData += tupleDataSize; + continue; + } + + here = FT_Stream_FTell( stream ); + + FT_Stream_SeekSet( stream, offsetToData ); + + if ( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS ) + { + localpoints = ft_var_readpackedpoints( stream, &point_count ); + points = localpoints; + } + else + { + localpoints = NULL; + points = sharedpoints; + point_count = spoint_count; + } + + deltas = ft_var_readpackeddeltas( stream, + point_count == 0 ? face->cvt_size + : point_count ); + + if ( !points || !deltas ) + ; /* failure, ignore it */ + + else if ( localpoints == ALL_POINTS ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + int count = 0; +#endif + + + FT_TRACE7(( " CVT deltas:\n" )); + + /* this means that there are deltas for every entry in cvt */ + for ( j = 0; j < face->cvt_size; j++ ) + { + FT_Fixed old_cvt_delta; + + + old_cvt_delta = cvt_deltas[j]; + cvt_deltas[j] = old_cvt_delta + FT_MulFix( deltas[j], apply ); + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( old_cvt_delta != cvt_deltas[j] ) + { + FT_TRACE7(( " %d: %f -> %f\n", + j, + (double)( FT_fdot6ToFixed( face->cvt[j] ) + + old_cvt_delta ) / 65536, + (double)( FT_fdot6ToFixed( face->cvt[j] ) + + cvt_deltas[j] ) / 65536 )); + count++; + } +#endif + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !count ) + FT_TRACE7(( " none\n" )); +#endif + } + + else + { +#ifdef FT_DEBUG_LEVEL_TRACE + int count = 0; +#endif + + + FT_TRACE7(( " CVT deltas:\n" )); + + for ( j = 0; j < point_count; j++ ) + { + int pindex; + FT_Fixed old_cvt_delta; + + + pindex = points[j]; + if ( (FT_ULong)pindex >= face->cvt_size ) + continue; + + old_cvt_delta = cvt_deltas[pindex]; + cvt_deltas[pindex] = old_cvt_delta + FT_MulFix( deltas[j], apply ); + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( old_cvt_delta != cvt_deltas[pindex] ) + { + FT_TRACE7(( " %d: %f -> %f\n", + pindex, + (double)( FT_fdot6ToFixed( face->cvt[pindex] ) + + old_cvt_delta ) / 65536, + (double)( FT_fdot6ToFixed( face->cvt[pindex] ) + + cvt_deltas[pindex] ) / 65536 )); + count++; + } +#endif + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !count ) + FT_TRACE7(( " none\n" )); +#endif + } + + if ( localpoints != ALL_POINTS ) + FT_FREE( localpoints ); + FT_FREE( deltas ); + + offsetToData += tupleDataSize; + + FT_Stream_SeekSet( stream, here ); + } + + FT_TRACE5(( "\n" )); + + for ( i = 0; i < face->cvt_size; i++ ) + face->cvt[i] += FT_fixedToFdot6( cvt_deltas[i] ); + + /* 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 ); + + Exit: + if ( sharedpoints != ALL_POINTS ) + FT_FREE( sharedpoints ); + FT_FREE( cvt_deltas ); + FT_FREE( peak_coords ); + + FExit: + FT_FRAME_EXIT(); + + return error; + +#else /* !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */ + + FT_UNUSED( face ); + FT_UNUSED( stream ); + + return FT_Err_Ok; + +#endif /* !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */ + + } + + + /* Shift the original coordinates of all points between indices `p1' */ + /* and `p2', using the same difference as given by index `ref'. */ + + /* modeled after `af_iup_shift' */ + + static void + tt_delta_shift( int p1, + int p2, + int ref, + FT_Vector* in_points, + FT_Vector* out_points ) + { + int p; + FT_Vector delta; + + + delta.x = out_points[ref].x - in_points[ref].x; + delta.y = out_points[ref].y - in_points[ref].y; + + if ( delta.x == 0 && delta.y == 0 ) + return; + + for ( p = p1; p < ref; p++ ) + { + out_points[p].x += delta.x; + out_points[p].y += delta.y; + } + + for ( p = ref + 1; p <= p2; p++ ) + { + out_points[p].x += delta.x; + out_points[p].y += delta.y; + } + } + + + /* Interpolate the original coordinates of all points with indices */ + /* between `p1' and `p2', using `ref1' and `ref2' as the reference */ + /* point indices. */ + + /* modeled after `af_iup_interp', `_iup_worker_interpolate', and */ + /* `Ins_IUP' with spec differences in handling ill-defined cases. */ + static void + tt_delta_interpolate( int p1, + int p2, + int ref1, + int ref2, + FT_Vector* in_points, + FT_Vector* out_points ) + { + int p, i; + + FT_Pos out, in1, in2, out1, out2, d1, d2; + + + if ( p1 > p2 ) + return; + + /* handle both horizontal and vertical coordinates */ + for ( i = 0; i <= 1; i++ ) + { + /* shift array pointers so that we can access `foo.y' as `foo.x' */ + in_points = (FT_Vector*)( (FT_Pos*)in_points + i ); + out_points = (FT_Vector*)( (FT_Pos*)out_points + i ); + + if ( in_points[ref1].x > in_points[ref2].x ) + { + p = ref1; + ref1 = ref2; + ref2 = p; + } + + in1 = in_points[ref1].x; + in2 = in_points[ref2].x; + out1 = out_points[ref1].x; + out2 = out_points[ref2].x; + d1 = out1 - in1; + d2 = out2 - in2; + + /* If the reference points have the same coordinate but different */ + /* delta, inferred delta is zero. Otherwise interpolate. */ + if ( in1 != in2 || out1 == out2 ) + { + FT_Fixed scale = in1 != in2 ? FT_DivFix( out2 - out1, in2 - in1 ) + : 0; + + + for ( p = p1; p <= p2; p++ ) + { + out = in_points[p].x; + + if ( out <= in1 ) + out += d1; + else if ( out >= in2 ) + out += d2; + else + out = out1 + FT_MulFix( out - in1, scale ); + + out_points[p].x = out; + } + } + } + } + + + /* Interpolate points without delta values, similar to */ + /* the `IUP' hinting instruction. */ + + /* modeled after `Ins_IUP */ + + static void + tt_interpolate_deltas( FT_Outline* outline, + FT_Vector* out_points, + FT_Vector* in_points, + FT_Bool* has_delta ) + { + FT_Int first_point; + FT_Int end_point; + + FT_Int first_delta; + FT_Int cur_delta; + + FT_Int point; + FT_Short contour; + + + /* ignore empty outlines */ + if ( !outline->n_contours ) + return; + + contour = 0; + point = 0; + + do + { + end_point = outline->contours[contour]; + first_point = point; + + /* search first point that has a delta */ + while ( point <= end_point && !has_delta[point] ) + point++; + + if ( point <= end_point ) + { + first_delta = point; + cur_delta = point; + + point++; + + while ( point <= end_point ) + { + /* search next point that has a delta */ + /* and interpolate intermediate points */ + if ( has_delta[point] ) + { + tt_delta_interpolate( cur_delta + 1, + point - 1, + cur_delta, + point, + in_points, + out_points ); + cur_delta = point; + } + + point++; + } + + /* shift contour if we only have a single delta */ + if ( cur_delta == first_delta ) + tt_delta_shift( first_point, + end_point, + cur_delta, + in_points, + out_points ); + else + { + /* otherwise handle remaining points */ + /* at the end and beginning of the contour */ + tt_delta_interpolate( cur_delta + 1, + end_point, + cur_delta, + first_delta, + in_points, + out_points ); + + if ( first_delta > 0 ) + tt_delta_interpolate( first_point, + first_delta - 1, + cur_delta, + first_delta, + in_points, + out_points ); + } + } + contour++; + + } while ( contour < outline->n_contours ); + } + + + /************************************************************************** + * + * @Function: + * TT_Vary_Apply_Glyph_Deltas + * + * @Description: + * Apply the appropriate deltas to the current glyph. + * + * @InOut: + * loader :: + * A handle to the loader object. + * + * outline :: + * The outline to change, with appended phantom points. + * + * @Output: + * unrounded :: + * An array with `n_points' elements that is filled with unrounded + * point coordinates (in 26.6 format). + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Vary_Apply_Glyph_Deltas( TT_Loader loader, + FT_Outline* outline, + FT_Vector* unrounded ) + { + FT_Error error; + TT_Face face = loader->face; + FT_Stream stream = face->root.stream; + FT_Memory memory = stream->memory; + FT_UInt glyph_index = loader->glyph_index; + FT_UInt n_points = (FT_UInt)outline->n_points + 4; + + FT_Vector* points_org = NULL; /* coordinates in 16.16 format */ + FT_Vector* points_out = NULL; /* coordinates in 16.16 format */ + FT_Bool* has_delta = NULL; + + FT_ULong glyph_start; + + FT_UInt tupleCount; + FT_ULong offsetToData; + FT_ULong dataSize; + + FT_ULong here; + FT_UInt i, j; + + FT_Fixed* peak_coords = NULL; + FT_Fixed* tuple_coords; + FT_Fixed* im_start_coords; + FT_Fixed* im_end_coords; + + GX_Blend blend = face->blend; + + FT_UInt point_count; + FT_UInt spoint_count = 0; + + FT_UShort* sharedpoints = NULL; + FT_UShort* localpoints = NULL; + FT_UShort* points; + + FT_Fixed* deltas_x = NULL; + FT_Fixed* deltas_y = NULL; + FT_Fixed* point_deltas_x = NULL; + FT_Fixed* point_deltas_y = NULL; + + + if ( !face->doblend || !blend ) + return FT_THROW( Invalid_Argument ); + + for ( i = 0; i < n_points; i++ ) + { + unrounded[i].x = INT_TO_F26DOT6( outline->points[i].x ); + unrounded[i].y = INT_TO_F26DOT6( outline->points[i].y ); + } + + if ( glyph_index >= blend->gv_glyphcnt || + blend->glyphoffsets[glyph_index] == + blend->glyphoffsets[glyph_index + 1] ) + { + FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:" + " no variation data for glyph %d\n", glyph_index )); + return FT_Err_Ok; + } + + dataSize = blend->glyphoffsets[glyph_index + 1] - + blend->glyphoffsets[glyph_index]; + + if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) || + FT_FRAME_ENTER( dataSize ) ) + return error; + + glyph_start = FT_Stream_FTell( stream ); + + /* each set of glyph variation data is formatted similarly to `cvar' */ + + tupleCount = FT_GET_USHORT(); + offsetToData = FT_GET_USHORT(); + + /* rough sanity test */ + if ( offsetToData > dataSize || + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 > dataSize ) + { + FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:" + " invalid glyph variation array header\n" )); + + error = FT_THROW( Invalid_Table ); + goto FExit; + } + + offsetToData += glyph_start; + + if ( tupleCount & GX_TC_TUPLES_SHARE_POINT_NUMBERS ) + { + here = FT_Stream_FTell( stream ); + + FT_Stream_SeekSet( stream, offsetToData ); + + sharedpoints = ft_var_readpackedpoints( stream, &spoint_count ); + + offsetToData = FT_Stream_FTell( stream ); + + FT_Stream_SeekSet( stream, here ); + } + + FT_TRACE5(( "gvar: there %s %d tuple%s:\n", + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "is" : "are", + tupleCount & GX_TC_TUPLE_COUNT_MASK, + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "" : "s" )); + + if ( FT_QNEW_ARRAY( peak_coords, 3 * blend->num_axis ) || + FT_NEW_ARRAY( point_deltas_x, 2 * n_points ) || + FT_QNEW_ARRAY( points_org, n_points ) || + FT_QNEW_ARRAY( points_out, n_points ) || + FT_QNEW_ARRAY( has_delta, n_points ) ) + goto Exit; + + im_start_coords = peak_coords + blend->num_axis; + im_end_coords = im_start_coords + blend->num_axis; + point_deltas_y = point_deltas_x + n_points; + + for ( j = 0; j < n_points; j++ ) + { + points_org[j].x = FT_intToFixed( outline->points[j].x ); + points_org[j].y = FT_intToFixed( outline->points[j].y ); + } + + for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ ) + { + FT_UInt tupleDataSize; + FT_UInt tupleIndex; + FT_Fixed apply; + + + FT_TRACE6(( " tuple %d:\n", i )); + + tupleDataSize = FT_GET_USHORT(); + tupleIndex = FT_GET_USHORT(); + + if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD ) + { + for ( j = 0; j < blend->num_axis; j++ ) + peak_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() ); + tuple_coords = peak_coords; + } + else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) < blend->tuplecount ) + tuple_coords = blend->tuplecoords + + ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) * blend->num_axis; + else + { + FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:" + " invalid tuple index\n" )); + + error = FT_THROW( Invalid_Table ); + goto Exit; + } + + if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) + { + for ( j = 0; j < blend->num_axis; j++ ) + im_start_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() ); + for ( j = 0; j < blend->num_axis; j++ ) + im_end_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() ); + } + + apply = ft_var_apply_tuple( blend, + (FT_UShort)tupleIndex, + tuple_coords, + im_start_coords, + im_end_coords ); + + if ( apply == 0 ) /* tuple isn't active for our blend */ + { + offsetToData += tupleDataSize; + continue; + } + + here = FT_Stream_FTell( stream ); + + FT_Stream_SeekSet( stream, offsetToData ); + + if ( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS ) + { + localpoints = ft_var_readpackedpoints( stream, &point_count ); + points = localpoints; + } + else + { + points = sharedpoints; + point_count = spoint_count; + } + + deltas_x = ft_var_readpackeddeltas( stream, + point_count == 0 ? n_points + : point_count ); + deltas_y = ft_var_readpackeddeltas( stream, + point_count == 0 ? n_points + : point_count ); + + if ( !points || !deltas_y || !deltas_x ) + ; /* failure, ignore it */ + + else if ( points == ALL_POINTS ) + { +#ifdef FT_DEBUG_LEVEL_TRACE + int count = 0; +#endif + + + FT_TRACE7(( " point deltas:\n" )); + + /* this means that there are deltas for every point in the glyph */ + for ( j = 0; j < n_points; j++ ) + { + FT_Fixed old_point_delta_x = point_deltas_x[j]; + FT_Fixed old_point_delta_y = point_deltas_y[j]; + + FT_Fixed point_delta_x = FT_MulFix( deltas_x[j], apply ); + FT_Fixed point_delta_y = FT_MulFix( deltas_y[j], apply ); + + + point_deltas_x[j] = old_point_delta_x + point_delta_x; + point_deltas_y[j] = old_point_delta_y + point_delta_y; + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( point_delta_x || point_delta_y ) + { + FT_TRACE7(( " %d: (%f, %f) -> (%f, %f)\n", + j, + (double)( FT_intToFixed( outline->points[j].x ) + + old_point_delta_x ) / 65536, + (double)( FT_intToFixed( outline->points[j].y ) + + old_point_delta_y ) / 65536, + (double)( FT_intToFixed( outline->points[j].x ) + + point_deltas_x[j] ) / 65536, + (double)( FT_intToFixed( outline->points[j].y ) + + point_deltas_y[j] ) / 65536 )); + count++; + } +#endif + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !count ) + FT_TRACE7(( " none\n" )); +#endif + } + + else + { +#ifdef FT_DEBUG_LEVEL_TRACE + int count = 0; +#endif + + + /* we have to interpolate the missing deltas similar to the */ + /* IUP bytecode instruction */ + for ( j = 0; j < n_points; j++ ) + { + has_delta[j] = FALSE; + points_out[j] = points_org[j]; + } + + for ( j = 0; j < point_count; j++ ) + { + FT_UShort idx = points[j]; + + + if ( idx >= n_points ) + continue; + + has_delta[idx] = TRUE; + + points_out[idx].x += FT_MulFix( deltas_x[j], apply ); + points_out[idx].y += FT_MulFix( deltas_y[j], apply ); + } + + /* no need to handle phantom points here, */ + /* since solitary points can't be interpolated */ + tt_interpolate_deltas( outline, + points_out, + points_org, + has_delta ); + + FT_TRACE7(( " point deltas:\n" )); + + for ( j = 0; j < n_points; j++ ) + { + FT_Fixed old_point_delta_x = point_deltas_x[j]; + FT_Fixed old_point_delta_y = point_deltas_y[j]; + + FT_Pos point_delta_x = points_out[j].x - points_org[j].x; + FT_Pos point_delta_y = points_out[j].y - points_org[j].y; + + + point_deltas_x[j] = old_point_delta_x + point_delta_x; + point_deltas_y[j] = old_point_delta_y + point_delta_y; + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( point_delta_x || point_delta_y ) + { + FT_TRACE7(( " %d: (%f, %f) -> (%f, %f)\n", + j, + (double)( FT_intToFixed( outline->points[j].x ) + + old_point_delta_x ) / 65536, + (double)( FT_intToFixed( outline->points[j].y ) + + old_point_delta_y ) / 65536, + (double)( FT_intToFixed( outline->points[j].x ) + + point_deltas_x[j] ) / 65536, + (double)( FT_intToFixed( outline->points[j].y ) + + point_deltas_y[j] ) / 65536 )); + count++; + } +#endif + } + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( !count ) + FT_TRACE7(( " none\n" )); +#endif + } + + if ( localpoints != ALL_POINTS ) + FT_FREE( localpoints ); + FT_FREE( deltas_x ); + FT_FREE( deltas_y ); + + offsetToData += tupleDataSize; + + FT_Stream_SeekSet( stream, here ); + } + + FT_TRACE5(( "\n" )); + + /* To avoid double adjustment of advance width or height, */ + /* do not move phantom points if there is HVAR or VVAR */ + /* support, respectively. */ + if ( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) + { + point_deltas_x[n_points - 4] = 0; + point_deltas_y[n_points - 4] = 0; + point_deltas_x[n_points - 3] = 0; + point_deltas_y[n_points - 3] = 0; + } + if ( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) + { + point_deltas_x[n_points - 2] = 0; + point_deltas_y[n_points - 2] = 0; + point_deltas_x[n_points - 1] = 0; + point_deltas_y[n_points - 1] = 0; + } + + 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] ); + } + + /* To avoid double adjustment of advance width or height, */ + /* adjust phantom points only if there is no HVAR or VVAR */ + /* support, respectively. */ + if ( !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) ) + { + loader->pp1 = outline->points[n_points - 4]; + loader->pp2 = outline->points[n_points - 3]; + loader->linear = FT_PIX_ROUND( unrounded[n_points - 3].x - + unrounded[n_points - 4].x ) / 64; + } + if ( !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) ) + { + loader->pp3 = outline->points[n_points - 2]; + loader->pp4 = outline->points[n_points - 1]; + loader->vadvance = FT_PIX_ROUND( unrounded[n_points - 1].y - + unrounded[n_points - 2].y ) / 64; + } + + Exit: + if ( sharedpoints != ALL_POINTS ) + FT_FREE( sharedpoints ); + FT_FREE( points_org ); + FT_FREE( points_out ); + FT_FREE( has_delta ); + FT_FREE( peak_coords ); + FT_FREE( point_deltas_x ); + + FExit: + FT_FRAME_EXIT(); + + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_get_var_blend + * + * @Description: + * An extended internal version of `TT_Get_MM_Blend' that returns + * pointers instead of copying data, without any initialization of + * the MM machinery in case it isn't loaded yet. + */ + FT_LOCAL_DEF( FT_Error ) + tt_get_var_blend( FT_Face face, /* TT_Face */ + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_Fixed* *normalizedcoords, + FT_MM_Var* *mm_var ) + { + TT_Face ttface = (TT_Face)face; + + + if ( ttface->blend ) + { + if ( num_coords ) + *num_coords = ttface->blend->num_axis; + if ( coords ) + *coords = ttface->blend->coords; + if ( normalizedcoords ) + *normalizedcoords = ttface->blend->normalizedcoords; + if ( mm_var ) + *mm_var = ttface->blend->mmvar; + } + else + { + if ( num_coords ) + *num_coords = 0; + if ( coords ) + *coords = NULL; + if ( mm_var ) + *mm_var = NULL; + } + + return FT_Err_Ok; + } + + + FT_LOCAL_DEF( void ) + tt_var_done_item_variation_store( FT_Face face, + GX_ItemVarStore itemStore ) + { + FT_Memory memory = FT_FACE_MEMORY( face ); + FT_UInt i; + + + if ( itemStore->varData ) + { + for ( i = 0; i < itemStore->dataCount; i++ ) + { + FT_FREE( itemStore->varData[i].regionIndices ); + FT_FREE( itemStore->varData[i].deltaSet ); + } + + FT_FREE( itemStore->varData ); + } + + if ( itemStore->varRegionList ) + { + for ( i = 0; i < itemStore->regionCount; i++ ) + FT_FREE( itemStore->varRegionList[i].axisList ); + + FT_FREE( itemStore->varRegionList ); + } + } + + + FT_LOCAL_DEF( void ) + tt_var_done_delta_set_index_map( FT_Face face, + GX_DeltaSetIdxMap deltaSetIdxMap ) + { + FT_Memory memory = FT_FACE_MEMORY( face ); + + + FT_FREE( deltaSetIdxMap->innerIndex ); + FT_FREE( deltaSetIdxMap->outerIndex ); + } + + + /************************************************************************** + * + * @Function: + * tt_done_blend + * + * @Description: + * Free the blend internal data structure. + */ + FT_LOCAL_DEF( void ) + tt_done_blend( FT_Face face ) + { + TT_Face ttface = (TT_Face)face; + FT_Memory memory = FT_FACE_MEMORY( face ); + GX_Blend blend = ttface->blend; + + + if ( blend ) + { + FT_UInt i, num_axes; + + + /* blend->num_axis might not be set up yet */ + num_axes = blend->mmvar->num_axis; + + FT_FREE( blend->coords ); + FT_FREE( blend->normalizedcoords ); + FT_FREE( blend->normalized_stylecoords ); + FT_FREE( blend->mmvar ); + + if ( blend->avar_table ) + { + if ( blend->avar_table->avar_segment ) + { + for ( i = 0; i < num_axes; i++ ) + FT_FREE( blend->avar_table->avar_segment[i].correspondence ); + FT_FREE( blend->avar_table->avar_segment ); + } + + tt_var_done_item_variation_store( face, + &blend->avar_table->itemStore ); + + tt_var_done_delta_set_index_map( face, + &blend->avar_table->axisMap ); + + FT_FREE( blend->avar_table ); + } + + if ( blend->hvar_table ) + { + tt_var_done_item_variation_store( face, + &blend->hvar_table->itemStore ); + + tt_var_done_delta_set_index_map( face, + &blend->hvar_table->widthMap ); + FT_FREE( blend->hvar_table ); + } + + if ( blend->vvar_table ) + { + tt_var_done_item_variation_store( face, + &blend->vvar_table->itemStore ); + + tt_var_done_delta_set_index_map( face, + &blend->vvar_table->widthMap ); + FT_FREE( blend->vvar_table ); + } + + if ( blend->mvar_table ) + { + tt_var_done_item_variation_store( face, + &blend->mvar_table->itemStore ); + + FT_FREE( blend->mvar_table->values ); + FT_FREE( blend->mvar_table ); + } + + FT_FREE( blend->tuplecoords ); + FT_FREE( blend->glyphoffsets ); + FT_FREE( blend ); + } + } + +#else /* !TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_gxvar_dummy_; + +#endif /* !TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttgxvar.h b/non-source/foreign/freetype2/src/truetype/ttgxvar.h new file mode 100644 index 000000000..9326011e3 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttgxvar.h @@ -0,0 +1,453 @@ +/**************************************************************************** + * + * ttgxvar.h + * + * TrueType GX Font Variation loader (specification) + * + * Copyright (C) 2004-2024 by + * David Turner, Robert Wilhelm, Werner Lemberg and George Williams. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTGXVAR_H_ +#define TTGXVAR_H_ + + +#include <freetype/internal/ftmmtypes.h> +#include "ttobjs.h" + + +FT_BEGIN_HEADER + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + /************************************************************************** + * + * @Struct: + * GX_AVarCorrespondenceRec + * + * @Description: + * A data structure representing `shortFracCorrespondence' in `avar' + * table according to the specifications from Apple. + */ + typedef struct GX_AVarCorrespondenceRec_ + { + FT_Fixed fromCoord; + FT_Fixed toCoord; + + } GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence; + + + /************************************************************************** + * + * @Struct: + * GX_AVarRec + * + * @Description: + * Data from the segment field of `avar' table. + * There is one of these for each axis. + */ + typedef struct GX_AVarSegmentRec_ + { + FT_UShort pairCount; + GX_AVarCorrespondence correspondence; /* array with pairCount entries */ + + } GX_AVarSegmentRec, *GX_AVarSegment; + + + /************************************************************************** + * + * @Struct: + * GX_AVarTableRec + * + * @Description: + * Data from the `avar' table. + */ + typedef struct GX_AVarTableRec_ + { + GX_AVarSegment avar_segment; /* avar_segment[num_axis] */ + GX_ItemVarStoreRec itemStore; /* Item Variation Store */ + GX_DeltaSetIdxMapRec axisMap; /* Axis Mapping */ + + } GX_AVarTableRec, *GX_AVarTable; + + + /************************************************************************** + * + * @Struct: + * GX_HVVarTableRec + * + * @Description: + * Data from either the `HVAR' or `VVAR' table. + */ + typedef struct GX_HVVarTableRec_ + { + GX_ItemVarStoreRec itemStore; /* Item Variation Store */ + GX_DeltaSetIdxMapRec widthMap; /* Advance Width Mapping */ + +#if 0 + GX_DeltaSetIdxMapRec lsbMap; /* not implemented */ + GX_DeltaSetIdxMapRec rsbMap; /* not implemented */ + + GX_DeltaSetIdxMapRec tsbMap; /* not implemented */ + GX_DeltaSetIdxMapRec bsbMap; /* not implemented */ + GX_DeltaSetIdxMapRec vorgMap; /* not implemented */ +#endif + + } GX_HVVarTableRec, *GX_HVVarTable; + + +#define MVAR_TAG_GASP_0 FT_MAKE_TAG( 'g', 's', 'p', '0' ) +#define MVAR_TAG_GASP_1 FT_MAKE_TAG( 'g', 's', 'p', '1' ) +#define MVAR_TAG_GASP_2 FT_MAKE_TAG( 'g', 's', 'p', '2' ) +#define MVAR_TAG_GASP_3 FT_MAKE_TAG( 'g', 's', 'p', '3' ) +#define MVAR_TAG_GASP_4 FT_MAKE_TAG( 'g', 's', 'p', '4' ) +#define MVAR_TAG_GASP_5 FT_MAKE_TAG( 'g', 's', 'p', '5' ) +#define MVAR_TAG_GASP_6 FT_MAKE_TAG( 'g', 's', 'p', '6' ) +#define MVAR_TAG_GASP_7 FT_MAKE_TAG( 'g', 's', 'p', '7' ) +#define MVAR_TAG_GASP_8 FT_MAKE_TAG( 'g', 's', 'p', '8' ) +#define MVAR_TAG_GASP_9 FT_MAKE_TAG( 'g', 's', 'p', '9' ) + +#define MVAR_TAG_CPHT FT_MAKE_TAG( 'c', 'p', 'h', 't' ) +#define MVAR_TAG_HASC FT_MAKE_TAG( 'h', 'a', 's', 'c' ) +#define MVAR_TAG_HCLA FT_MAKE_TAG( 'h', 'c', 'l', 'a' ) +#define MVAR_TAG_HCLD FT_MAKE_TAG( 'h', 'c', 'l', 'd' ) +#define MVAR_TAG_HCOF FT_MAKE_TAG( 'h', 'c', 'o', 'f' ) +#define MVAR_TAG_HCRN FT_MAKE_TAG( 'h', 'c', 'r', 'n' ) +#define MVAR_TAG_HCRS FT_MAKE_TAG( 'h', 'c', 'r', 's' ) +#define MVAR_TAG_HDSC FT_MAKE_TAG( 'h', 'd', 's', 'c' ) +#define MVAR_TAG_HLGP FT_MAKE_TAG( 'h', 'l', 'g', 'p' ) +#define MVAR_TAG_SBXO FT_MAKE_TAG( 's', 'b', 'x', 'o' ) +#define MVAR_TAG_SBXS FT_MAKE_TAG( 's', 'b', 'x', 's' ) +#define MVAR_TAG_SBYO FT_MAKE_TAG( 's', 'b', 'y', 'o' ) +#define MVAR_TAG_SBYS FT_MAKE_TAG( 's', 'b', 'y', 's' ) +#define MVAR_TAG_SPXO FT_MAKE_TAG( 's', 'p', 'x', 'o' ) +#define MVAR_TAG_SPXS FT_MAKE_TAG( 's', 'p', 'x', 's' ) +#define MVAR_TAG_SPYO FT_MAKE_TAG( 's', 'p', 'y', 'o' ) +#define MVAR_TAG_SPYS FT_MAKE_TAG( 's', 'p', 'y', 's' ) +#define MVAR_TAG_STRO FT_MAKE_TAG( 's', 't', 'r', 'o' ) +#define MVAR_TAG_STRS FT_MAKE_TAG( 's', 't', 'r', 's' ) +#define MVAR_TAG_UNDO FT_MAKE_TAG( 'u', 'n', 'd', 'o' ) +#define MVAR_TAG_UNDS FT_MAKE_TAG( 'u', 'n', 'd', 's' ) +#define MVAR_TAG_VASC FT_MAKE_TAG( 'v', 'a', 's', 'c' ) +#define MVAR_TAG_VCOF FT_MAKE_TAG( 'v', 'c', 'o', 'f' ) +#define MVAR_TAG_VCRN FT_MAKE_TAG( 'v', 'c', 'r', 'n' ) +#define MVAR_TAG_VCRS FT_MAKE_TAG( 'v', 'c', 'r', 's' ) +#define MVAR_TAG_VDSC FT_MAKE_TAG( 'v', 'd', 's', 'c' ) +#define MVAR_TAG_VLGP FT_MAKE_TAG( 'v', 'l', 'g', 'p' ) +#define MVAR_TAG_XHGT FT_MAKE_TAG( 'x', 'h', 'g', 't' ) + + + typedef struct GX_ValueRec_ + { + FT_ULong tag; + FT_UShort outerIndex; + FT_UShort innerIndex; + + FT_Short unmodified; /* values are either FT_Short or FT_UShort */ + + } GX_ValueRec, *GX_Value; + + + /************************************************************************** + * + * @Struct: + * GX_MVarTableRec + * + * @Description: + * Data from the `MVAR' table. + */ + typedef struct GX_MVarTableRec_ + { + FT_UShort valueCount; + + GX_ItemVarStoreRec itemStore; /* Item Variation Store */ + GX_Value values; /* Value Records */ + + } GX_MVarTableRec, *GX_MVarTable; + + + /************************************************************************** + * + * @Struct: + * GX_BlendRec + * + * @Description: + * Data for interpolating a font from a distortable font specified + * by the GX *var tables ([fgcahvm]var). + * + * @Fields: + * num_axis :: + * The number of axes along which interpolation may happen. + * + * coords :: + * An array of design coordinates (in user space) indicating the + * contribution along each axis to the final interpolated font. + * `normalizedcoords' holds the same values. + * + * normalizedcoords :: + * An array of normalized values (between [-1,1]) indicating the + * contribution along each axis to the final interpolated font. + * `coords' holds the same values. + * + * mmvar :: + * Data from the `fvar' table. + * + * mmvar_len :: + * The length of the `mmvar' structure. + * + * normalized_stylecoords :: + * A two-dimensional array that holds the named instance data from + * `mmvar' as normalized values. + * + * avar_loaded :: + * A Boolean; if set, FreeType tried to load (and parse) the `avar' + * table. + * + * avar_table :: + * Data from the `avar' table. + * + * hvar_loaded :: + * A Boolean; if set, FreeType tried to load (and parse) the `hvar' + * table. + * + * hvar_checked :: + * A Boolean; if set, FreeType successfully loaded and parsed the + * `hvar' table. + * + * hvar_error :: + * If loading and parsing of the `hvar' table failed, this field + * holds the corresponding error code. + * + * hvar_table :: + * Data from the `hvar' table. + * + * vvar_loaded :: + * A Boolean; if set, FreeType tried to load (and parse) the `vvar' + * table. + * + * vvar_checked :: + * A Boolean; if set, FreeType successfully loaded and parsed the + * `vvar' table. + * + * vvar_error :: + * If loading and parsing of the `vvar' table failed, this field + * holds the corresponding error code. + * + * vvar_table :: + * Data from the `vvar' table. + * + * mvar_table :: + * Data from the `mvar' table. + * + * tuplecount :: + * The number of shared tuples in the `gvar' table. + * + * tuplecoords :: + * A two-dimensional array that holds the shared tuple coordinates + * in the `gvar' table. + * + * gv_glyphcnt :: + * The number of glyphs handled in the `gvar' table. + * + * glyphoffsets :: + * Offsets into the glyph variation data array. + * + * gvar_size :: + * The size of the `gvar' table. + */ + typedef struct GX_BlendRec_ + { + FT_UInt num_axis; + FT_Fixed* coords; + FT_Fixed* normalizedcoords; + + FT_MM_Var* mmvar; + FT_Offset mmvar_len; + + FT_Fixed* normalized_stylecoords; + /* normalized_stylecoords[num_namedstyles][num_axis] */ + + FT_Bool avar_loaded; + GX_AVarTable avar_table; + + FT_Bool hvar_loaded; + FT_Bool hvar_checked; + FT_Error hvar_error; + GX_HVVarTable hvar_table; + + FT_Bool vvar_loaded; + FT_Bool vvar_checked; + FT_Error vvar_error; + GX_HVVarTable vvar_table; + + GX_MVarTable mvar_table; + + FT_UInt tuplecount; + FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */ + + FT_UInt gv_glyphcnt; + FT_ULong* glyphoffsets; /* glyphoffsets[gv_glyphcnt + 1] */ + + FT_ULong gvar_size; + + } GX_BlendRec; + + + /************************************************************************** + * + * @enum: + * GX_TupleCountFlags + * + * @Description: + * Flags used within the `TupleCount' field of the `gvar' table. + */ + typedef enum GX_TupleCountFlags_ + { + GX_TC_TUPLES_SHARE_POINT_NUMBERS = 0x8000, + GX_TC_RESERVED_TUPLE_FLAGS = 0x7000, + GX_TC_TUPLE_COUNT_MASK = 0x0FFF + + } GX_TupleCountFlags; + + + /************************************************************************** + * + * @enum: + * GX_TupleIndexFlags + * + * @Description: + * Flags used within the `TupleIndex' field of the `gvar' and `cvar' + * tables. + */ + typedef enum GX_TupleIndexFlags_ + { + GX_TI_EMBEDDED_TUPLE_COORD = 0x8000, + GX_TI_INTERMEDIATE_TUPLE = 0x4000, + GX_TI_PRIVATE_POINT_NUMBERS = 0x2000, + GX_TI_RESERVED_TUPLE_FLAG = 0x1000, + GX_TI_TUPLE_INDEX_MASK = 0x0FFF + + } GX_TupleIndexFlags; + + +#define TTAG_wght FT_MAKE_TAG( 'w', 'g', 'h', 't' ) +#define TTAG_wdth FT_MAKE_TAG( 'w', 'd', 't', 'h' ) +#define TTAG_opsz FT_MAKE_TAG( 'o', 'p', 's', 'z' ) +#define TTAG_slnt FT_MAKE_TAG( 's', 'l', 'n', 't' ) +#define TTAG_ital FT_MAKE_TAG( 'i', 't', 'a', 'l' ) + + + FT_LOCAL( FT_Error ) + TT_Set_MM_Blend( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + FT_LOCAL( FT_Error ) + TT_Get_MM_Blend( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + FT_LOCAL( FT_Error ) + TT_Set_Var_Design( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + FT_LOCAL( FT_Error ) + TT_Get_MM_Var( FT_Face face, + FT_MM_Var* *master ); + + FT_LOCAL( FT_Error ) + TT_Get_Var_Design( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + FT_LOCAL( FT_Error ) + TT_Set_Named_Instance( FT_Face face, + FT_UInt instance_index ); + + FT_LOCAL( FT_Error ) + TT_Get_Default_Named_Instance( FT_Face face, + FT_UInt *instance_index ); + + FT_LOCAL( void ) + tt_construct_ps_name( FT_Face face ); + + FT_LOCAL( FT_Error ) + tt_face_vary_cvt( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + TT_Vary_Apply_Glyph_Deltas( TT_Loader loader, + FT_Outline* outline, + FT_Vector* unrounded ); + + FT_LOCAL( FT_Error ) + tt_hadvance_adjust( FT_Face face, + FT_UInt gindex, + FT_Int *adelta ); + + FT_LOCAL( FT_Error ) + tt_vadvance_adjust( FT_Face face, + FT_UInt gindex, + FT_Int *adelta ); + + FT_LOCAL( void ) + tt_apply_mvar( FT_Face face ); + + FT_LOCAL( FT_Error ) + tt_var_load_item_variation_store( FT_Face face, + FT_ULong offset, + GX_ItemVarStore itemStore ); + + FT_LOCAL( FT_Error ) + tt_var_load_delta_set_index_mapping( FT_Face face, + FT_ULong offset, + GX_DeltaSetIdxMap map, + GX_ItemVarStore itemStore, + FT_ULong table_len ); + + FT_LOCAL( FT_ItemVarDelta ) + tt_var_get_item_delta( FT_Face face, + GX_ItemVarStore itemStore, + FT_UInt outerIndex, + FT_UInt innerIndex ); + + FT_LOCAL( void ) + tt_var_done_item_variation_store( FT_Face face, + GX_ItemVarStore itemStore ); + + FT_LOCAL( void ) + tt_var_done_delta_set_index_map( FT_Face face, + GX_DeltaSetIdxMap deltaSetIdxMap ); + + + FT_LOCAL( FT_Error ) + tt_get_var_blend( FT_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_Fixed* *normalizedcoords, + FT_MM_Var* *mm_var ); + + FT_LOCAL( void ) + tt_done_blend( FT_Face face ); + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + +FT_END_HEADER + + +#endif /* TTGXVAR_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttinterp.c b/non-source/foreign/freetype2/src/truetype/ttinterp.c new file mode 100644 index 000000000..951891dbf --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttinterp.c @@ -0,0 +1,7751 @@ +/**************************************************************************** + * + * ttinterp.c + * + * TrueType bytecode interpreter (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +/* Greg Hitchcock from Microsoft has helped a lot in resolving unclear */ +/* issues; many thanks! */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftcalc.h> +#include <freetype/fttrigon.h> +#include <freetype/ftsystem.h> +#include <freetype/ftdriver.h> +#include <freetype/ftmm.h> + +#include "ttinterp.h" +#include "tterrors.h" +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include "ttgxvar.h" +#endif + + +#ifdef TT_USE_BYTECODE_INTERPRETER + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttinterp + + +#define NO_SUBPIXEL_HINTING \ + ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \ + TT_INTERPRETER_VERSION_35 ) + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL +#define SUBPIXEL_HINTING_MINIMAL \ + ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \ + TT_INTERPRETER_VERSION_40 ) +#endif + +#define PROJECT( v1, v2 ) \ + exc->func_project( exc, \ + SUB_LONG( (v1)->x, (v2)->x ), \ + SUB_LONG( (v1)->y, (v2)->y ) ) + +#define DUALPROJ( v1, v2 ) \ + exc->func_dualproj( exc, \ + SUB_LONG( (v1)->x, (v2)->x ), \ + SUB_LONG( (v1)->y, (v2)->y ) ) + +#define FAST_PROJECT( v ) \ + exc->func_project( exc, (v)->x, (v)->y ) + +#define FAST_DUALPROJ( v ) \ + exc->func_dualproj( exc, (v)->x, (v)->y ) + + + /************************************************************************** + * + * Two simple bounds-checking macros. + */ +#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) ) +#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) ) + + +#undef SUCCESS +#define SUCCESS 0 + +#undef FAILURE +#define FAILURE 1 + + + /************************************************************************** + * + * CODERANGE FUNCTIONS + * + */ + + + /************************************************************************** + * + * @Function: + * TT_Goto_CodeRange + * + * @Description: + * Switches to a new code range (updates the code related elements in + * `exec', and `IP'). + * + * @Input: + * range :: + * The new execution code range. + * + * IP :: + * The new IP in the new code range. + * + * @InOut: + * exec :: + * The target execution context. + */ + FT_LOCAL_DEF( void ) + TT_Goto_CodeRange( TT_ExecContext exec, + FT_Int range, + FT_Long IP ) + { + TT_CodeRange* coderange; + + + FT_ASSERT( range >= 1 && range <= 3 ); + + coderange = &exec->codeRangeTable[range - 1]; + + FT_ASSERT( coderange->base ); + + /* NOTE: Because the last instruction of a program may be a CALL */ + /* which will return to the first byte *after* the code */ + /* range, we test for IP <= Size instead of IP < Size. */ + /* */ + FT_ASSERT( IP <= coderange->size ); + + exec->code = coderange->base; + exec->codeSize = coderange->size; + exec->IP = IP; + exec->curRange = range; + } + + + /************************************************************************** + * + * @Function: + * TT_Set_CodeRange + * + * @Description: + * Sets a code range. + * + * @Input: + * range :: + * The code range index. + * + * base :: + * The new code base. + * + * length :: + * The range size in bytes. + * + * @InOut: + * exec :: + * The target execution context. + */ + FT_LOCAL_DEF( void ) + TT_Set_CodeRange( TT_ExecContext exec, + FT_Int range, + void* base, + FT_Long length ) + { + FT_ASSERT( range >= 1 && range <= 3 ); + + exec->codeRangeTable[range - 1].base = (FT_Byte*)base; + exec->codeRangeTable[range - 1].size = length; + } + + + /************************************************************************** + * + * @Function: + * TT_Clear_CodeRange + * + * @Description: + * Clears a code range. + * + * @Input: + * range :: + * The code range index. + * + * @InOut: + * exec :: + * The target execution context. + */ + FT_LOCAL_DEF( void ) + TT_Clear_CodeRange( TT_ExecContext exec, + FT_Int range ) + { + FT_ASSERT( range >= 1 && range <= 3 ); + + exec->codeRangeTable[range - 1].base = NULL; + exec->codeRangeTable[range - 1].size = 0; + } + + + /************************************************************************** + * + * EXECUTION CONTEXT ROUTINES + * + */ + + + /************************************************************************** + * + * @Function: + * TT_Done_Context + * + * @Description: + * Destroys a given context. + * + * @Input: + * exec :: + * A handle to the target execution context. + * + * memory :: + * A handle to the parent memory object. + * + * @Note: + * Only the glyph loader and debugger should call this function. + */ + FT_LOCAL_DEF( void ) + TT_Done_Context( TT_ExecContext exec ) + { + FT_Memory memory = exec->memory; + + + /* points zone */ + exec->maxPoints = 0; + exec->maxContours = 0; + + /* free stack */ + FT_FREE( exec->stack ); + exec->stackSize = 0; + + /* free glyf cvt working area */ + FT_FREE( exec->glyfCvt ); + exec->glyfCvtSize = 0; + + /* free glyf storage working area */ + FT_FREE( exec->glyfStorage ); + exec->glyfStoreSize = 0; + + /* free call stack */ + FT_FREE( exec->callStack ); + exec->callSize = 0; + exec->callTop = 0; + + /* free glyph code range */ + FT_FREE( exec->glyphIns ); + exec->glyphSize = 0; + + exec->size = NULL; + exec->face = NULL; + + FT_FREE( exec ); + } + + + /************************************************************************** + * + * @Function: + * TT_Load_Context + * + * @Description: + * Prepare an execution context for glyph hinting. + * + * @Input: + * face :: + * A handle to the source face object. + * + * size :: + * A handle to the source size object. + * + * @InOut: + * exec :: + * A handle to the target execution context. + * + * @Return: + * FreeType error code. 0 means success. + * + * @Note: + * Only the glyph loader and debugger should call this function. + * + * Note that not all members of `TT_ExecContext` get initialized. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Load_Context( TT_ExecContext exec, + TT_Face face, + TT_Size size ) + { + FT_Int i; + TT_MaxProfile* maxp; + FT_Error error; + FT_Memory memory = exec->memory; + + + exec->face = face; + maxp = &face->max_profile; + exec->size = size; + + if ( size ) + { + exec->numFDefs = size->num_function_defs; + exec->maxFDefs = size->max_function_defs; + exec->numIDefs = size->num_instruction_defs; + exec->maxIDefs = size->max_instruction_defs; + exec->FDefs = size->function_defs; + exec->IDefs = size->instruction_defs; + exec->pointSize = size->point_size; + exec->tt_metrics = size->ttmetrics; + exec->metrics = *size->metrics; + + exec->maxFunc = size->max_func; + exec->maxIns = size->max_ins; + + for ( i = 0; i < TT_MAX_CODE_RANGES; i++ ) + exec->codeRangeTable[i] = size->codeRangeTable[i]; + + /* set graphics state */ + exec->GS = size->GS; + + exec->cvtSize = size->cvt_size; + exec->cvt = size->cvt; + + exec->storeSize = size->storage_size; + exec->storage = size->storage; + + exec->twilight = size->twilight; + + /* In case of multi-threading it can happen that the old size object */ + /* no longer exists, thus we must clear all glyph zone references. */ + FT_ZERO( &exec->zp0 ); + exec->zp1 = exec->zp0; + exec->zp2 = exec->zp0; + } + + /* XXX: We reserve a little more elements on the stack to deal safely */ + /* with broken fonts like arialbs, courbs, timesbs, etc. */ + if ( FT_QRENEW_ARRAY( exec->stack, + exec->stackSize, + maxp->maxStackElements + 32 ) ) + return error; + exec->stackSize = maxp->maxStackElements + 32; + + /* free previous glyph code range */ + FT_FREE( exec->glyphIns ); + exec->glyphSize = 0; + + exec->pts.n_points = 0; + exec->pts.n_contours = 0; + + exec->zp1 = exec->pts; + exec->zp2 = exec->pts; + exec->zp0 = exec->pts; + + exec->instruction_trap = FALSE; + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * TT_Save_Context + * + * @Description: + * Saves the code ranges in a `size' object. + * + * @Input: + * exec :: + * A handle to the source execution context. + * + * @InOut: + * size :: + * A handle to the target size object. + * + * @Note: + * Only the glyph loader and debugger should call this function. + */ + FT_LOCAL_DEF( void ) + TT_Save_Context( TT_ExecContext exec, + TT_Size size ) + { + FT_Int i; + + + /* XXX: Will probably disappear soon with all the code range */ + /* management, which is now rather obsolete. */ + /* */ + size->num_function_defs = exec->numFDefs; + size->num_instruction_defs = exec->numIDefs; + + size->max_func = exec->maxFunc; + size->max_ins = exec->maxIns; + + for ( i = 0; i < TT_MAX_CODE_RANGES; i++ ) + size->codeRangeTable[i] = exec->codeRangeTable[i]; + } + + + /************************************************************************** + * + * @Function: + * TT_Run_Context + * + * @Description: + * Executes one or more instructions in the execution context. + * + * @Input: + * exec :: + * A handle to the target execution context. + * + * @Return: + * TrueType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + TT_Run_Context( TT_ExecContext exec ) + { + TT_Goto_CodeRange( exec, tt_coderange_glyph, 0 ); + + exec->zp0 = exec->pts; + exec->zp1 = exec->pts; + exec->zp2 = exec->pts; + + exec->GS.gep0 = 1; + exec->GS.gep1 = 1; + exec->GS.gep2 = 1; + + exec->GS.projVector.x = 0x4000; + exec->GS.projVector.y = 0x0000; + + exec->GS.freeVector = exec->GS.projVector; + exec->GS.dualVector = exec->GS.projVector; + + exec->GS.round_state = 1; + exec->GS.loop = 1; + + /* some glyphs leave something on the stack. so we clean it */ + /* before a new execution. */ + exec->top = 0; + exec->callTop = 0; + + return exec->face->interpreter( exec ); + } + + + /* The default value for `scan_control' is documented as FALSE in the */ + /* TrueType specification. This is confusing since it implies a */ + /* Boolean value. However, this is not the case, thus both the */ + /* default values of our `scan_type' and `scan_control' fields (which */ + /* the documentation's `scan_control' variable is split into) are */ + /* zero. */ + + const TT_GraphicsState tt_default_graphics_state = + { + 0, 0, 0, + { 0x4000, 0 }, + { 0x4000, 0 }, + { 0x4000, 0 }, + + 1, 64, 1, + TRUE, 68, 0, 0, 9, 3, + 0, FALSE, 0, 1, 1, 1 + }; + + + /* documentation is in ttinterp.h */ + + FT_EXPORT_DEF( TT_ExecContext ) + TT_New_Context( TT_Driver driver ) + { + FT_Memory memory; + FT_Error error; + + TT_ExecContext exec = NULL; + + + if ( !driver ) + goto Fail; + + memory = driver->root.root.memory; + + /* allocate object and zero everything inside */ + if ( FT_NEW( exec ) ) + goto Fail; + + /* create callStack here, other allocations delayed */ + exec->memory = memory; + exec->callSize = 32; + + if ( FT_QNEW_ARRAY( exec->callStack, exec->callSize ) ) + FT_FREE( exec ); + + Fail: + return exec; + } + + + /************************************************************************** + * + * Before an opcode is executed, the interpreter verifies that there are + * enough arguments on the stack, with the help of the `Pop_Push_Count' + * table. + * + * For each opcode, the first column gives the number of arguments that + * are popped from the stack; the second one gives the number of those + * that are pushed in result. + * + * Opcodes which have a varying number of parameters in the data stream + * (NPUSHB, NPUSHW) are handled specially; they have a negative value in + * the `opcode_length' table, and the value in `Pop_Push_Count' is set + * to zero. + * + */ + + +#undef PACK +#define PACK( x, y ) ( ( x << 4 ) | y ) + + + static + const FT_Byte Pop_Push_Count[256] = + { + /* opcodes are gathered in groups of 16 */ + /* please keep the spaces as they are */ + + /* 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 ), + /* SZP0 */ PACK( 1, 0 ), + /* SZP1 */ PACK( 1, 0 ), + /* SZP2 */ PACK( 1, 0 ), + /* SZPS */ PACK( 1, 0 ), + /* SLOOP */ PACK( 1, 0 ), + /* RTG */ PACK( 0, 0 ), + /* RTHG */ PACK( 0, 0 ), + /* SMD */ PACK( 1, 0 ), + /* ELSE */ PACK( 0, 0 ), + /* JMPR */ PACK( 1, 0 ), + /* SCVTCI */ PACK( 1, 0 ), + /* SSWCI */ PACK( 1, 0 ), + /* SSW */ PACK( 1, 0 ), + + /* 0x20 */ + /* DUP */ PACK( 1, 2 ), + /* POP */ PACK( 1, 0 ), + /* CLEAR */ PACK( 0, 0 ), + /* SWAP */ PACK( 2, 2 ), + /* DEPTH */ PACK( 0, 1 ), + /* CINDEX */ PACK( 1, 1 ), + /* MINDEX */ PACK( 1, 0 ), + /* ALIGNPTS */ PACK( 2, 0 ), + /* INS_$28 */ PACK( 0, 0 ), + /* UTP */ PACK( 1, 0 ), + /* LOOPCALL */ PACK( 2, 0 ), + /* CALL */ PACK( 1, 0 ), + /* FDEF */ PACK( 1, 0 ), + /* ENDF */ PACK( 0, 0 ), + /* MDAP[0] */ PACK( 1, 0 ), + /* MDAP[1] */ PACK( 1, 0 ), + + /* 0x30 */ + /* IUP[0] */ PACK( 0, 0 ), + /* IUP[1] */ PACK( 0, 0 ), + /* SHP[0] */ PACK( 0, 0 ), /* loops */ + /* SHP[1] */ PACK( 0, 0 ), /* loops */ + /* SHC[0] */ PACK( 1, 0 ), + /* SHC[1] */ PACK( 1, 0 ), + /* SHZ[0] */ PACK( 1, 0 ), + /* SHZ[1] */ PACK( 1, 0 ), + /* SHPIX */ PACK( 1, 0 ), /* loops */ + /* IP */ PACK( 0, 0 ), /* loops */ + /* MSIRP[0] */ PACK( 2, 0 ), + /* MSIRP[1] */ PACK( 2, 0 ), + /* ALIGNRP */ PACK( 0, 0 ), /* loops */ + /* RTDG */ PACK( 0, 0 ), + /* MIAP[0] */ PACK( 2, 0 ), + /* MIAP[1] */ PACK( 2, 0 ), + + /* 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 ), + /* GC[0] */ PACK( 1, 1 ), + /* GC[1] */ PACK( 1, 1 ), + /* SCFS */ PACK( 2, 0 ), + /* MD[0] */ PACK( 2, 1 ), + /* MD[1] */ PACK( 2, 1 ), + /* MPPEM */ PACK( 0, 1 ), + /* MPS */ PACK( 0, 1 ), + /* FLIPON */ PACK( 0, 0 ), + /* FLIPOFF */ PACK( 0, 0 ), + /* DEBUG */ PACK( 1, 0 ), + + /* 0x50 */ + /* LT */ PACK( 2, 1 ), + /* LTEQ */ PACK( 2, 1 ), + /* GT */ PACK( 2, 1 ), + /* GTEQ */ PACK( 2, 1 ), + /* EQ */ PACK( 2, 1 ), + /* NEQ */ PACK( 2, 1 ), + /* ODD */ PACK( 1, 1 ), + /* EVEN */ PACK( 1, 1 ), + /* IF */ PACK( 1, 0 ), + /* EIF */ PACK( 0, 0 ), + /* AND */ PACK( 2, 1 ), + /* OR */ PACK( 2, 1 ), + /* NOT */ PACK( 1, 1 ), + /* DELTAP1 */ PACK( 1, 0 ), + /* SDB */ PACK( 1, 0 ), + /* SDS */ PACK( 1, 0 ), + + /* 0x60 */ + /* ADD */ PACK( 2, 1 ), + /* SUB */ PACK( 2, 1 ), + /* DIV */ PACK( 2, 1 ), + /* MUL */ PACK( 2, 1 ), + /* ABS */ PACK( 1, 1 ), + /* NEG */ PACK( 1, 1 ), + /* FLOOR */ PACK( 1, 1 ), + /* CEILING */ PACK( 1, 1 ), + /* ROUND[0] */ PACK( 1, 1 ), + /* ROUND[1] */ PACK( 1, 1 ), + /* ROUND[2] */ PACK( 1, 1 ), + /* ROUND[3] */ PACK( 1, 1 ), + /* NROUND[0] */ PACK( 1, 1 ), + /* NROUND[1] */ PACK( 1, 1 ), + /* NROUND[2] */ PACK( 1, 1 ), + /* NROUND[3] */ PACK( 1, 1 ), + + /* 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 ), + /* JROT */ PACK( 2, 0 ), + /* JROF */ PACK( 2, 0 ), + /* ROFF */ PACK( 0, 0 ), + /* INS_$7B */ PACK( 0, 0 ), + /* RUTG */ PACK( 0, 0 ), + /* RDTG */ PACK( 0, 0 ), + /* SANGW */ PACK( 1, 0 ), + /* AA */ PACK( 1, 0 ), + + /* 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 ), + /* IDEF */ PACK( 1, 0 ), + /* ROLL */ PACK( 3, 3 ), + /* MAX */ PACK( 2, 1 ), + /* MIN */ PACK( 2, 1 ), + /* SCANTYPE */ PACK( 1, 0 ), + /* INSTCTRL */ PACK( 2, 0 ), + /* INS_$8F */ PACK( 0, 0 ), + + /* 0x90 */ + /* INS_$90 */ PACK( 0, 0 ), + /* GETVAR */ PACK( 0, 0 ), /* will be handled specially */ + /* GETDATA */ PACK( 0, 1 ), + /* INS_$93 */ PACK( 0, 0 ), + /* INS_$94 */ PACK( 0, 0 ), + /* INS_$95 */ PACK( 0, 0 ), + /* INS_$96 */ PACK( 0, 0 ), + /* INS_$97 */ PACK( 0, 0 ), + /* INS_$98 */ PACK( 0, 0 ), + /* INS_$99 */ PACK( 0, 0 ), + /* INS_$9A */ PACK( 0, 0 ), + /* INS_$9B */ PACK( 0, 0 ), + /* INS_$9C */ PACK( 0, 0 ), + /* INS_$9D */ PACK( 0, 0 ), + /* INS_$9E */ PACK( 0, 0 ), + /* INS_$9F */ PACK( 0, 0 ), + + /* 0xA0 */ + /* INS_$A0 */ PACK( 0, 0 ), + /* INS_$A1 */ PACK( 0, 0 ), + /* INS_$A2 */ PACK( 0, 0 ), + /* INS_$A3 */ PACK( 0, 0 ), + /* INS_$A4 */ PACK( 0, 0 ), + /* INS_$A5 */ PACK( 0, 0 ), + /* INS_$A6 */ PACK( 0, 0 ), + /* INS_$A7 */ PACK( 0, 0 ), + /* INS_$A8 */ PACK( 0, 0 ), + /* INS_$A9 */ PACK( 0, 0 ), + /* INS_$AA */ PACK( 0, 0 ), + /* INS_$AB */ PACK( 0, 0 ), + /* INS_$AC */ PACK( 0, 0 ), + /* INS_$AD */ PACK( 0, 0 ), + /* INS_$AE */ PACK( 0, 0 ), + /* INS_$AF */ PACK( 0, 0 ), + + /* 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 ), + /* MDRP[03] */ PACK( 1, 0 ), + /* MDRP[04] */ PACK( 1, 0 ), + /* MDRP[05] */ PACK( 1, 0 ), + /* MDRP[06] */ PACK( 1, 0 ), + /* MDRP[07] */ PACK( 1, 0 ), + /* MDRP[08] */ PACK( 1, 0 ), + /* MDRP[09] */ PACK( 1, 0 ), + /* MDRP[10] */ PACK( 1, 0 ), + /* MDRP[11] */ PACK( 1, 0 ), + /* MDRP[12] */ PACK( 1, 0 ), + /* MDRP[13] */ PACK( 1, 0 ), + /* MDRP[14] */ PACK( 1, 0 ), + /* MDRP[15] */ PACK( 1, 0 ), + + /* 0xD0 */ + /* MDRP[16] */ PACK( 1, 0 ), + /* MDRP[17] */ PACK( 1, 0 ), + /* MDRP[18] */ PACK( 1, 0 ), + /* MDRP[19] */ PACK( 1, 0 ), + /* MDRP[20] */ PACK( 1, 0 ), + /* MDRP[21] */ PACK( 1, 0 ), + /* MDRP[22] */ PACK( 1, 0 ), + /* MDRP[23] */ PACK( 1, 0 ), + /* MDRP[24] */ PACK( 1, 0 ), + /* MDRP[25] */ PACK( 1, 0 ), + /* MDRP[26] */ PACK( 1, 0 ), + /* MDRP[27] */ PACK( 1, 0 ), + /* MDRP[28] */ PACK( 1, 0 ), + /* MDRP[29] */ PACK( 1, 0 ), + /* MDRP[30] */ PACK( 1, 0 ), + /* MDRP[31] */ PACK( 1, 0 ), + + /* 0xE0 */ + /* MIRP[00] */ PACK( 2, 0 ), + /* MIRP[01] */ PACK( 2, 0 ), + /* MIRP[02] */ PACK( 2, 0 ), + /* MIRP[03] */ PACK( 2, 0 ), + /* MIRP[04] */ PACK( 2, 0 ), + /* MIRP[05] */ PACK( 2, 0 ), + /* MIRP[06] */ PACK( 2, 0 ), + /* MIRP[07] */ PACK( 2, 0 ), + /* MIRP[08] */ PACK( 2, 0 ), + /* MIRP[09] */ PACK( 2, 0 ), + /* MIRP[10] */ PACK( 2, 0 ), + /* MIRP[11] */ PACK( 2, 0 ), + /* MIRP[12] */ PACK( 2, 0 ), + /* MIRP[13] */ PACK( 2, 0 ), + /* MIRP[14] */ PACK( 2, 0 ), + /* MIRP[15] */ PACK( 2, 0 ), + + /* 0xF0 */ + /* MIRP[16] */ PACK( 2, 0 ), + /* MIRP[17] */ PACK( 2, 0 ), + /* MIRP[18] */ PACK( 2, 0 ), + /* MIRP[19] */ PACK( 2, 0 ), + /* MIRP[20] */ PACK( 2, 0 ), + /* MIRP[21] */ PACK( 2, 0 ), + /* MIRP[22] */ PACK( 2, 0 ), + /* MIRP[23] */ PACK( 2, 0 ), + /* MIRP[24] */ PACK( 2, 0 ), + /* MIRP[25] */ PACK( 2, 0 ), + /* MIRP[26] */ PACK( 2, 0 ), + /* MIRP[27] */ PACK( 2, 0 ), + /* MIRP[28] */ PACK( 2, 0 ), + /* MIRP[29] */ PACK( 2, 0 ), + /* MIRP[30] */ PACK( 2, 0 ), + /* MIRP[31] */ PACK( 2, 0 ) + }; + + +#ifdef FT_DEBUG_LEVEL_TRACE + + /* the first hex digit gives the length of the opcode name; the space */ + /* after the digit is here just to increase readability of the source */ + /* code */ + + static + const char* const opcode_name[256] = + { + /* 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", + "4 SZP0", + "4 SZP1", + "4 SZP2", + "4 SZPS", + "5 SLOOP", + "3 RTG", + "4 RTHG", + "3 SMD", + "4 ELSE", + "4 JMPR", + "6 SCVTCI", + "5 SSWCI", + "3 SSW", + + /* 0x20 */ + "3 DUP", + "3 POP", + "5 CLEAR", + "4 SWAP", + "5 DEPTH", + "6 CINDEX", + "6 MINDEX", + "8 ALIGNPTS", + "7 INS_$28", + "3 UTP", + "8 LOOPCALL", + "4 CALL", + "4 FDEF", + "4 ENDF", + "6 MDAP[]", + "9 MDAP[rnd]", + + /* 0x30 */ + "6 IUP[y]", + "6 IUP[x]", + "8 SHP[rp2]", + "8 SHP[rp1]", + "8 SHC[rp2]", + "8 SHC[rp1]", + "8 SHZ[rp2]", + "8 SHZ[rp1]", + "5 SHPIX", + "2 IP", + "7 MSIRP[]", + "A MSIRP[rp0]", + "7 ALIGNRP", + "4 RTDG", + "6 MIAP[]", + "9 MIAP[rnd]", + + /* 0x40 */ + "6 NPUSHB", + "6 NPUSHW", + "2 WS", + "2 RS", + "5 WCVTP", + "4 RCVT", + "8 GC[curr]", + "8 GC[orig]", + "4 SCFS", + "8 MD[curr]", + "8 MD[orig]", + "5 MPPEM", + "3 MPS", + "6 FLIPON", + "7 FLIPOFF", + "5 DEBUG", + + /* 0x50 */ + "2 LT", + "4 LTEQ", + "2 GT", + "4 GTEQ", + "2 EQ", + "3 NEQ", + "3 ODD", + "4 EVEN", + "2 IF", + "3 EIF", + "3 AND", + "2 OR", + "3 NOT", + "7 DELTAP1", + "3 SDB", + "3 SDS", + + /* 0x60 */ + "3 ADD", + "3 SUB", + "3 DIV", + "3 MUL", + "3 ABS", + "3 NEG", + "5 FLOOR", + "7 CEILING", + "8 ROUND[G]", + "8 ROUND[B]", + "8 ROUND[W]", + "7 ROUND[]", + "9 NROUND[G]", + "9 NROUND[B]", + "9 NROUND[W]", + "8 NROUND[]", + + /* 0x70 */ + "5 WCVTF", + "7 DELTAP2", + "7 DELTAP3", + "7 DELTAC1", + "7 DELTAC2", + "7 DELTAC3", + "6 SROUND", + "8 S45ROUND", + "4 JROT", + "4 JROF", + "4 ROFF", + "7 INS_$7B", + "4 RUTG", + "4 RDTG", + "5 SANGW", + "2 AA", + + /* 0x80 */ + "6 FLIPPT", + "8 FLIPRGON", + "9 FLIPRGOFF", + "7 INS_$83", + "7 INS_$84", + "8 SCANCTRL", + "A SDPVTL[||]", + "9 SDPVTL[+]", + "7 GETINFO", + "4 IDEF", + "4 ROLL", + "3 MAX", + "3 MIN", + "8 SCANTYPE", + "8 INSTCTRL", + "7 INS_$8F", + + /* 0x90 */ + "7 INS_$90", +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + "C GETVARIATION", + "7 GETDATA", +#else + "7 INS_$91", + "7 INS_$92", +#endif + "7 INS_$93", + "7 INS_$94", + "7 INS_$95", + "7 INS_$96", + "7 INS_$97", + "7 INS_$98", + "7 INS_$99", + "7 INS_$9A", + "7 INS_$9B", + "7 INS_$9C", + "7 INS_$9D", + "7 INS_$9E", + "7 INS_$9F", + + /* 0xA0 */ + "7 INS_$A0", + "7 INS_$A1", + "7 INS_$A2", + "7 INS_$A3", + "7 INS_$A4", + "7 INS_$A5", + "7 INS_$A6", + "7 INS_$A7", + "7 INS_$A8", + "7 INS_$A9", + "7 INS_$AA", + "7 INS_$AB", + "7 INS_$AC", + "7 INS_$AD", + "7 INS_$AE", + "7 INS_$AF", + + /* 0xB0 */ + "8 PUSHB[0]", + "8 PUSHB[1]", + "8 PUSHB[2]", + "8 PUSHB[3]", + "8 PUSHB[4]", + "8 PUSHB[5]", + "8 PUSHB[6]", + "8 PUSHB[7]", + "8 PUSHW[0]", + "8 PUSHW[1]", + "8 PUSHW[2]", + "8 PUSHW[3]", + "8 PUSHW[4]", + "8 PUSHW[5]", + "8 PUSHW[6]", + "8 PUSHW[7]", + + /* 0xC0 */ + "7 MDRP[G]", + "7 MDRP[B]", + "7 MDRP[W]", + "6 MDRP[]", + "8 MDRP[rG]", + "8 MDRP[rB]", + "8 MDRP[rW]", + "7 MDRP[r]", + "8 MDRP[mG]", + "8 MDRP[mB]", + "8 MDRP[mW]", + "7 MDRP[m]", + "9 MDRP[mrG]", + "9 MDRP[mrB]", + "9 MDRP[mrW]", + "8 MDRP[mr]", + + /* 0xD0 */ + "8 MDRP[pG]", + "8 MDRP[pB]", + "8 MDRP[pW]", + "7 MDRP[p]", + "9 MDRP[prG]", + "9 MDRP[prB]", + "9 MDRP[prW]", + "8 MDRP[pr]", + "9 MDRP[pmG]", + "9 MDRP[pmB]", + "9 MDRP[pmW]", + "8 MDRP[pm]", + "A MDRP[pmrG]", + "A MDRP[pmrB]", + "A MDRP[pmrW]", + "9 MDRP[pmr]", + + /* 0xE0 */ + "7 MIRP[G]", + "7 MIRP[B]", + "7 MIRP[W]", + "6 MIRP[]", + "8 MIRP[rG]", + "8 MIRP[rB]", + "8 MIRP[rW]", + "7 MIRP[r]", + "8 MIRP[mG]", + "8 MIRP[mB]", + "8 MIRP[mW]", + "7 MIRP[m]", + "9 MIRP[mrG]", + "9 MIRP[mrB]", + "9 MIRP[mrW]", + "8 MIRP[mr]", + + /* 0xF0 */ + "8 MIRP[pG]", + "8 MIRP[pB]", + "8 MIRP[pW]", + "7 MIRP[p]", + "9 MIRP[prG]", + "9 MIRP[prB]", + "9 MIRP[prW]", + "8 MIRP[pr]", + "9 MIRP[pmG]", + "9 MIRP[pmB]", + "9 MIRP[pmW]", + "8 MIRP[pm]", + "A MIRP[pmrG]", + "A MIRP[pmrB]", + "A MIRP[pmrW]", + "9 MIRP[pmr]" + }; + +#endif /* FT_DEBUG_LEVEL_TRACE */ + + + static + const FT_Char opcode_length[256] = + { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + -1,-2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 3, 5, 7, 9, 11,13,15,17, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + }; + +#undef PACK + + +#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER + +#if defined( __arm__ ) && \ + ( defined( __thumb2__ ) || !defined( __thumb__ ) ) + +#define TT_MulFix14 TT_MulFix14_arm + + static FT_Int32 + TT_MulFix14_arm( FT_Int32 a, + FT_Int b ) + { + FT_Int32 t, t2; + + +#if defined( __CC_ARM ) || defined( __ARMCC__ ) + + __asm + { + smull t2, t, b, a /* (lo=t2,hi=t) = a*b */ + mov a, t, asr #31 /* a = (hi >> 31) */ + add a, a, #0x2000 /* a += 0x2000 */ + adds t2, t2, a /* t2 += a */ + adc t, t, #0 /* t += carry */ + mov a, t2, lsr #14 /* a = t2 >> 14 */ + orr a, a, t, lsl #18 /* a |= t << 18 */ + } + +#elif defined( __GNUC__ ) + + __asm__ __volatile__ ( + "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */ + "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */ +#if defined( __clang__ ) && defined( __thumb2__ ) + "add.w %0, %0, #0x2000\n\t" /* %0 += 0x2000 */ +#else + "add %0, %0, #0x2000\n\t" /* %0 += 0x2000 */ +#endif + "adds %1, %1, %0\n\t" /* %1 += %0 */ + "adc %2, %2, #0\n\t" /* %2 += carry */ + "mov %0, %1, lsr #14\n\t" /* %0 = %1 >> 16 */ + "orr %0, %0, %2, lsl #18\n\t" /* %0 |= %2 << 16 */ + : "=r"(a), "=&r"(t2), "=&r"(t) + : "r"(a), "r"(b) + : "cc" ); + +#endif + + return a; + } + +#endif /* __arm__ && ( __thumb2__ || !__thumb__ ) */ + +#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ + + +#if defined( __GNUC__ ) && \ + ( defined( __i386__ ) || defined( __x86_64__ ) ) + +#define TT_MulFix14 TT_MulFix14_long_long + + /* Temporarily disable the warning that C90 doesn't support `long long'. */ +#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406 +#pragma GCC diagnostic push +#endif +#pragma GCC diagnostic ignored "-Wlong-long" + + /* This is declared `noinline' because inlining the function results */ + /* in slower code. The `pure' attribute indicates that the result */ + /* only depends on the parameters. */ + static __attribute__(( noinline )) + __attribute__(( pure )) FT_Int32 + TT_MulFix14_long_long( FT_Int32 a, + FT_Int b ) + { + + long long ret = (long long)a * b; + + /* The following line assumes that right shifting of signed values */ + /* will actually preserve the sign bit. The exact behaviour is */ + /* undefined, but this is true on x86 and x86_64. */ + long long tmp = ret >> 63; + + + ret += 0x2000 + tmp; + + return (FT_Int32)( ret >> 14 ); + } + +#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406 +#pragma GCC diagnostic pop +#endif + +#endif /* __GNUC__ && ( __i386__ || __x86_64__ ) */ + + +#ifndef TT_MulFix14 + + /* Compute (a*b)/2^14 with maximum accuracy and rounding. */ + /* This is optimized to be faster than calling FT_MulFix() */ + /* for platforms where sizeof(int) == 2. */ + static FT_Int32 + TT_MulFix14( FT_Int32 a, + FT_Int b ) + { + FT_Int32 sign; + FT_UInt32 ah, al, mid, lo, hi; + + + sign = a ^ b; + + if ( a < 0 ) + a = -a; + if ( b < 0 ) + b = -b; + + ah = (FT_UInt32)( ( a >> 16 ) & 0xFFFFU ); + al = (FT_UInt32)( a & 0xFFFFU ); + + lo = al * b; + mid = ah * b; + hi = mid >> 16; + mid = ( mid << 16 ) + ( 1 << 13 ); /* rounding */ + lo += mid; + if ( lo < mid ) + hi += 1; + + mid = ( lo >> 14 ) | ( hi << 18 ); + + return sign >= 0 ? (FT_Int32)mid : -(FT_Int32)mid; + } + +#endif /* !TT_MulFix14 */ + + +#if defined( __GNUC__ ) && \ + ( defined( __i386__ ) || \ + defined( __x86_64__ ) || \ + defined( __arm__ ) ) + +#define TT_DotFix14 TT_DotFix14_long_long + +#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406 +#pragma GCC diagnostic push +#endif +#pragma GCC diagnostic ignored "-Wlong-long" + + static __attribute__(( pure )) FT_Int32 + TT_DotFix14_long_long( FT_Int32 ax, + FT_Int32 ay, + FT_Int bx, + FT_Int by ) + { + /* Temporarily disable the warning that C90 doesn't support */ + /* `long long'. */ + + long long temp1 = (long long)ax * bx; + long long temp2 = (long long)ay * by; + + + temp1 += temp2; + temp2 = temp1 >> 63; + temp1 += 0x2000 + temp2; + + return (FT_Int32)( temp1 >> 14 ); + + } + +#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406 +#pragma GCC diagnostic pop +#endif + +#endif /* __GNUC__ && (__arm__ || __i386__ || __x86_64__) */ + + +#ifndef TT_DotFix14 + + /* compute (ax*bx+ay*by)/2^14 with maximum accuracy and rounding */ + static FT_Int32 + TT_DotFix14( FT_Int32 ax, + FT_Int32 ay, + FT_Int bx, + FT_Int by ) + { + FT_Int32 m, s, hi1, hi2, hi; + FT_UInt32 l, lo1, lo2, lo; + + + /* compute ax*bx as 64-bit value */ + l = (FT_UInt32)( ( ax & 0xFFFFU ) * bx ); + m = ( ax >> 16 ) * bx; + + lo1 = l + ( (FT_UInt32)m << 16 ); + hi1 = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo1 < l ); + + /* compute ay*by as 64-bit value */ + l = (FT_UInt32)( ( ay & 0xFFFFU ) * by ); + m = ( ay >> 16 ) * by; + + lo2 = l + ( (FT_UInt32)m << 16 ); + hi2 = ( m >> 16 ) + ( (FT_Int32)l >> 31 ) + ( lo2 < l ); + + /* add them */ + lo = lo1 + lo2; + hi = hi1 + hi2 + ( lo < lo1 ); + + /* divide the result by 2^14 with rounding */ + s = hi >> 31; + l = lo + (FT_UInt32)s; + hi += s + ( l < lo ); + lo = l; + + l = lo + 0x2000U; + hi += ( l < lo ); + + return (FT_Int32)( ( (FT_UInt32)hi << 18 ) | ( l >> 14 ) ); + } + +#endif /* TT_DotFix14 */ + + + /************************************************************************** + * + * @Function: + * Current_Ratio + * + * @Description: + * Returns the current aspect ratio scaling factor depending on the + * projection vector's state and device resolutions. + * + * @Return: + * The aspect ratio in 16.16 format, always <= 1.0 . + */ + static FT_Long + Current_Ratio( TT_ExecContext exc ) + { + if ( !exc->tt_metrics.ratio ) + { + if ( exc->GS.projVector.y == 0 ) + exc->tt_metrics.ratio = exc->tt_metrics.x_ratio; + + else if ( exc->GS.projVector.x == 0 ) + exc->tt_metrics.ratio = exc->tt_metrics.y_ratio; + + else + { + FT_F26Dot6 x, y; + + + x = TT_MulFix14( exc->tt_metrics.x_ratio, + exc->GS.projVector.x ); + y = TT_MulFix14( exc->tt_metrics.y_ratio, + exc->GS.projVector.y ); + exc->tt_metrics.ratio = FT_Hypot( x, y ); + } + } + return exc->tt_metrics.ratio; + } + + + FT_CALLBACK_DEF( FT_Long ) + Current_Ppem( TT_ExecContext exc ) + { + return exc->tt_metrics.ppem; + } + + + FT_CALLBACK_DEF( FT_Long ) + Current_Ppem_Stretched( TT_ExecContext exc ) + { + return FT_MulFix( exc->tt_metrics.ppem, Current_Ratio( exc ) ); + } + + + /************************************************************************** + * + * Functions related to the control value table (CVT). + * + */ + + + FT_CALLBACK_DEF( FT_F26Dot6 ) + Read_CVT( TT_ExecContext exc, + FT_ULong idx ) + { + return exc->cvt[idx]; + } + + + FT_CALLBACK_DEF( FT_F26Dot6 ) + Read_CVT_Stretched( TT_ExecContext exc, + FT_ULong idx ) + { + return FT_MulFix( exc->cvt[idx], Current_Ratio( exc ) ); + } + + + static void + Modify_CVT_Check( TT_ExecContext exc ) + { + if ( exc->iniRange == tt_coderange_glyph && + exc->cvt != exc->glyfCvt ) + { + FT_Memory memory = exc->memory; + FT_Error error; + + + FT_MEM_QRENEW_ARRAY( exc->glyfCvt, exc->glyfCvtSize, exc->cvtSize ); + exc->error = error; + if ( error ) + return; + + exc->glyfCvtSize = exc->cvtSize; + FT_ARRAY_COPY( exc->glyfCvt, exc->cvt, exc->glyfCvtSize ); + exc->cvt = exc->glyfCvt; + } + } + + + FT_CALLBACK_DEF( void ) + Write_CVT( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) + { + Modify_CVT_Check( exc ); + if ( exc->error ) + return; + + exc->cvt[idx] = value; + } + + + FT_CALLBACK_DEF( void ) + Write_CVT_Stretched( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) + { + Modify_CVT_Check( exc ); + if ( exc->error ) + return; + + exc->cvt[idx] = FT_DivFix( value, Current_Ratio( exc ) ); + } + + + FT_CALLBACK_DEF( void ) + Move_CVT( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) + { + Modify_CVT_Check( exc ); + if ( exc->error ) + return; + + exc->cvt[idx] = ADD_LONG( exc->cvt[idx], value ); + } + + + FT_CALLBACK_DEF( void ) + Move_CVT_Stretched( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) + { + Modify_CVT_Check( exc ); + if ( exc->error ) + return; + + exc->cvt[idx] = ADD_LONG( exc->cvt[idx], + FT_DivFix( value, Current_Ratio( exc ) ) ); + } + + + /************************************************************************** + * + * @Function: + * GetShortIns + * + * @Description: + * Returns a short integer taken from the instruction stream at + * address IP. + * + * @Return: + * Short read at code[IP]. + * + * @Note: + * This one could become a macro. + */ + static FT_Short + GetShortIns( TT_ExecContext exc ) + { + /* Reading a byte stream so there is no endianness (DaveP) */ + exc->IP += 2; + return (FT_Short)( ( exc->code[exc->IP - 2] << 8 ) + + exc->code[exc->IP - 1] ); + } + + + /************************************************************************** + * + * @Function: + * Ins_Goto_CodeRange + * + * @Description: + * Goes to a certain code range in the instruction stream. + * + * @Input: + * aRange :: + * The index of the code range. + * + * aIP :: + * The new IP address in the code range. + * + * @Return: + * SUCCESS or FAILURE. + */ + static FT_Bool + Ins_Goto_CodeRange( TT_ExecContext exc, + FT_Int aRange, + FT_Long aIP ) + { + TT_CodeRange* range; + + + if ( aRange < 1 || aRange > 3 ) + { + exc->error = FT_THROW( Bad_Argument ); + return FAILURE; + } + + range = &exc->codeRangeTable[aRange - 1]; + + if ( !range->base ) /* invalid coderange */ + { + exc->error = FT_THROW( Invalid_CodeRange ); + return FAILURE; + } + + /* NOTE: Because the last instruction of a program may be a CALL */ + /* which will return to the first byte *after* the code */ + /* range, we test for aIP <= Size, instead of aIP < Size. */ + + if ( aIP > range->size ) + { + exc->error = FT_THROW( Code_Overflow ); + return FAILURE; + } + + exc->code = range->base; + exc->codeSize = range->size; + exc->IP = aIP; + exc->curRange = aRange; + + return SUCCESS; + } + + + /* + * + * Apple's TrueType specification at + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM02/Chap2.html#order + * + * gives the following order of operations in instructions that move + * points. + * + * - check single width cut-in (MIRP, MDRP) + * + * - check control value cut-in (MIRP, MIAP) + * + * - apply engine compensation (MIRP, MDRP) + * + * - round distance (MIRP, MDRP) or value (MIAP, MDAP) + * + * - check minimum distance (MIRP,MDRP) + * + * - move point (MIRP, MDRP, MIAP, MSIRP, MDAP) + * + * For rounding instructions, engine compensation happens before rounding. + * + */ + + + /************************************************************************** + * + * @Function: + * Direct_Move + * + * @Description: + * Moves a point by a given distance along the freedom vector. The + * point will be `touched'. + * + * @Input: + * point :: + * The index of the point to move. + * + * distance :: + * The distance to apply. + * + * @InOut: + * zone :: + * The affected glyph zone. + * + * @Note: + * See `ttinterp.h' for details on backward compatibility mode. + * `Touches' the point. + */ + static void + Direct_Move( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) + { + FT_F26Dot6 v; + + + v = exc->GS.freeVector.x; + + if ( v != 0 ) + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* Exception to the post-IUP curfew: Allow the x component of */ + /* diagonal moves, but only post-IUP. DejaVu tries to adjust */ + /* diagonal stems like on `Z' and `z' post-IUP. */ + if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility ) + zone->cur[point].x = ADD_LONG( zone->cur[point].x, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); + else +#endif + + if ( NO_SUBPIXEL_HINTING ) + zone->cur[point].x = ADD_LONG( zone->cur[point].x, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); + + zone->tags[point] |= FT_CURVE_TAG_TOUCH_X; + } + + v = exc->GS.freeVector.y; + + if ( v != 0 ) + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( !( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility && + exc->iupx_called && + exc->iupy_called ) ) +#endif + zone->cur[point].y = ADD_LONG( zone->cur[point].y, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); + + zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y; + } + } + + + /************************************************************************** + * + * @Function: + * Direct_Move_Orig + * + * @Description: + * Moves the *original* position of a point by a given distance along + * the freedom vector. Obviously, the point will not be `touched'. + * + * @Input: + * point :: + * The index of the point to move. + * + * distance :: + * The distance to apply. + * + * @InOut: + * zone :: + * The affected glyph zone. + */ + static void + Direct_Move_Orig( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) + { + FT_F26Dot6 v; + + + v = exc->GS.freeVector.x; + + if ( v != 0 ) + zone->org[point].x = ADD_LONG( zone->org[point].x, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); + + v = exc->GS.freeVector.y; + + if ( v != 0 ) + zone->org[point].y = ADD_LONG( zone->org[point].y, + FT_MulDiv( distance, + v, + exc->F_dot_P ) ); + } + + + /************************************************************************** + * + * Special versions of Direct_Move() + * + * The following versions are used whenever both vectors are both + * along one of the coordinate unit vectors, i.e. in 90% of the cases. + * See `ttinterp.h' for details on backward compatibility mode. + * + */ + + + static void + Direct_Move_X( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility ) + zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance ); + else +#endif + + if ( NO_SUBPIXEL_HINTING ) + zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance ); + + zone->tags[point] |= FT_CURVE_TAG_TOUCH_X; + } + + + static void + Direct_Move_Y( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) + { + FT_UNUSED( exc ); + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( !( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility && + exc->iupx_called && exc->iupy_called ) ) +#endif + zone->cur[point].y = ADD_LONG( zone->cur[point].y, distance ); + + zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y; + } + + + /************************************************************************** + * + * Special versions of Direct_Move_Orig() + * + * The following versions are used whenever both vectors are both + * along one of the coordinate unit vectors, i.e. in 90% of the cases. + * + */ + + + static void + Direct_Move_Orig_X( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) + { + FT_UNUSED( exc ); + + zone->org[point].x = ADD_LONG( zone->org[point].x, distance ); + } + + + static void + Direct_Move_Orig_Y( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) + { + FT_UNUSED( exc ); + + zone->org[point].y = ADD_LONG( zone->org[point].y, distance ); + } + + /************************************************************************** + * + * @Function: + * Round_None + * + * @Description: + * Does not round, but adds engine compensation. + * + * @Input: + * distance :: + * The distance (not) to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * The compensated distance. + */ + static FT_F26Dot6 + Round_None( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = ADD_LONG( distance, compensation ); + if ( val < 0 ) + val = 0; + } + else + { + val = SUB_LONG( distance, compensation ); + if ( val > 0 ) + val = 0; + } + return val; + } + + + /************************************************************************** + * + * @Function: + * Round_To_Grid + * + * @Description: + * Rounds value to grid after adding engine compensation. + * + * @Input: + * distance :: + * The distance to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * Rounded distance. + */ + static FT_F26Dot6 + Round_To_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = FT_PIX_ROUND_LONG( ADD_LONG( distance, compensation ) ); + if ( val < 0 ) + val = 0; + } + else + { + val = NEG_LONG( FT_PIX_ROUND_LONG( SUB_LONG( compensation, + distance ) ) ); + if ( val > 0 ) + val = 0; + } + + return val; + } + + + /************************************************************************** + * + * @Function: + * Round_To_Half_Grid + * + * @Description: + * Rounds value to half grid after adding engine compensation. + * + * @Input: + * distance :: + * The distance to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * Rounded distance. + */ + static FT_F26Dot6 + Round_To_Half_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = ADD_LONG( FT_PIX_FLOOR( ADD_LONG( distance, compensation ) ), + 32 ); + if ( val < 0 ) + val = 32; + } + else + { + val = NEG_LONG( ADD_LONG( FT_PIX_FLOOR( SUB_LONG( compensation, + distance ) ), + 32 ) ); + if ( val > 0 ) + val = -32; + } + + return val; + } + + + /************************************************************************** + * + * @Function: + * Round_Down_To_Grid + * + * @Description: + * Rounds value down to grid after adding engine compensation. + * + * @Input: + * distance :: + * The distance to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * Rounded distance. + */ + static FT_F26Dot6 + Round_Down_To_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = FT_PIX_FLOOR( ADD_LONG( distance, compensation ) ); + if ( val < 0 ) + val = 0; + } + else + { + val = NEG_LONG( FT_PIX_FLOOR( SUB_LONG( compensation, distance ) ) ); + if ( val > 0 ) + val = 0; + } + + return val; + } + + + /************************************************************************** + * + * @Function: + * Round_Up_To_Grid + * + * @Description: + * Rounds value up to grid after adding engine compensation. + * + * @Input: + * distance :: + * The distance to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * Rounded distance. + */ + static FT_F26Dot6 + Round_Up_To_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = FT_PIX_CEIL_LONG( ADD_LONG( distance, compensation ) ); + if ( val < 0 ) + val = 0; + } + else + { + val = NEG_LONG( FT_PIX_CEIL_LONG( SUB_LONG( compensation, + distance ) ) ); + if ( val > 0 ) + val = 0; + } + + return val; + } + + + /************************************************************************** + * + * @Function: + * Round_To_Double_Grid + * + * @Description: + * Rounds value to double grid after adding engine compensation. + * + * @Input: + * distance :: + * The distance to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * Rounded distance. + */ + static FT_F26Dot6 + Round_To_Double_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = FT_PAD_ROUND_LONG( ADD_LONG( distance, compensation ), 32 ); + if ( val < 0 ) + val = 0; + } + else + { + val = NEG_LONG( FT_PAD_ROUND_LONG( SUB_LONG( compensation, distance ), + 32 ) ); + if ( val > 0 ) + val = 0; + } + + return val; + } + + + /************************************************************************** + * + * @Function: + * Round_Super + * + * @Description: + * Super-rounds value to grid after adding engine compensation. + * + * @Input: + * distance :: + * The distance to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * Rounded distance. + * + * @Note: + * The TrueType specification says very little about the relationship + * between rounding and engine compensation. However, it seems from + * the description of super round that we should add the compensation + * before rounding. + */ + static FT_F26Dot6 + Round_Super( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = ADD_LONG( distance, + exc->threshold - exc->phase + compensation ) & + -exc->period; + val = ADD_LONG( val, exc->phase ); + if ( val < 0 ) + val = exc->phase; + } + else + { + val = NEG_LONG( SUB_LONG( exc->threshold - exc->phase + compensation, + distance ) & + -exc->period ); + val = SUB_LONG( val, exc->phase ); + if ( val > 0 ) + val = -exc->phase; + } + + return val; + } + + + /************************************************************************** + * + * @Function: + * Round_Super_45 + * + * @Description: + * Super-rounds value to grid after adding engine compensation. + * + * @Input: + * distance :: + * The distance to round. + * + * color :: + * The engine compensation color. + * + * @Return: + * Rounded distance. + * + * @Note: + * There is a separate function for Round_Super_45() as we may need + * greater precision. + */ + static FT_F26Dot6 + Round_Super_45( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ) + { + FT_F26Dot6 compensation = exc->tt_metrics.compensations[color]; + FT_F26Dot6 val; + + + if ( distance >= 0 ) + { + val = ( ADD_LONG( distance, + exc->threshold - exc->phase + compensation ) / + exc->period ) * exc->period; + val = ADD_LONG( val, exc->phase ); + if ( val < 0 ) + val = exc->phase; + } + else + { + val = NEG_LONG( ( SUB_LONG( exc->threshold - exc->phase + compensation, + distance ) / + exc->period ) * exc->period ); + val = SUB_LONG( val, exc->phase ); + if ( val > 0 ) + val = -exc->phase; + } + + return val; + } + + + /************************************************************************** + * + * @Function: + * Compute_Round + * + * @Description: + * Sets the rounding mode. + * + * @Input: + * round_mode :: + * The rounding mode to be used. + */ + static void + Compute_Round( TT_ExecContext exc, + FT_Byte round_mode ) + { + switch ( round_mode ) + { + case TT_Round_Off: + exc->func_round = (TT_Round_Func)Round_None; + break; + + case TT_Round_To_Grid: + exc->func_round = (TT_Round_Func)Round_To_Grid; + break; + + case TT_Round_Up_To_Grid: + exc->func_round = (TT_Round_Func)Round_Up_To_Grid; + break; + + case TT_Round_Down_To_Grid: + exc->func_round = (TT_Round_Func)Round_Down_To_Grid; + break; + + case TT_Round_To_Half_Grid: + exc->func_round = (TT_Round_Func)Round_To_Half_Grid; + break; + + case TT_Round_To_Double_Grid: + exc->func_round = (TT_Round_Func)Round_To_Double_Grid; + break; + + case TT_Round_Super: + exc->func_round = (TT_Round_Func)Round_Super; + break; + + case TT_Round_Super_45: + exc->func_round = (TT_Round_Func)Round_Super_45; + break; + } + } + + + /************************************************************************** + * + * @Function: + * SetSuperRound + * + * @Description: + * Sets Super Round parameters. + * + * @Input: + * GridPeriod :: + * The grid period. + * + * selector :: + * The SROUND opcode. + */ + static void + SetSuperRound( TT_ExecContext exc, + FT_F2Dot14 GridPeriod, + FT_Long selector ) + { + switch ( (FT_Int)( selector & 0xC0 ) ) + { + case 0: + exc->period = GridPeriod / 2; + break; + + case 0x40: + exc->period = GridPeriod; + break; + + case 0x80: + exc->period = GridPeriod * 2; + break; + + /* This opcode is reserved, but... */ + case 0xC0: + exc->period = GridPeriod; + break; + } + + switch ( (FT_Int)( selector & 0x30 ) ) + { + case 0: + exc->phase = 0; + break; + + case 0x10: + exc->phase = exc->period / 4; + break; + + case 0x20: + exc->phase = exc->period / 2; + break; + + case 0x30: + exc->phase = exc->period * 3 / 4; + break; + } + + if ( ( selector & 0x0F ) == 0 ) + exc->threshold = exc->period - 1; + else + exc->threshold = ( (FT_Int)( selector & 0x0F ) - 4 ) * exc->period / 8; + + /* convert to F26Dot6 format */ + exc->period >>= 8; + exc->phase >>= 8; + exc->threshold >>= 8; + } + + + /************************************************************************** + * + * @Function: + * Project + * + * @Description: + * Computes the projection of vector given by (v2-v1) along the + * current projection vector. + * + * @Input: + * v1 :: + * First input vector. + * v2 :: + * Second input vector. + * + * @Return: + * The distance in F26dot6 format. + */ + static FT_F26Dot6 + Project( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) + { + return TT_DotFix14( dx, dy, + exc->GS.projVector.x, + exc->GS.projVector.y ); + } + + + /************************************************************************** + * + * @Function: + * Dual_Project + * + * @Description: + * Computes the projection of the vector given by (v2-v1) along the + * current dual vector. + * + * @Input: + * v1 :: + * First input vector. + * v2 :: + * Second input vector. + * + * @Return: + * The distance in F26dot6 format. + */ + static FT_F26Dot6 + Dual_Project( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) + { + return TT_DotFix14( dx, dy, + exc->GS.dualVector.x, + exc->GS.dualVector.y ); + } + + + /************************************************************************** + * + * @Function: + * Project_x + * + * @Description: + * Computes the projection of the vector given by (v2-v1) along the + * horizontal axis. + * + * @Input: + * v1 :: + * First input vector. + * v2 :: + * Second input vector. + * + * @Return: + * The distance in F26dot6 format. + */ + static FT_F26Dot6 + Project_x( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) + { + FT_UNUSED( exc ); + FT_UNUSED( dy ); + + return dx; + } + + + /************************************************************************** + * + * @Function: + * Project_y + * + * @Description: + * Computes the projection of the vector given by (v2-v1) along the + * vertical axis. + * + * @Input: + * v1 :: + * First input vector. + * v2 :: + * Second input vector. + * + * @Return: + * The distance in F26dot6 format. + */ + static FT_F26Dot6 + Project_y( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) + { + FT_UNUSED( exc ); + FT_UNUSED( dx ); + + return dy; + } + + + /************************************************************************** + * + * @Function: + * Compute_Funcs + * + * @Description: + * Computes the projection and movement function pointers according + * to the current graphics state. + */ + static void + Compute_Funcs( TT_ExecContext exc ) + { + if ( exc->GS.freeVector.x == 0x4000 ) + exc->F_dot_P = exc->GS.projVector.x; + else if ( exc->GS.freeVector.y == 0x4000 ) + exc->F_dot_P = exc->GS.projVector.y; + else + exc->F_dot_P = + ( (FT_Long)exc->GS.projVector.x * exc->GS.freeVector.x + + (FT_Long)exc->GS.projVector.y * exc->GS.freeVector.y ) >> 14; + + if ( exc->GS.projVector.x == 0x4000 ) + exc->func_project = (TT_Project_Func)Project_x; + else if ( exc->GS.projVector.y == 0x4000 ) + exc->func_project = (TT_Project_Func)Project_y; + else + exc->func_project = (TT_Project_Func)Project; + + if ( exc->GS.dualVector.x == 0x4000 ) + exc->func_dualproj = (TT_Project_Func)Project_x; + else if ( exc->GS.dualVector.y == 0x4000 ) + exc->func_dualproj = (TT_Project_Func)Project_y; + else + exc->func_dualproj = (TT_Project_Func)Dual_Project; + + exc->func_move = (TT_Move_Func)Direct_Move; + exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig; + + if ( exc->F_dot_P == 0x4000L ) + { + if ( exc->GS.freeVector.x == 0x4000 ) + { + exc->func_move = (TT_Move_Func)Direct_Move_X; + exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_X; + } + else if ( exc->GS.freeVector.y == 0x4000 ) + { + exc->func_move = (TT_Move_Func)Direct_Move_Y; + exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_Y; + } + } + + /* at small sizes, F_dot_P can become too small, resulting */ + /* in overflows and `spikes' in a number of glyphs like `w'. */ + + if ( FT_ABS( exc->F_dot_P ) < 0x400L ) + exc->F_dot_P = 0x4000L; + + /* Disable cached aspect ratio */ + exc->tt_metrics.ratio = 0; + } + + + /************************************************************************** + * + * @Function: + * Normalize + * + * @Description: + * Norms a vector. + * + * @Input: + * Vx :: + * The horizontal input vector coordinate. + * Vy :: + * The vertical input vector coordinate. + * + * @Output: + * R :: + * The normed unit vector. + * + * @Return: + * Returns FAILURE if a vector parameter is zero. + * + * @Note: + * In case Vx and Vy are both zero, `Normalize' returns SUCCESS, and + * R is undefined. + */ + static FT_Bool + Normalize( FT_F26Dot6 Vx, + FT_F26Dot6 Vy, + FT_UnitVector* R ) + { + FT_Vector V; + + + if ( Vx == 0 && Vy == 0 ) + { + /* XXX: UNDOCUMENTED! It seems that it is possible to try */ + /* to normalize the vector (0,0). Return immediately. */ + return SUCCESS; + } + + V.x = Vx; + V.y = Vy; + + FT_Vector_NormLen( &V ); + + R->x = (FT_F2Dot14)( V.x / 4 ); + R->y = (FT_F2Dot14)( V.y / 4 ); + + return SUCCESS; + } + + + /************************************************************************** + * + * Here we start with the implementation of the various opcodes. + * + */ + + +#define ARRAY_BOUND_ERROR \ + do \ + { \ + exc->error = FT_THROW( Invalid_Reference ); \ + return; \ + } while (0) + + + /************************************************************************** + * + * MPPEM[]: Measure Pixel Per EM + * Opcode range: 0x4B + * Stack: --> Euint16 + */ + static void + Ins_MPPEM( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = exc->func_cur_ppem( exc ); + } + + + /************************************************************************** + * + * MPS[]: Measure Point Size + * Opcode range: 0x4C + * Stack: --> Euint16 + */ + static void + Ins_MPS( TT_ExecContext exc, + FT_Long* args ) + { + if ( NO_SUBPIXEL_HINTING ) + { + /* Microsoft's GDI bytecode interpreter always returns value 12; */ + /* we return the current PPEM value instead. */ + args[0] = exc->func_cur_ppem( exc ); + } + else + { + /* A possible practical application of the MPS instruction is to */ + /* implement optical scaling and similar features, which should be */ + /* based on perceptual attributes, thus independent of the */ + /* resolution. */ + args[0] = exc->pointSize; + } + } + + + /************************************************************************** + * + * DUP[]: DUPlicate the stack's top element + * Opcode range: 0x20 + * Stack: StkElt --> StkElt StkElt + */ + static void + Ins_DUP( FT_Long* args ) + { + args[1] = args[0]; + } + + + /************************************************************************** + * + * POP[]: POP the stack's top element + * Opcode range: 0x21 + * Stack: StkElt --> + */ + static void + Ins_POP( void ) + { + /* nothing to do */ + } + + + /************************************************************************** + * + * CLEAR[]: CLEAR the entire stack + * Opcode range: 0x22 + * Stack: StkElt... --> + */ + static void + Ins_CLEAR( TT_ExecContext exc ) + { + exc->new_top = 0; + } + + + /************************************************************************** + * + * SWAP[]: SWAP the stack's top two elements + * Opcode range: 0x23 + * Stack: 2 * StkElt --> 2 * StkElt + */ + static void + Ins_SWAP( FT_Long* args ) + { + FT_Long L; + + + L = args[0]; + args[0] = args[1]; + args[1] = L; + } + + + /************************************************************************** + * + * DEPTH[]: return the stack DEPTH + * Opcode range: 0x24 + * Stack: --> uint32 + */ + static void + Ins_DEPTH( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = exc->top; + } + + + /************************************************************************** + * + * LT[]: Less Than + * Opcode range: 0x50 + * Stack: int32? int32? --> bool + */ + static void + Ins_LT( FT_Long* args ) + { + args[0] = ( args[0] < args[1] ); + } + + + /************************************************************************** + * + * LTEQ[]: Less Than or EQual + * Opcode range: 0x51 + * Stack: int32? int32? --> bool + */ + static void + Ins_LTEQ( FT_Long* args ) + { + args[0] = ( args[0] <= args[1] ); + } + + + /************************************************************************** + * + * GT[]: Greater Than + * Opcode range: 0x52 + * Stack: int32? int32? --> bool + */ + static void + Ins_GT( FT_Long* args ) + { + args[0] = ( args[0] > args[1] ); + } + + + /************************************************************************** + * + * GTEQ[]: Greater Than or EQual + * Opcode range: 0x53 + * Stack: int32? int32? --> bool + */ + static void + Ins_GTEQ( FT_Long* args ) + { + args[0] = ( args[0] >= args[1] ); + } + + + /************************************************************************** + * + * EQ[]: EQual + * Opcode range: 0x54 + * Stack: StkElt StkElt --> bool + */ + static void + Ins_EQ( FT_Long* args ) + { + args[0] = ( args[0] == args[1] ); + } + + + /************************************************************************** + * + * NEQ[]: Not EQual + * Opcode range: 0x55 + * Stack: StkElt StkElt --> bool + */ + static void + Ins_NEQ( FT_Long* args ) + { + args[0] = ( args[0] != args[1] ); + } + + + /************************************************************************** + * + * ODD[]: Is ODD + * Opcode range: 0x56 + * Stack: f26.6 --> bool + */ + static void + Ins_ODD( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = ( ( exc->func_round( exc, args[0], 3 ) & 127 ) == 64 ); + } + + + /************************************************************************** + * + * EVEN[]: Is EVEN + * Opcode range: 0x57 + * Stack: f26.6 --> bool + */ + static void + Ins_EVEN( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = ( ( exc->func_round( exc, args[0], 3 ) & 127 ) == 0 ); + } + + + /************************************************************************** + * + * AND[]: logical AND + * Opcode range: 0x5A + * Stack: uint32 uint32 --> uint32 + */ + static void + Ins_AND( FT_Long* args ) + { + args[0] = ( args[0] && args[1] ); + } + + + /************************************************************************** + * + * OR[]: logical OR + * Opcode range: 0x5B + * Stack: uint32 uint32 --> uint32 + */ + static void + Ins_OR( FT_Long* args ) + { + args[0] = ( args[0] || args[1] ); + } + + + /************************************************************************** + * + * NOT[]: logical NOT + * Opcode range: 0x5C + * Stack: StkElt --> uint32 + */ + static void + Ins_NOT( FT_Long* args ) + { + args[0] = !args[0]; + } + + + /************************************************************************** + * + * ADD[]: ADD + * Opcode range: 0x60 + * Stack: f26.6 f26.6 --> f26.6 + */ + static void + Ins_ADD( FT_Long* args ) + { + args[0] = ADD_LONG( args[0], args[1] ); + } + + + /************************************************************************** + * + * SUB[]: SUBtract + * Opcode range: 0x61 + * Stack: f26.6 f26.6 --> f26.6 + */ + static void + Ins_SUB( FT_Long* args ) + { + args[0] = SUB_LONG( args[0], args[1] ); + } + + + /************************************************************************** + * + * DIV[]: DIVide + * Opcode range: 0x62 + * Stack: f26.6 f26.6 --> f26.6 + */ + static void + Ins_DIV( TT_ExecContext exc, + FT_Long* args ) + { + if ( args[1] == 0 ) + exc->error = FT_THROW( Divide_By_Zero ); + else + args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] ); + } + + + /************************************************************************** + * + * MUL[]: MULtiply + * Opcode range: 0x63 + * Stack: f26.6 f26.6 --> f26.6 + */ + static void + Ins_MUL( FT_Long* args ) + { + args[0] = FT_MulDiv( args[0], args[1], 64L ); + } + + + /************************************************************************** + * + * ABS[]: ABSolute value + * Opcode range: 0x64 + * Stack: f26.6 --> f26.6 + */ + static void + Ins_ABS( FT_Long* args ) + { + if ( args[0] < 0 ) + args[0] = NEG_LONG( args[0] ); + } + + + /************************************************************************** + * + * NEG[]: NEGate + * Opcode range: 0x65 + * Stack: f26.6 --> f26.6 + */ + static void + Ins_NEG( FT_Long* args ) + { + args[0] = NEG_LONG( args[0] ); + } + + + /************************************************************************** + * + * FLOOR[]: FLOOR + * Opcode range: 0x66 + * Stack: f26.6 --> f26.6 + */ + static void + Ins_FLOOR( FT_Long* args ) + { + args[0] = FT_PIX_FLOOR( args[0] ); + } + + + /************************************************************************** + * + * CEILING[]: CEILING + * Opcode range: 0x67 + * Stack: f26.6 --> f26.6 + */ + static void + Ins_CEILING( FT_Long* args ) + { + args[0] = FT_PIX_CEIL_LONG( args[0] ); + } + + + /************************************************************************** + * + * RS[]: Read Store + * Opcode range: 0x43 + * Stack: uint32 --> uint32 + */ + static void + Ins_RS( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + else + args[0] = 0; + } + else + args[0] = exc->storage[I]; + } + + + /************************************************************************** + * + * WS[]: Write Store + * Opcode range: 0x42 + * Stack: uint32 uint32 --> + */ + static void + Ins_WS( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + { + if ( exc->iniRange == tt_coderange_glyph && + exc->storage != exc->glyfStorage ) + { + FT_Memory memory = exc->memory; + FT_Error error; + + + FT_MEM_QRENEW_ARRAY( exc->glyfStorage, + exc->glyfStoreSize, + exc->storeSize ); + exc->error = error; + if ( error ) + return; + + exc->glyfStoreSize = exc->storeSize; + FT_ARRAY_COPY( exc->glyfStorage, exc->storage, exc->glyfStoreSize ); + exc->storage = exc->glyfStorage; + } + + exc->storage[I] = args[1]; + } + } + + + /************************************************************************** + * + * WCVTP[]: Write CVT in Pixel units + * Opcode range: 0x44 + * Stack: f26.6 uint32 --> + */ + static void + Ins_WCVTP( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->func_write_cvt( exc, I, args[1] ); + } + + + /************************************************************************** + * + * WCVTF[]: Write CVT in Funits + * Opcode range: 0x70 + * Stack: uint32 uint32 --> + */ + static void + Ins_WCVTF( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale ); + } + + + /************************************************************************** + * + * RCVT[]: Read CVT + * Opcode range: 0x45 + * Stack: uint32 --> f26.6 + */ + static void + Ins_RCVT( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + else + args[0] = 0; + } + else + args[0] = exc->func_read_cvt( exc, I ); + } + + + /************************************************************************** + * + * AA[]: Adjust Angle + * Opcode range: 0x7F + * Stack: uint32 --> + */ + static void + Ins_AA( void ) + { + /* intentionally no longer supported */ + } + + + /************************************************************************** + * + * DEBUG[]: DEBUG. Unsupported. + * Opcode range: 0x4F + * Stack: uint32 --> + * + * Note: The original instruction pops a value from the stack. + */ + static void + Ins_DEBUG( TT_ExecContext exc ) + { + exc->error = FT_THROW( Debug_OpCode ); + } + + + /************************************************************************** + * + * ROUND[ab]: ROUND value + * Opcode range: 0x68-0x6B + * Stack: f26.6 --> f26.6 + */ + static void + Ins_ROUND( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = exc->func_round( exc, args[0], exc->opcode & 3 ); + } + + + /************************************************************************** + * + * NROUND[ab]: No ROUNDing of value + * Opcode range: 0x6C-0x6F + * Stack: f26.6 --> f26.6 + */ + static void + Ins_NROUND( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = Round_None( exc, args[0], exc->opcode & 3 ); + } + + + /************************************************************************** + * + * MAX[]: MAXimum + * Opcode range: 0x8B + * Stack: int32? int32? --> int32 + */ + static void + Ins_MAX( FT_Long* args ) + { + if ( args[1] > args[0] ) + args[0] = args[1]; + } + + + /************************************************************************** + * + * MIN[]: MINimum + * Opcode range: 0x8C + * Stack: int32? int32? --> int32 + */ + static void + Ins_MIN( FT_Long* args ) + { + if ( args[1] < args[0] ) + args[0] = args[1]; + } + + + /************************************************************************** + * + * MINDEX[]: Move INDEXed element + * Opcode range: 0x26 + * Stack: int32? --> StkElt + */ + static void + Ins_MINDEX( TT_ExecContext exc, + FT_Long* args ) + { + FT_Long L, K; + + + L = args[0]; + + if ( L <= 0 || L > exc->args ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + } + else + { + K = exc->stack[exc->args - L]; + + FT_ARRAY_MOVE( &exc->stack[exc->args - L ], + &exc->stack[exc->args - L + 1], + ( L - 1 ) ); + + exc->stack[exc->args - 1] = K; + } + } + + + /************************************************************************** + * + * CINDEX[]: Copy INDEXed element + * Opcode range: 0x25 + * Stack: int32 --> StkElt + */ + static void + Ins_CINDEX( TT_ExecContext exc, + FT_Long* args ) + { + FT_Long L; + + + L = args[0]; + + if ( L <= 0 || L > exc->args ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + args[0] = 0; + } + else + args[0] = exc->stack[exc->args - L]; + } + + + /************************************************************************** + * + * ROLL[]: ROLL top three elements + * Opcode range: 0x8A + * Stack: 3 * StkElt --> 3 * StkElt + */ + static void + Ins_ROLL( FT_Long* args ) + { + FT_Long A, B, C; + + + A = args[2]; + B = args[1]; + C = args[0]; + + args[2] = C; + args[1] = A; + args[0] = B; + } + + + /************************************************************************** + * + * MANAGING THE FLOW OF CONTROL + * + */ + + + /************************************************************************** + * + * SLOOP[]: Set LOOP variable + * Opcode range: 0x17 + * Stack: int32? --> + */ + static void + Ins_SLOOP( TT_ExecContext exc, + FT_Long* args ) + { + if ( args[0] < 0 ) + exc->error = FT_THROW( Bad_Argument ); + else + { + /* we heuristically limit the number of loops to 16 bits */ + exc->GS.loop = args[0] > 0xFFFFL ? 0xFFFFL : args[0]; + } + } + + + static FT_Bool + SkipCode( TT_ExecContext exc ) + { + exc->IP += exc->length; + + if ( exc->IP < exc->codeSize ) + { + exc->opcode = exc->code[exc->IP]; + + exc->length = opcode_length[exc->opcode]; + if ( exc->length < 0 ) + { + if ( exc->IP + 1 >= exc->codeSize ) + goto Fail_Overflow; + exc->length = 2 - exc->length * exc->code[exc->IP + 1]; + } + + if ( exc->IP + exc->length <= exc->codeSize ) + return SUCCESS; + } + + Fail_Overflow: + exc->error = FT_THROW( Code_Overflow ); + return FAILURE; + } + + + /************************************************************************** + * + * IF[]: IF test + * Opcode range: 0x58 + * Stack: StkElt --> + */ + static void + Ins_IF( TT_ExecContext exc, + FT_Long* args ) + { + FT_Int nIfs; + FT_Bool Out; + + + if ( args[0] != 0 ) + return; + + nIfs = 1; + Out = 0; + + do + { + if ( SkipCode( exc ) == FAILURE ) + return; + + switch ( exc->opcode ) + { + case 0x58: /* IF */ + nIfs++; + break; + + case 0x1B: /* ELSE */ + Out = FT_BOOL( nIfs == 1 ); + break; + + case 0x59: /* EIF */ + nIfs--; + Out = FT_BOOL( nIfs == 0 ); + break; + } + } while ( Out == 0 ); + } + + + /************************************************************************** + * + * ELSE[]: ELSE + * Opcode range: 0x1B + * Stack: --> + */ + static void + Ins_ELSE( TT_ExecContext exc ) + { + FT_Int nIfs; + + + nIfs = 1; + + do + { + if ( SkipCode( exc ) == FAILURE ) + return; + + switch ( exc->opcode ) + { + case 0x58: /* IF */ + nIfs++; + break; + + case 0x59: /* EIF */ + nIfs--; + break; + } + } while ( nIfs != 0 ); + } + + + /************************************************************************** + * + * EIF[]: End IF + * Opcode range: 0x59 + * Stack: --> + */ + static void + Ins_EIF( void ) + { + /* nothing to do */ + } + + + /************************************************************************** + * + * JMPR[]: JuMP Relative + * Opcode range: 0x1C + * Stack: int32 --> + */ + static void + Ins_JMPR( TT_ExecContext exc, + FT_Long* args ) + { + if ( args[0] == 0 && exc->args == 0 ) + { + exc->error = FT_THROW( Bad_Argument ); + return; + } + + exc->IP = ADD_LONG( exc->IP, args[0] ); + if ( exc->IP < 0 || + ( exc->callTop > 0 && + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) + { + exc->error = FT_THROW( Bad_Argument ); + return; + } + + exc->step_ins = FALSE; + + if ( args[0] < 0 ) + { + if ( ++exc->neg_jump_counter > exc->neg_jump_counter_max ) + exc->error = FT_THROW( Execution_Too_Long ); + } + } + + + /************************************************************************** + * + * JROT[]: Jump Relative On True + * Opcode range: 0x78 + * Stack: StkElt int32 --> + */ + static void + Ins_JROT( TT_ExecContext exc, + FT_Long* args ) + { + if ( args[1] != 0 ) + Ins_JMPR( exc, args ); + } + + + /************************************************************************** + * + * JROF[]: Jump Relative On False + * Opcode range: 0x79 + * Stack: StkElt int32 --> + */ + static void + Ins_JROF( TT_ExecContext exc, + FT_Long* args ) + { + if ( args[1] == 0 ) + Ins_JMPR( exc, args ); + } + + + /************************************************************************** + * + * DEFINING AND USING FUNCTIONS AND INSTRUCTIONS + * + */ + + + /************************************************************************** + * + * FDEF[]: Function DEFinition + * Opcode range: 0x2C + * Stack: uint32 --> + */ + static void + Ins_FDEF( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong n; + TT_DefRecord* rec; + TT_DefRecord* limit; + + + /* FDEF is only allowed in `prep' or `fpgm' */ + if ( exc->iniRange == tt_coderange_glyph ) + { + exc->error = FT_THROW( DEF_In_Glyf_Bytecode ); + return; + } + + /* some font programs are broken enough to redefine functions! */ + /* We will then parse the current table. */ + + rec = exc->FDefs; + limit = FT_OFFSET( rec, exc->numFDefs ); + n = (FT_ULong)args[0]; + + for ( ; rec < limit; rec++ ) + { + if ( rec->opc == n ) + break; + } + + if ( rec == limit ) + { + /* check that there is enough room for new functions */ + if ( exc->numFDefs >= exc->maxFDefs ) + { + exc->error = FT_THROW( Too_Many_Function_Defs ); + return; + } + exc->numFDefs++; + } + + /* Although FDEF takes unsigned 32-bit integer, */ + /* func # must be within unsigned 16-bit integer */ + if ( n > 0xFFFFU ) + { + exc->error = FT_THROW( Too_Many_Function_Defs ); + return; + } + + rec->range = exc->curRange; + rec->opc = (FT_UInt16)n; + rec->start = exc->IP + 1; + rec->active = TRUE; + + if ( n > exc->maxFunc ) + exc->maxFunc = (FT_UInt16)n; + + /* Now skip the whole function definition. */ + /* We don't allow nested IDEFS & FDEFs. */ + + while ( SkipCode( exc ) == SUCCESS ) + { + switch ( exc->opcode ) + { + case 0x89: /* IDEF */ + case 0x2C: /* FDEF */ + exc->error = FT_THROW( Nested_DEFS ); + return; + + case 0x2D: /* ENDF */ + rec->end = exc->IP; + return; + } + } + } + + + /************************************************************************** + * + * ENDF[]: END Function definition + * Opcode range: 0x2D + * Stack: --> + */ + static void + Ins_ENDF( TT_ExecContext exc ) + { + TT_CallRec* pRec; + + + if ( exc->callTop <= 0 ) /* We encountered an ENDF without a call */ + { + exc->error = FT_THROW( ENDF_In_Exec_Stream ); + return; + } + + exc->callTop--; + + pRec = &exc->callStack[exc->callTop]; + + pRec->Cur_Count--; + + exc->step_ins = FALSE; + + if ( pRec->Cur_Count > 0 ) + { + exc->callTop++; + exc->IP = pRec->Def->start; + } + else + /* Loop through the current function */ + Ins_Goto_CodeRange( exc, pRec->Caller_Range, pRec->Caller_IP ); + + /* Exit the current call frame. */ + + /* NOTE: If the last instruction of a program is a */ + /* CALL or LOOPCALL, the return address is */ + /* always out of the code range. This is a */ + /* valid address, and it is why we do not test */ + /* the result of Ins_Goto_CodeRange() here! */ + } + + + /************************************************************************** + * + * CALL[]: CALL function + * Opcode range: 0x2B + * Stack: uint32? --> + */ + static void + Ins_CALL( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong F; + TT_CallRec* pCrec; + TT_DefRecord* def; + + + /* first of all, check the index */ + + F = (FT_ULong)args[0]; + if ( BOUNDSL( F, exc->maxFunc + 1 ) ) + goto Fail; + + 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 */ + /* */ + /* exc->maxFunc+1 == exc->numFDefs */ + /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ + /* */ + /* If this isn't true, we need to look up the function table. */ + + def = exc->FDefs + F; + if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) + { + /* look up the FDefs table */ + TT_DefRecord* limit; + + + def = exc->FDefs; + limit = def + exc->numFDefs; + + while ( def < limit && def->opc != F ) + def++; + + if ( def == limit ) + goto Fail; + } + + /* check that the function is active */ + if ( !def->active ) + goto Fail; + + /* check the call stack */ + if ( exc->callTop >= exc->callSize ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + pCrec = exc->callStack + exc->callTop; + + pCrec->Caller_Range = exc->curRange; + pCrec->Caller_IP = exc->IP + 1; + pCrec->Cur_Count = 1; + pCrec->Def = def; + + exc->callTop++; + + Ins_Goto_CodeRange( exc, def->range, def->start ); + + exc->step_ins = FALSE; + + return; + + Fail: + exc->error = FT_THROW( Invalid_Reference ); + } + + + /************************************************************************** + * + * LOOPCALL[]: LOOP and CALL function + * Opcode range: 0x2A + * Stack: uint32? Eint16? --> + */ + static void + Ins_LOOPCALL( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong F; + TT_CallRec* pCrec; + TT_DefRecord* def; + + + /* first of all, check the index */ + F = (FT_ULong)args[1]; + if ( BOUNDSL( F, exc->maxFunc + 1 ) ) + goto Fail; + + /* Except for some old Apple fonts, all functions in a TrueType */ + /* font are defined in increasing order, starting from 0. This */ + /* means that we normally have */ + /* */ + /* exc->maxFunc+1 == exc->numFDefs */ + /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ + /* */ + /* If this isn't true, we need to look up the function table. */ + + def = FT_OFFSET( exc->FDefs, F ); + if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) + { + /* look up the FDefs table */ + TT_DefRecord* limit; + + + def = exc->FDefs; + limit = FT_OFFSET( def, exc->numFDefs ); + + while ( def < limit && def->opc != F ) + def++; + + if ( def == limit ) + goto Fail; + } + + /* check that the function is active */ + if ( !def->active ) + goto Fail; + + /* check stack */ + if ( exc->callTop >= exc->callSize ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + if ( args[0] > 0 ) + { + pCrec = exc->callStack + exc->callTop; + + pCrec->Caller_Range = exc->curRange; + pCrec->Caller_IP = exc->IP + 1; + pCrec->Cur_Count = (FT_Int)args[0]; + pCrec->Def = def; + + exc->callTop++; + + Ins_Goto_CodeRange( exc, def->range, def->start ); + + exc->step_ins = FALSE; + + exc->loopcall_counter += (FT_ULong)args[0]; + if ( exc->loopcall_counter > exc->loopcall_counter_max ) + exc->error = FT_THROW( Execution_Too_Long ); + } + + return; + + Fail: + exc->error = FT_THROW( Invalid_Reference ); + } + + + /************************************************************************** + * + * IDEF[]: Instruction DEFinition + * Opcode range: 0x89 + * Stack: Eint8 --> + */ + static void + Ins_IDEF( TT_ExecContext exc, + FT_Long* args ) + { + TT_DefRecord* def; + TT_DefRecord* limit; + + + /* we enable IDEF only in `prep' or `fpgm' */ + if ( exc->iniRange == tt_coderange_glyph ) + { + exc->error = FT_THROW( DEF_In_Glyf_Bytecode ); + return; + } + + /* First of all, look for the same function in our table */ + + def = exc->IDefs; + limit = FT_OFFSET( def, exc->numIDefs ); + + for ( ; def < limit; def++ ) + if ( def->opc == (FT_ULong)args[0] ) + break; + + if ( def == limit ) + { + /* check that there is enough room for a new instruction */ + if ( exc->numIDefs >= exc->maxIDefs ) + { + exc->error = FT_THROW( Too_Many_Instruction_Defs ); + return; + } + exc->numIDefs++; + } + + /* opcode must be unsigned 8-bit integer */ + if ( 0 > args[0] || args[0] > 0x00FF ) + { + exc->error = FT_THROW( Too_Many_Instruction_Defs ); + return; + } + + def->opc = (FT_Byte)args[0]; + def->start = exc->IP + 1; + def->range = exc->curRange; + def->active = TRUE; + + if ( (FT_ULong)args[0] > exc->maxIns ) + exc->maxIns = (FT_Byte)args[0]; + + /* Now skip the whole function definition. */ + /* We don't allow nested IDEFs & FDEFs. */ + + while ( SkipCode( exc ) == SUCCESS ) + { + switch ( exc->opcode ) + { + case 0x89: /* IDEF */ + case 0x2C: /* FDEF */ + exc->error = FT_THROW( Nested_DEFS ); + return; + case 0x2D: /* ENDF */ + def->end = exc->IP; + return; + } + } + } + + + /************************************************************************** + * + * PUSHING DATA ONTO THE INTERPRETER STACK + * + */ + + + /************************************************************************** + * + * NPUSHB[]: PUSH N Bytes + * Opcode range: 0x40 + * Stack: --> uint32... + */ + static void + Ins_NPUSHB( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort L, K; + + + L = (FT_UShort)exc->code[exc->IP + 1]; + + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + for ( K = 1; K <= L; K++ ) + args[K - 1] = exc->code[exc->IP + K + 1]; + + exc->new_top += L; + } + + + /************************************************************************** + * + * NPUSHW[]: PUSH N Words + * Opcode range: 0x41 + * Stack: --> int32... + */ + static void + Ins_NPUSHW( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort L, K; + + + L = (FT_UShort)exc->code[exc->IP + 1]; + + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + exc->IP += 2; + + for ( K = 0; K < L; K++ ) + args[K] = GetShortIns( exc ); + + exc->step_ins = FALSE; + exc->new_top += L; + } + + + /************************************************************************** + * + * PUSHB[abc]: PUSH Bytes + * Opcode range: 0xB0-0xB7 + * Stack: --> uint32... + */ + static void + Ins_PUSHB( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort L, K; + + + L = (FT_UShort)( exc->opcode - 0xB0 + 1 ); + + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + for ( K = 1; K <= L; K++ ) + args[K - 1] = exc->code[exc->IP + K]; + } + + + /************************************************************************** + * + * PUSHW[abc]: PUSH Words + * Opcode range: 0xB8-0xBF + * Stack: --> int32... + */ + static void + Ins_PUSHW( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort L, K; + + + L = (FT_UShort)( exc->opcode - 0xB8 + 1 ); + + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + exc->IP++; + + for ( K = 0; K < L; K++ ) + args[K] = GetShortIns( exc ); + + exc->step_ins = FALSE; + } + + + /************************************************************************** + * + * MANAGING THE GRAPHICS STATE + * + */ + + + static FT_Bool + Ins_SxVTL( TT_ExecContext exc, + FT_UShort aIdx1, + FT_UShort aIdx2, + FT_UnitVector* Vec ) + { + FT_Long A, B, C; + FT_Vector* p1; + FT_Vector* p2; + + FT_Byte opcode = exc->opcode; + + + if ( BOUNDS( aIdx1, exc->zp2.n_points ) || + BOUNDS( aIdx2, exc->zp1.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return FAILURE; + } + + p1 = exc->zp1.cur + aIdx2; + p2 = exc->zp2.cur + aIdx1; + + A = SUB_LONG( p1->x, p2->x ); + B = SUB_LONG( p1->y, p2->y ); + + /* If p1 == p2, SPvTL and SFvTL behave the same as */ + /* SPvTCA[X] and SFvTCA[X], respectively. */ + /* */ + /* Confirmed by Greg Hitchcock. */ + + if ( A == 0 && B == 0 ) + { + A = 0x4000; + opcode = 0; + } + + if ( ( opcode & 1 ) != 0 ) + { + C = B; /* counter-clockwise rotation */ + B = A; + A = NEG_LONG( C ); + } + + Normalize( A, B, Vec ); + + return SUCCESS; + } + + + /************************************************************************** + * + * SVTCA[a]: Set (F and P) Vectors to Coordinate Axis + * Opcode range: 0x00-0x01 + * Stack: --> + * + * SPvTCA[a]: Set PVector to Coordinate Axis + * Opcode range: 0x02-0x03 + * Stack: --> + * + * SFvTCA[a]: Set FVector to Coordinate Axis + * Opcode range: 0x04-0x05 + * Stack: --> + */ + static void + Ins_SxyTCA( TT_ExecContext exc ) + { + FT_Short AA, BB; + + FT_Byte opcode = exc->opcode; + + + AA = (FT_Short)( ( opcode & 1 ) << 14 ); + BB = (FT_Short)( AA ^ 0x4000 ); + + if ( opcode < 4 ) + { + exc->GS.projVector.x = AA; + exc->GS.projVector.y = BB; + + exc->GS.dualVector.x = AA; + exc->GS.dualVector.y = BB; + } + + if ( ( opcode & 2 ) == 0 ) + { + exc->GS.freeVector.x = AA; + exc->GS.freeVector.y = BB; + } + + Compute_Funcs( exc ); + } + + + /************************************************************************** + * + * SPvTL[a]: Set PVector To Line + * Opcode range: 0x06-0x07 + * Stack: uint32 uint32 --> + */ + static void + Ins_SPVTL( TT_ExecContext exc, + FT_Long* args ) + { + if ( Ins_SxVTL( exc, + (FT_UShort)args[1], + (FT_UShort)args[0], + &exc->GS.projVector ) == SUCCESS ) + { + exc->GS.dualVector = exc->GS.projVector; + Compute_Funcs( exc ); + } + } + + + /************************************************************************** + * + * SFvTL[a]: Set FVector To Line + * Opcode range: 0x08-0x09 + * Stack: uint32 uint32 --> + */ + static void + Ins_SFVTL( TT_ExecContext exc, + FT_Long* args ) + { + if ( Ins_SxVTL( exc, + (FT_UShort)args[1], + (FT_UShort)args[0], + &exc->GS.freeVector ) == SUCCESS ) + { + Compute_Funcs( exc ); + } + } + + + /************************************************************************** + * + * SFvTPv[]: Set FVector To PVector + * Opcode range: 0x0E + * Stack: --> + */ + static void + Ins_SFVTPV( TT_ExecContext exc ) + { + exc->GS.freeVector = exc->GS.projVector; + Compute_Funcs( exc ); + } + + + /************************************************************************** + * + * SPvFS[]: Set PVector From Stack + * Opcode range: 0x0A + * Stack: f2.14 f2.14 --> + */ + static void + Ins_SPVFS( TT_ExecContext exc, + FT_Long* args ) + { + FT_Short S; + FT_Long X, Y; + + + /* Only use low 16bits, then sign extend */ + S = (FT_Short)args[1]; + Y = (FT_Long)S; + S = (FT_Short)args[0]; + X = (FT_Long)S; + + Normalize( X, Y, &exc->GS.projVector ); + + exc->GS.dualVector = exc->GS.projVector; + Compute_Funcs( exc ); + } + + + /************************************************************************** + * + * SFvFS[]: Set FVector From Stack + * Opcode range: 0x0B + * Stack: f2.14 f2.14 --> + */ + static void + Ins_SFVFS( TT_ExecContext exc, + FT_Long* args ) + { + FT_Short S; + FT_Long X, Y; + + + /* Only use low 16bits, then sign extend */ + S = (FT_Short)args[1]; + Y = (FT_Long)S; + S = (FT_Short)args[0]; + X = S; + + Normalize( X, Y, &exc->GS.freeVector ); + Compute_Funcs( exc ); + } + + + /************************************************************************** + * + * GPv[]: Get Projection Vector + * Opcode range: 0x0C + * Stack: ef2.14 --> ef2.14 + */ + static void + Ins_GPV( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = exc->GS.projVector.x; + args[1] = exc->GS.projVector.y; + } + + + /************************************************************************** + * + * GFv[]: Get Freedom Vector + * Opcode range: 0x0D + * Stack: ef2.14 --> ef2.14 + */ + static void + Ins_GFV( TT_ExecContext exc, + FT_Long* args ) + { + args[0] = exc->GS.freeVector.x; + args[1] = exc->GS.freeVector.y; + } + + + /************************************************************************** + * + * SRP0[]: Set Reference Point 0 + * Opcode range: 0x10 + * Stack: uint32 --> + */ + static void + Ins_SRP0( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.rp0 = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * SRP1[]: Set Reference Point 1 + * Opcode range: 0x11 + * Stack: uint32 --> + */ + static void + Ins_SRP1( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.rp1 = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * SRP2[]: Set Reference Point 2 + * Opcode range: 0x12 + * Stack: uint32 --> + */ + static void + Ins_SRP2( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.rp2 = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * SMD[]: Set Minimum Distance + * Opcode range: 0x1A + * Stack: f26.6 --> + */ + static void + Ins_SMD( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.minimum_distance = args[0]; + } + + + /************************************************************************** + * + * SCVTCI[]: Set Control Value Table Cut In + * Opcode range: 0x1D + * Stack: f26.6 --> + */ + static void + Ins_SCVTCI( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.control_value_cutin = (FT_F26Dot6)args[0]; + } + + + /************************************************************************** + * + * SSWCI[]: Set Single Width Cut In + * Opcode range: 0x1E + * Stack: f26.6 --> + */ + static void + Ins_SSWCI( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.single_width_cutin = (FT_F26Dot6)args[0]; + } + + + /************************************************************************** + * + * SSW[]: Set Single Width + * Opcode range: 0x1F + * Stack: int32? --> + */ + static void + Ins_SSW( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.single_width_value = FT_MulFix( args[0], + exc->tt_metrics.scale ); + } + + + /************************************************************************** + * + * FLIPON[]: Set auto-FLIP to ON + * Opcode range: 0x4D + * Stack: --> + */ + static void + Ins_FLIPON( TT_ExecContext exc ) + { + exc->GS.auto_flip = TRUE; + } + + + /************************************************************************** + * + * FLIPOFF[]: Set auto-FLIP to OFF + * Opcode range: 0x4E + * Stack: --> + */ + static void + Ins_FLIPOFF( TT_ExecContext exc ) + { + exc->GS.auto_flip = FALSE; + } + + + /************************************************************************** + * + * SANGW[]: Set ANGle Weight + * Opcode range: 0x7E + * Stack: uint32 --> + */ + static void + Ins_SANGW( void ) + { + /* instruction not supported anymore */ + } + + + /************************************************************************** + * + * SDB[]: Set Delta Base + * Opcode range: 0x5E + * Stack: uint32 --> + */ + static void + Ins_SDB( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.delta_base = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * SDS[]: Set Delta Shift + * Opcode range: 0x5F + * Stack: uint32 --> + */ + static void + Ins_SDS( TT_ExecContext exc, + FT_Long* args ) + { + if ( (FT_ULong)args[0] > 6UL ) + exc->error = FT_THROW( Bad_Argument ); + else + exc->GS.delta_shift = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * RTHG[]: Round To Half Grid + * Opcode range: 0x19 + * Stack: --> + */ + static void + Ins_RTHG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_To_Half_Grid; + exc->func_round = (TT_Round_Func)Round_To_Half_Grid; + } + + + /************************************************************************** + * + * RTG[]: Round To Grid + * Opcode range: 0x18 + * Stack: --> + */ + static void + Ins_RTG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_To_Grid; + exc->func_round = (TT_Round_Func)Round_To_Grid; + } + + + /************************************************************************** + * RTDG[]: Round To Double Grid + * Opcode range: 0x3D + * Stack: --> + */ + static void + Ins_RTDG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_To_Double_Grid; + exc->func_round = (TT_Round_Func)Round_To_Double_Grid; + } + + + /************************************************************************** + * RUTG[]: Round Up To Grid + * Opcode range: 0x7C + * Stack: --> + */ + static void + Ins_RUTG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_Up_To_Grid; + exc->func_round = (TT_Round_Func)Round_Up_To_Grid; + } + + + /************************************************************************** + * + * RDTG[]: Round Down To Grid + * Opcode range: 0x7D + * Stack: --> + */ + static void + Ins_RDTG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_Down_To_Grid; + exc->func_round = (TT_Round_Func)Round_Down_To_Grid; + } + + + /************************************************************************** + * + * ROFF[]: Round OFF + * Opcode range: 0x7A + * Stack: --> + */ + static void + Ins_ROFF( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_Off; + exc->func_round = (TT_Round_Func)Round_None; + } + + + /************************************************************************** + * + * SROUND[]: Super ROUND + * Opcode range: 0x76 + * Stack: Eint8 --> + */ + static void + Ins_SROUND( TT_ExecContext exc, + FT_Long* args ) + { + SetSuperRound( exc, 0x4000, args[0] ); + + exc->GS.round_state = TT_Round_Super; + exc->func_round = (TT_Round_Func)Round_Super; + } + + + /************************************************************************** + * + * S45ROUND[]: Super ROUND 45 degrees + * Opcode range: 0x77 + * Stack: uint32 --> + */ + static void + Ins_S45ROUND( TT_ExecContext exc, + FT_Long* args ) + { + SetSuperRound( exc, 0x2D41, args[0] ); + + exc->GS.round_state = TT_Round_Super_45; + exc->func_round = (TT_Round_Func)Round_Super_45; + } + + + /************************************************************************** + * + * GC[a]: Get Coordinate projected onto + * Opcode range: 0x46-0x47 + * Stack: uint32 --> f26.6 + * + * XXX: UNDOCUMENTED: Measures from the original glyph must be taken + * along the dual projection vector! + */ + static void + Ins_GC( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong L; + FT_F26Dot6 R; + + + L = (FT_ULong)args[0]; + + if ( BOUNDSL( L, exc->zp2.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + R = 0; + } + else + { + if ( exc->opcode & 1 ) + R = FAST_DUALPROJ( &exc->zp2.org[L] ); + else + R = FAST_PROJECT( &exc->zp2.cur[L] ); + } + + args[0] = R; + } + + + /************************************************************************** + * + * SCFS[]: Set Coordinate From Stack + * Opcode range: 0x48 + * Stack: f26.6 uint32 --> + * + * Formula: + * + * OA := OA + ( value - OA.p )/( f.p ) * f + */ + static void + Ins_SCFS( TT_ExecContext exc, + FT_Long* args ) + { + FT_Long K; + FT_UShort L; + + + L = (FT_UShort)args[0]; + + if ( BOUNDS( L, exc->zp2.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + K = FAST_PROJECT( &exc->zp2.cur[L] ); + + exc->func_move( exc, &exc->zp2, L, SUB_LONG( args[1], K ) ); + + /* UNDOCUMENTED! The MS rasterizer does that with */ + /* twilight points (confirmed by Greg Hitchcock) */ + if ( exc->GS.gep2 == 0 ) + exc->zp2.org[L] = exc->zp2.cur[L]; + } + + + /************************************************************************** + * + * MD[a]: Measure Distance + * Opcode range: 0x49-0x4A + * Stack: uint32 uint32 --> f26.6 + * + * XXX: UNDOCUMENTED: Measure taken in the original glyph must be along + * the dual projection vector. + * + * XXX: UNDOCUMENTED: Flag attributes are inverted! + * 0 => measure distance in original outline + * 1 => measure distance in grid-fitted outline + * + * XXX: UNDOCUMENTED: `zp0 - zp1', and not `zp2 - zp1! + */ + static void + Ins_MD( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort K, L; + FT_F26Dot6 D; + + + K = (FT_UShort)args[1]; + L = (FT_UShort)args[0]; + + if ( BOUNDS( L, exc->zp0.n_points ) || + BOUNDS( K, exc->zp1.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + D = 0; + } + else + { + if ( exc->opcode & 1 ) + D = PROJECT( exc->zp0.cur + L, exc->zp1.cur + K ); + else + { + /* XXX: UNDOCUMENTED: twilight zone special case */ + + if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 ) + { + FT_Vector* vec1 = exc->zp0.org + L; + FT_Vector* vec2 = exc->zp1.org + K; + + + D = DUALPROJ( vec1, vec2 ); + } + else + { + FT_Vector* vec1 = exc->zp0.orus + L; + FT_Vector* vec2 = exc->zp1.orus + K; + + + if ( exc->metrics.x_scale == exc->metrics.y_scale ) + { + /* this should be faster */ + D = DUALPROJ( vec1, vec2 ); + D = FT_MulFix( D, exc->metrics.x_scale ); + } + else + { + FT_Vector vec; + + + vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); + vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); + + D = FAST_DUALPROJ( &vec ); + } + } + } + } + + args[0] = D; + } + + + /************************************************************************** + * + * SDPvTL[a]: Set Dual PVector to Line + * Opcode range: 0x86-0x87 + * Stack: uint32 uint32 --> + */ + static void + Ins_SDPVTL( TT_ExecContext exc, + FT_Long* args ) + { + FT_Long A, B, C; + FT_UShort p1, p2; /* was FT_Int in pas type ERROR */ + + FT_Byte opcode = exc->opcode; + + + p1 = (FT_UShort)args[1]; + p2 = (FT_UShort)args[0]; + + if ( BOUNDS( p2, exc->zp1.n_points ) || + BOUNDS( p1, exc->zp2.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + { + FT_Vector* v1 = exc->zp1.org + p2; + FT_Vector* v2 = exc->zp2.org + p1; + + + A = SUB_LONG( v1->x, v2->x ); + B = SUB_LONG( v1->y, v2->y ); + + /* If v1 == v2, SDPvTL behaves the same as */ + /* SVTCA[X], respectively. */ + /* */ + /* Confirmed by Greg Hitchcock. */ + + if ( A == 0 && B == 0 ) + { + A = 0x4000; + opcode = 0; + } + } + + if ( ( opcode & 1 ) != 0 ) + { + C = B; /* counter-clockwise rotation */ + B = A; + A = NEG_LONG( C ); + } + + Normalize( A, B, &exc->GS.dualVector ); + + { + FT_Vector* v1 = exc->zp1.cur + p2; + FT_Vector* v2 = exc->zp2.cur + p1; + + + A = SUB_LONG( v1->x, v2->x ); + B = SUB_LONG( v1->y, v2->y ); + + if ( A == 0 && B == 0 ) + { + A = 0x4000; + opcode = 0; + } + } + + if ( ( opcode & 1 ) != 0 ) + { + C = B; /* counter-clockwise rotation */ + B = A; + A = NEG_LONG( C ); + } + + Normalize( A, B, &exc->GS.projVector ); + Compute_Funcs( exc ); + } + + + /************************************************************************** + * + * SZP0[]: Set Zone Pointer 0 + * Opcode range: 0x13 + * Stack: uint32 --> + */ + static void + Ins_SZP0( TT_ExecContext exc, + FT_Long* args ) + { + switch ( (FT_Int)args[0] ) + { + case 0: + exc->zp0 = exc->twilight; + break; + + case 1: + exc->zp0 = exc->pts; + break; + + default: + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + exc->GS.gep0 = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * SZP1[]: Set Zone Pointer 1 + * Opcode range: 0x14 + * Stack: uint32 --> + */ + static void + Ins_SZP1( TT_ExecContext exc, + FT_Long* args ) + { + switch ( (FT_Int)args[0] ) + { + case 0: + exc->zp1 = exc->twilight; + break; + + case 1: + exc->zp1 = exc->pts; + break; + + default: + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + exc->GS.gep1 = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * SZP2[]: Set Zone Pointer 2 + * Opcode range: 0x15 + * Stack: uint32 --> + */ + static void + Ins_SZP2( TT_ExecContext exc, + FT_Long* args ) + { + switch ( (FT_Int)args[0] ) + { + case 0: + exc->zp2 = exc->twilight; + break; + + case 1: + exc->zp2 = exc->pts; + break; + + default: + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + exc->GS.gep2 = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * SZPS[]: Set Zone PointerS + * Opcode range: 0x16 + * Stack: uint32 --> + */ + static void + Ins_SZPS( TT_ExecContext exc, + FT_Long* args ) + { + switch ( (FT_Int)args[0] ) + { + case 0: + exc->zp0 = exc->twilight; + break; + + case 1: + exc->zp0 = exc->pts; + break; + + default: + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + exc->zp1 = exc->zp0; + exc->zp2 = exc->zp0; + + exc->GS.gep0 = (FT_UShort)args[0]; + exc->GS.gep1 = (FT_UShort)args[0]; + exc->GS.gep2 = (FT_UShort)args[0]; + } + + + /************************************************************************** + * + * INSTCTRL[]: INSTruction ConTRoL + * Opcode range: 0x8E + * Stack: int32 int32 --> + */ + static void + Ins_INSTCTRL( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong K, L, Kf; + + + K = (FT_ULong)args[1]; + L = (FT_ULong)args[0]; + + /* selector values cannot be `OR'ed; */ + /* they are indices starting with index 1, not flags */ + if ( K < 1 || K > 3 ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + /* convert index to flag value */ + Kf = 1 << ( K - 1 ); + + if ( L != 0 ) + { + /* arguments to selectors look like flag values */ + if ( L != Kf ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + } + + /* INSTCTRL should only be used in the CVT program */ + if ( exc->iniRange == tt_coderange_cvt ) + { + exc->GS.instruct_control &= ~(FT_Byte)Kf; + exc->GS.instruct_control |= (FT_Byte)L; + } + + /* except to change the subpixel flags temporarily */ + else if ( exc->iniRange == tt_coderange_glyph && K == 3 ) + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* Native ClearType fonts sign a waiver that turns off all backward */ + /* compatibility hacks and lets them program points to the grid like */ + /* it's 1996. They might sign a waiver for just one glyph, though. */ + if ( SUBPIXEL_HINTING_MINIMAL ) + exc->backward_compatibility = !FT_BOOL( L == 4 ); +#endif + } + else if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + } + + + /************************************************************************** + * + * SCANCTRL[]: SCAN ConTRoL + * Opcode range: 0x85 + * Stack: uint32? --> + */ + static void + Ins_SCANCTRL( TT_ExecContext exc, + FT_Long* args ) + { + FT_Int A; + + + /* Get Threshold */ + A = (FT_Int)( args[0] & 0xFF ); + + if ( A == 0xFF ) + { + exc->GS.scan_control = TRUE; + return; + } + else if ( A == 0 ) + { + exc->GS.scan_control = FALSE; + return; + } + + if ( ( args[0] & 0x100 ) != 0 && exc->tt_metrics.ppem <= A ) + exc->GS.scan_control = TRUE; + + if ( ( args[0] & 0x200 ) != 0 && exc->tt_metrics.rotated ) + exc->GS.scan_control = TRUE; + + if ( ( args[0] & 0x400 ) != 0 && exc->tt_metrics.stretched ) + exc->GS.scan_control = TRUE; + + if ( ( args[0] & 0x800 ) != 0 && exc->tt_metrics.ppem > A ) + exc->GS.scan_control = FALSE; + + if ( ( args[0] & 0x1000 ) != 0 && exc->tt_metrics.rotated ) + exc->GS.scan_control = FALSE; + + if ( ( args[0] & 0x2000 ) != 0 && exc->tt_metrics.stretched ) + exc->GS.scan_control = FALSE; + } + + + /************************************************************************** + * + * SCANTYPE[]: SCAN TYPE + * Opcode range: 0x8D + * Stack: uint16 --> + */ + static void + Ins_SCANTYPE( TT_ExecContext exc, + FT_Long* args ) + { + if ( args[0] >= 0 ) + exc->GS.scan_type = (FT_Int)args[0] & 0xFFFF; + } + + + /************************************************************************** + * + * MANAGING OUTLINES + * + */ + + + /************************************************************************** + * + * FLIPPT[]: FLIP PoinT + * Opcode range: 0x80 + * Stack: uint32... --> + */ + static void + Ins_FLIPPT( TT_ExecContext exc ) + { + FT_UShort point; + + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* See `ttinterp.h' for details on backward compatibility mode. */ + if ( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility && + exc->iupx_called && + exc->iupy_called ) + goto Fail; +#endif + + if ( exc->top < exc->GS.loop ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); + goto Fail; + } + + while ( exc->GS.loop > 0 ) + { + exc->args--; + + point = (FT_UShort)exc->stack[exc->args]; + + if ( BOUNDS( point, exc->pts.n_points ) ) + { + if ( exc->pedantic_hinting ) + { + exc->error = FT_THROW( Invalid_Reference ); + return; + } + } + else + exc->pts.tags[point] ^= FT_CURVE_TAG_ON; + + exc->GS.loop--; + } + + Fail: + exc->GS.loop = 1; + exc->new_top = exc->args; + } + + + /************************************************************************** + * + * FLIPRGON[]: FLIP RanGe ON + * Opcode range: 0x81 + * Stack: uint32 uint32 --> + */ + static void + Ins_FLIPRGON( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort I, K, L; + + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* See `ttinterp.h' for details on backward compatibility mode. */ + if ( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility && + exc->iupx_called && + exc->iupy_called ) + return; +#endif + + K = (FT_UShort)args[1]; + L = (FT_UShort)args[0]; + + if ( BOUNDS( K, exc->pts.n_points ) || + BOUNDS( L, exc->pts.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + for ( I = L; I <= K; I++ ) + exc->pts.tags[I] |= FT_CURVE_TAG_ON; + } + + + /************************************************************************** + * + * FLIPRGOFF: FLIP RanGe OFF + * Opcode range: 0x82 + * Stack: uint32 uint32 --> + */ + static void + Ins_FLIPRGOFF( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort I, K, L; + + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* See `ttinterp.h' for details on backward compatibility mode. */ + if ( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility && + exc->iupx_called && + exc->iupy_called ) + return; +#endif + + K = (FT_UShort)args[1]; + L = (FT_UShort)args[0]; + + if ( BOUNDS( K, exc->pts.n_points ) || + BOUNDS( L, exc->pts.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + for ( I = L; I <= K; I++ ) + exc->pts.tags[I] &= ~FT_CURVE_TAG_ON; + } + + + static FT_Bool + Compute_Point_Displacement( TT_ExecContext exc, + FT_F26Dot6* x, + FT_F26Dot6* y, + TT_GlyphZone zone, + FT_UShort* refp ) + { + TT_GlyphZoneRec zp; + FT_UShort p; + FT_F26Dot6 d; + + + if ( exc->opcode & 1 ) + { + zp = exc->zp0; + p = exc->GS.rp1; + } + else + { + zp = exc->zp1; + p = exc->GS.rp2; + } + + if ( BOUNDS( p, zp.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + *refp = 0; + return FAILURE; + } + + *zone = zp; + *refp = p; + + d = PROJECT( zp.cur + p, zp.org + p ); + + *x = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.x, exc->F_dot_P ); + *y = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.y, exc->F_dot_P ); + + return SUCCESS; + } + + + /* See `ttinterp.h' for details on backward compatibility mode. */ + static void + Move_Zp2_Point( TT_ExecContext exc, + FT_UShort point, + FT_F26Dot6 dx, + FT_F26Dot6 dy, + FT_Bool touch ) + { + if ( exc->GS.freeVector.x != 0 ) + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( !( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility ) ) +#endif + exc->zp2.cur[point].x = ADD_LONG( exc->zp2.cur[point].x, dx ); + + if ( touch ) + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X; + } + + if ( exc->GS.freeVector.y != 0 ) + { +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( !( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility && + exc->iupx_called && + exc->iupy_called ) ) +#endif + exc->zp2.cur[point].y = ADD_LONG( exc->zp2.cur[point].y, dy ); + + if ( touch ) + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y; + } + } + + + /************************************************************************** + * + * SHP[a]: SHift Point by the last point + * Opcode range: 0x32-0x33 + * Stack: uint32... --> + */ + static void + Ins_SHP( TT_ExecContext exc ) + { + TT_GlyphZoneRec zp; + FT_UShort refp; + + FT_F26Dot6 dx, dy; + FT_UShort point; + + + if ( exc->top < exc->GS.loop ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) ) + return; + + while ( exc->GS.loop > 0 ) + { + exc->args--; + point = (FT_UShort)exc->stack[exc->args]; + + if ( BOUNDS( point, exc->zp2.n_points ) ) + { + if ( exc->pedantic_hinting ) + { + exc->error = FT_THROW( Invalid_Reference ); + return; + } + } + else + Move_Zp2_Point( exc, point, dx, dy, TRUE ); + + exc->GS.loop--; + } + + Fail: + exc->GS.loop = 1; + exc->new_top = exc->args; + } + + + /************************************************************************** + * + * SHC[a]: SHift Contour + * Opcode range: 0x34-35 + * Stack: uint32 --> + * + * UNDOCUMENTED: According to Greg Hitchcock, there is one (virtual) + * contour in the twilight zone, namely contour number + * zero which includes all points of it. + */ + static void + Ins_SHC( TT_ExecContext exc, + FT_Long* args ) + { + TT_GlyphZoneRec zp; + FT_UShort refp; + FT_F26Dot6 dx, dy; + + FT_UShort contour, bounds; + FT_UShort start, limit, i; + + + contour = (FT_UShort)args[0]; + bounds = ( exc->GS.gep2 == 0 ) ? 1 : exc->zp2.n_contours; + + if ( BOUNDS( contour, bounds ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) ) + return; + + if ( contour == 0 ) + start = 0; + else + start = exc->zp2.contours[contour - 1] + 1 - exc->zp2.first_point; + + /* we use the number of points if in the twilight zone */ + if ( exc->GS.gep2 == 0 ) + limit = exc->zp2.n_points; + else + limit = exc->zp2.contours[contour] + 1 - exc->zp2.first_point; + + for ( i = start; i < limit; i++ ) + { + if ( zp.cur != exc->zp2.cur || refp != i ) + Move_Zp2_Point( exc, i, dx, dy, TRUE ); + } + } + + + /************************************************************************** + * + * SHZ[a]: SHift Zone + * Opcode range: 0x36-37 + * Stack: uint32 --> + */ + static void + Ins_SHZ( TT_ExecContext exc, + FT_Long* args ) + { + TT_GlyphZoneRec zp; + FT_UShort refp; + FT_F26Dot6 dx, + dy; + + FT_UShort limit, i; + + + if ( BOUNDS( args[0], 2 ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) ) + return; + + /* XXX: UNDOCUMENTED! SHZ doesn't move the phantom points. */ + /* Twilight zone has no real contours, so use `n_points'. */ + /* Normal zone's `n_points' includes phantoms, so must */ + /* use end of last contour. */ + if ( exc->GS.gep2 == 0 ) + limit = exc->zp2.n_points; + else if ( exc->GS.gep2 == 1 && exc->zp2.n_contours > 0 ) + limit = exc->zp2.contours[exc->zp2.n_contours - 1] + 1; + else + limit = 0; + + /* XXX: UNDOCUMENTED! SHZ doesn't touch the points */ + for ( i = 0; i < limit; i++ ) + { + if ( zp.cur != exc->zp2.cur || refp != i ) + Move_Zp2_Point( exc, i, dx, dy, FALSE ); + } + } + + + /************************************************************************** + * + * SHPIX[]: SHift points by a PIXel amount + * Opcode range: 0x38 + * Stack: f26.6 uint32... --> + */ + static void + Ins_SHPIX( TT_ExecContext exc, + FT_Long* args ) + { + FT_F26Dot6 dx, dy; + FT_UShort point; +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + FT_Bool in_twilight = FT_BOOL( exc->GS.gep0 == 0 || + exc->GS.gep1 == 0 || + exc->GS.gep2 == 0 ); +#endif + + + + if ( exc->top < exc->GS.loop + 1 ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + dx = TT_MulFix14( args[0], exc->GS.freeVector.x ); + dy = TT_MulFix14( args[0], exc->GS.freeVector.y ); + + while ( exc->GS.loop > 0 ) + { + exc->args--; + + point = (FT_UShort)exc->stack[exc->args]; + + if ( BOUNDS( point, exc->zp2.n_points ) ) + { + if ( exc->pedantic_hinting ) + { + exc->error = FT_THROW( Invalid_Reference ); + return; + } + } + else +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + if ( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility ) + { + /* Special case: allow SHPIX to move points in the twilight zone. */ + /* Otherwise, treat SHPIX the same as DELTAP. Unbreaks various */ + /* fonts such as older versions of Rokkitt and DTL Argo T Light */ + /* that would glitch severely after calling ALIGNRP after a */ + /* blocked SHPIX. */ + if ( in_twilight || + ( !( exc->iupx_called && exc->iupy_called ) && + ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || + ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ) ) ) + Move_Zp2_Point( exc, point, 0, dy, TRUE ); + } + else +#endif + Move_Zp2_Point( exc, point, dx, dy, TRUE ); + + exc->GS.loop--; + } + + Fail: + exc->GS.loop = 1; + exc->new_top = exc->args; + } + + + /************************************************************************** + * + * MSIRP[a]: Move Stack Indirect Relative Position + * Opcode range: 0x3A-0x3B + * Stack: f26.6 uint32 --> + */ + static void + Ins_MSIRP( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort point = 0; + FT_F26Dot6 distance; + + + point = (FT_UShort)args[0]; + + if ( BOUNDS( point, exc->zp1.n_points ) || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + /* UNDOCUMENTED! The MS rasterizer does that with */ + /* twilight points (confirmed by Greg Hitchcock) */ + if ( exc->GS.gep1 == 0 ) + { + exc->zp1.org[point] = exc->zp0.org[exc->GS.rp0]; + exc->func_move_orig( exc, &exc->zp1, point, args[1] ); + exc->zp1.cur[point] = exc->zp1.org[point]; + } + + distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); + + exc->func_move( exc, + &exc->zp1, + point, + SUB_LONG( args[1], distance ) ); + + exc->GS.rp1 = exc->GS.rp0; + exc->GS.rp2 = point; + + if ( ( exc->opcode & 1 ) != 0 ) + exc->GS.rp0 = point; + } + + + /************************************************************************** + * + * MDAP[a]: Move Direct Absolute Point + * Opcode range: 0x2E-0x2F + * Stack: uint32 --> + */ + static void + Ins_MDAP( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort point; + FT_F26Dot6 cur_dist; + FT_F26Dot6 distance; + + + point = (FT_UShort)args[0]; + + if ( BOUNDS( point, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + if ( ( exc->opcode & 1 ) != 0 ) + { + cur_dist = FAST_PROJECT( &exc->zp0.cur[point] ); + distance = SUB_LONG( exc->func_round( exc, cur_dist, 3 ), cur_dist ); + } + else + distance = 0; + + exc->func_move( exc, &exc->zp0, point, distance ); + + exc->GS.rp0 = point; + exc->GS.rp1 = point; + } + + + /************************************************************************** + * + * MIAP[a]: Move Indirect Absolute Point + * Opcode range: 0x3E-0x3F + * Stack: uint32 uint32 --> + */ + static void + Ins_MIAP( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong cvtEntry; + FT_UShort point; + FT_F26Dot6 distance; + FT_F26Dot6 org_dist; + + + cvtEntry = (FT_ULong)args[1]; + point = (FT_UShort)args[0]; + + if ( BOUNDS( point, exc->zp0.n_points ) || + BOUNDSL( cvtEntry, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + /* UNDOCUMENTED! */ + /* */ + /* The behaviour of an MIAP instruction is quite different when used */ + /* in the twilight zone. */ + /* */ + /* First, no control value cut-in test is performed as it would fail */ + /* anyway. Second, the original point, i.e. (org_x,org_y) of */ + /* zp0.point, is set to the absolute, unrounded distance found in the */ + /* CVT. */ + /* */ + /* This is used in the CVT programs of the Microsoft fonts Arial, */ + /* Times, etc., in order to re-adjust some key font heights. It */ + /* allows the use of the IP instruction in the twilight zone, which */ + /* otherwise would be invalid according to the specification. */ + /* */ + /* We implement it with a special sequence for the twilight zone. */ + /* This is a bad hack, but it seems to work. */ + /* */ + /* Confirmed by Greg Hitchcock. */ + + distance = exc->func_read_cvt( exc, cvtEntry ); + + if ( exc->GS.gep0 == 0 ) /* If in twilight zone */ + { + exc->zp0.org[point].x = TT_MulFix14( distance, + exc->GS.freeVector.x ); + exc->zp0.org[point].y = TT_MulFix14( distance, + exc->GS.freeVector.y ); + exc->zp0.cur[point] = exc->zp0.org[point]; + } + + org_dist = FAST_PROJECT( &exc->zp0.cur[point] ); + + if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */ + { + FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin; + FT_F26Dot6 delta; + + + delta = SUB_LONG( distance, org_dist ); + if ( delta < 0 ) + delta = NEG_LONG( delta ); + + if ( delta > control_value_cutin ) + distance = org_dist; + + distance = exc->func_round( exc, distance, 3 ); + } + + exc->func_move( exc, &exc->zp0, point, SUB_LONG( distance, org_dist ) ); + + Fail: + exc->GS.rp0 = point; + exc->GS.rp1 = point; + } + + + /************************************************************************** + * + * MDRP[abcde]: Move Direct Relative Point + * Opcode range: 0xC0-0xDF + * Stack: uint32 --> + */ + static void + Ins_MDRP( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort point = 0; + FT_F26Dot6 org_dist, distance; + + + point = (FT_UShort)args[0]; + + if ( BOUNDS( point, exc->zp1.n_points ) || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + /* XXX: Is there some undocumented feature while in the */ + /* twilight zone? */ + + /* XXX: UNDOCUMENTED: twilight zone special case */ + + if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 ) + { + FT_Vector* vec1 = &exc->zp1.org[point]; + FT_Vector* vec2 = &exc->zp0.org[exc->GS.rp0]; + + + org_dist = DUALPROJ( vec1, vec2 ); + } + else + { + FT_Vector* vec1 = &exc->zp1.orus[point]; + FT_Vector* vec2 = &exc->zp0.orus[exc->GS.rp0]; + + + if ( exc->metrics.x_scale == exc->metrics.y_scale ) + { + /* this should be faster */ + org_dist = DUALPROJ( vec1, vec2 ); + org_dist = FT_MulFix( org_dist, exc->metrics.x_scale ); + } + else + { + FT_Vector vec; + + + vec.x = FT_MulFix( SUB_LONG( vec1->x, vec2->x ), + exc->metrics.x_scale ); + vec.y = FT_MulFix( SUB_LONG( vec1->y, vec2->y ), + exc->metrics.y_scale ); + + org_dist = FAST_DUALPROJ( &vec ); + } + } + + /* single width cut-in test */ + + /* |org_dist - single_width_value| < single_width_cutin */ + if ( exc->GS.single_width_cutin > 0 && + org_dist < exc->GS.single_width_value + + exc->GS.single_width_cutin && + org_dist > exc->GS.single_width_value - + exc->GS.single_width_cutin ) + { + if ( org_dist >= 0 ) + org_dist = exc->GS.single_width_value; + else + org_dist = -exc->GS.single_width_value; + } + + /* round flag */ + + if ( ( exc->opcode & 4 ) != 0 ) + { + distance = exc->func_round( exc, org_dist, exc->opcode & 3 ); + } + else + 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; + + + if ( org_dist >= 0 ) + { + if ( distance < minimum_distance ) + distance = minimum_distance; + } + else + { + if ( distance > NEG_LONG( minimum_distance ) ) + distance = NEG_LONG( minimum_distance ); + } + } + + /* now move the point */ + + org_dist = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); + + exc->func_move( exc, &exc->zp1, point, SUB_LONG( distance, org_dist ) ); + + Fail: + exc->GS.rp1 = exc->GS.rp0; + exc->GS.rp2 = point; + + if ( ( exc->opcode & 16 ) != 0 ) + exc->GS.rp0 = point; + } + + + /************************************************************************** + * + * MIRP[abcde]: Move Indirect Relative Point + * Opcode range: 0xE0-0xFF + * Stack: int32? uint32 --> + */ + static void + Ins_MIRP( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort point; + FT_ULong cvtEntry; + + FT_F26Dot6 cvt_dist, + distance, + cur_dist, + org_dist; + + FT_F26Dot6 delta; + + + point = (FT_UShort)args[0]; + cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) ); + + /* XXX: UNDOCUMENTED! cvt[-1] = 0 always */ + + if ( BOUNDS( point, exc->zp1.n_points ) || + BOUNDSL( cvtEntry, exc->cvtSize + 1 ) || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + if ( !cvtEntry ) + cvt_dist = 0; + else + cvt_dist = exc->func_read_cvt( exc, cvtEntry - 1 ); + + /* single width test */ + + delta = SUB_LONG( cvt_dist, exc->GS.single_width_value ); + if ( delta < 0 ) + delta = NEG_LONG( delta ); + + if ( delta < exc->GS.single_width_cutin ) + { + if ( cvt_dist >= 0 ) + cvt_dist = exc->GS.single_width_value; + else + cvt_dist = -exc->GS.single_width_value; + } + + /* UNDOCUMENTED! The MS rasterizer does that with */ + /* twilight points (confirmed by Greg Hitchcock) */ + if ( exc->GS.gep1 == 0 ) + { + exc->zp1.org[point].x = 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]; + } + + org_dist = DUALPROJ( &exc->zp1.org[point], &exc->zp0.org[exc->GS.rp0] ); + cur_dist = PROJECT ( &exc->zp1.cur[point], &exc->zp0.cur[exc->GS.rp0] ); + + /* auto-flip test */ + + if ( exc->GS.auto_flip ) + { + if ( ( org_dist ^ cvt_dist ) < 0 ) + cvt_dist = NEG_LONG( cvt_dist ); + } + + /* control value cut-in and round */ + + if ( ( exc->opcode & 4 ) != 0 ) + { + /* XXX: UNDOCUMENTED! Only perform cut-in test when both points */ + /* refer to the same zone. */ + + if ( exc->GS.gep0 == exc->GS.gep1 ) + { + FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin; + + + /* XXX: According to Greg Hitchcock, the following wording is */ + /* the right one: */ + /* */ + /* When the absolute difference between the value in */ + /* the table [CVT] and the measurement directly from */ + /* the outline is _greater_ than the cut_in value, the */ + /* outline measurement is used. */ + /* */ + /* This is from `instgly.doc'. The description in */ + /* `ttinst2.doc', version 1.66, is thus incorrect since */ + /* it implies `>=' instead of `>'. */ + + delta = SUB_LONG( cvt_dist, org_dist ); + if ( delta < 0 ) + delta = NEG_LONG( delta ); + + if ( delta > control_value_cutin ) + cvt_dist = org_dist; + } + + distance = exc->func_round( exc, cvt_dist, exc->opcode & 3 ); + } + else + 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; + + + if ( org_dist >= 0 ) + { + if ( distance < minimum_distance ) + distance = minimum_distance; + } + else + { + if ( distance > NEG_LONG( minimum_distance ) ) + distance = NEG_LONG( minimum_distance ); + } + } + + exc->func_move( exc, + &exc->zp1, + point, + SUB_LONG( distance, cur_dist ) ); + + Fail: + exc->GS.rp1 = exc->GS.rp0; + + if ( ( exc->opcode & 16 ) != 0 ) + exc->GS.rp0 = point; + + exc->GS.rp2 = point; + } + + + /************************************************************************** + * + * ALIGNRP[]: ALIGN Relative Point + * Opcode range: 0x3C + * Stack: uint32 uint32... --> + */ + static void + Ins_ALIGNRP( TT_ExecContext exc ) + { + FT_UShort point; + FT_F26Dot6 distance; + + + if ( exc->top < exc->GS.loop || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + while ( exc->GS.loop > 0 ) + { + exc->args--; + + point = (FT_UShort)exc->stack[exc->args]; + + if ( BOUNDS( point, exc->zp1.n_points ) ) + { + if ( exc->pedantic_hinting ) + { + exc->error = FT_THROW( Invalid_Reference ); + return; + } + } + else + { + distance = PROJECT( exc->zp1.cur + point, + exc->zp0.cur + exc->GS.rp0 ); + + exc->func_move( exc, &exc->zp1, point, NEG_LONG( distance ) ); + } + + exc->GS.loop--; + } + + Fail: + exc->GS.loop = 1; + exc->new_top = exc->args; + } + + + /************************************************************************** + * + * ISECT[]: moves point to InterSECTion + * Opcode range: 0x0F + * Stack: 5 * uint32 --> + */ + static void + Ins_ISECT( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort point, + a0, a1, + b0, b1; + + FT_F26Dot6 discriminant, dotproduct; + + FT_F26Dot6 dx, dy, + dax, day, + dbx, dby; + + FT_F26Dot6 val; + + FT_Vector R; + + + point = (FT_UShort)args[0]; + + a0 = (FT_UShort)args[1]; + a1 = (FT_UShort)args[2]; + b0 = (FT_UShort)args[3]; + b1 = (FT_UShort)args[4]; + + if ( BOUNDS( b0, exc->zp0.n_points ) || + BOUNDS( b1, exc->zp0.n_points ) || + BOUNDS( a0, exc->zp1.n_points ) || + BOUNDS( a1, exc->zp1.n_points ) || + BOUNDS( point, exc->zp2.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + /* Cramer's rule */ + + dbx = SUB_LONG( exc->zp0.cur[b1].x, exc->zp0.cur[b0].x ); + dby = SUB_LONG( exc->zp0.cur[b1].y, exc->zp0.cur[b0].y ); + + dax = SUB_LONG( exc->zp1.cur[a1].x, exc->zp1.cur[a0].x ); + day = SUB_LONG( exc->zp1.cur[a1].y, exc->zp1.cur[a0].y ); + + dx = SUB_LONG( exc->zp0.cur[b0].x, exc->zp1.cur[a0].x ); + dy = SUB_LONG( exc->zp0.cur[b0].y, exc->zp1.cur[a0].y ); + + discriminant = ADD_LONG( FT_MulDiv( dax, NEG_LONG( dby ), 0x40 ), + FT_MulDiv( day, dbx, 0x40 ) ); + dotproduct = ADD_LONG( FT_MulDiv( dax, dbx, 0x40 ), + FT_MulDiv( day, dby, 0x40 ) ); + + /* The discriminant above is actually a cross product of vectors */ + /* da and db. Together with the dot product, they can be used as */ + /* surrogates for sine and cosine of the angle between the vectors. */ + /* Indeed, */ + /* dotproduct = |da||db|cos(angle) */ + /* discriminant = |da||db|sin(angle) . */ + /* We use these equations to reject grazing intersections by */ + /* thresholding abs(tan(angle)) at 1/19, corresponding to 3 degrees. */ + if ( MUL_LONG( 19, FT_ABS( discriminant ) ) > FT_ABS( dotproduct ) ) + { + val = ADD_LONG( FT_MulDiv( dx, NEG_LONG( dby ), 0x40 ), + FT_MulDiv( dy, dbx, 0x40 ) ); + + R.x = FT_MulDiv( val, dax, discriminant ); + R.y = FT_MulDiv( val, day, discriminant ); + + /* XXX: Block in backward_compatibility and/or post-IUP? */ + exc->zp2.cur[point].x = ADD_LONG( exc->zp1.cur[a0].x, R.x ); + exc->zp2.cur[point].y = ADD_LONG( exc->zp1.cur[a0].y, R.y ); + } + else + { + /* else, take the middle of the middles of A and B */ + + /* XXX: Block in backward_compatibility and/or post-IUP? */ + exc->zp2.cur[point].x = + ADD_LONG( ADD_LONG( exc->zp1.cur[a0].x, exc->zp1.cur[a1].x ), + ADD_LONG( exc->zp0.cur[b0].x, exc->zp0.cur[b1].x ) ) / 4; + exc->zp2.cur[point].y = + ADD_LONG( ADD_LONG( exc->zp1.cur[a0].y, exc->zp1.cur[a1].y ), + ADD_LONG( exc->zp0.cur[b0].y, exc->zp0.cur[b1].y ) ) / 4; + } + + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH; + } + + + /************************************************************************** + * + * ALIGNPTS[]: ALIGN PoinTS + * Opcode range: 0x27 + * Stack: uint32 uint32 --> + */ + static void + Ins_ALIGNPTS( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort p1, p2; + FT_F26Dot6 distance; + + + p1 = (FT_UShort)args[0]; + p2 = (FT_UShort)args[1]; + + if ( BOUNDS( p1, exc->zp1.n_points ) || + BOUNDS( p2, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + distance = PROJECT( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2; + + exc->func_move( exc, &exc->zp1, p1, distance ); + exc->func_move( exc, &exc->zp0, p2, NEG_LONG( distance ) ); + } + + + /************************************************************************** + * + * IP[]: Interpolate Point + * Opcode range: 0x39 + * Stack: uint32... --> + */ + + /* SOMETIMES, DUMBER CODE IS BETTER CODE */ + + static void + Ins_IP( TT_ExecContext exc ) + { + FT_F26Dot6 old_range, cur_range; + FT_Vector* orus_base; + FT_Vector* cur_base; + FT_Int twilight; + + + if ( exc->top < exc->GS.loop ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + /* + * We need to deal in a special way with the twilight zone. + * Otherwise, by definition, the value of exc->twilight.orus[n] is (0,0), + * for every n. + */ + twilight = ( exc->GS.gep0 == 0 || + exc->GS.gep1 == 0 || + exc->GS.gep2 == 0 ); + + if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + goto Fail; + } + + if ( twilight ) + orus_base = &exc->zp0.org[exc->GS.rp1]; + else + orus_base = &exc->zp0.orus[exc->GS.rp1]; + + cur_base = &exc->zp0.cur[exc->GS.rp1]; + + /* XXX: There are some glyphs in some braindead but popular */ + /* fonts out there (e.g. [aeu]grave in monotype.ttf) */ + /* calling IP[] with bad values of rp[12]. */ + /* Do something sane when this odd thing happens. */ + if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) || + BOUNDS( exc->GS.rp2, exc->zp1.n_points ) ) + { + old_range = 0; + cur_range = 0; + } + else + { + if ( twilight ) + old_range = DUALPROJ( &exc->zp1.org[exc->GS.rp2], orus_base ); + else if ( exc->metrics.x_scale == exc->metrics.y_scale ) + old_range = DUALPROJ( &exc->zp1.orus[exc->GS.rp2], orus_base ); + else + { + FT_Vector vec; + + + vec.x = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].x, + orus_base->x ), + exc->metrics.x_scale ); + vec.y = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].y, + orus_base->y ), + exc->metrics.y_scale ); + + old_range = FAST_DUALPROJ( &vec ); + } + + cur_range = PROJECT( &exc->zp1.cur[exc->GS.rp2], cur_base ); + } + + for ( ; exc->GS.loop > 0; exc->GS.loop-- ) + { + FT_UInt point = (FT_UInt)exc->stack[--exc->args]; + FT_F26Dot6 org_dist, cur_dist, new_dist; + + + /* check point bounds */ + if ( BOUNDS( point, exc->zp2.n_points ) ) + { + if ( exc->pedantic_hinting ) + { + exc->error = FT_THROW( Invalid_Reference ); + return; + } + continue; + } + + if ( twilight ) + org_dist = DUALPROJ( &exc->zp2.org[point], orus_base ); + else if ( exc->metrics.x_scale == exc->metrics.y_scale ) + org_dist = DUALPROJ( &exc->zp2.orus[point], orus_base ); + else + { + FT_Vector vec; + + + vec.x = FT_MulFix( SUB_LONG( exc->zp2.orus[point].x, + orus_base->x ), + exc->metrics.x_scale ); + vec.y = FT_MulFix( SUB_LONG( exc->zp2.orus[point].y, + orus_base->y ), + exc->metrics.y_scale ); + + org_dist = FAST_DUALPROJ( &vec ); + } + + cur_dist = PROJECT( &exc->zp2.cur[point], cur_base ); + + if ( org_dist ) + { + if ( old_range ) + new_dist = FT_MulDiv( org_dist, cur_range, old_range ); + else + { + /* This is the same as what MS does for the invalid case: */ + /* */ + /* delta = (Original_Pt - Original_RP1) - */ + /* (Current_Pt - Current_RP1) ; */ + /* */ + /* In FreeType speak: */ + /* */ + /* delta = org_dist - cur_dist . */ + /* */ + /* We move `point' by `new_dist - cur_dist' after leaving */ + /* this block, thus we have */ + /* */ + /* new_dist - cur_dist = delta , */ + /* new_dist - cur_dist = org_dist - cur_dist , */ + /* new_dist = org_dist . */ + + new_dist = org_dist; + } + } + else + new_dist = 0; + + exc->func_move( exc, + &exc->zp2, + (FT_UShort)point, + SUB_LONG( new_dist, cur_dist ) ); + } + + Fail: + exc->GS.loop = 1; + exc->new_top = exc->args; + } + + + /************************************************************************** + * + * UTP[a]: UnTouch Point + * Opcode range: 0x29 + * Stack: uint32 --> + */ + static void + Ins_UTP( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort point; + FT_Byte mask; + + + point = (FT_UShort)args[0]; + + if ( BOUNDS( point, exc->zp0.n_points ) ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return; + } + + mask = 0xFF; + + if ( exc->GS.freeVector.x != 0 ) + mask &= ~FT_CURVE_TAG_TOUCH_X; + + if ( exc->GS.freeVector.y != 0 ) + mask &= ~FT_CURVE_TAG_TOUCH_Y; + + exc->zp0.tags[point] &= mask; + } + + + /* Local variables for Ins_IUP: */ + typedef struct IUP_WorkerRec_ + { + FT_Vector* orgs; /* original and current coordinate */ + FT_Vector* curs; /* arrays */ + FT_Vector* orus; + FT_UInt max_points; + + } IUP_WorkerRec, *IUP_Worker; + + + static void + iup_worker_shift_( IUP_Worker worker, + FT_UInt p1, + FT_UInt p2, + FT_UInt p ) + { + FT_UInt i; + FT_F26Dot6 dx; + + + dx = SUB_LONG( worker->curs[p].x, worker->orgs[p].x ); + if ( dx != 0 ) + { + for ( i = p1; i < p; i++ ) + worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx ); + + for ( i = p + 1; i <= p2; i++ ) + worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx ); + } + } + + + static void + iup_worker_interpolate_( IUP_Worker worker, + FT_UInt p1, + FT_UInt p2, + FT_UInt ref1, + FT_UInt ref2 ) + { + FT_UInt i; + FT_F26Dot6 orus1, orus2, org1, org2, cur1, cur2, delta1, delta2; + + + if ( p1 > p2 ) + return; + + if ( BOUNDS( ref1, worker->max_points ) || + BOUNDS( ref2, worker->max_points ) ) + return; + + orus1 = worker->orus[ref1].x; + orus2 = worker->orus[ref2].x; + + if ( orus1 > orus2 ) + { + FT_F26Dot6 tmp_o; + FT_UInt tmp_r; + + + tmp_o = orus1; + orus1 = orus2; + orus2 = tmp_o; + + tmp_r = ref1; + ref1 = ref2; + ref2 = tmp_r; + } + + org1 = worker->orgs[ref1].x; + org2 = worker->orgs[ref2].x; + cur1 = worker->curs[ref1].x; + cur2 = worker->curs[ref2].x; + delta1 = SUB_LONG( cur1, org1 ); + delta2 = SUB_LONG( cur2, org2 ); + + if ( cur1 == cur2 || orus1 == orus2 ) + { + + /* trivial snap or shift of untouched points */ + for ( i = p1; i <= p2; i++ ) + { + FT_F26Dot6 x = worker->orgs[i].x; + + + if ( x <= org1 ) + x = ADD_LONG( x, delta1 ); + + else if ( x >= org2 ) + x = ADD_LONG( x, delta2 ); + + else + x = cur1; + + worker->curs[i].x = x; + } + } + else + { + FT_Fixed scale = 0; + FT_Bool scale_valid = 0; + + + /* interpolation */ + for ( i = p1; i <= p2; i++ ) + { + FT_F26Dot6 x = worker->orgs[i].x; + + + if ( x <= org1 ) + x = ADD_LONG( x, delta1 ); + + else if ( x >= org2 ) + x = ADD_LONG( x, delta2 ); + + else + { + if ( !scale_valid ) + { + scale_valid = 1; + scale = FT_DivFix( SUB_LONG( cur2, cur1 ), + SUB_LONG( orus2, orus1 ) ); + } + + x = ADD_LONG( cur1, + FT_MulFix( SUB_LONG( worker->orus[i].x, orus1 ), + scale ) ); + } + worker->curs[i].x = x; + } + } + } + + + /************************************************************************** + * + * IUP[a]: Interpolate Untouched Points + * Opcode range: 0x30-0x31 + * Stack: --> + */ + static void + Ins_IUP( TT_ExecContext exc ) + { + IUP_WorkerRec V; + FT_Byte mask; + + FT_UInt first_point; /* first point of contour */ + FT_UInt end_point; /* end point (last+1) of contour */ + + FT_UInt first_touched; /* first touched point in contour */ + FT_UInt cur_touched; /* current touched point in contour */ + + FT_UInt point; /* current point */ + FT_Short contour; /* current contour */ + + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* See `ttinterp.h' for details on backward compatibility mode. */ + /* Allow IUP until it has been called on both axes. Immediately */ + /* return on subsequent ones. */ + if ( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility ) + { + if ( exc->iupx_called && exc->iupy_called ) + return; + + if ( exc->opcode & 1 ) + exc->iupx_called = TRUE; + else + exc->iupy_called = TRUE; + } +#endif + + /* ignore empty outlines */ + if ( exc->pts.n_contours == 0 ) + return; + + if ( exc->opcode & 1 ) + { + mask = FT_CURVE_TAG_TOUCH_X; + V.orgs = exc->pts.org; + V.curs = exc->pts.cur; + V.orus = exc->pts.orus; + } + else + { + mask = FT_CURVE_TAG_TOUCH_Y; + V.orgs = (FT_Vector*)( (FT_Pos*)exc->pts.org + 1 ); + V.curs = (FT_Vector*)( (FT_Pos*)exc->pts.cur + 1 ); + V.orus = (FT_Vector*)( (FT_Pos*)exc->pts.orus + 1 ); + } + V.max_points = exc->pts.n_points; + + contour = 0; + point = 0; + + do + { + end_point = exc->pts.contours[contour] - exc->pts.first_point; + first_point = point; + + if ( BOUNDS( end_point, exc->pts.n_points ) ) + end_point = exc->pts.n_points - 1; + + while ( point <= end_point && ( exc->pts.tags[point] & mask ) == 0 ) + point++; + + if ( point <= end_point ) + { + first_touched = point; + cur_touched = point; + + point++; + + while ( point <= end_point ) + { + if ( ( exc->pts.tags[point] & mask ) != 0 ) + { + iup_worker_interpolate_( &V, + cur_touched + 1, + point - 1, + cur_touched, + point ); + cur_touched = point; + } + + point++; + } + + if ( cur_touched == first_touched ) + iup_worker_shift_( &V, first_point, end_point, cur_touched ); + else + { + iup_worker_interpolate_( &V, + (FT_UShort)( cur_touched + 1 ), + end_point, + cur_touched, + first_touched ); + + if ( first_touched > 0 ) + iup_worker_interpolate_( &V, + first_point, + first_touched - 1, + cur_touched, + first_touched ); + } + } + contour++; + } while ( contour < exc->pts.n_contours ); + } + + + /************************************************************************** + * + * DELTAPn[]: DELTA exceptions P1, P2, P3 + * Opcode range: 0x5D,0x71,0x72 + * Stack: uint32 (2 * uint32)... --> + */ + static void + Ins_DELTAP( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong nump, k; + FT_UShort A; + FT_ULong C, P; + FT_Long B; + + + P = (FT_ULong)exc->func_cur_ppem( exc ); + nump = (FT_ULong)args[0]; /* some points theoretically may occur more + than once, thus UShort isn't enough */ + + for ( k = 1; k <= nump; k++ ) + { + if ( exc->args < 2 ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); + exc->args = 0; + goto Fail; + } + + exc->args -= 2; + + A = (FT_UShort)exc->stack[exc->args + 1]; + B = exc->stack[exc->args]; + + /* XXX: Because some popular fonts contain some invalid DeltaP */ + /* instructions, we simply ignore them when the stacked */ + /* point reference is off limit, rather than returning an */ + /* error. As a delta instruction doesn't change a glyph */ + /* in great ways, this shouldn't be a problem. */ + + if ( !BOUNDS( A, exc->zp0.n_points ) ) + { + C = ( (FT_ULong)B & 0xF0 ) >> 4; + + switch ( exc->opcode ) + { + case 0x5D: + break; + + case 0x71: + C += 16; + break; + + case 0x72: + C += 32; + break; + } + + C += exc->GS.delta_base; + + if ( P == C ) + { + B = ( (FT_ULong)B & 0xF ) - 8; + if ( B >= 0 ) + B++; + B *= 1L << ( 6 - exc->GS.delta_shift ); + + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* See `ttinterp.h' for details on backward compatibility */ + /* mode. */ + if ( SUBPIXEL_HINTING_MINIMAL && + exc->backward_compatibility ) + { + if ( !( exc->iupx_called && exc->iupy_called ) && + ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || + ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) ) + exc->func_move( exc, &exc->zp0, A, B ); + } + else +#endif + exc->func_move( exc, &exc->zp0, A, B ); + } + } + else + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + } + + Fail: + exc->new_top = exc->args; + } + + + /************************************************************************** + * + * DELTACn[]: DELTA exceptions C1, C2, C3 + * Opcode range: 0x73,0x74,0x75 + * Stack: uint32 (2 * uint32)... --> + */ + static void + Ins_DELTAC( TT_ExecContext exc, + FT_Long* args ) + { + FT_ULong nump, k; + FT_ULong A, C, P; + FT_Long B; + + + P = (FT_ULong)exc->func_cur_ppem( exc ); + nump = (FT_ULong)args[0]; + + for ( k = 1; k <= nump; k++ ) + { + if ( exc->args < 2 ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); + exc->args = 0; + goto Fail; + } + + exc->args -= 2; + + A = (FT_ULong)exc->stack[exc->args + 1]; + B = exc->stack[exc->args]; + + if ( BOUNDSL( A, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + { + exc->error = FT_THROW( Invalid_Reference ); + return; + } + } + else + { + C = ( (FT_ULong)B & 0xF0 ) >> 4; + + switch ( exc->opcode ) + { + case 0x73: + break; + + case 0x74: + C += 16; + break; + + case 0x75: + C += 32; + break; + } + + C += exc->GS.delta_base; + + if ( P == C ) + { + B = ( (FT_ULong)B & 0xF ) - 8; + if ( B >= 0 ) + B++; + B *= 1L << ( 6 - exc->GS.delta_shift ); + + exc->func_move_cvt( exc, A, B ); + } + } + } + + Fail: + exc->new_top = exc->args; + } + + + /************************************************************************** + * + * MISC. INSTRUCTIONS + * + */ + + + /************************************************************************** + * + * GETINFO[]: GET INFOrmation + * Opcode range: 0x88 + * Stack: uint32 --> uint32 + */ + static void + Ins_GETINFO( TT_ExecContext exc, + FT_Long* args ) + { + FT_Long K; + TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( exc->face ); + + + K = 0; + + if ( ( args[0] & 1 ) != 0 ) + K = driver->interpreter_version; + + /********************************* + * GLYPH ROTATED + * Selector Bit: 1 + * Return Bit(s): 8 + */ + if ( ( args[0] & 2 ) != 0 && exc->tt_metrics.rotated ) + K |= 1 << 8; + + /********************************* + * GLYPH STRETCHED + * Selector Bit: 2 + * Return Bit(s): 9 + */ + if ( ( args[0] & 4 ) != 0 && exc->tt_metrics.stretched ) + K |= 1 << 9; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + /********************************* + * VARIATION GLYPH + * Selector Bit: 3 + * Return Bit(s): 10 + */ + if ( (args[0] & 8 ) != 0 && exc->face->blend ) + K |= 1 << 10; +#endif + + /********************************* + * BI-LEVEL HINTING AND + * GRAYSCALE RENDERING + * Selector Bit: 5 + * Return Bit(s): 12 + */ + if ( ( args[0] & 32 ) != 0 && exc->grayscale ) + K |= 1 << 12; + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* Toggle the following flags only outside of monochrome mode. */ + /* Otherwise, instructions may behave weirdly and rendering results */ + /* may differ between v35 and v40 mode, e.g., in `Times New Roman */ + /* Bold Italic'. */ + if ( SUBPIXEL_HINTING_MINIMAL && exc->subpixel_hinting_lean ) + { + /********************************* + * HINTING FOR SUBPIXEL + * Selector Bit: 6 + * Return Bit(s): 13 + * + * v40 does subpixel hinting by default. + */ + if ( ( args[0] & 64 ) != 0 ) + K |= 1 << 13; + + /********************************* + * VERTICAL LCD SUBPIXELS? + * Selector Bit: 8 + * Return Bit(s): 15 + */ + if ( ( args[0] & 256 ) != 0 && exc->vertical_lcd_lean ) + K |= 1 << 15; + + /********************************* + * SUBPIXEL POSITIONED? + * Selector Bit: 10 + * Return Bit(s): 17 + * + * XXX: FreeType supports it, dependent on what client does? + */ + if ( ( args[0] & 1024 ) != 0 ) + K |= 1 << 17; + + /********************************* + * SYMMETRICAL SMOOTHING + * Selector Bit: 11 + * Return Bit(s): 18 + * + * The only smoothing method FreeType supports unless someone sets + * FT_LOAD_TARGET_MONO. + */ + if ( ( args[0] & 2048 ) != 0 && exc->subpixel_hinting_lean ) + K |= 1 << 18; + + /********************************* + * CLEARTYPE HINTING AND + * GRAYSCALE RENDERING + * Selector Bit: 12 + * Return Bit(s): 19 + * + * Grayscale rendering is what FreeType does anyway unless someone + * sets FT_LOAD_TARGET_MONO or FT_LOAD_TARGET_LCD(_V) + */ + if ( ( args[0] & 4096 ) != 0 && exc->grayscale_cleartype ) + K |= 1 << 19; + } +#endif + + args[0] = K; + } + + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + + /************************************************************************** + * + * GETVARIATION[]: get normalized variation (blend) coordinates + * Opcode range: 0x91 + * Stack: --> f2.14... + * + * XXX: UNDOCUMENTED! There is no official documentation from Apple for + * this bytecode instruction. Active only if a font has GX + * variation axes. + */ + static void + Ins_GETVARIATION( TT_ExecContext exc, + FT_Long* args ) + { + FT_UInt num_axes = exc->face->blend->num_axis; + FT_Fixed* coords = exc->face->blend->normalizedcoords; + + FT_UInt i; + + + if ( BOUNDS( num_axes, exc->stackSize + 1 - exc->top ) ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + if ( coords ) + { + for ( i = 0; i < num_axes; i++ ) + args[i] = coords[i] >> 2; /* convert 16.16 to 2.14 format */ + } + else + { + for ( i = 0; i < num_axes; i++ ) + args[i] = 0; + } + } + + + /************************************************************************** + * + * GETDATA[]: no idea what this is good for + * Opcode range: 0x92 + * Stack: --> 17 + * + * XXX: UNDOCUMENTED! There is no documentation from Apple for this + * very weird bytecode instruction. + */ + static void + Ins_GETDATA( FT_Long* args ) + { + args[0] = 17; + } + +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + + static void + Ins_UNKNOWN( TT_ExecContext exc ) + { + TT_DefRecord* def = exc->IDefs; + TT_DefRecord* limit = FT_OFFSET( def, exc->numIDefs ); + + + for ( ; def < limit; def++ ) + { + if ( (FT_Byte)def->opc == exc->opcode && def->active ) + { + TT_CallRec* call; + + + if ( exc->callTop >= exc->callSize ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + + call = exc->callStack + exc->callTop++; + + call->Caller_Range = exc->curRange; + call->Caller_IP = exc->IP + 1; + call->Cur_Count = 1; + call->Def = def; + + Ins_Goto_CodeRange( exc, def->range, def->start ); + + exc->step_ins = FALSE; + return; + } + } + + exc->error = FT_THROW( Invalid_Opcode ); + } + + + /************************************************************************** + * + * RUN + * + * This function executes a run of opcodes. It will exit in the + * following cases: + * + * - Errors (in which case it returns FALSE). + * + * - Reaching the end of the main code range (returns TRUE). + * Reaching the end of a code range within a function call is an + * error. + * + * - After executing one single opcode, if the flag `Instruction_Trap' + * is set to TRUE (returns TRUE). + * + * On exit with TRUE, test IP < CodeSize to know whether it comes from + * an instruction trap or a normal termination. + * + * + * Note: The documented DEBUG opcode pops a value from the stack. This + * behaviour is unsupported; here a DEBUG opcode is always an + * error. + * + * + * THIS IS THE INTERPRETER'S MAIN LOOP. + * + */ + + + /* documentation is in ttinterp.h */ + + FT_EXPORT_DEF( FT_Error ) + TT_RunIns( void* exec ) + { + TT_ExecContext exc = (TT_ExecContext)exec; + + FT_ULong ins_counter = 0; /* executed instructions counter */ + FT_ULong num_twilight_points; + FT_UShort i; + + + /* We restrict the number of twilight points to a reasonable, */ + /* heuristic value to avoid slow execution of malformed bytecode. */ + num_twilight_points = FT_MAX( 30, + 2 * ( exc->pts.n_points + exc->cvtSize ) ); + if ( exc->twilight.n_points > num_twilight_points ) + { + if ( num_twilight_points > 0xFFFFU ) + num_twilight_points = 0xFFFFU; + + FT_TRACE5(( "TT_RunIns: Resetting number of twilight points\n" )); + FT_TRACE5(( " 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; + } + + /* Set up loop detectors. We restrict the number of LOOPCALL loops */ + /* and the number of JMPR, JROT, and JROF calls with a negative */ + /* argument to values that depend on various parameters like the */ + /* size of the CVT table or the number of points in the current */ + /* glyph (if applicable). */ + /* */ + /* The idea is that in real-world bytecode you either iterate over */ + /* all CVT entries (in the `prep' table), or over all points (or */ + /* contours, in the `glyf' table) of a glyph, and such iterations */ + /* don't happen very often. */ + exc->loopcall_counter = 0; + exc->neg_jump_counter = 0; + + /* The maximum values are heuristic. */ + if ( exc->pts.n_points ) + exc->loopcall_counter_max = FT_MAX( 50, + 10 * exc->pts.n_points ) + + FT_MAX( 50, + exc->cvtSize / 10 ); + else + exc->loopcall_counter_max = 300 + 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 */ + if ( exc->loopcall_counter_max > + 100 * (FT_ULong)exc->face->root.num_glyphs ) + exc->loopcall_counter_max = 100 * (FT_ULong)exc->face->root.num_glyphs; + + FT_TRACE5(( "TT_RunIns: Limiting total number of loops in LOOPCALL" + " to %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 %ld\n", exc->neg_jump_counter_max )); + + /* set PPEM and CVT functions */ + exc->tt_metrics.ratio = 0; + if ( exc->metrics.x_ppem != exc->metrics.y_ppem ) + { + /* non-square pixels, use the stretched routines */ + exc->func_cur_ppem = Current_Ppem_Stretched; + exc->func_read_cvt = Read_CVT_Stretched; + exc->func_write_cvt = Write_CVT_Stretched; + exc->func_move_cvt = Move_CVT_Stretched; + } + else + { + /* square pixels, use normal routines */ + exc->func_cur_ppem = Current_Ppem; + exc->func_read_cvt = Read_CVT; + exc->func_write_cvt = Write_CVT; + exc->func_move_cvt = Move_CVT; + } + + exc->iniRange = exc->curRange; + + Compute_Funcs( exc ); + Compute_Round( exc, (FT_Byte)exc->GS.round_state ); + + /* These flags cancel execution of some opcodes after IUP is called */ +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + exc->iupx_called = FALSE; + exc->iupy_called = FALSE; +#endif + + do + { + exc->opcode = exc->code[exc->IP]; + +#ifdef FT_DEBUG_LEVEL_TRACE + if ( ft_trace_levels[trace_ttinterp] >= 6 ) + { + FT_Long cnt = FT_MIN( 8, exc->top ); + FT_Long n; + + + /* if tracing level is 7, show current code position */ + /* and the first few stack elements also */ + FT_TRACE6(( " " )); + FT_TRACE7(( "%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(( " %ld", exc->stack[exc->top - n] )); + FT_TRACE6(( "\n" )); + } +#endif /* FT_DEBUG_LEVEL_TRACE */ + + if ( ( exc->length = opcode_length[exc->opcode] ) < 0 ) + { + if ( exc->IP + 1 >= exc->codeSize ) + goto LErrorCodeOverflow_; + + exc->length = 2 - exc->length * exc->code[exc->IP + 1]; + } + + if ( exc->IP + exc->length > exc->codeSize ) + goto LErrorCodeOverflow_; + + /* First, let's check for empty stack and overflow */ + exc->args = exc->top - ( Pop_Push_Count[exc->opcode] >> 4 ); + + /* `args' is the top of the stack once arguments have been popped. */ + /* One can also interpret it as the index of the last argument. */ + if ( exc->args < 0 ) + { + if ( exc->pedantic_hinting ) + { + exc->error = FT_THROW( Too_Few_Arguments ); + goto LErrorLabel_; + } + + /* push zeroes onto the stack */ + for ( i = 0; i < Pop_Push_Count[exc->opcode] >> 4; i++ ) + exc->stack[i] = 0; + exc->args = 0; + } + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( exc->opcode == 0x91 ) + { + /* this is very special: GETVARIATION returns */ + /* a variable number of arguments */ + + /* it is the job of the application to `activate' GX handling, */ + /* that is, calling any of the GX API functions on the current */ + /* font to select a variation instance */ + if ( exc->face->blend ) + exc->new_top = exc->args + exc->face->blend->num_axis; + } + else +#endif + exc->new_top = exc->args + ( Pop_Push_Count[exc->opcode] & 15 ); + + /* `new_top' is the new top of the stack, after the instruction's */ + /* execution. `top' will be set to `new_top' after the `switch' */ + /* statement. */ + if ( exc->new_top > exc->stackSize ) + { + exc->error = FT_THROW( Stack_Overflow ); + goto LErrorLabel_; + } + + exc->step_ins = TRUE; + exc->error = FT_Err_Ok; + + { + FT_Long* args = exc->stack + exc->args; + FT_Byte opcode = exc->opcode; + + + switch ( opcode ) + { + case 0x00: /* SVTCA y */ + case 0x01: /* SVTCA x */ + case 0x02: /* SPvTCA y */ + case 0x03: /* SPvTCA x */ + case 0x04: /* SFvTCA y */ + case 0x05: /* SFvTCA x */ + Ins_SxyTCA( exc ); + break; + + case 0x06: /* SPvTL // */ + case 0x07: /* SPvTL + */ + Ins_SPVTL( exc, args ); + break; + + case 0x08: /* SFvTL // */ + case 0x09: /* SFvTL + */ + Ins_SFVTL( exc, args ); + break; + + case 0x0A: /* SPvFS */ + Ins_SPVFS( exc, args ); + break; + + case 0x0B: /* SFvFS */ + Ins_SFVFS( exc, args ); + break; + + case 0x0C: /* GPv */ + Ins_GPV( exc, args ); + break; + + case 0x0D: /* GFv */ + Ins_GFV( exc, args ); + break; + + case 0x0E: /* SFvTPv */ + Ins_SFVTPV( exc ); + break; + + case 0x0F: /* ISECT */ + Ins_ISECT( exc, args ); + break; + + case 0x10: /* SRP0 */ + Ins_SRP0( exc, args ); + break; + + case 0x11: /* SRP1 */ + Ins_SRP1( exc, args ); + break; + + case 0x12: /* SRP2 */ + Ins_SRP2( exc, args ); + break; + + case 0x13: /* SZP0 */ + Ins_SZP0( exc, args ); + break; + + case 0x14: /* SZP1 */ + Ins_SZP1( exc, args ); + break; + + case 0x15: /* SZP2 */ + Ins_SZP2( exc, args ); + break; + + case 0x16: /* SZPS */ + Ins_SZPS( exc, args ); + break; + + case 0x17: /* SLOOP */ + Ins_SLOOP( exc, args ); + break; + + case 0x18: /* RTG */ + Ins_RTG( exc ); + break; + + case 0x19: /* RTHG */ + Ins_RTHG( exc ); + break; + + case 0x1A: /* SMD */ + Ins_SMD( exc, args ); + break; + + case 0x1B: /* ELSE */ + Ins_ELSE( exc ); + break; + + case 0x1C: /* JMPR */ + Ins_JMPR( exc, args ); + break; + + case 0x1D: /* SCVTCI */ + Ins_SCVTCI( exc, args ); + break; + + case 0x1E: /* SSWCI */ + Ins_SSWCI( exc, args ); + break; + + case 0x1F: /* SSW */ + Ins_SSW( exc, args ); + break; + + case 0x20: /* DUP */ + Ins_DUP( args ); + break; + + case 0x21: /* POP */ + Ins_POP(); + break; + + case 0x22: /* CLEAR */ + Ins_CLEAR( exc ); + break; + + case 0x23: /* SWAP */ + Ins_SWAP( args ); + break; + + case 0x24: /* DEPTH */ + Ins_DEPTH( exc, args ); + break; + + case 0x25: /* CINDEX */ + Ins_CINDEX( exc, args ); + break; + + case 0x26: /* MINDEX */ + Ins_MINDEX( exc, args ); + break; + + case 0x27: /* ALIGNPTS */ + Ins_ALIGNPTS( exc, args ); + break; + + case 0x28: /* RAW */ + Ins_UNKNOWN( exc ); + break; + + case 0x29: /* UTP */ + Ins_UTP( exc, args ); + break; + + case 0x2A: /* LOOPCALL */ + Ins_LOOPCALL( exc, args ); + break; + + case 0x2B: /* CALL */ + Ins_CALL( exc, args ); + break; + + case 0x2C: /* FDEF */ + Ins_FDEF( exc, args ); + break; + + case 0x2D: /* ENDF */ + Ins_ENDF( exc ); + break; + + case 0x2E: /* MDAP */ + case 0x2F: /* MDAP */ + Ins_MDAP( exc, args ); + break; + + case 0x30: /* IUP */ + case 0x31: /* IUP */ + Ins_IUP( exc ); + break; + + case 0x32: /* SHP */ + case 0x33: /* SHP */ + Ins_SHP( exc ); + break; + + case 0x34: /* SHC */ + case 0x35: /* SHC */ + Ins_SHC( exc, args ); + break; + + case 0x36: /* SHZ */ + case 0x37: /* SHZ */ + Ins_SHZ( exc, args ); + break; + + case 0x38: /* SHPIX */ + Ins_SHPIX( exc, args ); + break; + + case 0x39: /* IP */ + Ins_IP( exc ); + break; + + case 0x3A: /* MSIRP */ + case 0x3B: /* MSIRP */ + Ins_MSIRP( exc, args ); + break; + + case 0x3C: /* AlignRP */ + Ins_ALIGNRP( exc ); + break; + + case 0x3D: /* RTDG */ + Ins_RTDG( exc ); + break; + + case 0x3E: /* MIAP */ + case 0x3F: /* MIAP */ + Ins_MIAP( exc, args ); + break; + + case 0x40: /* NPUSHB */ + Ins_NPUSHB( exc, args ); + break; + + case 0x41: /* NPUSHW */ + Ins_NPUSHW( exc, args ); + break; + + case 0x42: /* WS */ + Ins_WS( exc, args ); + break; + + case 0x43: /* RS */ + Ins_RS( exc, args ); + break; + + case 0x44: /* WCVTP */ + Ins_WCVTP( exc, args ); + break; + + case 0x45: /* RCVT */ + Ins_RCVT( exc, args ); + break; + + case 0x46: /* GC */ + case 0x47: /* GC */ + Ins_GC( exc, args ); + break; + + case 0x48: /* SCFS */ + Ins_SCFS( exc, args ); + break; + + case 0x49: /* MD */ + case 0x4A: /* MD */ + Ins_MD( exc, args ); + break; + + case 0x4B: /* MPPEM */ + Ins_MPPEM( exc, args ); + break; + + case 0x4C: /* MPS */ + Ins_MPS( exc, args ); + break; + + case 0x4D: /* FLIPON */ + Ins_FLIPON( exc ); + break; + + case 0x4E: /* FLIPOFF */ + Ins_FLIPOFF( exc ); + break; + + case 0x4F: /* DEBUG */ + Ins_DEBUG( exc ); + break; + + case 0x50: /* LT */ + Ins_LT( args ); + break; + + case 0x51: /* LTEQ */ + Ins_LTEQ( args ); + break; + + case 0x52: /* GT */ + Ins_GT( args ); + break; + + case 0x53: /* GTEQ */ + Ins_GTEQ( args ); + break; + + case 0x54: /* EQ */ + Ins_EQ( args ); + break; + + case 0x55: /* NEQ */ + Ins_NEQ( args ); + break; + + case 0x56: /* ODD */ + Ins_ODD( exc, args ); + break; + + case 0x57: /* EVEN */ + Ins_EVEN( exc, args ); + break; + + case 0x58: /* IF */ + Ins_IF( exc, args ); + break; + + case 0x59: /* EIF */ + Ins_EIF(); + break; + + case 0x5A: /* AND */ + Ins_AND( args ); + break; + + case 0x5B: /* OR */ + Ins_OR( args ); + break; + + case 0x5C: /* NOT */ + Ins_NOT( args ); + break; + + case 0x5D: /* DELTAP1 */ + Ins_DELTAP( exc, args ); + break; + + case 0x5E: /* SDB */ + Ins_SDB( exc, args ); + break; + + case 0x5F: /* SDS */ + Ins_SDS( exc, args ); + break; + + case 0x60: /* ADD */ + Ins_ADD( args ); + break; + + case 0x61: /* SUB */ + Ins_SUB( args ); + break; + + case 0x62: /* DIV */ + Ins_DIV( exc, args ); + break; + + case 0x63: /* MUL */ + Ins_MUL( args ); + break; + + case 0x64: /* ABS */ + Ins_ABS( args ); + break; + + case 0x65: /* NEG */ + Ins_NEG( args ); + break; + + case 0x66: /* FLOOR */ + Ins_FLOOR( args ); + break; + + case 0x67: /* CEILING */ + Ins_CEILING( args ); + break; + + case 0x68: /* ROUND */ + case 0x69: /* ROUND */ + case 0x6A: /* ROUND */ + case 0x6B: /* ROUND */ + Ins_ROUND( exc, args ); + break; + + case 0x6C: /* NROUND */ + case 0x6D: /* NROUND */ + case 0x6E: /* NRRUND */ + case 0x6F: /* NROUND */ + Ins_NROUND( exc, args ); + break; + + case 0x70: /* WCVTF */ + Ins_WCVTF( exc, args ); + break; + + case 0x71: /* DELTAP2 */ + case 0x72: /* DELTAP3 */ + Ins_DELTAP( exc, args ); + break; + + case 0x73: /* DELTAC0 */ + case 0x74: /* DELTAC1 */ + case 0x75: /* DELTAC2 */ + Ins_DELTAC( exc, args ); + break; + + case 0x76: /* SROUND */ + Ins_SROUND( exc, args ); + break; + + case 0x77: /* S45Round */ + Ins_S45ROUND( exc, args ); + break; + + case 0x78: /* JROT */ + Ins_JROT( exc, args ); + break; + + case 0x79: /* JROF */ + Ins_JROF( exc, args ); + break; + + case 0x7A: /* ROFF */ + Ins_ROFF( exc ); + break; + + case 0x7B: /* ???? */ + Ins_UNKNOWN( exc ); + break; + + case 0x7C: /* RUTG */ + Ins_RUTG( exc ); + break; + + case 0x7D: /* RDTG */ + Ins_RDTG( exc ); + break; + + case 0x7E: /* SANGW */ + Ins_SANGW(); + break; + + case 0x7F: /* AA */ + Ins_AA(); + break; + + case 0x80: /* FLIPPT */ + Ins_FLIPPT( exc ); + break; + + case 0x81: /* FLIPRGON */ + Ins_FLIPRGON( exc, args ); + break; + + case 0x82: /* FLIPRGOFF */ + Ins_FLIPRGOFF( exc, args ); + break; + + case 0x83: /* UNKNOWN */ + case 0x84: /* UNKNOWN */ + Ins_UNKNOWN( exc ); + break; + + case 0x85: /* SCANCTRL */ + Ins_SCANCTRL( exc, args ); + break; + + case 0x86: /* SDPvTL */ + case 0x87: /* SDPvTL */ + Ins_SDPVTL( exc, args ); + break; + + case 0x88: /* GETINFO */ + Ins_GETINFO( exc, args ); + break; + + case 0x89: /* IDEF */ + Ins_IDEF( exc, args ); + break; + + case 0x8A: /* ROLL */ + Ins_ROLL( args ); + break; + + case 0x8B: /* MAX */ + Ins_MAX( args ); + break; + + case 0x8C: /* MIN */ + Ins_MIN( args ); + break; + + case 0x8D: /* SCANTYPE */ + Ins_SCANTYPE( exc, args ); + break; + + case 0x8E: /* INSTCTRL */ + Ins_INSTCTRL( exc, args ); + break; + + case 0x8F: /* ADJUST */ + case 0x90: /* ADJUST */ + Ins_UNKNOWN( exc ); + break; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + case 0x91: + /* it is the job of the application to `activate' GX handling, */ + /* that is, calling any of the GX API functions on the current */ + /* font to select a variation instance */ + if ( exc->face->blend ) + Ins_GETVARIATION( exc, args ); + else + Ins_UNKNOWN( exc ); + break; + + case 0x92: + /* there is at least one MS font (LaoUI.ttf version 5.01) that */ + /* uses IDEFs for 0x91 and 0x92; for this reason we activate */ + /* GETDATA for GX fonts only, similar to GETVARIATION */ + if ( exc->face->blend ) + Ins_GETDATA( args ); + else + Ins_UNKNOWN( exc ); + break; +#endif + + default: + if ( opcode >= 0xE0 ) + Ins_MIRP( exc, args ); + else if ( opcode >= 0xC0 ) + Ins_MDRP( exc, args ); + else if ( opcode >= 0xB8 ) + Ins_PUSHW( exc, args ); + else if ( opcode >= 0xB0 ) + Ins_PUSHB( exc, args ); + else + Ins_UNKNOWN( exc ); + } + } + + if ( exc->error ) + { + switch ( exc->error ) + { + /* looking for redefined instructions */ + case FT_ERR( Invalid_Opcode ): + { + TT_DefRecord* def = exc->IDefs; + TT_DefRecord* limit = FT_OFFSET( def, exc->numIDefs ); + + + for ( ; def < limit; def++ ) + { + if ( def->active && exc->opcode == (FT_Byte)def->opc ) + { + TT_CallRec* callrec; + + + if ( exc->callTop >= exc->callSize ) + { + exc->error = FT_THROW( Invalid_Reference ); + goto LErrorLabel_; + } + + callrec = &exc->callStack[exc->callTop]; + + callrec->Caller_Range = exc->curRange; + callrec->Caller_IP = exc->IP + 1; + callrec->Cur_Count = 1; + callrec->Def = def; + + if ( Ins_Goto_CodeRange( exc, + def->range, + def->start ) == FAILURE ) + goto LErrorLabel_; + + goto LSuiteLabel_; + } + } + } + + exc->error = FT_THROW( Invalid_Opcode ); + goto LErrorLabel_; + +#if 0 + break; /* Unreachable code warning suppression. */ + /* Leave to remind in case a later change the editor */ + /* to consider break; */ +#endif + + default: + goto LErrorLabel_; + +#if 0 + break; +#endif + } + } + + exc->top = exc->new_top; + + if ( exc->step_ins ) + exc->IP += exc->length; + + /* increment instruction counter and check if we didn't */ + /* run this program for too long (e.g. infinite loops). */ + if ( ++ins_counter > TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES ) + { + exc->error = FT_THROW( Execution_Too_Long ); + goto LErrorLabel_; + } + + LSuiteLabel_: + if ( exc->IP >= exc->codeSize ) + { + if ( exc->callTop > 0 ) + { + exc->error = FT_THROW( Code_Overflow ); + goto LErrorLabel_; + } + else + goto LNo_Error_; + } + } while ( !exc->instruction_trap ); + + LNo_Error_: + FT_TRACE4(( " %ld instruction%s executed\n", + ins_counter, + ins_counter == 1 ? "" : "s" )); + + return FT_Err_Ok; + + LErrorCodeOverflow_: + exc->error = FT_THROW( Code_Overflow ); + + LErrorLabel_: + if ( exc->error && !exc->instruction_trap ) + FT_TRACE1(( " The interpreter returned error 0x%x\n", exc->error )); + + return exc->error; + } + +#else /* !TT_USE_BYTECODE_INTERPRETER */ + + /* ANSI C doesn't like empty source files */ + typedef int tt_interp_dummy_; + +#endif /* !TT_USE_BYTECODE_INTERPRETER */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttinterp.h b/non-source/foreign/freetype2/src/truetype/ttinterp.h new file mode 100644 index 000000000..4f1a9bbc6 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttinterp.h @@ -0,0 +1,465 @@ +/**************************************************************************** + * + * ttinterp.h + * + * TrueType bytecode interpreter (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTINTERP_H_ +#define TTINTERP_H_ + +#include "ttobjs.h" + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * Rounding mode constants. + */ +#define TT_Round_Off 5 +#define TT_Round_To_Half_Grid 0 +#define TT_Round_To_Grid 1 +#define TT_Round_To_Double_Grid 2 +#define TT_Round_Up_To_Grid 4 +#define TT_Round_Down_To_Grid 3 +#define TT_Round_Super 6 +#define TT_Round_Super_45 7 + + + /************************************************************************** + * + * Function types used by the interpreter, depending on various modes + * (e.g. the rounding mode, whether to render a vertical or horizontal + * line etc). + * + */ + + /* Rounding function */ + typedef FT_F26Dot6 + (*TT_Round_Func)( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_Int color ); + + /* Point displacement along the freedom vector routine */ + typedef void + (*TT_Move_Func)( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ); + + /* Distance projection along one of the projection vectors */ + typedef FT_F26Dot6 + (*TT_Project_Func)( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ); + + /* getting current ppem. Take care of non-square pixels if necessary */ + typedef FT_Long + (*TT_Cur_Ppem_Func)( TT_ExecContext exc ); + + /* reading a cvt value. Take care of non-square pixels if necessary */ + typedef FT_F26Dot6 + (*TT_Get_CVT_Func)( TT_ExecContext exc, + FT_ULong idx ); + + /* setting or moving a cvt value. Take care of non-square pixels */ + /* if necessary */ + typedef void + (*TT_Set_CVT_Func)( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ); + + + /************************************************************************** + * + * This structure defines a call record, used to manage function calls. + */ + typedef struct TT_CallRec_ + { + FT_Int Caller_Range; + FT_Long Caller_IP; + FT_Long Cur_Count; + + TT_DefRecord *Def; /* either FDEF or IDEF */ + + } TT_CallRec, *TT_CallStack; + + + /************************************************************************** + * + * The main structure for the interpreter which collects all necessary + * variables and states. + * + * Members that are initialized by `TT_Load_Context` are marked with '!'. + * Members that are initialized by `TT_Run_Context` are marked with '@'. + */ + typedef struct TT_ExecContextRec_ + { + TT_Face face; /* ! */ + TT_Size size; /* ! */ + FT_Memory memory; + + /* instructions state */ + + FT_Error error; /* last execution error */ + + FT_Long top; /* @ top of exec. stack */ + + FT_Long stackSize; /* ! size of exec. stack */ + FT_Long* stack; /* ! current exec. stack */ + + FT_Long args; + FT_Long new_top; /* new top after exec. */ + + TT_GlyphZoneRec zp0, /* @! zone records */ + zp1, /* @! */ + zp2, /* @! */ + pts, /* ! */ + twilight; /* ! */ + + FT_Long pointSize; /* ! in 26.6 format */ + FT_Size_Metrics metrics; /* ! */ + TT_Size_Metrics tt_metrics; /* ! size metrics */ + + TT_GraphicsState GS; /* !@ current graphics state */ + + FT_Int iniRange; /* initial code range number */ + FT_Int curRange; /* current code range number */ + FT_Byte* code; /* current code range */ + FT_Long IP; /* current instruction pointer */ + FT_Long codeSize; /* size of current range */ + + FT_Byte opcode; /* current opcode */ + FT_Int length; /* length of current opcode */ + + FT_Bool step_ins; /* true if the interpreter must */ + /* increment IP after ins. exec */ + FT_ULong cvtSize; /* ! */ + FT_Long* cvt; /* ! */ + FT_ULong glyfCvtSize; + FT_Long* glyfCvt; /* cvt working copy for glyph */ + + FT_UInt glyphSize; /* ! glyph instructions buffer size */ + FT_Byte* glyphIns; /* ! glyph instructions buffer */ + + FT_UInt numFDefs; /* ! number of function defs */ + FT_UInt maxFDefs; /* ! maximum number of function defs */ + TT_DefArray FDefs; /* table of FDefs entries */ + + FT_UInt numIDefs; /* ! number of instruction defs */ + FT_UInt maxIDefs; /* ! maximum number of ins defs */ + TT_DefArray IDefs; /* table of IDefs entries */ + + FT_UInt maxFunc; /* ! maximum function index */ + FT_UInt maxIns; /* ! maximum instruction index */ + + FT_Int callTop, /* @ top of call stack during execution */ + callSize; /* size of call stack */ + TT_CallStack callStack; /* call stack */ + + FT_UShort maxPoints; /* capacity of this context's `pts' */ + FT_Short maxContours; /* record, expressed in points and */ + /* contours. */ + + TT_CodeRangeTable codeRangeTable; /* ! table of valid code ranges */ + /* useful for the debugger */ + + FT_UShort storeSize; /* ! size of current storage */ + FT_Long* storage; /* ! storage area */ + FT_UShort glyfStoreSize; + FT_Long* glyfStorage; /* storage working copy for glyph */ + + FT_F26Dot6 period; /* values used for the */ + FT_F26Dot6 phase; /* `SuperRounding' */ + FT_F26Dot6 threshold; + + FT_Bool instruction_trap; /* ! If `True', the interpreter */ + /* exits after each instruction */ + + TT_GraphicsState default_GS; /* graphics state resulting from */ + /* the prep program */ + FT_Bool is_composite; /* true if the glyph is composite */ + FT_Bool pedantic_hinting; /* true if pedantic interpretation */ + + /* latest interpreter additions */ + + FT_Long F_dot_P; /* dot product of freedom and projection */ + /* vectors */ + TT_Round_Func func_round; /* current rounding function */ + + TT_Project_Func func_project, /* current projection function */ + func_dualproj, /* current dual proj. function */ + func_freeProj; /* current freedom proj. func */ + + TT_Move_Func func_move; /* current point move function */ + TT_Move_Func func_move_orig; /* move original position function */ + + TT_Cur_Ppem_Func func_cur_ppem; /* get current proj. ppem value */ + + TT_Get_CVT_Func func_read_cvt; /* read a cvt entry */ + TT_Set_CVT_Func func_write_cvt; /* write a cvt entry (in pixels) */ + TT_Set_CVT_Func func_move_cvt; /* incr a cvt entry (in pixels) */ + + FT_Bool grayscale; /* bi-level hinting and */ + /* grayscale rendering */ + +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + /* + * FreeType supports ClearType-like hinting of TrueType fonts through + * the version 40 interpreter. This is achieved through several hacks + * in the base (v35) interpreter, as detailed below. + * + * ClearType is an umbrella term for several rendering techniques + * employed by Microsoft's various GUI and rendering toolkit + * implementations, most importantly: subpixel rendering for using the + * RGB subpixels of LCDs to approximately triple the perceived + * resolution on the x-axis and subpixel hinting for positioning stems + * on subpixel borders. TrueType programming is explicit, i.e., fonts + * must be programmed to take advantage of ClearType's possibilities. + * + * When ClearType was introduced, it seemed unlikely that all fonts + * would be reprogrammed, so Microsoft decided to implement a backward + * compatibility mode. It employs several simple to complicated + * assumptions and tricks, many of them font-dependent, that modify the + * interpretation of the bytecode contained in these fonts to retrofit + * them into a ClearType-y look. The quality of the results varies. + * Most (web)fonts that were released since then have come to rely on + * these hacks to render correctly, even some of Microsoft's flagship + * fonts (e.g., Calibri, Cambria, Segoe UI). + * + * FreeType's minimal subpixel hinting code (interpreter version 40) + * employs a small list of font-agnostic hacks loosely based on the + * public information available on Microsoft's compatibility mode[2]. + * The focus is on modern (web)fonts rather than legacy fonts that were + * made for monochrome rendering. It will not match ClearType rendering + * exactly. Unlike the `Infinality' code (interpreter version 38) that + * came before, it will not try to toggle hacks for specific fonts for + * performance and complexity reasons. It will fall back to version 35 + * behavior for tricky fonts[1] or when monochrome rendering is + * requested. + * + * Major hacks + * + * - Any point movement on the x axis is ignored (cf. `Direct_Move' and + * `Direct_Move_X'). This has the smallest code footprint and single + * biggest effect. The ClearType way to increase resolution is + * supersampling the x axis, the FreeType way is ignoring instructions + * on the x axis, which gives the same result in the majority of + * cases. + * + * - Points are not moved post-IUP (neither on the x nor on the y axis), + * except the x component of diagonal moves post-IUP (cf. + * `Direct_Move', `Direct_Move_Y', `Move_Zp2_Point'). Post-IUP + * changes are commonly used to `fix' pixel patterns which has little + * use outside monochrome rendering. + * + * - SHPIX and DELTAP don't execute unless moving a composite on the + * y axis or moving a previously y touched point. SHPIX additionally + * denies movement on the x axis (cf. `Ins_SHPIX' and `Ins_DELTAP'). + * Both instructions are commonly used to `fix' pixel patterns for + * monochrome or Windows's GDI rendering but make little sense for + * FreeType rendering. Both can distort the outline. See [2] for + * details. + * + * - The hdmx table and modifications to phantom points are ignored. + * Bearings and advance widths remain unchanged (except rounding them + * outside the interpreter!), cf. `compute_glyph_metrics' and + * `TT_Hint_Glyph'. Letting non-native-ClearType fonts modify spacing + * might mess up spacing. + * + * Minor hacks + * + * - FLIPRGON, FLIPRGOFF, and FLIPPT don't execute post-IUP. This + * prevents dents in e.g. Arial-Regular's `D' and `G' glyphs at + * various sizes. + * + * (Post-IUP is the state after both IUP[x] and IUP[y] have been + * executed.) + * + * The best results are achieved for fonts that were from the outset + * designed with ClearType in mind, meaning they leave the x axis mostly + * alone and don't mess with the `final' outline to produce more + * pleasing pixel patterns. The harder the designer tried to produce + * very specific patterns (`superhinting') for pre-ClearType-displays, + * the worse the results. + * + * Microsoft defines a way to turn off backward compatibility and + * interpret instructions as before (called `native ClearType')[2][3]. + * The font designer then regains full control and is responsible for + * making the font work correctly with ClearType without any + * hand-holding by the interpreter or rasterizer[4]. The v40 + * interpreter assumes backward compatibility by default, which can be + * turned off the same way by executing the following in the control + * program (cf. `Ins_INSTCTRL'). + * + * #PUSH 4,3 + * INSTCTRL[] + * + * [1] Tricky fonts as FreeType defines them rely on the bytecode + * interpreter to display correctly. Hacks can interfere with them, + * so they get treated like native ClearType fonts (v40 with + * backward compatibility turned off). Cf. `TT_RunIns'. + * + * [2] Proposed by Microsoft's Greg Hitchcock in + * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx + * + * [3] Beat Stamm describes it in more detail: + * http://rastertragedy.com/RTRCh4.htm#Sec12. + * + * [4] The list of `native ClearType' fonts is small at the time of this + * writing; I found the following on a Windows 10 Update 1511 + * installation: Constantia, Corbel, Sitka, Malgun Gothic, Microsoft + * JhengHei (Bold and UI Bold), Microsoft YaHei (Bold and UI Bold), + * SimSun, NSimSun, and Yu Gothic. + * + */ + + /* Using v40 implies subpixel hinting, unless FT_RENDER_MODE_MONO has been + * requested. Used to detect interpreter */ + /* version switches. `_lean' to differentiate from the Infinality */ + /* `subpixel_hinting', which is managed differently. */ + FT_Bool subpixel_hinting_lean; + + /* Long side of a LCD subpixel is vertical (e.g., screen is rotated). */ + /* `_lean' to differentiate from the Infinality `vertical_lcd', which */ + /* is managed differently. */ + FT_Bool vertical_lcd_lean; + + /* Default to backward compatibility mode in v40 interpreter. If */ + /* this is false, it implies the interpreter is in v35 or in native */ + /* ClearType mode. */ + FT_Bool backward_compatibility; + + /* Useful for detecting and denying post-IUP trickery that is usually */ + /* used to fix pixel patterns (`superhinting'). */ + FT_Bool iupx_called; + FT_Bool iupy_called; + + /* ClearType hinting and grayscale rendering, as used by Universal */ + /* Windows Platform apps (Windows 8 and above). Like the standard */ + /* colorful ClearType mode, it utilizes a vastly increased virtual */ + /* resolution on the x axis. Different from bi-level hinting and */ + /* grayscale rendering, the old mode from Win9x days that roughly */ + /* adheres to the physical pixel grid on both axes. */ + FT_Bool grayscale_cleartype; +#endif /* TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL */ + + /* We maintain two counters (in addition to the instruction counter) */ + /* that act as loop detectors for LOOPCALL and jump opcodes with */ + /* negative arguments. */ + FT_ULong loopcall_counter; + FT_ULong loopcall_counter_max; + FT_ULong neg_jump_counter; + FT_ULong neg_jump_counter_max; + + } TT_ExecContextRec; + + + extern const TT_GraphicsState tt_default_graphics_state; + + +#ifdef TT_USE_BYTECODE_INTERPRETER + FT_LOCAL( void ) + TT_Goto_CodeRange( TT_ExecContext exec, + FT_Int range, + FT_Long IP ); + + FT_LOCAL( void ) + TT_Set_CodeRange( TT_ExecContext exec, + FT_Int range, + void* base, + FT_Long length ); + + FT_LOCAL( void ) + TT_Clear_CodeRange( TT_ExecContext exec, + FT_Int range ); +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + + /************************************************************************** + * + * @Function: + * TT_New_Context + * + * @Description: + * Create a `TT_ExecContext`. Note that there is now an execution + * context per `TT_Size` that is not shared among faces. + * + * @Input: + * driver :: + * A handle to the driver, used for memory allocation. + * + * @Return: + * A handle to a new empty execution context. + * + * @Note: + * Only the glyph loader and debugger should call this function. + * (And right now only the glyph loader uses it.) + */ + FT_EXPORT( TT_ExecContext ) + TT_New_Context( TT_Driver driver ); + + +#ifdef TT_USE_BYTECODE_INTERPRETER + FT_LOCAL( void ) + TT_Done_Context( TT_ExecContext exec ); + + FT_LOCAL( FT_Error ) + TT_Load_Context( TT_ExecContext exec, + TT_Face face, + TT_Size size ); + + FT_LOCAL( void ) + TT_Save_Context( TT_ExecContext exec, + TT_Size ins ); + + FT_LOCAL( FT_Error ) + TT_Run_Context( TT_ExecContext exec ); +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + + /************************************************************************** + * + * @Function: + * TT_RunIns + * + * @Description: + * Executes one or more instruction in the execution context. This + * is the main function of the TrueType opcode interpreter. + * + * @Input: + * exec :: + * A handle to the target execution context. + * + * @Return: + * FreeType error code. 0 means success. + * + * @Note: + * Only the object manager and debugger should call this function. + * + * This function is publicly exported because it is directly + * invoked by the TrueType debugger. + */ + FT_EXPORT( FT_Error ) + TT_RunIns( void* exec ); + + +FT_END_HEADER + +#endif /* TTINTERP_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttobjs.c b/non-source/foreign/freetype2/src/truetype/ttobjs.c new file mode 100644 index 000000000..d0ac31812 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttobjs.c @@ -0,0 +1,1543 @@ +/**************************************************************************** + * + * ttobjs.c + * + * Objects manager (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> +#include <freetype/internal/sfnt.h> +#include <freetype/ftdriver.h> + +#include "ttgload.h" +#include "ttpload.h" + +#include "tterrors.h" + +#ifdef TT_USE_BYTECODE_INTERPRETER +#include "ttinterp.h" +#endif + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include "ttgxvar.h" +#endif + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttobjs + + +#ifdef TT_USE_BYTECODE_INTERPRETER + + /************************************************************************** + * + * GLYPH ZONE FUNCTIONS + * + */ + + + /************************************************************************** + * + * @Function: + * tt_glyphzone_done + * + * @Description: + * Deallocate a glyph zone. + * + * @Input: + * zone :: + * A pointer to the target glyph zone. + */ + FT_LOCAL_DEF( void ) + tt_glyphzone_done( TT_GlyphZone zone ) + { + FT_Memory memory = zone->memory; + + + if ( memory ) + { + FT_FREE( zone->contours ); + FT_FREE( zone->tags ); + FT_FREE( zone->cur ); + FT_FREE( zone->org ); + FT_FREE( zone->orus ); + + zone->max_points = zone->n_points = 0; + zone->max_contours = zone->n_contours = 0; + zone->memory = NULL; + } + } + + + /************************************************************************** + * + * @Function: + * tt_glyphzone_new + * + * @Description: + * Allocate a new glyph zone. + * + * @Input: + * memory :: + * A handle to the current memory object. + * + * maxPoints :: + * The capacity of glyph zone in points. + * + * maxContours :: + * The capacity of glyph zone in contours. + * + * @Output: + * zone :: + * A pointer to the target glyph zone record. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_glyphzone_new( FT_Memory memory, + FT_UShort maxPoints, + FT_UShort maxContours, + TT_GlyphZone zone ) + { + FT_Error error; + + + FT_ZERO( zone ); + zone->memory = memory; + + if ( FT_NEW_ARRAY( zone->org, maxPoints ) || + FT_NEW_ARRAY( zone->cur, maxPoints ) || + FT_NEW_ARRAY( zone->orus, maxPoints ) || + FT_NEW_ARRAY( zone->tags, maxPoints ) || + FT_NEW_ARRAY( zone->contours, maxContours ) ) + { + tt_glyphzone_done( zone ); + } + else + { + zone->max_points = maxPoints; + zone->max_contours = maxContours; + } + + return error; + } + + + /* + * Fonts embedded in PDFs are made unique by prepending randomization + * prefixes to their names: as defined in Section 5.5.3, 'Font Subsets', + * of the PDF Reference, they consist of 6 uppercase letters followed by + * the `+` sign. For safety, we do not skip prefixes violating this rule. + */ + + static const FT_String* + tt_skip_pdffont_random_tag( const FT_String* name ) + { + if ( ft_isupper( name[0] ) && + ft_isupper( name[1] ) && + ft_isupper( name[2] ) && + ft_isupper( name[3] ) && + ft_isupper( name[4] ) && + ft_isupper( name[5] ) && + '+' == name[6] && + name[7] ) + { + FT_TRACE7(( "name without randomization tag: %s\n", name + 7 )); + return name + 7; + } + + return name; + } + + + /* Compare the face with a list of well-known `tricky' fonts. */ + /* This list shall be expanded as we find more of them. */ + + static FT_Bool + tt_check_trickyness_family( const FT_String* name ) + { + +#define TRICK_NAMES_MAX_CHARACTERS 19 +#define TRICK_NAMES_COUNT 20 + + static const char trick_names[TRICK_NAMES_COUNT] + [TRICK_NAMES_MAX_CHARACTERS + 1] = + { + /* + PostScript names are given in brackets if they differ from the + family name. The version numbers, together with the copyright or + release year data, are taken from fonts available to the + developers. + + Note that later versions of the fonts might be no longer tricky; + for example, `MingLiU' version 7.00 (file `mingliu.ttc' from + Windows 7) is an ordinary TTC with non-tricky subfonts. + */ + + "cpop", /* dftt-p7.ttf; version 1.00, 1992 [DLJGyShoMedium] */ + "DFGirl-W6-WIN-BF", /* dftt-h6.ttf; version 1.00, 1993 */ + "DFGothic-EB", /* DynaLab Inc. 1992-1995 */ + "DFGyoSho-Lt", /* DynaLab Inc. 1992-1995 */ + "DFHei", /* DynaLab Inc. 1992-1995 [DFHei-Bd-WIN-HK-BF] */ + /* covers "DFHei-Md-HK-BF", maybe DynaLab Inc. */ + + "DFHSGothic-W5", /* DynaLab Inc. 1992-1995 */ + "DFHSMincho-W3", /* DynaLab Inc. 1992-1995 */ + "DFHSMincho-W7", /* DynaLab Inc. 1992-1995 */ + "DFKaiSho-SB", /* dfkaisb.ttf */ + "DFKaiShu", /* covers "DFKaiShu-Md-HK-BF", maybe DynaLab Inc. */ + "DFKai-SB", /* kaiu.ttf; version 3.00, 1998 [DFKaiShu-SB-Estd-BF] */ + + "DFMing", /* DynaLab Inc. 1992-1995 [DFMing-Md-WIN-HK-BF] */ + /* covers "DFMing-Bd-HK-BF", maybe DynaLab Inc. */ + + "DLC", /* dftt-m7.ttf; version 1.00, 1993 [DLCMingBold] */ + /* dftt-f5.ttf; version 1.00, 1993 [DLCFongSung] */ + /* covers following */ + /* "DLCHayMedium", dftt-b5.ttf; version 1.00, 1993 */ + /* "DLCHayBold", dftt-b7.ttf; version 1.00, 1993 */ + /* "DLCKaiMedium", dftt-k5.ttf; version 1.00, 1992 */ + /* "DLCLiShu", dftt-l5.ttf; version 1.00, 1992 */ + /* "DLCRoundBold", dftt-r7.ttf; version 1.00, 1993 */ + + "HuaTianKaiTi?", /* htkt2.ttf */ + "HuaTianSongTi?", /* htst3.ttf */ + "Ming(for ISO10646)", /* hkscsiic.ttf; version 0.12, 2007 [Ming] */ + /* iicore.ttf; version 0.07, 2007 [Ming] */ + "MingLiU", /* mingliu.ttf */ + /* mingliu.ttc; version 3.21, 2001 */ + "MingMedium", /* dftt-m5.ttf; version 1.00, 1993 [DLCMingMedium] */ + "PMingLiU", /* mingliu.ttc; version 3.21, 2001 */ + "MingLi43", /* mingli.ttf; version 1.00, 1992 */ + }; + + int nn; + const FT_String* name_without_tag; + + + name_without_tag = tt_skip_pdffont_random_tag( name ); + for ( nn = 0; nn < TRICK_NAMES_COUNT; nn++ ) + if ( ft_strstr( name_without_tag, trick_names[nn] ) ) + return TRUE; + + return FALSE; + } + + + /* XXX: This function should be in the `sfnt' module. */ + + /* Some PDF generators clear the checksums in the TrueType header table. */ + /* For example, Quartz ContextPDF clears all entries, or Bullzip PDF */ + /* Printer clears the entries for subsetted subtables. We thus have to */ + /* recalculate the checksums where necessary. */ + + static FT_UInt32 + tt_synth_sfnt_checksum( FT_Stream stream, + FT_ULong length ) + { + FT_Error error; + FT_UInt32 checksum = 0; + FT_Byte* p; + FT_Int shift; + + + if ( FT_FRAME_ENTER( length ) ) + return 0; + + p = (FT_Byte*)stream->cursor; + + for ( ; length > 3; length -= 4 ) + checksum += FT_NEXT_ULONG( p ); + + for ( shift = 24; length > 0; length--, shift -=8 ) + checksum += (FT_UInt32)FT_NEXT_BYTE( p ) << shift; + + FT_FRAME_EXIT(); + + return checksum; + } + + + /* XXX: This function should be in the `sfnt' module. */ + + static FT_ULong + tt_get_sfnt_checksum( TT_Face face, + FT_UShort i ) + { +#if 0 /* if we believe the written value, use following part. */ + if ( face->dir_tables[i].CheckSum ) + return face->dir_tables[i].CheckSum; +#endif + + if ( !face->goto_table ) + return 0; + + if ( face->goto_table( face, + face->dir_tables[i].Tag, + face->root.stream, + NULL ) ) + return 0; + + return (FT_ULong)tt_synth_sfnt_checksum( face->root.stream, + face->dir_tables[i].Length ); + } + + + typedef struct tt_sfnt_id_rec_ + { + FT_ULong CheckSum; + FT_ULong Length; + + } tt_sfnt_id_rec; + + + static FT_Bool + tt_check_trickyness_sfnt_ids( TT_Face face ) + { +#define TRICK_SFNT_IDS_PER_FACE 3 +#define TRICK_SFNT_IDS_NUM_FACES 31 + + static const tt_sfnt_id_rec sfnt_id[TRICK_SFNT_IDS_NUM_FACES] + [TRICK_SFNT_IDS_PER_FACE] = + { + +#define TRICK_SFNT_ID_cvt 0 +#define TRICK_SFNT_ID_fpgm 1 +#define TRICK_SFNT_ID_prep 2 + + { /* MingLiU 1995 */ + { 0x05BCF058UL, 0x000002E4UL }, /* cvt */ + { 0x28233BF1UL, 0x000087C4UL }, /* fpgm */ + { 0xA344A1EAUL, 0x000001E1UL } /* prep */ + }, + { /* MingLiU 1996- */ + { 0x05BCF058UL, 0x000002E4UL }, /* cvt */ + { 0x28233BF1UL, 0x000087C4UL }, /* fpgm */ + { 0xA344A1EBUL, 0x000001E1UL } /* prep */ + }, + { /* DFGothic-EB */ + { 0x12C3EBB2UL, 0x00000350UL }, /* cvt */ + { 0xB680EE64UL, 0x000087A7UL }, /* fpgm */ + { 0xCE939563UL, 0x00000758UL } /* prep */ + }, + { /* DFGyoSho-Lt */ + { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */ + { 0xCE5956E9UL, 0x0000BC85UL }, /* fpgm */ + { 0x8272F416UL, 0x00000045UL } /* prep */ + }, + { /* DFHei-Md-HK-BF */ + { 0x1257EB46UL, 0x00000350UL }, /* cvt */ + { 0xF699D160UL, 0x0000715FUL }, /* fpgm */ + { 0xD222F568UL, 0x000003BCUL } /* prep */ + }, + { /* DFHSGothic-W5 */ + { 0x1262EB4EUL, 0x00000350UL }, /* cvt */ + { 0xE86A5D64UL, 0x00007940UL }, /* fpgm */ + { 0x7850F729UL, 0x000005FFUL } /* prep */ + }, + { /* DFHSMincho-W3 */ + { 0x122DEB0AUL, 0x00000350UL }, /* cvt */ + { 0x3D16328AUL, 0x0000859BUL }, /* fpgm */ + { 0xA93FC33BUL, 0x000002CBUL } /* prep */ + }, + { /* DFHSMincho-W7 */ + { 0x125FEB26UL, 0x00000350UL }, /* cvt */ + { 0xA5ACC982UL, 0x00007EE1UL }, /* fpgm */ + { 0x90999196UL, 0x0000041FUL } /* prep */ + }, + { /* DFKaiShu */ + { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */ + { 0x5A30CA3BUL, 0x00009063UL }, /* fpgm */ + { 0x13A42602UL, 0x0000007EUL } /* prep */ + }, + { /* DFKaiShu, variant */ + { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */ + { 0xA6E78C01UL, 0x00008998UL }, /* fpgm */ + { 0x13A42602UL, 0x0000007EUL } /* prep */ + }, + { /* DFKaiShu-Md-HK-BF */ + { 0x11E5EAD4UL, 0x00000360UL }, /* cvt */ + { 0x9DB282B2UL, 0x0000C06EUL }, /* fpgm */ + { 0x53E6D7CAUL, 0x00000082UL } /* prep */ + }, + { /* DFMing-Bd-HK-BF */ + { 0x1243EB18UL, 0x00000350UL }, /* cvt */ + { 0xBA0A8C30UL, 0x000074ADUL }, /* fpgm */ + { 0xF3D83409UL, 0x0000037BUL } /* prep */ + }, + { /* DLCLiShu */ + { 0x07DCF546UL, 0x00000308UL }, /* cvt */ + { 0x40FE7C90UL, 0x00008E2AUL }, /* fpgm */ + { 0x608174B5UL, 0x0000007AUL } /* prep */ + }, + { /* DLCHayBold */ + { 0xEB891238UL, 0x00000308UL }, /* cvt */ + { 0xD2E4DCD4UL, 0x0000676FUL }, /* fpgm */ + { 0x8EA5F293UL, 0x000003B8UL } /* prep */ + }, + { /* HuaTianKaiTi */ + { 0xFFFBFFFCUL, 0x00000008UL }, /* cvt */ + { 0x9C9E48B8UL, 0x0000BEA2UL }, /* fpgm */ + { 0x70020112UL, 0x00000008UL } /* prep */ + }, + { /* HuaTianSongTi */ + { 0xFFFBFFFCUL, 0x00000008UL }, /* cvt */ + { 0x0A5A0483UL, 0x00017C39UL }, /* fpgm */ + { 0x70020112UL, 0x00000008UL } /* prep */ + }, + { /* NEC fadpop7.ttf */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x40C92555UL, 0x000000E5UL }, /* fpgm */ + { 0xA39B58E3UL, 0x0000117CUL } /* prep */ + }, + { /* NEC fadrei5.ttf */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x33C41652UL, 0x000000E5UL }, /* fpgm */ + { 0x26D6C52AUL, 0x00000F6AUL } /* prep */ + }, + { /* NEC fangot7.ttf */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x6DB1651DUL, 0x0000019DUL }, /* fpgm */ + { 0x6C6E4B03UL, 0x00002492UL } /* prep */ + }, + { /* NEC fangyo5.ttf */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x40C92555UL, 0x000000E5UL }, /* fpgm */ + { 0xDE51FAD0UL, 0x0000117CUL } /* prep */ + }, + { /* NEC fankyo5.ttf */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x85E47664UL, 0x000000E5UL }, /* fpgm */ + { 0xA6C62831UL, 0x00001CAAUL } /* prep */ + }, + { /* NEC fanrgo5.ttf */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x2D891CFDUL, 0x0000019DUL }, /* fpgm */ + { 0xA0604633UL, 0x00001DE8UL } /* prep */ + }, + { /* NEC fangot5.ttc */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x40AA774CUL, 0x000001CBUL }, /* fpgm */ + { 0x9B5CAA96UL, 0x00001F9AUL } /* prep */ + }, + { /* NEC fanmin3.ttc */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x0D3DE9CBUL, 0x00000141UL }, /* fpgm */ + { 0xD4127766UL, 0x00002280UL } /* prep */ + }, + { /* NEC FA-Gothic, 1996 */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x4A692698UL, 0x000001F0UL }, /* fpgm */ + { 0x340D4346UL, 0x00001FCAUL } /* prep */ + }, + { /* NEC FA-Minchou, 1996 */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0xCD34C604UL, 0x00000166UL }, /* fpgm */ + { 0x6CF31046UL, 0x000022B0UL } /* prep */ + }, + { /* NEC FA-RoundGothicB, 1996 */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0x5DA75315UL, 0x0000019DUL }, /* fpgm */ + { 0x40745A5FUL, 0x000022E0UL } /* prep */ + }, + { /* NEC FA-RoundGothicM, 1996 */ + { 0x00000000UL, 0x00000000UL }, /* cvt */ + { 0xF055FC48UL, 0x000001C2UL }, /* fpgm */ + { 0x3900DED3UL, 0x00001E18UL } /* prep */ + }, + { /* MINGLI.TTF, 1992 */ + { 0x00170003UL, 0x00000060UL }, /* cvt */ + { 0xDBB4306EUL, 0x000058AAUL }, /* fpgm */ + { 0xD643482AUL, 0x00000035UL } /* prep */ + }, + { /* DFHei-Bd-WIN-HK-BF, issue #1087 */ + { 0x1269EB58UL, 0x00000350UL }, /* cvt */ + { 0x5CD5957AUL, 0x00006A4EUL }, /* fpgm */ + { 0xF758323AUL, 0x00000380UL } /* prep */ + }, + { /* DFMing-Md-WIN-HK-BF, issue #1087 */ + { 0x122FEB0BUL, 0x00000350UL }, /* cvt */ + { 0x7F10919AUL, 0x000070A9UL }, /* fpgm */ + { 0x7CD7E7B7UL, 0x0000025CUL } /* prep */ + } + }; + + FT_ULong checksum; + int num_matched_ids[TRICK_SFNT_IDS_NUM_FACES]; + FT_Bool has_cvt, has_fpgm, has_prep; + FT_UShort i; + int j, k; + + + FT_MEM_SET( num_matched_ids, 0, + sizeof ( int ) * TRICK_SFNT_IDS_NUM_FACES ); + has_cvt = FALSE; + has_fpgm = FALSE; + has_prep = FALSE; + + for ( i = 0; i < face->num_tables; i++ ) + { + checksum = 0; + + switch( face->dir_tables[i].Tag ) + { + case TTAG_cvt: + k = TRICK_SFNT_ID_cvt; + has_cvt = TRUE; + break; + + case TTAG_fpgm: + k = TRICK_SFNT_ID_fpgm; + has_fpgm = TRUE; + break; + + case TTAG_prep: + k = TRICK_SFNT_ID_prep; + has_prep = TRUE; + break; + + default: + continue; + } + + for ( j = 0; j < TRICK_SFNT_IDS_NUM_FACES; j++ ) + if ( face->dir_tables[i].Length == sfnt_id[j][k].Length ) + { + if ( !checksum ) + checksum = tt_get_sfnt_checksum( face, i ); + + if ( sfnt_id[j][k].CheckSum == checksum ) + num_matched_ids[j]++; + + if ( num_matched_ids[j] == TRICK_SFNT_IDS_PER_FACE ) + return TRUE; + } + } + + for ( j = 0; j < TRICK_SFNT_IDS_NUM_FACES; j++ ) + { + if ( !has_cvt && !sfnt_id[j][TRICK_SFNT_ID_cvt].Length ) + num_matched_ids[j]++; + if ( !has_fpgm && !sfnt_id[j][TRICK_SFNT_ID_fpgm].Length ) + num_matched_ids[j]++; + if ( !has_prep && !sfnt_id[j][TRICK_SFNT_ID_prep].Length ) + num_matched_ids[j]++; + if ( num_matched_ids[j] == TRICK_SFNT_IDS_PER_FACE ) + return TRUE; + } + + return FALSE; + } + + + static FT_Bool + tt_check_trickyness( FT_Face face ) + { + if ( !face ) + return FALSE; + + /* For first, check the face name for quick check. */ + if ( face->family_name && + tt_check_trickyness_family( face->family_name ) ) + { + FT_TRACE3(( "found as a tricky font" + " by its family name: %s\n", face->family_name )); + return TRUE; + } + + /* Type42 fonts may lack `name' tables, we thus try to identify */ + /* tricky fonts by checking the checksums of Type42-persistent */ + /* sfnt tables (`cvt', `fpgm', and `prep'). */ + if ( tt_check_trickyness_sfnt_ids( (TT_Face)face ) ) + { + FT_TRACE3(( "found as a tricky font" + " by its cvt/fpgm/prep table checksum\n" )); + return TRUE; + } + + return FALSE; + } + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + + /* Check whether `.notdef' is the only glyph in the `loca' table. */ + static FT_Bool + tt_check_single_notdef( FT_Face ttface ) + { + FT_Bool result = FALSE; + + TT_Face face = (TT_Face)ttface; + FT_ULong asize; + FT_ULong i; + FT_ULong glyph_index = 0; + FT_UInt count = 0; + + + for( i = 0; i < face->num_locations; i++ ) + { + tt_face_get_location( ttface, i, &asize ); + if ( asize > 0 ) + { + count += 1; + if ( count > 1 ) + break; + glyph_index = i; + } + } + + /* Only have a single outline. */ + if ( count == 1 ) + { + if ( glyph_index == 0 ) + result = TRUE; + else + { + /* FIXME: Need to test glyphname == .notdef ? */ + FT_Error error; + char buf[8]; + + + error = FT_Get_Glyph_Name( ttface, glyph_index, buf, 8 ); + if ( !error && + buf[0] == '.' && !ft_strncmp( buf, ".notdef", 8 ) ) + result = TRUE; + } + } + + return result; + } + + + /************************************************************************** + * + * @Function: + * tt_face_init + * + * @Description: + * Initialize a given TrueType face object. + * + * @Input: + * stream :: + * The source font stream. + * + * face_index :: + * The index of the TrueType font, if we are opening a + * collection, in bits 0-15. The numbered instance + * index~+~1 of a GX (sub)font, if applicable, in bits + * 16-30. + * + * num_params :: + * Number of additional generic parameters. Ignored. + * + * params :: + * Additional generic parameters. Ignored. + * + * @InOut: + * face :: + * The newly built face object. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_init( FT_Stream stream, + FT_Face ttface, /* TT_Face */ + FT_Int face_index, + FT_Int num_params, + FT_Parameter* params ) + { + FT_Error error; + FT_Library library; + SFNT_Service sfnt; + TT_Face face = (TT_Face)ttface; + + + FT_TRACE2(( "TTF driver\n" )); + + library = ttface->driver->root.library; + + sfnt = (SFNT_Service)FT_Get_Module_Interface( library, "sfnt" ); + if ( !sfnt ) + { + FT_ERROR(( "tt_face_init: cannot access `sfnt' module\n" )); + error = FT_THROW( Missing_Module ); + goto Exit; + } + + /* create input stream from resource */ + if ( FT_STREAM_SEEK( 0 ) ) + goto Exit; + + /* check that we have a valid TrueType file */ + FT_TRACE2(( " " )); + error = sfnt->init_face( stream, face, face_index, num_params, params ); + + /* Stream may have changed. */ + stream = face->root.stream; + + if ( error ) + goto Exit; + + /* We must also be able to accept Mac/GX fonts, as well as OT ones. */ + /* The 0x00020000 tag is completely undocumented; some fonts from */ + /* Arphic made for Chinese Windows 3.1 have this. */ + if ( face->format_tag != 0x00010000L && /* MS fonts */ + face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */ + face->format_tag != TTAG_true && /* Mac fonts */ + face->format_tag != TTAG_0xA5kbd && /* `Keyboard.dfont' (legacy Mac OS X) */ + face->format_tag != TTAG_0xA5lst ) /* `LastResort.dfont' (legacy Mac OS X) */ + { + FT_TRACE2(( " not a TTF font\n" )); + goto Bad_Format; + } + +#ifdef TT_USE_BYTECODE_INTERPRETER + ttface->face_flags |= FT_FACE_FLAG_HINTER; +#endif + + /* If we are performing a simple font format check, exit immediately. */ + if ( face_index < 0 ) + return FT_Err_Ok; + + /* Load font directory */ + error = sfnt->load_face( stream, face, face_index, num_params, params ); + if ( error ) + goto Exit; + +#ifdef TT_USE_BYTECODE_INTERPRETER + if ( tt_check_trickyness( ttface ) ) + ttface->face_flags |= FT_FACE_FLAG_TRICKY; +#endif + + error = tt_face_load_hdmx( face, stream ); + if ( error ) + goto Exit; + + if ( FT_IS_SCALABLE( ttface ) || + FT_HAS_SBIX( ttface ) ) + { +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( !ttface->internal->incremental_interface ) +#endif + { + error = tt_face_load_loca( face, stream ); + + /* having a (non-zero) `glyf' table without */ + /* a `loca' table is not valid */ + if ( face->glyf_len && FT_ERR_EQ( error, Table_Missing ) ) + goto Exit; + if ( error ) + goto Exit; + } + + /* `fpgm', `cvt', and `prep' are optional */ + error = tt_face_load_cvt( face, stream ); + if ( error && FT_ERR_NEQ( error, Table_Missing ) ) + goto Exit; + + error = tt_face_load_fpgm( face, stream ); + if ( error && FT_ERR_NEQ( error, Table_Missing ) ) + goto Exit; + + error = tt_face_load_prep( face, stream ); + if ( error && FT_ERR_NEQ( error, Table_Missing ) ) + goto Exit; + + /* Check the scalable flag based on `loca'. */ +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( !ttface->internal->incremental_interface ) +#endif + { + if ( ttface->num_fixed_sizes && + face->glyph_locations && + tt_check_single_notdef( ttface ) ) + { + FT_TRACE5(( "tt_face_init:" + " Only the `.notdef' glyph has an outline.\n" )); + FT_TRACE5(( " " + " Resetting scalable flag to FALSE.\n" )); + + ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE; + } + } + } + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + { + FT_UInt instance_index = (FT_UInt)face_index >> 16; + + + if ( FT_HAS_MULTIPLE_MASTERS( ttface ) ) + { + error = FT_Set_Named_Instance( ttface, instance_index ); + if ( error ) + goto Exit; + } + } +#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ + + /* initialize standard glyph loading routines */ + TT_Init_Glyph_Loading( face ); + + Exit: + return error; + + Bad_Format: + error = FT_THROW( Unknown_File_Format ); + goto Exit; + } + + + /************************************************************************** + * + * @Function: + * tt_face_done + * + * @Description: + * Finalize a given face object. + * + * @Input: + * face :: + * A pointer to the face object to destroy. + */ + FT_LOCAL_DEF( void ) + tt_face_done( FT_Face ttface ) /* TT_Face */ + { + TT_Face face = (TT_Face)ttface; + FT_Memory memory; + FT_Stream stream; + SFNT_Service sfnt; + + + if ( !face ) + return; + + memory = ttface->memory; + stream = ttface->stream; + sfnt = (SFNT_Service)face->sfnt; + + /* for `extended TrueType formats' (i.e. compressed versions) */ + if ( face->extra.finalizer ) + face->extra.finalizer( face->extra.data ); + + if ( sfnt ) + sfnt->done_face( face ); + + /* freeing the locations table */ + tt_face_done_loca( face ); + + tt_face_free_hdmx( face ); + + /* freeing the CVT */ + FT_FREE( face->cvt ); + face->cvt_size = 0; + + /* freeing the programs */ + FT_FRAME_RELEASE( face->font_program ); + FT_FRAME_RELEASE( face->cvt_program ); + face->font_program_size = 0; + face->cvt_program_size = 0; + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + tt_done_blend( ttface ); + face->blend = NULL; +#endif + } + + + /************************************************************************** + * + * SIZE FUNCTIONS + * + */ + +#ifdef TT_USE_BYTECODE_INTERPRETER + + /************************************************************************** + * + * @Function: + * tt_size_run_fpgm + * + * @Description: + * Run the font program. + * + * @Input: + * size :: + * A handle to the size object. + * + * pedantic :: + * Set if bytecode execution should be pedantic. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_size_run_fpgm( TT_Size size, + FT_Bool pedantic ) + { + TT_Face face = (TT_Face)size->root.face; + TT_ExecContext exec; + FT_Error error; + + + exec = size->context; + + error = TT_Load_Context( exec, face, size ); + if ( error ) + return error; + + exec->callTop = 0; + exec->top = 0; + + exec->period = 64; + exec->phase = 0; + exec->threshold = 0; + + exec->instruction_trap = FALSE; + exec->F_dot_P = 0x4000L; + + exec->pedantic_hinting = pedantic; + + { + FT_Size_Metrics* size_metrics = &exec->metrics; + TT_Size_Metrics* tt_metrics = &exec->tt_metrics; + + + size_metrics->x_ppem = 0; + size_metrics->y_ppem = 0; + size_metrics->x_scale = 0; + size_metrics->y_scale = 0; + + tt_metrics->ppem = 0; + tt_metrics->scale = 0; + tt_metrics->ratio = 0x10000L; + } + + /* allow font program execution */ + TT_Set_CodeRange( exec, + tt_coderange_font, + face->font_program, + (FT_Long)face->font_program_size ); + + /* disable CVT and glyph programs coderange */ + TT_Clear_CodeRange( exec, tt_coderange_cvt ); + TT_Clear_CodeRange( exec, tt_coderange_glyph ); + + if ( face->font_program_size > 0 ) + { + TT_Goto_CodeRange( exec, tt_coderange_font, 0 ); + + FT_TRACE4(( "Executing `fpgm' table.\n" )); + error = face->interpreter( exec ); +#ifdef FT_DEBUG_LEVEL_TRACE + if ( error ) + FT_TRACE4(( " interpretation failed with error code 0x%x\n", + error )); +#endif + } + else + error = FT_Err_Ok; + + size->bytecode_ready = error; + + if ( !error ) + TT_Save_Context( exec, size ); + + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_size_run_prep + * + * @Description: + * Run the control value program. + * + * @Input: + * size :: + * A handle to the size object. + * + * pedantic :: + * Set if bytecode execution should be pedantic. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_size_run_prep( TT_Size size, + FT_Bool pedantic ) + { + TT_Face face = (TT_Face)size->root.face; + TT_ExecContext exec; + FT_Error error; + FT_UInt i; + + + /* 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++ ) + { + /* Unscaled CVT values are already stored in 26.6 format. */ + /* Note that this scaling operation is very sensitive to rounding; */ + /* the integer division by 64 must be applied to the first argument. */ + size->cvt[i] = FT_MulFix( face->cvt[i] / 64, size->ttmetrics.scale ); + FT_TRACE6(( " %3d: %f (%f)\n", + i, (double)face->cvt[i] / 64, (double)size->cvt[i] / 64 )); + } + FT_TRACE6(( "\n" )); + + exec = size->context; + + error = TT_Load_Context( exec, face, size ); + if ( error ) + return error; + + exec->callTop = 0; + exec->top = 0; + + exec->instruction_trap = FALSE; + + exec->pedantic_hinting = pedantic; + + TT_Set_CodeRange( exec, + tt_coderange_cvt, + face->cvt_program, + (FT_Long)face->cvt_program_size ); + + TT_Clear_CodeRange( exec, tt_coderange_glyph ); + + if ( face->cvt_program_size > 0 ) + { + TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 ); + + FT_TRACE4(( "Executing `prep' table.\n" )); + error = face->interpreter( exec ); +#ifdef FT_DEBUG_LEVEL_TRACE + if ( error ) + FT_TRACE4(( " interpretation failed with error code 0x%x\n", + error )); +#endif + } + else + error = FT_Err_Ok; + + size->cvt_ready = error; + + /* UNDOCUMENTED! The MS rasterizer doesn't allow the following */ + /* graphics state variables to be modified by the CVT program. */ + + exec->GS.dualVector.x = 0x4000; + exec->GS.dualVector.y = 0; + exec->GS.projVector.x = 0x4000; + exec->GS.projVector.y = 0x0; + exec->GS.freeVector.x = 0x4000; + exec->GS.freeVector.y = 0x0; + + exec->GS.rp0 = 0; + exec->GS.rp1 = 0; + exec->GS.rp2 = 0; + + exec->GS.gep0 = 1; + exec->GS.gep1 = 1; + exec->GS.gep2 = 1; + + exec->GS.loop = 1; + + /* save as default graphics state */ + size->GS = exec->GS; + + TT_Save_Context( exec, size ); + + return error; + } + + + static void + tt_size_done_bytecode( FT_Size ftsize ) + { + TT_Size size = (TT_Size)ftsize; + TT_Face face = (TT_Face)ftsize->face; + FT_Memory memory = face->root.memory; + + if ( size->context ) + { + TT_Done_Context( size->context ); + size->context = NULL; + } + + FT_FREE( size->cvt ); + size->cvt_size = 0; + + /* free storage area */ + FT_FREE( size->storage ); + size->storage_size = 0; + + /* twilight zone */ + tt_glyphzone_done( &size->twilight ); + + FT_FREE( size->function_defs ); + FT_FREE( size->instruction_defs ); + + size->num_function_defs = 0; + size->max_function_defs = 0; + size->num_instruction_defs = 0; + size->max_instruction_defs = 0; + + size->max_func = 0; + size->max_ins = 0; + + size->bytecode_ready = -1; + size->cvt_ready = -1; + } + + + /* Initialize bytecode-related fields in the size object. */ + /* We do this only if bytecode interpretation is really needed. */ + static FT_Error + tt_size_init_bytecode( FT_Size ftsize, + FT_Bool pedantic ) + { + FT_Error error; + TT_Size size = (TT_Size)ftsize; + TT_Face face = (TT_Face)ftsize->face; + FT_Memory memory = face->root.memory; + + FT_UShort n_twilight; + TT_MaxProfile* maxp = &face->max_profile; + + + /* clean up bytecode related data */ + FT_FREE( size->function_defs ); + FT_FREE( size->instruction_defs ); + FT_FREE( size->cvt ); + FT_FREE( size->storage ); + + if ( size->context ) + TT_Done_Context( size->context ); + tt_glyphzone_done( &size->twilight ); + + size->bytecode_ready = -1; + size->cvt_ready = -1; + + size->context = TT_New_Context( (TT_Driver)face->root.driver ); + + size->max_function_defs = maxp->maxFunctionDefs; + size->max_instruction_defs = maxp->maxInstructionDefs; + + size->num_function_defs = 0; + size->num_instruction_defs = 0; + + size->max_func = 0; + size->max_ins = 0; + + size->cvt_size = face->cvt_size; + size->storage_size = maxp->maxStorage; + + /* Set default metrics */ + { + TT_Size_Metrics* tt_metrics = &size->ttmetrics; + + + tt_metrics->rotated = FALSE; + tt_metrics->stretched = FALSE; + + /* Set default engine compensation. 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 */ + if ( FT_NEW_ARRAY( size->function_defs, size->max_function_defs ) || + FT_NEW_ARRAY( size->instruction_defs, size->max_instruction_defs ) || + FT_NEW_ARRAY( size->cvt, size->cvt_size ) || + FT_NEW_ARRAY( size->storage, size->storage_size ) ) + goto Exit; + + /* reserve twilight zone */ + n_twilight = maxp->maxTwilightPoints; + + /* there are 4 phantom points (do we need this?) */ + n_twilight += 4; + + error = tt_glyphzone_new( memory, n_twilight, 0, &size->twilight ); + if ( error ) + goto Exit; + + size->twilight.n_points = n_twilight; + + size->GS = tt_default_graphics_state; + + /* set `face->interpreter' according to the debug hook present */ + { + FT_Library library = face->root.driver->root.library; + + + face->interpreter = (TT_Interpreter) + library->debug_hooks[FT_DEBUG_HOOK_TRUETYPE]; + if ( !face->interpreter ) + face->interpreter = (TT_Interpreter)TT_RunIns; + } + + /* Fine, now run the font program! */ + + /* In case of an error while executing `fpgm', we intentionally don't */ + /* clean up immediately – bugs in the `fpgm' are so fundamental that */ + /* all following hinting calls should fail. Additionally, `fpgm' is */ + /* to be executed just once; calling it again is completely useless */ + /* and might even lead to extremely slow behaviour if it is malformed */ + /* (containing an infinite loop, for example). */ + error = tt_size_run_fpgm( size, pedantic ); + return error; + + Exit: + if ( error ) + tt_size_done_bytecode( ftsize ); + + return error; + } + + + FT_LOCAL_DEF( FT_Error ) + tt_size_ready_bytecode( TT_Size size, + FT_Bool pedantic ) + { + FT_Error error = FT_Err_Ok; + + + if ( size->bytecode_ready < 0 ) + error = tt_size_init_bytecode( (FT_Size)size, pedantic ); + else + error = size->bytecode_ready; + + if ( error ) + goto Exit; + + /* rescale CVT when needed */ + if ( size->cvt_ready < 0 ) + { + FT_UShort i; + + + /* all twilight points are originally zero */ + for ( i = 0; i < size->twilight.n_points; i++ ) + { + size->twilight.org[i].x = 0; + size->twilight.org[i].y = 0; + size->twilight.cur[i].x = 0; + size->twilight.cur[i].y = 0; + } + + /* clear storage area */ + for ( i = 0; i < size->storage_size; i++ ) + size->storage[i] = 0; + + size->GS = tt_default_graphics_state; + + error = tt_size_run_prep( size, pedantic ); + } + else + error = size->cvt_ready; + + Exit: + return error; + } + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + + /************************************************************************** + * + * @Function: + * tt_size_init + * + * @Description: + * Initialize a new TrueType size object. + * + * @InOut: + * size :: + * A handle to the size object. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_size_init( FT_Size ttsize ) /* TT_Size */ + { + TT_Size size = (TT_Size)ttsize; + FT_Error error = FT_Err_Ok; + + +#ifdef TT_USE_BYTECODE_INTERPRETER + size->bytecode_ready = -1; + size->cvt_ready = -1; +#endif + + size->ttmetrics.valid = FALSE; + size->strike_index = 0xFFFFFFFFUL; + + return error; + } + + + /************************************************************************** + * + * @Function: + * tt_size_done + * + * @Description: + * The TrueType size object finalizer. + * + * @Input: + * size :: + * A handle to the target size object. + */ + FT_LOCAL_DEF( void ) + tt_size_done( FT_Size ttsize ) /* TT_Size */ + { + TT_Size size = (TT_Size)ttsize; + + +#ifdef TT_USE_BYTECODE_INTERPRETER + tt_size_done_bytecode( ttsize ); +#endif + + size->ttmetrics.valid = FALSE; + } + + + /************************************************************************** + * + * @Function: + * tt_size_reset_height + * + * @Description: + * Recompute a TrueType size's ascender, descender, and height + * when resolutions and character dimensions have been changed. + * Used for variation fonts as an iterator function. + * + * @Input: + * ft_size :: + * A handle to the target TT_Size object. This function will be called + * through a `FT_Size_Reset_Func` pointer which takes `FT_Size`. This + * function must take `FT_Size` as a result. The passed `FT_Size` is + * expected to point to a `TT_Size`. + */ + FT_LOCAL_DEF( FT_Error ) + tt_size_reset_height( FT_Size ft_size ) + { + TT_Size size = (TT_Size)ft_size; + TT_Face face = (TT_Face)size->root.face; + FT_Size_Metrics* size_metrics = &size->hinted_metrics; + + size->ttmetrics.valid = FALSE; + + /* copy the result from base layer */ + *size_metrics = size->root.metrics; + + if ( size_metrics->x_ppem < 1 || size_metrics->y_ppem < 1 ) + return FT_THROW( Invalid_PPem ); + + /* This bit flag, if set, indicates that the ppems must be */ + /* rounded to integers. Nearly all TrueType fonts have this bit */ + /* set, as hinting won't work really well otherwise. */ + /* */ + if ( face->header.Flags & 8 ) + { + /* the TT spec always asks for ROUND, not FLOOR or CEIL */ + size_metrics->ascender = FT_PIX_ROUND( + FT_MulFix( face->root.ascender, + size_metrics->y_scale ) ); + size_metrics->descender = FT_PIX_ROUND( + FT_MulFix( face->root.descender, + size_metrics->y_scale ) ); + size_metrics->height = FT_PIX_ROUND( + FT_MulFix( face->root.height, + size_metrics->y_scale ) ); + } + + size->ttmetrics.valid = TRUE; + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * tt_size_reset + * + * @Description: + * Reset a TrueType size when resolutions and character dimensions + * have been changed. + * + * @Input: + * size :: + * A handle to the target size object. + */ + FT_LOCAL_DEF( FT_Error ) + tt_size_reset( TT_Size size ) + { + FT_Error error; + TT_Face face = (TT_Face)size->root.face; + FT_Size_Metrics* size_metrics = &size->hinted_metrics; + + + error = tt_size_reset_height( (FT_Size)size ); + if ( error ) + return error; + + if ( face->header.Flags & 8 ) + { + /* base scaling values on integer ppem values, */ + /* as mandated by the TrueType specification */ + size_metrics->x_scale = FT_DivFix( size_metrics->x_ppem << 6, + face->root.units_per_EM ); + size_metrics->y_scale = FT_DivFix( size_metrics->y_ppem << 6, + face->root.units_per_EM ); + + size_metrics->max_advance = FT_PIX_ROUND( + FT_MulFix( face->root.max_advance_width, + size_metrics->x_scale ) ); + } + + /* compute new transformation */ + if ( size_metrics->x_ppem >= size_metrics->y_ppem ) + { + size->ttmetrics.scale = size_metrics->x_scale; + size->ttmetrics.ppem = size_metrics->x_ppem; + size->ttmetrics.x_ratio = 0x10000L; + size->ttmetrics.y_ratio = FT_DivFix( size_metrics->y_ppem, + size_metrics->x_ppem ); + } + else + { + size->ttmetrics.scale = size_metrics->y_scale; + size->ttmetrics.ppem = size_metrics->y_ppem; + size->ttmetrics.x_ratio = FT_DivFix( size_metrics->x_ppem, + size_metrics->y_ppem ); + size->ttmetrics.y_ratio = 0x10000L; + } + + size->widthp = tt_face_get_device_metrics( face, size_metrics->x_ppem, 0 ); + + size->metrics = size_metrics; + +#ifdef TT_USE_BYTECODE_INTERPRETER + size->cvt_ready = -1; +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * tt_driver_init + * + * @Description: + * Initialize a given TrueType driver object. + * + * @Input: + * driver :: + * A handle to the target driver object. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_driver_init( FT_Module ttdriver ) /* TT_Driver */ + { + +#ifdef TT_USE_BYTECODE_INTERPRETER + + TT_Driver driver = (TT_Driver)ttdriver; + + driver->interpreter_version = TT_INTERPRETER_VERSION_35; +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + driver->interpreter_version = TT_INTERPRETER_VERSION_40; +#endif + +#else /* !TT_USE_BYTECODE_INTERPRETER */ + + FT_UNUSED( ttdriver ); + +#endif /* !TT_USE_BYTECODE_INTERPRETER */ + + return FT_Err_Ok; + } + + + /************************************************************************** + * + * @Function: + * tt_driver_done + * + * @Description: + * Finalize a given TrueType driver. + * + * @Input: + * driver :: + * A handle to the target TrueType driver. + */ + FT_LOCAL_DEF( void ) + tt_driver_done( FT_Module ttdriver ) /* TT_Driver */ + { + FT_UNUSED( ttdriver ); + } + + + /************************************************************************** + * + * @Function: + * tt_slot_init + * + * @Description: + * Initialize a new slot object. + * + * @InOut: + * slot :: + * A handle to the slot object. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_slot_init( FT_GlyphSlot slot ) + { + return FT_GlyphLoader_CreateExtra( slot->internal->loader ); + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttobjs.h b/non-source/foreign/freetype2/src/truetype/ttobjs.h new file mode 100644 index 000000000..9c36ca783 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttobjs.h @@ -0,0 +1,426 @@ +/**************************************************************************** + * + * ttobjs.h + * + * Objects manager (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTOBJS_H_ +#define TTOBJS_H_ + + +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @Type: + * TT_Driver + * + * @Description: + * A handle to a TrueType driver object. + */ + typedef struct TT_DriverRec_* TT_Driver; + + + /************************************************************************** + * + * @Type: + * TT_GlyphSlot + * + * @Description: + * A handle to a TrueType glyph slot object. + * + * @Note: + * This is a direct typedef of FT_GlyphSlot, as there is nothing + * specific about the TrueType glyph slot. + */ + typedef FT_GlyphSlot TT_GlyphSlot; + + + /************************************************************************** + * + * @Struct: + * TT_GraphicsState + * + * @Description: + * The TrueType graphics state used during bytecode interpretation. + */ + typedef struct TT_GraphicsState_ + { + FT_UShort rp0; + FT_UShort rp1; + FT_UShort rp2; + + FT_UnitVector dualVector; + FT_UnitVector projVector; + FT_UnitVector freeVector; + + FT_Long loop; + FT_F26Dot6 minimum_distance; + FT_Int round_state; + + FT_Bool auto_flip; + FT_F26Dot6 control_value_cutin; + FT_F26Dot6 single_width_cutin; + FT_F26Dot6 single_width_value; + FT_UShort delta_base; + FT_UShort delta_shift; + + FT_Byte instruct_control; + /* According to Greg Hitchcock from Microsoft, the `scan_control' */ + /* variable as documented in the TrueType specification is a 32-bit */ + /* integer; the high-word part holds the SCANTYPE value, the low-word */ + /* part the SCANCTRL value. We separate it into two fields. */ + FT_Bool scan_control; + FT_Int scan_type; + + FT_UShort gep0; + FT_UShort gep1; + FT_UShort gep2; + + } TT_GraphicsState; + + +#ifdef TT_USE_BYTECODE_INTERPRETER + + FT_LOCAL( void ) + tt_glyphzone_done( TT_GlyphZone zone ); + + FT_LOCAL( FT_Error ) + tt_glyphzone_new( FT_Memory memory, + FT_UShort maxPoints, + FT_UShort maxContours, + TT_GlyphZone zone ); + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + + + /************************************************************************** + * + * EXECUTION SUBTABLES + * + * These sub-tables relate to instruction execution. + * + */ + + +#define TT_MAX_CODE_RANGES 3 + + + /************************************************************************** + * + * There can only be 3 active code ranges at once: + * - the Font Program + * - the CVT Program + * - a glyph's instructions set + */ + typedef enum TT_CodeRange_Tag_ + { + tt_coderange_none = 0, + tt_coderange_font, + tt_coderange_cvt, + tt_coderange_glyph + + } TT_CodeRange_Tag; + + + typedef struct TT_CodeRange_ + { + FT_Byte* base; + FT_Long size; + + } TT_CodeRange; + + typedef TT_CodeRange TT_CodeRangeTable[TT_MAX_CODE_RANGES]; + + + /************************************************************************** + * + * Defines a function/instruction definition record. + */ + typedef struct TT_DefRecord_ + { + FT_Int range; /* in which code range is it located? */ + FT_Long start; /* where does it start? */ + FT_Long end; /* where does it end? */ + FT_UInt opc; /* function #, or instruction code */ + FT_Bool active; /* is it active? */ + + } TT_DefRecord, *TT_DefArray; + + + /************************************************************************** + * + * Subglyph transformation record. + */ + typedef struct TT_Transform_ + { + FT_Fixed xx, xy; /* transformation matrix coefficients */ + FT_Fixed yx, yy; + FT_F26Dot6 ox, oy; /* offsets */ + + } TT_Transform; + + + /************************************************************************** + * + * A note regarding non-squared pixels: + * + * (This text will probably go into some docs at some time; for now, it + * is kept here to explain some definitions in the TT_Size_Metrics + * record). + * + * The CVT is a one-dimensional array containing values that control + * certain important characteristics in a font, like the height of all + * capitals, all lowercase letter, default spacing or stem width/height. + * + * These values are found in FUnits in the font file, and must be scaled + * to pixel coordinates before being used by the CVT and glyph programs. + * Unfortunately, when using distinct x and y resolutions (or distinct x + * and y pointsizes), there are two possible scalings. + * + * A first try was to implement a `lazy' scheme where all values were + * scaled when first used. However, while some values are always used + * in the same direction, some others are used under many different + * circumstances and orientations. + * + * I have found a simpler way to do the same, and it even seems to work + * in most of the cases: + * + * - All CVT values are scaled to the maximum ppem size. + * + * - When performing a read or write in the CVT, a ratio factor is used + * to perform adequate scaling. Example: + * + * x_ppem = 14 + * y_ppem = 10 + * + * We choose ppem = x_ppem = 14 as the CVT scaling size. All cvt + * entries are scaled to it. + * + * x_ratio = 1.0 + * y_ratio = y_ppem/ppem (< 1.0) + * + * We compute the current ratio like: + * + * - If projVector is horizontal, + * ratio = x_ratio = 1.0 + * + * - if projVector is vertical, + * ratio = y_ratio + * + * - else, + * ratio = sqrt( (proj.x * x_ratio) ^ 2 + (proj.y * y_ratio) ^ 2 ) + * + * Reading a cvt value returns + * ratio * cvt[index] + * + * Writing a cvt value in pixels: + * cvt[index] / ratio + * + * The current ppem is simply + * ratio * ppem + * + */ + + + /************************************************************************** + * + * Metrics used by the TrueType size and context objects. + */ + typedef struct TT_Size_Metrics_ + { + /* for non-square pixels */ + FT_Long x_ratio; + FT_Long y_ratio; + + FT_UShort ppem; /* maximum ppem size */ + FT_Long ratio; /* current ratio */ + FT_Fixed scale; + + FT_F26Dot6 compensations[4]; /* device-specific compensations */ + + FT_Bool valid; + + FT_Bool rotated; /* `is the glyph rotated?'-flag */ + FT_Bool stretched; /* `is the glyph stretched?'-flag */ + + } TT_Size_Metrics; + + + /************************************************************************** + * + * TrueType size class. + */ + typedef struct TT_SizeRec_ + { + FT_SizeRec root; + + /* we have our own copy of metrics so that we can modify */ + /* it without affecting auto-hinting (when used) */ + FT_Size_Metrics* metrics; /* for the current rendering mode */ + FT_Size_Metrics hinted_metrics; /* for the hinted rendering mode */ + + TT_Size_Metrics ttmetrics; + + FT_Byte* widthp; /* glyph widths from the hdmx table */ + + FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */ + +#ifdef TT_USE_BYTECODE_INTERPRETER + + FT_Long point_size; /* for the `MPS' bytecode instruction */ + + FT_UInt num_function_defs; /* number of function definitions */ + FT_UInt max_function_defs; + TT_DefArray function_defs; /* table of function definitions */ + + FT_UInt num_instruction_defs; /* number of ins. definitions */ + FT_UInt max_instruction_defs; + TT_DefArray instruction_defs; /* table of ins. definitions */ + + FT_UInt max_func; + FT_UInt max_ins; + + TT_CodeRangeTable codeRangeTable; + + TT_GraphicsState GS; + + FT_ULong cvt_size; /* the scaled control value table */ + FT_Long* cvt; + + FT_UShort storage_size; /* The storage area is now part of */ + FT_Long* storage; /* the instance */ + + TT_GlyphZoneRec twilight; /* The instance's twilight zone */ + + TT_ExecContext context; + + /* if negative, `fpgm' (resp. `prep'), wasn't executed yet; */ + /* otherwise it is the returned error code */ + FT_Error bytecode_ready; + FT_Error cvt_ready; + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + } TT_SizeRec; + + + /************************************************************************** + * + * TrueType driver class. + */ + typedef struct TT_DriverRec_ + { + FT_DriverRec root; + + TT_GlyphZoneRec zone; /* glyph loader points zone */ + + FT_UInt interpreter_version; + + } TT_DriverRec; + + + /* Note: All of the functions below (except tt_size_reset()) are used */ + /* as function pointers in a FT_Driver_ClassRec. Therefore their */ + /* parameters are of types FT_Face, FT_Size, etc., rather than TT_Face, */ + /* TT_Size, etc., so that the compiler can confirm that the types and */ + /* number of parameters are correct. In all cases the FT_xxx types are */ + /* cast to their TT_xxx counterparts inside the functions since FreeType */ + /* will always use the TT driver to create them. */ + + + /************************************************************************** + * + * Face functions + */ + FT_LOCAL( FT_Error ) + tt_face_init( FT_Stream stream, + FT_Face ttface, /* TT_Face */ + FT_Int face_index, + FT_Int num_params, + FT_Parameter* params ); + + FT_LOCAL( void ) + tt_face_done( FT_Face ttface ); /* TT_Face */ + + + /************************************************************************** + * + * Size functions + */ + FT_LOCAL( FT_Error ) + tt_size_init( FT_Size ttsize ); /* TT_Size */ + + FT_LOCAL( void ) + tt_size_done( FT_Size ttsize ); /* TT_Size */ + +#ifdef TT_USE_BYTECODE_INTERPRETER + + FT_LOCAL( FT_Error ) + tt_size_run_fpgm( TT_Size size, + FT_Bool pedantic ); + + FT_LOCAL( FT_Error ) + tt_size_run_prep( TT_Size size, + FT_Bool pedantic ); + + FT_LOCAL( FT_Error ) + tt_size_ready_bytecode( TT_Size size, + FT_Bool pedantic ); + +#endif /* TT_USE_BYTECODE_INTERPRETER */ + + FT_LOCAL( FT_Error ) + tt_size_reset_height( FT_Size size ); + + FT_LOCAL( FT_Error ) + tt_size_reset( TT_Size size ); + + + /************************************************************************** + * + * Driver functions + */ + FT_LOCAL( FT_Error ) + tt_driver_init( FT_Module ttdriver ); /* TT_Driver */ + + FT_LOCAL( void ) + tt_driver_done( FT_Module ttdriver ); /* TT_Driver */ + + + /************************************************************************** + * + * Slot functions + */ + FT_LOCAL( FT_Error ) + tt_slot_init( FT_GlyphSlot slot ); + + + /* auxiliary */ +#define IS_HINTED( flags ) ( ( flags & FT_LOAD_NO_HINTING ) == 0 ) + + +FT_END_HEADER + +#endif /* TTOBJS_H_ */ + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttpload.c b/non-source/foreign/freetype2/src/truetype/ttpload.c new file mode 100644 index 000000000..9505b5f17 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttpload.c @@ -0,0 +1,665 @@ +/**************************************************************************** + * + * ttpload.c + * + * TrueType-specific tables loader (body). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#include <freetype/internal/ftdebug.h> +#include <freetype/internal/ftobjs.h> +#include <freetype/internal/ftstream.h> +#include <freetype/tttags.h> + +#include "ttpload.h" + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +#include "ttgxvar.h" +#endif + +#include "tterrors.h" + + + /************************************************************************** + * + * The macro FT_COMPONENT is used in trace mode. It is an implicit + * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log + * messages during execution. + */ +#undef FT_COMPONENT +#define FT_COMPONENT ttpload + + + /************************************************************************** + * + * @Function: + * tt_face_load_loca + * + * @Description: + * Load the locations table. + * + * @InOut: + * face :: + * A handle to the target face object. + * + * @Input: + * stream :: + * The input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_loca( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_ULong table_len; + FT_Int shift; + + + /* we need the size of the `glyf' table for malformed `loca' tables */ + error = face->goto_table( face, TTAG_glyf, stream, &face->glyf_len ); + + /* it is possible that a font doesn't have a glyf table at all */ + /* or its size is zero */ + if ( FT_ERR_EQ( error, Table_Missing ) ) + { + face->glyf_len = 0; + face->glyf_offset = 0; + } + else if ( error ) + goto Exit; + else + { +#ifdef FT_CONFIG_OPTION_INCREMENTAL + if ( face->root.internal->incremental_interface ) + face->glyf_offset = 0; + else +#endif + face->glyf_offset = FT_STREAM_POS(); + } + + FT_TRACE2(( "Locations " )); + error = face->goto_table( face, TTAG_loca, stream, &table_len ); + if ( error ) + { + error = FT_THROW( Locations_Missing ); + goto Exit; + } + + shift = face->header.Index_To_Loc_Format != 0 ? 2 : 1; + + if ( table_len > 0x10000UL << shift ) + { + FT_TRACE2(( "table too large\n" )); + table_len = 0x10000UL << shift; + } + + face->num_locations = table_len >> shift; + + if ( face->num_locations != (FT_ULong)face->root.num_glyphs + 1 ) + { + 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 */ + if ( face->num_locations < (FT_ULong)face->root.num_glyphs + 1 ) + { + FT_ULong new_loca_len = + ( (FT_ULong)face->root.num_glyphs + 1 ) << shift; + + TT_Table entry = face->dir_tables; + TT_Table limit = entry + face->num_tables; + + FT_Long pos = (FT_Long)FT_STREAM_POS(); + FT_Long dist = 0x7FFFFFFFL; + FT_Bool found = 0; + + + /* compute the distance to next table in font file */ + for ( ; entry < limit; entry++ ) + { + FT_Long diff = (FT_Long)entry->Offset - pos; + + + if ( diff > 0 && diff < dist ) + { + dist = diff; + found = 1; + } + } + + if ( !found ) + { + /* `loca' is the last table */ + dist = (FT_Long)stream->size - pos; + } + + if ( new_loca_len <= (FT_ULong)dist ) + { + face->num_locations = (FT_ULong)face->root.num_glyphs + 1; + table_len = new_loca_len; + + FT_TRACE2(( "adjusting num_locations to %ld\n", + face->num_locations )); + } + else + { + face->root.num_glyphs = face->num_locations + ? (FT_Long)face->num_locations - 1 : 0; + + FT_TRACE2(( "adjusting num_glyphs to %ld\n", + face->root.num_glyphs )); + } + } + } + + /* + * Extract the frame. We don't need to decompress it since + * we are able to parse it directly. + */ + if ( FT_FRAME_EXTRACT( table_len, face->glyph_locations ) ) + goto Exit; + + FT_TRACE2(( "loaded\n" )); + + Exit: + return error; + } + + + FT_LOCAL_DEF( FT_ULong ) + tt_face_get_location( FT_Face face, /* TT_Face */ + FT_UInt gindex, + FT_ULong *asize ) + { + TT_Face ttface = (TT_Face)face; + FT_ULong pos1, pos2; + FT_Byte* p; + FT_Byte* p_limit; + + + pos1 = pos2 = 0; + + if ( gindex < ttface->num_locations ) + { + if ( ttface->header.Index_To_Loc_Format != 0 ) + { + p = ttface->glyph_locations + gindex * 4; + p_limit = ttface->glyph_locations + ttface->num_locations * 4; + + pos1 = FT_NEXT_ULONG( p ); + pos2 = pos1; + + if ( p + 4 <= p_limit ) + pos2 = FT_NEXT_ULONG( p ); + } + else + { + p = ttface->glyph_locations + gindex * 2; + p_limit = ttface->glyph_locations + ttface->num_locations * 2; + + pos1 = FT_NEXT_USHORT( p ); + pos2 = pos1; + + if ( p + 2 <= p_limit ) + pos2 = FT_NEXT_USHORT( p ); + + pos1 <<= 1; + pos2 <<= 1; + } + } + + /* Check broken location data. */ + if ( pos1 > ttface->glyf_len ) + { + FT_TRACE1(( "tt_face_get_location:" + " too large offset (0x%08lx) found for glyph index %d,\n", + pos1, gindex )); + FT_TRACE1(( " " + " exceeding the end of `glyf' table (0x%08lx)\n", + ttface->glyf_len )); + *asize = 0; + return 0; + } + + if ( pos2 > ttface->glyf_len ) + { + /* We try to sanitize the last `loca' entry. */ + if ( gindex == ttface->num_locations - 2 ) + { + FT_TRACE1(( "tt_face_get_location:" + " too large size (%ld bytes) found for glyph index %d,\n", + pos2 - pos1, gindex )); + FT_TRACE1(( " " + " truncating at the end of `glyf' table to %ld bytes\n", + ttface->glyf_len - pos1 )); + pos2 = ttface->glyf_len; + } + else + { + FT_TRACE1(( "tt_face_get_location:" + " too large offset (0x%08lx) found for glyph index %d,\n", + pos2, gindex + 1 )); + FT_TRACE1(( " " + " exceeding the end of `glyf' table (0x%08lx)\n", + ttface->glyf_len )); + *asize = 0; + return 0; + } + } + + /* The `loca' table must be ordered; it refers to the length of */ + /* an entry as the difference between the current and the next */ + /* position. However, there do exist (malformed) fonts which */ + /* don't obey this rule, so we are only able to provide an */ + /* upper bound for the size. */ + /* */ + /* We get (intentionally) a wrong, non-zero result in case the */ + /* `glyf' table is missing. */ + if ( pos2 >= pos1 ) + *asize = (FT_ULong)( pos2 - pos1 ); + else + *asize = (FT_ULong)( ttface->glyf_len - pos1 ); + + return pos1; + } + + + FT_LOCAL_DEF( void ) + tt_face_done_loca( TT_Face face ) + { + FT_Stream stream = face->root.stream; + + + FT_FRAME_RELEASE( face->glyph_locations ); + face->num_locations = 0; + } + + + + /************************************************************************** + * + * @Function: + * tt_face_load_cvt + * + * @Description: + * Load the control value table into a face object. + * + * @InOut: + * face :: + * A handle to the target face object. + * + * @Input: + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_cvt( TT_Face face, + FT_Stream stream ) + { +#ifdef TT_USE_BYTECODE_INTERPRETER + + FT_Error error; + FT_Memory memory = stream->memory; + FT_ULong table_len; + + + FT_TRACE2(( "CVT " )); + + error = face->goto_table( face, TTAG_cvt, stream, &table_len ); + if ( error ) + { + FT_TRACE2(( "is missing\n" )); + + face->cvt_size = 0; + face->cvt = NULL; + error = FT_Err_Ok; + + goto Exit; + } + + face->cvt_size = table_len / 2; + + if ( FT_QNEW_ARRAY( face->cvt, face->cvt_size ) ) + goto Exit; + + if ( FT_FRAME_ENTER( face->cvt_size * 2L ) ) + goto Exit; + + { + FT_Int32* cur = face->cvt; + FT_Int32* limit = cur + face->cvt_size; + + + for ( ; cur < limit; cur++ ) + *cur = FT_GET_SHORT() * 64; + } + + FT_FRAME_EXIT(); + FT_TRACE2(( "loaded\n" )); + +#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT + if ( face->doblend ) + error = tt_face_vary_cvt( face, stream ); +#endif + + Exit: + return error; + +#else /* !TT_USE_BYTECODE_INTERPRETER */ + + FT_UNUSED( face ); + FT_UNUSED( stream ); + + return FT_Err_Ok; + +#endif + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_fpgm + * + * @Description: + * Load the font program. + * + * @InOut: + * face :: + * A handle to the target face object. + * + * @Input: + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_fpgm( TT_Face face, + FT_Stream stream ) + { +#ifdef TT_USE_BYTECODE_INTERPRETER + + FT_Error error; + FT_ULong table_len; + + + FT_TRACE2(( "Font program " )); + + /* The font program is optional */ + error = face->goto_table( face, TTAG_fpgm, stream, &table_len ); + if ( error ) + { + face->font_program = NULL; + face->font_program_size = 0; + error = FT_Err_Ok; + + FT_TRACE2(( "is missing\n" )); + } + else + { + face->font_program_size = table_len; + if ( FT_FRAME_EXTRACT( table_len, face->font_program ) ) + goto Exit; + + FT_TRACE2(( "loaded, %12ld bytes\n", face->font_program_size )); + } + + Exit: + return error; + +#else /* !TT_USE_BYTECODE_INTERPRETER */ + + FT_UNUSED( face ); + FT_UNUSED( stream ); + + return FT_Err_Ok; + +#endif + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_prep + * + * @Description: + * Load the cvt program. + * + * @InOut: + * face :: + * A handle to the target face object. + * + * @Input: + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + FT_LOCAL_DEF( FT_Error ) + tt_face_load_prep( TT_Face face, + FT_Stream stream ) + { +#ifdef TT_USE_BYTECODE_INTERPRETER + + FT_Error error; + FT_ULong table_len; + + + FT_TRACE2(( "Prep program " )); + + error = face->goto_table( face, TTAG_prep, stream, &table_len ); + if ( error ) + { + face->cvt_program = NULL; + face->cvt_program_size = 0; + error = FT_Err_Ok; + + FT_TRACE2(( "is missing\n" )); + } + else + { + face->cvt_program_size = table_len; + if ( FT_FRAME_EXTRACT( table_len, face->cvt_program ) ) + goto Exit; + + FT_TRACE2(( "loaded, %12ld bytes\n", face->cvt_program_size )); + } + + Exit: + return error; + +#else /* !TT_USE_BYTECODE_INTERPRETER */ + + FT_UNUSED( face ); + FT_UNUSED( stream ); + + return FT_Err_Ok; + +#endif + } + + + FT_COMPARE_DEF( int ) + compare_ppem( const void* a, + const void* b ) + { + return **(FT_Byte**)a - **(FT_Byte**)b; + } + + + /************************************************************************** + * + * @Function: + * tt_face_load_hdmx + * + * @Description: + * Load the `hdmx' table into the face object. + * + * @Input: + * face :: + * A handle to the target face object. + * + * stream :: + * A handle to the input stream. + * + * @Return: + * FreeType error code. 0 means success. + */ + + FT_LOCAL_DEF( FT_Error ) + tt_face_load_hdmx( TT_Face face, + FT_Stream stream ) + { + FT_Error error; + FT_Memory memory = stream->memory; + FT_UInt nn, num_records; + FT_ULong table_size, record_size; + FT_Byte* p; + FT_Byte* limit; + + + /* this table is optional */ + error = face->goto_table( face, TTAG_hdmx, stream, &table_size ); + if ( error || table_size < 8 ) + return FT_Err_Ok; + + if ( FT_FRAME_EXTRACT( table_size, face->hdmx_table ) ) + goto Exit; + + p = face->hdmx_table; + limit = p + table_size; + + /* Given that `hdmx' tables are losing its importance (for example, */ + /* variation fonts introduced in OpenType 1.8 must not have this */ + /* table) we no longer test for a correct `version' field. */ + p += 2; + num_records = FT_NEXT_USHORT( p ); + record_size = FT_NEXT_ULONG( p ); + + /* There are at least two fonts, HANNOM-A and HANNOM-B version */ + /* 2.0 (2005), which get this wrong: The upper two bytes of */ + /* the size value are set to 0xFF instead of 0x00. We catch */ + /* and fix this. */ + + if ( record_size >= 0xFFFF0000UL ) + record_size &= 0xFFFFU; + + FT_TRACE2(( "Hdmx " )); + + /* The limit for `num_records' is a heuristic value. */ + if ( num_records > 255 || num_records == 0 ) + { + FT_TRACE2(( "with unreasonable %u records rejected\n", num_records )); + goto Fail; + } + + /* Out-of-spec tables are rejected. The record size must be */ + /* equal to the number of glyphs + 2 + 32-bit padding. */ + if ( (FT_Long)record_size != ( ( face->root.num_glyphs + 2 + 3 ) & ~3 ) ) + { + FT_TRACE2(( "with record size off by %ld bytes rejected\n", + (FT_Long)record_size - + ( ( face->root.num_glyphs + 2 + 3 ) & ~3 ) )); + goto Fail; + } + + if ( FT_QNEW_ARRAY( face->hdmx_records, num_records ) ) + goto Fail; + + for ( nn = 0; nn < num_records; nn++ ) + { + if ( p + record_size > limit ) + break; + face->hdmx_records[nn] = p; + p += record_size; + } + + /* The records must be already sorted by ppem but it does not */ + /* hurt to make sure so that the binary search works later. */ + ft_qsort( face->hdmx_records, nn, sizeof ( FT_Byte* ), compare_ppem ); + + face->hdmx_record_count = nn; + face->hdmx_table_size = table_size; + face->hdmx_record_size = record_size; + + FT_TRACE2(( "%ux%lu loaded\n", num_records, record_size )); + + Exit: + return error; + + Fail: + FT_FRAME_RELEASE( face->hdmx_table ); + face->hdmx_table_size = 0; + goto Exit; + } + + + FT_LOCAL_DEF( void ) + tt_face_free_hdmx( TT_Face face ) + { + FT_Stream stream = face->root.stream; + FT_Memory memory = stream->memory; + + + FT_FREE( face->hdmx_records ); + FT_FRAME_RELEASE( face->hdmx_table ); + } + + + /************************************************************************** + * + * Return the advance width table for a given pixel size if it is found + * in the font's `hdmx' table (if any). The records must be sorted for + * the binary search to work properly. + */ + FT_LOCAL_DEF( FT_Byte* ) + tt_face_get_device_metrics( TT_Face face, + FT_UInt ppem, + FT_UInt gindex ) + { + FT_UInt min = 0; + FT_UInt max = face->hdmx_record_count; + FT_UInt mid; + FT_Byte* result = NULL; + + + while ( min < max ) + { + mid = ( min + max ) >> 1; + + if ( face->hdmx_records[mid][0] > ppem ) + max = mid; + else if ( face->hdmx_records[mid][0] < ppem ) + min = mid + 1; + else + { + result = face->hdmx_records[mid] + 2 + gindex; + break; + } + } + + return result; + } + + +/* END */ diff --git a/non-source/foreign/freetype2/src/truetype/ttpload.h b/non-source/foreign/freetype2/src/truetype/ttpload.h new file mode 100644 index 000000000..bc32b5802 --- /dev/null +++ b/non-source/foreign/freetype2/src/truetype/ttpload.h @@ -0,0 +1,74 @@ +/**************************************************************************** + * + * ttpload.h + * + * TrueType-specific tables loader (specification). + * + * Copyright (C) 1996-2024 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTPLOAD_H_ +#define TTPLOAD_H_ + + +#include <freetype/internal/tttypes.h> + + +FT_BEGIN_HEADER + + + FT_LOCAL( FT_Error ) + tt_face_load_loca( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( FT_ULong ) + tt_face_get_location( FT_Face face, + FT_UInt gindex, + FT_ULong *asize ); + + FT_LOCAL( void ) + tt_face_done_loca( TT_Face face ); + + FT_LOCAL( FT_Error ) + tt_face_load_cvt( TT_Face face, + FT_Stream stream ); + + FT_LOCAL( FT_Error ) + tt_face_load_fpgm( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_prep( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( FT_Error ) + tt_face_load_hdmx( TT_Face face, + FT_Stream stream ); + + + FT_LOCAL( void ) + tt_face_free_hdmx( TT_Face face ); + + + FT_LOCAL( FT_Byte* ) + tt_face_get_device_metrics( TT_Face face, + FT_UInt ppem, + FT_UInt gindex ); + +FT_END_HEADER + +#endif /* TTPLOAD_H_ */ + + +/* END */ diff --git a/non-source/foreign/x64/freetype.lib b/non-source/foreign/x64/freetype.lib index caf7dcaf5c7061c94352ccd0887ae51777d5f08f..114240939b0372feaa0a327a8a2e689621f7c081 100644 GIT binary patch literal 2259796 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%0D2KX`vUZ0fc67ue}E1E=qi8? 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 TQT6^7*7Zd*cC^{|S)VyAy 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�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�TUIqUwX`j5>cO&u?kfXxGdtc>dr%gB6D;?F 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 x(4y*gD8q4Y$F$(6B)hgJHP7GkQT(l`8yDIaUu# zE7n|}>zWw3g%f+Ai{-^yv3#ntubLHh(Bpw2+NibUJ>A;yr8R1AvLSm<8nyGKQ9Hm! zO&T<|Y^9A@x+pDLDGqQ#8wZmeQpbG60|R2!+oKKd{asqQSl+|iV{13#tD#l<7_Hhi zv})0Y18k<Yp_w`g%@q5M-mdqw!6}S}TXr3gEbo6i?{R6Z3emix2@^1mu+O0~CNw`P ztEsD(|AJ5m<oyZ1&EPh@xO&+&J{8(Z&@|Ce!*haYWr1*|z+A|T;;NGW-w;9CAE78@ z$yR(~wcP71!ZZ+?s|8zyB_Rn><3!u>@pY6T$0glyqAg=QHZq#>PYAYe%2Tct!L}N? zN+;N+CJQ#UEi4;aBiKt01X|EOJ%yWxQ8Zy)>5h$tP#L{s;nrTT@em}6x-@59J;Eou zi{Fd_j3s%G!~PY5h^2ZTD2*!jgXVxXgF<k64}ek!L)S&7@IMSX#NB7F5_LnS@M8^c z{8WdJ2Ymwm%Ro`};_E=41br0r*PvTKp9ZDLkk6rR`79{w68#j6708qdM!Ha7hOv23 zj9*>Dtuc&78pUom>;c1mW>`LInuhD)T$tKz81!rRj8?<gJ=5n3Pe*5#`bSpypZVu! zmifEN*1x?f4D~SD^3?#CQ=$zY{#}vX0N^QuP&ktImM%>bLoM&+H%2*yn2O@i=*3%b zqrPXf=}a80x*7eoXk)kF4g+zg5ghyl#)b;H<D;^0D<^#PDJ$MC=R-a@054UVH@P(m zrFr=FO%LGmx9!@4<6Mhd^S<9Qd`Hvj&-_={A6hdIdL~2;B3_;Y>yV_iZEr88EXnT8 zf#lfradg+7=&p~RVcQ%X{#o7t&;L`Y|4KCP;g8FpLAU&8el+}XwB^fuWW;|t@8OrJ z`{q5|5^ibwF5}$R@@4kg4=_)_3vX^Y&;_#Z;g;L-p4drWei-XJuYQ=bMf&*9M;pF6 z^sNktwZ<%@5qR8lqK%U>qfME^xI!^s;%{#`m`_26gIo`-8PGJ%#M-OeHoY*seb>j3 zx2{Nq?td36M)mHl5756zY^c5#Qa{yd^%Sz)8D)77=$EYfawUnhvvAfd#F|*GOr}B6 z7A-5GPj`jx7cH2HRJuwEKMhSpo-e}h7HDsQe1H{P;?c6jnL^Z?C@*>;+@}(cTb~6w zU_y5#^U^v`HV!PkzYzZc??c2$q`y+^Pi(Onhpe5AO$D~1v&(pwATLJ={v1#W*<k** zYK@dzSIYe?3C}dvN<L48@|hv;NWGVKBmNIV<v$z$FTziC>fk*(C8fPe@<cH|NaEdw zHGkj3_GO6)rpF8Z7|^320D|{lRVj&5z0@yLD2b~2IaluW#ywT0FHCx%p1jM9MkMnW zw98!LAuIJEix^mP(X&m1;&j){_zwc5R06qw)C%2|WFTN1s-4WVDWa@0Nvo;Yp$;zA zK|cIg5RR1a8W`4nV+Vn<MhymKdc#2Z1&;$|sd3fOSkMzePX`?dIti4kkjg=?0G$EK zRY)`soD52_%GF40RC%A)xHCY($zBwcHEjYYYgj2LEP37}P+0P0l@cv!Q{dkXS^@eN zC|4=bnl>Hu1JD_u{|0&<=%=6;f$jsn7?dBS8nh4SJkVm$`JktRE(C=^#JdEPrrbrK z7lAGVWlg*cbUi4}yN=%oiq$ajJ3#p!Y(hp@6GE5j){4z_chxwe7<Fq6$0kHEHX(}r z*f2IGioIaiHp5;wj3uGrzA)^dVcn2VeFlemHQWh?on+V<hD|W+Y{MvHG%mGqO>enj z-!bgFhM~E4;eKq`7Q?n0_O4+c8upc86z=+5Oz(2(<vCZx8)_KlqPTEa<>10`?X$*( zUY)n@6BLOwXJR>$!&~-Y1A@GDEK^u8^VYS%0pk((rEl3I#-lE1FZ0&@1bD)FgoaYh zN7RwcepHZbKSI;Dw`*WPf-S}=+f=lnZ3p(Fe@fe?{!d*yZ|dgtZ?DYqU)ptGZ)ee} zcfH3JXl!E^l=m@>o!R1*K)r@>=X=O^TmAZa6iMn<BQ!lz<dSZoES4*&F%r8Dx0XAc zhCNB79nU!W4~d^6ZCCd!Hlj&poWxWS-DVVKMl96fwObP4zNoClj3#CsNg!d?p}N#d z?!PDD6B3PUkaXR15TET#pz_lW5~%$DBJsP5s!wsvYnl8Xh!!hbaE1jd%dsxZVFp@= zpbK!Fgk97|Vp|vB7E0`N){Ti`-RR*u0fQ6Pjc{t)%QlnEPpv%XG8DVEbKF{#(vDkl zrRxw}7&NTOmW~T0LVs8~vODY)6iOKV*S2x_$2tXO?ZC%sZ|x8;_=0JA4;0Yav}+Dn z57~Ff1zoI=_abz4I$r^0U8SGZhJN-9c7U=$+66ih^mWi{K)FrJEuh?{g?)jyL0N>q z2W35d2XqAJR1@HI>A{_f&2e`lk{88TSu|Xe#l6umHe?#^F2jCm*rSHMY}gLNes9?O zhEZ;5dY>8A71dL*0_Tc&0}VUIuyKa5nbSOzg*5IA!yYs2SB9aCUAUJGJ80P74Z8<2 zMbqPU68a1gxNK2G*1|?lIXevgbmEn-@IN44|4%T_$MMCtphhMvBs3zWT1a9jz-|ah zN_(VUNfP|*rFB&}m*#NtTW5~5ZfF80hx$SkQ>0R+PX=xxSzG}_>+uHq#B~y$mU*fW zfn{Db=R~)HqU{8^pD>A!6@S7c9>h--;pBZ@8{~gmlQ?_pP+>)c2j+7Wo%f{R93s~y zfLN7aD%O)t<R1#2Fp;ko|0^At$f;#{UI!-f$2&BUQ^jSMjZH-wJJK+<Bc*FZM*YK$ zNMItLCC_?88j+4n<Wtf$98)A>`i3JIwk(t|`Y);B_=l}Yw1`t|cgHXJH1(12e~pES zbv@O>bS0!YV&WiCHIdWL+Dt!Niw4jkpit#yGQkE=%JN3gb)ZmV<CN4s=*OT<pnn3r z9+aQ@d!Q6n-v=E6`Y)g(Kz{(r8hk5gF(?+O##w{qKH{B;DyJ4Ey41p?80)NJmsq$Z zhSAof;n<dGxE~qzuZI21u%8?DieWnqd&jU34CDLhGuRI6GrA$~igkA`Y^h@y-(16; zY8XYmVrLn~&Vyp}4ZFm!%MDv?*v*Ea1YKO(!Za`24Z}oohn?nJ5$`g?>J7^d2jQ?i zhf7bUGhrGNPsd}g;JbKh=>@EZqoO(ztBz(?REJ{KXJ?jIpP4(g`kZXBd&3?zRe#vg zb91a^&-mEz?d33J(*;{m9I=PD#$Y&#q5H75g@A@?Er$iG9B~pLMr<pF!?q7xqc$E< zj+oK#w#GBD4H*uYq|leS-dL`N73-5tssrX^8Av%yBgF4UyOSjE&s|=%WW{{gkkT8F z%2ATEykaT1lknofKh@d?BF&I@X;t0w+LaO@p|$I7L+m3fzi&ho9el-himN3snfXph zuuIa-m3or`T!nX`SCnKZ-<OZ(qFZj}@Z8K?4#R>*aytVkVEQWdtJL~31rINl^v8+> zO}4iO$()#*na^ZK<%T;mCH(IUN0)Yqv64=d#A1?Ix;z!;W+E=L)j2=6a{<z8mkbN& z6iKF+By(*0R|_94dFhR0B6+#tg51uL+{|w6Qld^aUQ!w$DbZ*z-uC~JrbP0+sfF{S zv@!k!79oDpX(9JXX%Ql~Z%Rs&bt(><BwOc)9L|NxtS8Ta9u3+8N^Sc&(9zD%x2B(8 zg!h?u`dO&-&vkwdSkq69p7&Qc{}s+p_Tzn44&JBMz7_OV=Vy&-g`ahv3!<sD|0lRw z<tkmeae-p<++97}MltFk8tz7md$VD88FsH><AZu(u6+*RcNhX8H_DNqxp5!<HKM zbHg4t>~DtQbGx_;oh!#%Y?ufuX1AhoUQr+JdRXZ8Q}jQr@DD~?{+M6kzYj@PSM8sj zTjsyumt)&K&Zfj!pkwzSB6RFo*|-t)bBp`~0fHd~AQeTK;Q;C#gxM`&!Z4a&RRpPo zWTK7ziYT5&R`~OZO1Kpt7iVH?#x4Bp`|%MnWoTVp{0Qpe@VmMKvDS*$E=dt<{KRag zNe@`1PbbzY&#A6jT%(gZ4`Uu5BJzlHhuG?Kl4zjMvK6I_<7$<|NIN}4cNP*DAQ7&1 z(lF!&3GfgW3OuYeK$dE8pdcTy5Ha)`<@_O!4GooRay(<0yzB#KwE%;XZaR5McDzz< z9wF+x#ti0LEWva7$=$1<-hQ)yrTZyLF8O!(DGihlBN3~e(4bn@MrZ`bhA;=%yvx09 zAWCKf4K98^aHF&k6%LHRQc7n&D8DiNEYq%_{5ZrZTDV^p-<SJkvBbDv7Fm5bUQJn@ zu87QYQEZXB8}TSg6k`e+?%Rg>hTU)2LxycKjP_=Y+iKWv45M18&!FO@;iwua_IJa2 z<I5;^lym7UY{jT7YFxHIiqXQV*zXK`&oHom-HE{}hS=5+CY^c0o_@GtPrT(oc4OF| znCYAoW#ZQbTY4fpTTony-s1rvsS6Xn0SsRY%L6bbnogTIZ%J)kn!Y2oh^~mkAq3?s z@!%i#7uJ5`7=fHA4{q$rzhuE;Jq<$}bp}vVAp4C$_+Z%j>pL3lhp5waD$-R`zHjOz z8|bHT<_OX|&N88&?+8YVlNFbNvie>IIv8|0=!u{!Kv_+vST&_9BKtuqMmwBh3oYDY z!&Vx0m0`CUc86iCx|$xVuBMlZ@1R(|bGccPEeLX6^gK)~!B)9-MYAjXkJ)%&<LZyf zM*o3L$k3?&*V1uSW7pKOshG~DVoucmTLow#&gd$M`Tbx|4p;b_m>Fz<4dr%vJ{y@% z*!}v@&e;05>vGHWROxd6RUWieR&wZtibfp!)vz_YxPI(an<_YB%GP5JTaM{5|2!m% z+%Of)(=3B({PLmgY)gh#G}e@qHr8NnF>~4Q+}P+v7qR||BHSBI;mO`4tDu0rm+)gl zK|0p%#OKxEP@|=*DytV(Ex)vC*$Pz1GYZ~BKx`yhRjsv;TBKfuQd`+?DHPxVtG(OA zudM|4l!Q*KXTz|1Cv;-n<@!7%&_^OXDhbe%9VEd1b)DSfRAoIKVz~HMV(c+7kz^*` z0f$PQnR7|b@tA5{&?)U|O14MmN$g@tZ5Ez1QT*N8OxD}R)H1>gFoiC+Q!pVU&32dZ zyAh&GCuXvXyybNF0-kH;j<6ScR36jUG}E!-*MIyF?!vHSa3VHei5cNZHPdmMp8*>} z@-wjQnGJ|V3*9s*+HnQc6?wf45y8bfm#f!nKtTE*PV&p><~{&(97w|Yz{9aQ&E#AH zxc-)@tc{*iyb%5{C`+vq=$W9|pesQmptpl|1?B5@1Kk3e2TB%y*jSt{UDKmjrMs&K zNGZ0|Ft$mGU2PZ{Td|FXk+Btf#IRo*)@;~r!+vL2FVqZ;+t;}w9=q#`9cS3L3|ng$ zj2$lAjfVZju>FRG!H1e&XXnE7B*Vz1yc^-_a2F2i!W|}^@1*l=uqXI=(V42p#{6se za^?P>ss6$~*j%K7`-5W|OU(byCfuNKsay%cMWJ)~{Ja6B(1rbp+2#Ik%l-Hb2odv_ zL70@RWULCgAM<1RvEnUtU3t_X`s$co_aA#lLGsjRl{dy#a%1W#`4DTEc-O2V4Z(D6 zQp}%(JG)~3EBatOwf=^RrY9(Yr>_5^Zo<^{hw4r*_fL+&b3)#LIB?`(CbaP9WB$d+ zmhLmI((!dC9sj~)-kjPvWNPDlETft{y`u3x#&pkz1TFX92(~DPaGajF;a`CWcWy-B zwSPp5jwo-}4U)Y3i?DxokpJ~x)MEu!ndTjWHRk_dJL2Fuj7p)4GMbDZo&}KiG>dNl zauRwmq%-949M$ck7e_C`p6szh@7;&M58%<6vh(jx#T8VlgpRQf_(>^(8gs5hQQZhS z4$?p`6VxIO0$JBa$|l70ND)GmeIq6I`Vhy>bO&d~*BKQFseHVIr$PI834eWvy1Is+ zx4ic9n&ldUf?vA_qmd#<5MAzo($8&((Y)h21^zP%)=BoO7gw!Tiw5QXaqbDnB+2rj z2nXrAwgR)uJLS}|+n<?JL0O!^H*K>(na`m*HA$YM=N`4&#F!a9UjlI3nYI~AZbUZ9 zgL5<2&frvb9DA5*W|np#GdFkbf}l|to|Nz3GJ1A6zBT6(#t!2I#av9wJ|bsC&O!j0 zHs$>k1Z2Z{DWo*Uc(K}2vPC_1tCYv5qBQ;p!O+2}*SSj^@BOXZJyk+;m+o%zQllg> z4ZWmhr6$Hg*(<@(jgdkMdGCpTKDq<_+6=)4uND7G@LH!Pz1AqcR#tdAUMDl>1T?Ol zGIOS6^~aG;gR=&PvvVe3%K4<6c{tvwjNd3b&_GXgZ~1XPAG>UMjZX7nJ)0#NsgU_e zZ0)Cu|8>mls=(sCT<<1tu#|vC4N8E9>-iFLH2Q2@iWJ1$j1oEDyBjYRumZZQL956O z&2{lGv`#4t7M(uw&+tE#zAPRL$|8B3!Ie~(wb)VeEF4vpP(a+B$l6<S!$Wv8C<ba* zsXfV|@)q(B4SrwDAMFGW>pcsb)sV@tKCz`|R@=1n)YIAg>u%7>!t7+uF)YER;|fj# z%Iive2kHQKsn`6EIe(xd{AY@PAWDx{5TCYdUhli~s+^x^T{3-W_;Lm5v3cYb_%XZG z{Gx-%GDo%!!9|%zC4?PjHuSuDLy71I+8>ntj{%@(fDQ&_0TqEh;rz{@$HGtcI02Ma zrV~L2gPsI>0_ZnDPXRp{^fb_MpcGampx1&<0KEmY6qK^J43s&ipUTW5kk#6)rYnN# z7ho4TS45^EXt+xaYqW4phTUe^4-I?DuxAZ>$*@-qd)u&g4g1QlLxxR6-Zd{Ak<>iT zGmK^z#p(=OX&5IEX<SYq(s08JJKivCPvgR!ZrE(YE;Ni*I!%vOI!%wGvx<FgSSTD| zot!JeZM<DLOrdjeiwzrZ7$&N@aG0Xz!qpkJ(y)v1_4K)OoeLAr3|np(_wCSd*BJI) z!@g(Oj|}@)!+vJi&kcLVu+4_OV%Sc@-ZAV0!~SI0KEt4dyZq%k7y7d3nr7R^bA>T~ z0<@P;V;sT}1rc4*ZParnL1~;mC#iGlpEFiEnb5PK4zYK-b>di5C8%l8>jV>HCUu>$ z)OD!iAS=?{d=vF1Rf}1IdwKX>h#y-&y-bUd<2M7*-GLUPr=n3Sp%_5F2f`-MN*G^t z5;l7@Ga#$DpWN3x68+sEd_p{G<IqcDXy+}V#q>(oCp-;pT>2j0X_81c_t+4({=k(Z zJ-%LPT8gu=GL{WRYU7YC@#G&GhhXalHVA>qv0Y=pZ=;QYmPBB2R4nnf;|hvg;(;(f z+4(sKmcl#c{DH7ul;l@oEz)|9gGu;pQ@e~GqRYtd{SoLu(2qf>Dt-bw8Wc5HW*vPB zdN%x@fwFF(KFjo0`YC0pDXWyFOQo!0l(LF(vX^3%vWij4Dn==*7^SRYl(LFZ$|^=F zs~DxMVwAFqK}~a5rgP~TY8sBK6Exht7Vam8J!aUi413<N7Y%#OFmjNl_o-ojHLSuf z#{j~PsjzF-#;RwGjUC!n-qd3U_K_$r-m!e<4duSKc4c;T?UMTXqw}7K<<4*TGF;zz ze#6Rck-d@mTqi|$X5C5U4STYu7PqW;h4K2MU$_qMOCHZ~@p)*`$Jw~MV(%t?y)EU9 z*K7bC-E6ic_Lfgg>9VY6D!7<jae~?B*Dje?S-+&Vdg;8Hz`%5P`;yLbp`o|4B)CSD z!W>DGN+I=Hs*`FDor_R2h5N|DeI>>u7bfJ*5&tm|0y?#x$GjwC6egPT{MzMCA?Ju9 zsvWMiqQZ%@{XcLiZ8YTDBpXdawTUN1VcC#bx`L`*3#utp3I@3ZlrOp%G#Atd?G4%l zS_pbQD4F6W(8&%b^ZYCPb3pF_UF`hzpbx^o8uTGh#$)57%tV)-oTgZ{yQ_N-DYn8e zvXEjo8g`dq_Zs%7VN@yg8P6N`qG2By_K9I5QPld3G0vsUSJLslIJm5YUH2uJXfQU` zGzKS(y~E9oi|037o$J+~1=6ik{bU?~RyQH$cV@@_)R@2F20R0s8&~)xBe~havF?bo zC>k|*(emNYGb~4!W)4eyIyYQZG^ShKQ8?%;8xL51r*5q>HfeG&?7D3Ik|An;H$sFa z`to1kH72Go#)Ak&srWDWotDBFmsc&Xty)r7xuRyVE(~`j*u!(kF;c%d&+Hha$w{}z z;JhEsR!eY6&_!M=Av#IdsoY{*i8i?tmOXQlZV)TM0c=i{ySjH6FY&aRCG#Xd>~9sy z)7GQI)?Ij#eXeT-%f*mjqTf`Da=>(hlhJYRicbI0V!Y)EQ^)sU=xSJ@D{Gg`Uy4L@ z?X|w>wUS-7Z`fO??$Tx2`m={PhY&{4C>+>B)bQ2N3dWo9wNS$7zx2&5vqh#Ji9ktA z%_fp953hS&letX2-f_rqg6RX4H~HPk^!W4U5y15%n38p23n)wYdC)$ft)PXV+d!Fh zYy=+vmh-dxaA=2&^y6p`8R35wl=X>zGWjoz$?1ajU>HS%Vk-^1$}k#kH7*BeHQWP+ z{mihPhP`gs2ZsI8uxxw^O^>52nqEJ{3Jt3=tj4glhGD*$i%Zk0rgyVp9~kyW!}b|Q z4%Fx7qDP@|^PNkDOX18}(U}<JDXj1><JL@1@&nK?>AwP{IGd{RZU~9`BQ}-b26<i& zTD-XO;w`krmc;xMV~tBOr(j-DOa_Lo!ikFh-~6(%jgt#uON36{Tz7oTFUh8(DAqJ< zj+jMD{R2pLb<Cd%|BS*|<E({nm&6*UEh}%jwhuBMYrGPpMa^|b!w{QY(O3;NK8GWj zS+U0Rv-gH$jeTN`v$JVV9ZU&^kVnyEyLMIK;=1~!bvf>t^&juW7}Wby8-F|$iIzb$ z7Epx3&Y7^$a?B_e^|x}kX*yT(;kA<A6xB%d`bWYX>1;cUL>nfXGJe@5NfNEDvTEME z%H<FUHOq1MI92-}f?c56FP&GvICUH;b+hLlA#S-&b^RxZga)y8?((YTtAwR#B-01= z3XPEI{lNfHVjF4B8=*Fdg97ByZ482x3lvcOBtX~DVC0ITPeoF~I!U8pOv3!u8<Zrl zwo+hq%k9)dZG^d5-E+gka>Lm{Zv^f6;-%G#MCef-4VE-AB=Z!fL&g6kGS)@pQSz|T zrA!+Z#OKk;=sYxede$P|iQrC74GwJ!V=cry>@(LTs{lVt(#oI^Zfh^(vtO2H6`Cw$ zdy5mYa5!zY6wIS2-fWx^<IZ@E7MzPn8fXwAO)OXpKd*D;f2qS1yj8F(@HNgTU_v}p z#(i%#IkZ1hMDVO=TI<+IQFw6UpiE#q4KOgVCC?pu)s?~BIW;+@IYl`WX<kIDkQq*6 zGUZF&DT$uY;Y(_<%&oz!zC^`)NFoh6Y|fIujF|T_!tpO@;uO1ZYPXHD!(CGnHa&hf zepS{Qrop#M-aAar=1m4{GqDmRMxMd=UcfWs3bZnLvbK<I(UtCrqtW)zpY6UEyKiiZ z_Thf33qwMFWlO{k@2?&HmjWHB|0^il+=HO(LVpfQCZYd$(1G1`i_1ZvW$+&YP6o+< ze})T3t_#CI7c>jB4m2Ay4%!8D9cV7-4WL~?S%-RqJ`Z{%=wCsP2K^GWKWGH`<#Q=t z_*}MdPe3548cUb1I8khlyQ?cs6kBH4_bl!$hCOcBlZL%v*xQDEWf(1L`rPrzlRksC zHN~bGc8+0B8AiLNhI`4dR}EudPt#*xPs3%Ry;3aOxv;siVf_p%Hf+3MXBsxmu#JY@ zW7s2xaT5-G?rVm<Y1qFR_K{&&F6woL5|-ng?_3cs4fV1G!=g}eMZD|a()YN*xgy>j zhHW(LA;Z|(XkMN(tkp2FY`GOOAx=mR=2=8xuhMxI8JJ`trYcyhWOz<@M@%wQv2qos zG-#*e^G5I+i5~~x^@`80s}xOi-qIyCP)F-(mM_7^JrqdupuAyULa3=C@hRcKd$^7f zKc%2v`R$t`ib)!@*vVr<k<LmqBsbjSYpg^NH_29_Ky78triEP25|*D}YQU+QEiua{ z)Yj<^C1F`mSg=o8N&wfMZaTeZFDSG9C(t6$KZ6bd{S1_4w-1z0pr1_pGh<r1bi%1( z^W0sXaH<%^hK9S*;@)i77ls`)EDOb`arsp>E|pBhiVTyAQ|j-S)YLD8tso{e^^26| z#di4H_P?1I+g4h<V@*y|W_injF!piS+ht-?=GkzExo;TujmV2_FT*|x*q1La))Fn= zz9wg4Q*KGim*McXy<M7e&xR`+ZY}e-lw#W$3AF|LydeFT%8Fao^q<(&19R08Wc%=K zEeA8ht)rWZx8>c@Om!<;j-|^+kP->9qiqngx6B0VrS6Ha38l~pzuWQqn^r!!q|Po~ zz67JSwJR#;FRrSS`q~}0LSF5XN}ZohuU^_?x&$SaEx;rA?%8dl=*9qy!uElcA_E%O zsR+oLto=mdoRt<#?p#`5heuHX;C-!hwTPGLO@fVv@fPBddU0SgIi6~KygyL_493$k zB~GoynP_p)x2nX`<XOz)Y>9IYp4A2H+}&P<;cAyiFfur6Ck}#;VAT+0iCLyqtK?a1 z6ZPF@ijKi&)8<GMbOiZHilEzMF~jpE0QV8q3@-wfE7&(hvDI>)SGjQ2vZZyBEFW>L zgcypi+5aCjI5C}RA^Du-dwzX`SbPPt%dkTFDTozXFk-9l?$b~d`+%}R4=&a#3PZ?p z+x##KhFR9NLeNt{2ZC0E4gzKFhl1V&It-L0dxG&jUD{YHHpku7##*suhFx!Qzi-%m zhCOK5R>NL0>|Mh?G>px*J|m1Tp?NvNxpKVThK)9igM%9Gn}%I%*wuzL7<Rp3-#6?L z!+vSlbB47V#ty9J?_<L_IHuS#=ZavR&CXc$j`Hf}3T!D=UfseKHlv%%hoi0Ah7A+P zW7sC|&gS7QCNO9pO+A2X7z%^eQ2f41Coq;SudP{vg^#sMml)fm6&n58-d2WDX5j;} zj5$M|*1on3&kYINGCc1mm|O2_dh==)*HsBa@|9Eo<^O-rC1jGZd^dMVS%OJWyPYV( zDvYof=k0Bvlpe2uvaE5ysxZaz#uRjEW2o3Xgi`Ek=gRRK47<~?yA6BRuq}qYYZw{8 zJp+a2p5a`mO#aU37cHT@^}j)|nBN#D!2m(lrXsku;9mZd>;Y^l#J{}K&9Ukp*=5|; z;STt*IT03vVO#j~ZRB8Tb;i^ttp4&_pJWVddyCNJdF8F#4-Gqez7)lVXtCkgqLaI` zWpQH$CRe^W+Bo5F<qaQ&>Yv8Y!hB1wyt+HnW7Xb|4d`Qe<!Co0A#N7h&{BvRpT#|K zvEgUl)D}x+YtjG(j!1zb)7EP7J7kU*_4|+7)PI>v!5R8Ecz)jH+zWn1rBv|_=fL)m zD#_06o04W&`op?=Ly&~kS_y$hjJ2G@8esvZN?UX`l9(?3>(HQ<V~)&82p4R?s2g9? zc9Cc<e~0ioX2~r&H7?Uug9v8qF0NXT*ko6qT_Vq}P0H@zB-;j8KftyTIX&DLv#yQ_ zXLSy9YtOtq&Tt(pDa?}usMfO2##K*z8L}j6EE)u9%vc^9#eW*=_lYh{kjXq?fz?Jc z$d|fO!mHYx{6c~DE4SPKOBy3(_S1~SaC3Xy@%T}&R@Qx2YaBUL0zFxF77rRnDxjEa zD+QQn9OFQPi*;x_8qKbt49%;*=f(L+QBrZ@LqI90js?X%t`m@@8;}`smgXo>D%mH2 zvY8tLN;Q|^HaeWOia6^kaW<-@CO_!XgYp!c@9su0(<umdxnWFO!`)`sy@vh7u*VGh zm0`a(?0v&NGwgH23h*WM89kjVBKs>Sc8p<jE!=#=uqMF8z1*;C47=8_TMWD1u%8?D zxM7<Od%-ZyN71}+J_=nnPXc?G$u2jtW1AX=aVQ@Q!=FJmeu_67jSaj%uJ9kZ6>i+P zKg8jqnV2;z^YJHPas{WnHm+H@H>;sF)X1psuK#4sh;kT{{nzxazk5>&qQeTCSGLtZ zP}d8yUPq(#*15BLJFn{WEUGD_@#3Pf{#MTZkHs1<UdcWJ#;Du|HP|HWS_FC#xlfEZ z;V>x-aZE;?OkBT&voC&k<9EE>Vb@^6;#JEQu2{SjmfFRzS60rgtz#dSU0Tk%!^}<G zGhWve2a2D@(}4n9C&357jo{qohN2+R`s+MW+EHmf;yHl96puEu^JvjU4aapg&V5lc zEPXE^znDIGK7NC824!I#YF@IPQ0%a{ol~v540prmQGW=lPO|5%jtsT6#Li=?kgb%W z?5AHS{tEPRxP3w(kP>F(K6ov%B{lcJQrT|GUq*O*hciOPOJqG_fYThOihlvrqAVyd zLnP5uGop6BBp@VPu!{`KA}}Ea{d;~UEGOe<B1ENxp8}A6ig5*JN-~L=ceTzRN6ds& zo9<8&)|b>S|8W_*P3~||e)khWi$O6tT@EEX3G{sU$AGf9cxV}=R0(RQ+Ue+ucr1R! z7CM(6j;+{A!<dF*KQN5-S21=1=!$sH8P;mpFnm@Gcf4~&ym5wcCl`%-kzrMaQI=@j z9~t(5VLvmhFZfKu;ao(Q9?HmJ<U)N$sbMk0f`iP~eu^y1Li*;q(O;Bghd4?^d2tRn zeFNnSg-RB%e2zjjF!*R}!hYt;hB?`P-<zfG(Kzq3Pu{HNyjd^i6-*q7UrAnp&)6XM zGm*xIO+qFvY&>(>hK6ety8)!pZx)Zw!izQf+l4gjR^J{W6EBQ4PMqF&=IloQJp!2M zb-@;tz4sY@Y_i9uC{|m5Q+hp(-w7Rvn`#`UwmhAjAxq{XA|?W)$en!fN<uCiN4bFU zk*u6Z&Y2hn(f!5?Fbt9<^TXSW_D~{GSvgJ;<{-C@M4&0f)di-vM8dSsBemm@cvjjq zJ#4etzoq~oKWif2g>@jy3k1Yr_!)M(U~LcIfsaeW%QWMUmIoycPGhHIqr*s8&SX=h zfVt9o!2}#<*<<RZC?E8*IO#tNbRsBKfk~jNK_`QL3lx<z-T(@7ar`@=Q$bll&H^O^ z!gw6#knnU+Dhua;J_LFR=o6smrN;TaF9jvr{{$68*`BTlPXcmSm2*Yp%oz=LnPD`= zEB2&eFBrDXu&)d|WLOTqu*S`EE{Ge$SW`7GR~Z&JEO}+kRYiT0+x;(N{;ezutQA2+ zzlf&gW#mgSEr0t{-oe1@H-vvrgs~a?J1Z^!YS^ulS0aih9Go3<z6$>dCd854*_c?e zpOV?DKYprzGNIn(et+l<WJl%#8pi8fJ_wQElH?8C`GIBzdWf!I;qsNO5=8Hd@&Jv3 z`h;w82MvNBvk;#sp+Wo=k3J=ZrN2a|p7?!;A7}LI)mDR`RXiO>lkxOQoxJ(Fr~-MC zo=#5`&ZG!XCR^kDA?!}iYjk?ufy%{j39uOk_XI1Gzre~TLwD$IBH{>$i0qC<#4JfC z2l|qVh`Hkbfee;T0ISvE%cKz(vpN(P(<OoKk|4!Ja)OhgQ!IoMkPsV*%y-tz$8W<Z zZ#7a+EUC!C9qLePL9uXTX%&XorJ$%oQKzQ{ND(&^kE1BZ7fxSrEa|%>fOg<GAt)&6 zGz%Vb<39;<nr>8d8*-U`QY`tFLzB!D%Rn<VP~Q76qB2SKVQGAgxK!;CgAn;T3OYv~ zn$UZGk>Y<n$xl6q;&qwBNLc47UhyYd3$f)8Z{&j&psb?b0p)Xj(33&G3(6kwji5g0 zO`x}cVpqdB3l{s)%3{ddLCH&ZfKps?RhWuPy3|0b*c^9P4Wx=Omm03g;@)W34-Mm| z)o{-kw%M>Oe0)tW;#_*BvSOUlsc~mnxC;zhVAvwV*t^oW+YEc%u(u4`Z`fCcaVez6 z&2cU)3^lCMutkO~HLTe%?0e$!yxp+h8up%He=zJ*!zlIieYxwA<|Ws;B3?R;ZJbE_ z(O;{vVb;7!d{v%eTcd)sRi(~AX`GSLb7SX(&G}6HSpD^CD|hEFuc_&v;}-OBz!A94 zgb9qZTvQj*q&gUn>{wYkGM)7MdSxl#{BOu(RpK3n^QWXA%uMR+q*IV|@M5;Unfzz@ zk%zNED;!>hy#`pOusz78%uo@;9)mg^XZD~d$c%<%pj4TbfU^AQC$FAiyh@jzJge9O zcUQO4P>l904R@=>y~D8k4SUG2-y8P6VV@ZGnPI20zDQoA=15*Rb4Rh+&SiFuI@&d$ z+W41Ye}EQ$RcWdJj(`40?0?@}>c3Iic>dUE!w1dlcGjKjm&ckWkN0<!HBK)LZvoiw zUURf@daSgme0+5H=CW{XOw^B^7HxRHxperphL-Vg>>cJuPiv@(HJ3KdC~b-%T*(+j zV-Wwv(&4R5lg1+{q%(X=w6SDlv@v#CStHXaDUpHChUP-rHS!UJ+DRV-D#6VP;PUj6 z3hQ#<d$gNV+lo@*Jj#vujp=|-7A&uwS2@47uJY0vY|K@yyBc(8<>)DlG9AyNyvNKz zwEbrk6vD-WnU>ep!aOWp0LTb;wPK^O6A&%fpJsXOf`vM&#~hVOs52qvPxm;ft^W}O zg1nGFXbV1GLj8+8{2cfPiQjDoEbh5W>*|*3PCQKZDgkpPLM<Y&#?z!s<`QT7e_$^5 zILH%83>DZ%3jy;G9`}j~3qc$=f{W!%zUm5E=Rj^I&TlXs^cc`{K}UgJ0D1~&CFoSp zDp2N<n~B$e)_{_8E(N8%lADFI4Xp>g0dy7UM$juk$$t+S|Iwv$TNPXE?nY!kT*X*E z8tz{#?wy7`YuFaU{>`wD4Ex+LY6Y5JFO;@EgKec^Lkv64uyuxQFpS*|u;bz)OyI;$ zRG5GoEaH!5<D`lw$Kok5{}H}^%wK{o$0WdO5E#>3UWRfnvr-SB-%;OL42gS}=gn#! z-JDm@dGy<P1(WmfD~vTx9$DV_%%_q@mg`bL_b<zS@)5ygb^E81$WtXi_V$i7#j;25 zjBcV>+JhfV0w=^8Pr;gd^f@LkWIv~~7%=x{=)t2gS}3QJb9GK^W%T08E%zYei}*B& zF2%=aTvNLg6mxy>dk(*09k6UIcg{JiF>-)Zd@8;JkPfG_k^fTHm{Wye737wG)STOO zIcUusE&=99f}E%RbMe#K+14n?MwR)UF86spz!DJzJ>XaFTj<RLN|xpUy?jBP4Z&@x z1AnLV8acZ%CrX4n+w5$Ti6>&_=W29iPJo&n4kxczcQ#VqJPJ1pGLmo7V2DNAtI-iE zz|Bsb_&(_jqif``x`!;wgZgW*H&JqV1YH2q<T?DBi`-5F<e0|{9RHSkM5lg9-7(FH z1jre2*sMh5(OQI@8Z}A$x1dndA2Y^!<Sq!ez+B2Q3rwc%CRb7dmLN`&1mv&}Aquo< zp}+z>u0V6+*>uZmai3Q_UppF9u6ca|e|mArx}GX7v4@pR^@m|n)Q<_EMF>Yft70)I zYeEU=si3^S5VQ<*DJT~3iUlVI%8B_<+2T)uVh}FA8T3L>ip%@KiQ2WGOS=||&2e|N zYoXXO!>+TqHyHL)!yYy4X~S9!<NIoQ?;G}+VHBpCmrnS$8m^0TMLZ4|DR!h`CmTkk zN8|p~utyDh+OQVGUN&rpVcY;!pK+RVK}|BO!Z38_ybS1yIQhi6BHjxYZkvUB-LSU| z`=eo$ewt?v_3Cpooy#pjIFD-(qzM>_;Ux?;t!<&YSn9u3>hCZ05BZbkoL)G2<~j9C zV}2IJa5UC5yN_SeBi1wmE1-VAVw4S+SNNmd;-+#RhZB`&iy%jo99_)x`{lpi8!q?% zj>S=BT-AhGk<<HNwO@=zr3;HzqEj+5N;!V<MVKXdIu{b;t>24R;QEGz6=<`TaRpW9 zGJj;5zcQ1{5$f`uh-S=3V-zX%UxhB|Z{53sPxcFty_QlRJHj^2$o3C%vOw``D`w>l zDDf=6Q9r}q9rdSV7H`d)`fl-N|Es*SHb;wJ^tbb{B8=x3x0d1rq`b3Q%NsUlm-;P8 zV)?ec-Ff=M2<%Zlv=qB97C~n$^#2_7UupR=E86hK@eThzzU4o0R?*fnob`DC(7%t5 zwj9hV^FJyLZ;#?usgHv^&&76K4e#U5-?AD$7>{`g<HNZB{)DF7Q%b{oaL_~{=KhVt zsS`z$ntGhX@Ixmyoi-L~^avaymA8)VPPAcfC~qAFCS7$?<o~faFbOj%SZ|}7z;;+& zhQv_BPqF7AU*x0ya+B(#-RxvH(f)W1Ed$D$rW8gwy<rDtN|c3v6Ml{Jh`ng>j`}{# zc+-UUnCX^=1LId@9@@4y96f~cKDVf-X>uWo1#h=`K+7Jy_U0%EW+jH7FD-7VKN70` z_@>E>iy4lL+$nmfb#KO@mNI`wssCo_@SXmbWjKAjX+j=mK4QK`1={&#TqClu@fOO1 z#_!&Q{~LaE4gSyHdTkuU3zas`TwL0C@xsPQ%hn$B;)f39UB^Z=y7tRMQ0VfmzgIj5 z^bYIyTAXH#8+W1_wyk+vo<fB~^{*%z%Fi4{Cj)O)*w8$lpS_5$hOZjNl#(x5EcmjR zT#^-j4ew`ffc*Pg{4X2!;PZ^exyf+Ub!*rYt}AFb5US6d+|=&^9OCuSAl#bV)Z=Wt zD_-<(A9d#m&CJdtp(Iw=!XDt&5b&8|z}tpzn(1+d_84&$AiL_~$EK+JJR71rr8j>c zJ~oo@ZUP;S#!0WXy?N}AvZAK0gZ_NmzI#uZF~XXsU6dQb>yfEL85yE79f=3XN}JRH z*#V-h&~BqD)4icl-dSRvT!dOTT{1N*+zX-3@>XVKh0hR8<tRxGQ^FQt)+CLi>>BBH zdT2U=zJ|8%-@J1qPh3`;oX`ngFIl&78xqO(s^>1{Tu?oXmE}dPndd)qjbLzoAd1gp zGlG5rHiPLRI8FGuK&YYf2-kBkMN-oV;l*)DIt>^nVp=?hFeE*HS~K`Hh;dE{(@?Aw z)|JwNLipJw>kf+kMy2kxPd#rbVjd%CY3MSf#SgF)Dew!j_mk-Ct*WeBs*}GjK^)G5 zry|ERE<t$M`EccgR^$9_>a$u9%UBT1R8SX6Bv{yGo>3rn1<Q~Z?WK@+gS=2?#*N<R z5|$l5UIQg;ri5jhER^#F8-g~hkA!6*68}z8x|cfac1h=8=vj>2v0xX&&kw<wj40iV zXE5D|`K7+aLYyP7IYuzPHn9~F_7sWF55Q}NJZom?dAvT;<;iKhv{)jcRT%Uq&X2>q zvE7Br9NK{JeBPxF*YJ4~ma~_bx8$@Lc5xfLQo?q}^O(2fboo4v?Gx8@vqM*SYm+L% z%A|@wqr)JC1e=FWKyBw#<|TNN*79@0VN{ct_qPmIqdTM?VWuPYv#pVktZe-x_6eae zi2W?a!-4^ZfKR$Y-yh|@=pFLPG7{D5irRT~3ndMfFU-og!l5kmb6Q>XA|qcY-(iGT zh!P2^+>a$}D6~w<JX%2JPE^DBXoT`HWO+tGU$H|ht6f>MxDsoOR9f&2j+O*^OGeqZ z`3oL|;errP(>xYv?+`~awNIn`pnV$UqJ=eP{a_AZ2*=fm{5>ge!`vitINy5*xk<eB zvf8?8eQVZY4fiLn(p!yiI(o~Fl|HmHCZC;A&{f`I#pMgIbb9&awbl9>(1pGAd@$HN zSbdlstUlx^ra{L+^E@^*AF|_3%+Sz#^1|+Hoe|-I-lN|8UUA0Iq%KW8@`rWHCt;OZ z5%<LEjIFW4I1C%-USm04uy&EVd+FLmmKPLu&h^5jR+|`#Vx{=QK+Y&Al2-|~yW$W{ zvD`gfN}EG88k*Z?2B8<%UW%SFQ)dTqf`mWW`GfF-tq8bA&ldYlwFGrM=Jcf3yN<7i zm59$`45}8VNe{wrE`ZFOA^N^pc8H<1i8&L{^~}#YJ-5d|N;fUdl~d7DFiR}ty^^J# zQaj0Y{DW+Qf2;^Zjk0QLl`cr2ka|s`XeW?@flLIQASw9DAUI2Grv&dLPo&(@;3Y}H zS206m4~om}5_}{k0`+znKzV|;A1qsL>dbYg$z}V##G7ShtB=W$FQ?%zuc?;1yz{n% z)`2f}WV_1~V4FiOXzrth37t)x$*yCgoc^gP_Ca%cRzWvxN=?ogfDgeRt$HIRj{X~( zaAUA6m{-7B$xm0{b;5tSilXx_smF#E?Doz9lGN=bv=9cmPJBuy@#72Kw$Tj*5 zR|t@87iLPb?V=H$W;I^<_z2qjl_dnN@}_!=dJnt5C&T+|hp$5Sl*Jnd9R#`-lr8PG zpzQWu2g-Wh1bQVXrq#=c8rHqZN_YA>AptAG<;cUEKsUjE3+PjzKLC9e^bSy#=$)V} z@q0mQKz|JSZP5EbzXN(d=o6q1fW8O%4(I{UcR~LX^i5D6Ui}s*=l=W@loIkWP&T`d zgPsBk{XEVcu$}>(0*cjs@v}f%K-pBi0LmtLD=0=0<s>eixbYkKzYY2_=yjm4g0i{V z2}-g3IVc5TSG@o4K=VPl9~R4_7w8{w|0vKspoO3xfx;5&eFAz8=$}E^OzZ>YzE^(- zy$Upp`0GHwgnt9*LD1_#F*X;cfMxn4P>$o#E~^=Vt_ZZR0ONcz#p(@PW!N2tZ8Yp5 z!yYlL*|6sf`^2!%4C{h#p?T@*T)Hv1Vlb+>yi`~?Dyo{ld4^HGD8|Vk8W%OuVW>+E zyVWq%4~IQu7`~0eUN`KIhJ9>U7QUB0BjQ{bX*G<sN%Mk9Ixbw)FxDB3d!Au6hSeJO zEyLCtMs-2s-fS2~@E!J3!=5&*#jw{5<JwQn-zSEBW>^SyM4!RhsNt{)y~D5#y~A+i zsl#x{sl&<)D>v*S!!S<Z!eK<f#l@I_!x{~1GVF(j-DTKghW*O0w+(yOus<927sHN3 zP1koj+PNa$D8s&C*hPj_8CGxDD#IELYclMIhTUZtdzbp$R}6d0uy+jm!mxveVTVK) z_bBJWZh3~CXxKT1%`$9}VM`6W(Xg8hd)zSWU*f(8b|i7neciAjFm~vB9OqmS?_|SH zHSAo&W*auou!V-LGi-xlHyL)TVUHR1E5mws4)Su8b49#k4I6IQ6vNIk?3;#NY}hKp zzGYaWVNHhJZ`ebI{o1f*!`?IO4~Bhe*k29nhCYv$X?N#}c>N6<WY`IYon+Vq!zLMa z16<$37t8T(a;}K?nT4YjgHMZixm|+i<~x@gS$6BM-CWj#ZaV7(nH+K2KQ}p|@yeC7 zyyy~bSqeMSrb;xfqGb|?vLZKPVEHA)>**;57B)Z;{4U0C1k@D0+8S6owysbqqq^N& zqE&cN^ctwYQhm^?x2VvCs8pE8RX=~en|H--hF+<An9RWvo{*QkxQ4ShF!s?olG9b^ zt>zxlD+`mmj!io&o{t_SNhc<)o+kc5>E>aKLdxkUtsW<lXkgJ9SV1Bkji}(e2Un6} z$;@xVkE-BE+)vUXxhvsVKrEbTAuF751suEJmAo0n96|ISzZsQ7)GFI+9#g90{Eh=a z@i>oueiizsfkNSuN#{kN)ec|eaE^@-r_vHdWl^PtE?pv{*nD?4;$3dxRvY#M!>HYA z-1`iB(6G-8``j>S@b0-B-O#vV2bR2W{6euw7LFfTu}2JJ?N+SSFsO(QOP;M-SJX#X zaBDP^*@-oQnW<h*$A9bwhz*TKf6`csorAC`g5HC(4_4=4Bhc(8H$bppmgxHCXG#zr zJ00bfeO}j-BMkW*2<GjW-?|6)K)D#@1zmp9SXr3Fs{L`h7VnoSOS>0|>oQ<%M}fB> z|EWiB-hfavF099|H$Syp<k*E(D;8ERslODfwA~=^PtZvWdBjuLl9MiU4}}vXdX=y# zXMnfaMKr;t!zBV0!{HL)7%zEmpPtAE`n5f<yLIQRqjR%5W3;kw?u1VLlX}Lj43nMP z`KWLobbW_|@A5k*PYZpK_s4`MU@1zsZtP2P#1%rL&89%*@^EEJ3Z4tZ&vkNbN1XX~ ztp2m*{xIno{$q^W3!6&gYj}JmW|`SaW?&ZSw2%~Oz`!iFHm6B&4iqnT*QA5D51tYt z?&3F`4TX>uZ;ZoUMtFYLS3rk?($9}WKRNzYP;%&8;fj&YrKdqCR%sYHTQTxBUD!&* zFg{%|b~QBIM#DIUsMyiY74e1{cD!LMehoL(Fm&A<#+s|o*lpPF4C4VY94m@pSfUV( z)Yy;kcy#eSZ>ewsKfq`B%|VRR!^3IO<^8VsvA3;PO8tjPOAipL!|jj<rjYu}C+O8x ztQ>>k33>CX>Jkg2^>#10ox(n>{lV>^?P<d<Gm-*ucY`0x^A;|`vnLc3BC56#-S9QO zS-`L~AkaX;W+2Ulc7%rwmEacNV_Jys!ImTjAM-vfBzY$^9p03>$;#iRZss9eAwcE} zb$F3f&V2w%@Cz=MZ))8f6!PLM^C6&ohoPV>f7A<UZRls+tU(}cJ?PSrbH(PkyAfHg zsu%{cBt}Gb;82VP3XMyXgkm&GD7M?M-x*eig4A#;oeOGK!+#7#{VHMoD%pde9+wJY zGr1RIO;|0&CD{$n4c*cWHx?tKiD@_Ekwj{RI~Jk%@`Lc}pT5E^Ub=Kq{W7s=9lpY) z)To4f?T&IwsW2sYo>rIv7>GzrbMJ>dKzc^9At}STK~*{eD3kcP)VU=(uoA=Th#y&_ z_+wogie%GVsB6JyID9~G$W_~V$9kGn$ylFC0JW)4V#`Xd&@4YzD3&2B2`^+!DimxE zQlVgjjkA2Gxr(#^fwdyhr4>oBIS8fLmCluep^yN()i8=S4fnQT?;3V43P#hL?Odod z!Qrguac{$+7=w@b`=~dd8hwOKR10~26^>8AxOv&=Lul_$;q1_uf547nIYL&n>K=hu z(OS`1EE5PC{v4|RKv$$TT~vr8V4BW{<U0?$CnCLeQQYZOd@Snd#fjsnhM){nl>xqQ z9)6^K+Sg4SN>$0p&grCCLPtMZWFyVsM<W>zV+N|jhdgR^l#pqqU83^p%um{ndP;<~ zlE9hJ>w*MWGuen?uxquLa+z1HnHOLN=r9>F;Rr<u!=TyDMcX(GRc1VBqFT>gCXw0n z43vNsnCO&tb;(3<Ncxo(6D49|acPP8M|s=<fKMc!B<m$?{4o>k@(vTcOcF?(ShY_4 zJ<>8<zTA_4Nemb07bUon#9q`dVu0Gna2k-ONdk#=8rLNG6Vs{YIFy9-gFKkrWq8f= z;=K1dDC^K}P*#99L8;_nEID2R`VJ_&hxA_x`X1<wpdWyepR0{m=~9J6u}XJWkEc?M z3W<gz|0+iQRg7G#*ha%1GVBq<er;H@VaT_Oi=4XjJ~8Yw!+N3i=rj5{SA=rMVdofD zX;`&k8x6b1Fm^#SJ$6C#J-VZ;6{FQsu|bBBlNCG7uoA=m|JYSoh%c*Ml}p6MI{(jg zReBX5id?3uQ9AwKuFC(yuFCV^{2ut0FMv{=pr2h8`YGkNf>JV6nPi|#C4*v=42rR< zq8KHEV%HgVgJF~m8g8Ru?5Zfnu8PKGS4A;)RTN`;p%}X=im|Jr7`rNpv8$pOyDExF z&jh}dp2<moQWZt^=7OtlN7dbWCcV%WguF#Hy7yC}HSToyo{8R0(IXQ*lf)$H4tge? z@EzKAK7uT#P}ljO2Fk2X3o)zgX~2`(`RD^ErQs?B)TZG|G)&1FD9elu6aL(M4{RD2 z^5XDfHj7rHc~*_+Qe{xFIS8c~8xzIYm?(C;VeC~X_LO1I8b&Qy<5GpuaMS?zAVm6( z19RQB<G}7*YJKRBP{^?Cxpj2<`jFId=%_w)NvFIebgwSy`Uagc**EAMeCZDR22=+) zsp9`#-=J-^7>ksW>Oj)K_DFe({$rW&dxt@b9L{;$ET<^wk)WKnP4O`wpmqZ2((kU= z9CufHlZx@XYq)1D?q<W#Lv`tma4v4+6~TER<!f8m2Z%Nt2-nv{{eo!mjO-}(kHGxd z8QI0#^QLVc7K-{^qQ&J7o?4z=+?rR>5*;=HNO>mi<RU^3L@3Y2ooT$2+4jy<xg&9M zx8PBkd{p|V8EtPQ#l+LnWh2CgCEYkn@`qf6Cgg5mxqgOUAzm@{80J3!=k+0eoGPIg zo9D&V^D38NCvu)H&gm(~;4U_6)d>vA=6yBypN+&}ti$z=1gDYPZG^)Sf<$Hg17<SK zl_0cyB+a#4h!phtgY=?xUdW32xzdxMU4<0}XQzp|L_@aw4~a$jM2W==yBQaO$V#%j z6QamUn!my7N=wLwq*Pfx8^9to6I|u+D^NG-gsmY?3&?6v&ZWVic$^~!-vVV1V-4s< zpjU%l0lEQnCFokvHJ}Zk>>RBFeH3&(=r+)6LHRuxo;<)QvdRN==|Mh<F?GdiEgaQz z#rPf?j*Y2e4;uEcVJ{l?vSDLbSLC^4oeP~~*=6O18xW|%pOPJGnlY!`UrVl%B~E^1 zT&%F}lu|!q^iJS?96s3QtaFq7(s9v39*iox`qzIF^EYF}Y6l4(CbcvK$#6!>MhX|> z9xuM{VtiJ;q?U@+MR#OM?3sVq#ZQS{)`mzrW3l&GFBm&gcg&|!##+aI5o(fjfFEVU zmpl(Fh5&tuK?E}b>pANJ_e!Fl)6|%2*7RXX1{~RwJ~KQFB02-R;A0BhS=^OAw@Vf_ zYYKN|XPbt7Y(%#dhe_)swS`D~n4~pE(&qH8Anmq$*puU!vy&wBaIXjnG0Aq>XLi}o zV^Gb0BFV$-O<yWeIN4dZdngfqf3$SHtQ`@k{l6&*8xzYQVAdqgOlmb2CdFqR;D{GT zxGr?~o7hI3&bLANnSKY#ukkJ@Kkj>==YW0yIurCm&{+=uro&l+#K~z7N{we*MVBs8 zR&0S`D=Zv&TEpFD*bfbR(lE9~8jjqp>A|A!u(u3*$1vDfUAW_%3sV3L<7k+sM-!H& z$L341Rfa(hIjqsJCc_>wjGb4F`)k9R4eJAb)MxZ_E;ocNhvUiOXx;aPJG||i>VJxT z+jg!QMq%N<&fQkpZ`$@k+D+Sd9G<R^#6ssYl6PB~go0_?)5JV5)Y!=;3J}0!-+{KL z3-IFtHoYh$aGa^`)Fw<ojnoult-(RybHEH-x~R39HHR8$FgY{rMs2zeGnGbGJc=$# zk~%bnA#Yh_upBOV;=h{OW+KMX5@QDD1t%=KTaj~^nKF9j49%IVyR+rM^mO>$*=Sy+ zp2@diM`wWeqc9y)3bh{=<6KgGyPn3cg%U^qvH5gY62CHQv`3LY+NkwpVyb>L=D97@ zf>ZQZ5Ys}5f*4nz63lBmFgDvgjfCHEBe<EFs33rA48rr<o($UC`B{4O7lY#IvK!<$ zP{tw77d#!5jNQ{1n=Wla6}!mY)s2-DyUeibEba}4u@|c0HX242SB&Z=T@eo2Ic%q4 zz4380+)>Vj`80+NH;i&w!_g|G>9LQh7;C>`?4v67o?$7rqof@fM<0s%yQgwX#*h8| zW$T;QoGo0si(LBYrV`{5$BOILioIj&KdI}E<8HcDkSAZm(K~x^A3A_+hvdeyIkxS1 zHO6@+*coa4+pC_FT^RTN_I!ljilRsit&D;M8JWVijR-~7A$_SG+s><B_H|6#h}tp5 znj*>y)`#ve8j};d2)9Fz#pG?>FO_Ahm!1GdqxUfa%tJbP!tR6MckE7{qM<{1>Jn_C zpp%Z-8tXNn1D2=qpcfB>;l@J2YKR38QlYeL-#2GC*uD&1x2|OS$#8Va3`W8+oZ4n2 zoQ%lg<+2J&AQc01Vd3qJZ1(7Y^*!&~5>MxdQxuQ~_z{9GV4?W+-#;k|$oCWlEOzb} ztHn+MQ3903nj|1%@U|Bas<eP{kwlU%Fb9Eyi*<z}q6_G`4tyLjSdTV=_5-D#pOyYn zQ1tp`7R;|f`NGYhYutSn2=7x=9EBRI+BRJgId5ArHY|$KV5Jy^m0~v<cC%r38FsH> z&l%Qg*lxpqXV^i*{%%+VA6cK<&AE_2!!9svfnkdbyWX(x8+NB*cN=y*cvPQ3Zq;|= zDqqF8uF7H9%&jxzM?TiOn)1FCSsj(a;Orvt%EgbP9C`)qvJ6e79a~D6!@A-#1e~m! zHYa$v>*0EXXuQ~9u@1Lsu(|<6?Q*r0NscREUE&qYxN0|s$@gHTL#^;wQFx&{6(@ZN zlm?-ng7Q6o2Ffs;3#*lhu87P<QS3r@SNHK$Y^7maEG|n_<FaaKxc3YbSuYcrMjtBo zcSG^QU}RMGxoC9){Y41$#&FDUNt$`Iey9IxbQ79p$n&i@nxhp5q$Q>h@&!M`??Kdw z(J3GEJmA#8r{G6@K(F9qUMBnDex1NBhBd5zs#Zk-c|?$&cb)`kuSo?84n6~}5(pHv zJ|v8vc_Q^VZzwxOT2gPIL{arFFf|?p(VSS(#Baw9FBQZ4<2ptDQ)_FlNU;P4%6*+_ zNDYYk2&E|p+6%?4|Jq8@|GFZj?}LgK$jN<p&a$Kj@>{XOqSNHfb9gDj^ZS*7vJlHb zS?p(m_5(c&^jJ{DjSmBz3CfB*3zP*h4K(U-)&b(Y-wTySD>_{;IvRGdb49#w8MfB2 zyA8X~uqO<IOqP@*-W!I!ZP>pXw%4$)3_E049=@aI4_0ND-id~dHf+3M6Aio1Fmi*w zTeD%$8J5h5W&Z9`e<$>-yba$&Cdx3UU_&DuI9_7IS_SGBKzde>-nj|Ormv3f-&b1P zx~B89{4jeLVA*+D-oq_eDqoLt38S$1ZExR=+FM43#U3)zJ{A5;2)`@p@02Nt^_`zB zVLA{5yY~)=VF9?zFR=Y^-`yK=yJSoJ(xTao*6*SYmzXQOKFn>?CmWX|Rqr?WF`F&; zaax>S#{bJ}I*<UmZZin~gf|B)_HFe3@AvdbVQzYVzuYbY62aZzY>V1D^xo3!kga<| zUV<+`ro$2?)ZOl=|Gm6hT$)@$oIXt~6Rgxt>nRKpnp_^(mTNu(qtE@`45Yad`Mk}g z$rYIC(_B(>g-erZ)FKVN^j+5=<=|bp1~)m4K)p+y=y-u7&`I*dUR|~Lt07)H;kz6G z8LZpRurd6h+{;03%L>?K7^)A){}4oEsZ0$^Cr&l=$du5t;ZGHJ6uo_bLt@}s0ztY! zL@5<Wax7=0(qyDxgC%SqjUVY63DQa0hNOLT)a*oC)s+%JJIAz|X_}qd3~f+-fL0v8 z6+PrEtO`2p0q{vZSH?>#aC<p*m6^s-Kvva=mjF{dQC*0~3{QM=Zh|u%INuEOxJ65+ zD$Igxui;W8@}lIX>akwE-nGvEW9K(jM7QW`b}$L~kg~le=r0N2x&kSZH=#zvnQ@GU zh-_X5`VIIYgG3YdLHQN01BKl8nm}iP-U!M%b`$7w&^tiC4T`!IM_BJipx+1G2zo2% zwV<rW2orx0bOR_9Ab#rj&q417eFpR%&=$~pK}Uf0v9^LP9n(>4j=QT{ktueSVH=$* zhbc-b5$_ShSPGgR%SPjFH|(#59WX2twNArjJ6A-;NE9nFjI~oScCzTw9g-EJ^iXVr zg}ctMTMfIzFisKCxSI@XHS9NrePP%^!?<m_#^qEJeJ(bUci72>aoL-O<FZK&ce!D! z4ZGGb?rfmps=`6s8s~~|dpVaL7n5nYwT7{!Q0xxFHX2sp|E|38g6#6fMfv58EBcf- zURfv>!;<o*iF>w|7LCLg@yZ(~z89rwqO@pP)ZYUy8qs}wcniDKj6`F${!sm34m9*H z{(Mc};h$roecr=gl;%DBc}4XL<<+mm!oh_5Qf$Wq%fxKXxu0W=8`{dNiWZ`UD}j~b zG$hLmXL^^w)z-GS1O<^gOvY-@VaaRo<BV{<f@ZJ7RxeOBHFycc$=9`N#UfLe;CmNK zq+^^P^OwcXEjofU5@LzZ>4p1aBuuHqVZGFgJ52;}5+aLndLsZik}5C#iB@Zb_<KXP z>vI!ob#g1kR%x=t=ewnEd6wb+Ki={{cHznG741I2OXW#1Y0p?^f}w5dAyl?Y<i7sP zPPknsa5|7Soj}U+*#IdjQ)T}g!xM$f@Cyx36eMLoUoutp^Hti)euiYm>+lP<N>dBR zJ|HFd1(%3fi1$ta^rK=f3dAStU=3&q=mOAlL6N68KhmY3{FuE_uT>SNOK03DR_X3W zWVWng4TfEBartzOd#7P{8@9!;t%mI~><z>A8%CvE)9Z{1qtDH8u815Urx<Ob8txPe zhlv3Wqne}PsNiTg4t6NU!4AdlG7PKM9kvcUt>HE}SA?Veq09T^J)W_yxvpSCD0XOb z>`)6fbRvGmp3%)OguJmCc{ewkapPmWMyg;K28`EG{9bM+7%;o7dfBQaGMv2(ssYv+ zU^jubQel|f)tMhFmg^=6d{w=MrJ5rdIl<c80inYkOOs~r@Zne}fQNHZcRteAi5q-i zFcLlps58zbDrL;&gM{x&odapvnTEebrGuB-PQ<%{;`584em7`;_<s+|vUvxTm9w8! zPP)_}qS%G*uC6UpY_(xGTin|WLvgzF*ph2{9UH$fG6lQ0EVSHNHv{LQ?Lk6b)5_5L zLu*Fie1L5K4R<`i?q^DH2fMuSoS{$ahU4V-W3fA%Si#*<L%l~gW1tI7(yBi^!{WfH zA_B;2uV55Qrh7*lPu8_xY9419yo5K`4YAr<$FE1#OtrUcMEJh=LC5lbldgWHHIUOF zOxZjbu{c^f2rllS+qUKnPOf=%%jIsO<`s&c#_|7$w>N>0s=EHb-()7+BrpjC2#7L3 z1QZu!Q7EVx2r$tgsHnKIBPg38QE<Uvh%y~hx4N~p;=Z+YS6r$=R6wnwSof;9Riv&J zfmY4``#tBqGjE0o)ZhQ}|38?V`@Zj<bN74C-J>F9MwVKf@=`-DnG;(ViF{@&%-YY? zQ%%_7Tp)-y{LC=(86)oTs88svcz8?{dmP?-2OKh!nkM5+0k)70%F7G(DC(0}h;vl( zigO}d^3=`0D~)4R*p)UYb<a_64ylK|K3C=-k+!-zch49cEq>`Oe&Hc9p5Hh?R3_ip z7vfWdo+mLd;la2Go`cc2bOCRAd&Zs=<KYOgb0EgT^qy0;wkltT;&;=(LGkvEE@3Dc zBU$@6Eb&9(lw0DF&}~o7Rf?BTR#8PrCBTMhf(w$Y<PUW~K4=wwe9#OuFsH2pWm>)j zy2O2Fc>ad>D_s1y?mNptH>(S1(lH~&PIJHNRcwl#ZP?|;OKHlx(y&_%d&aQm4SUV7 zHw^p6u<s3HGOD|*Thxsb!^#Yc8pi&D+N1Wbyq6nB?O(B#hW*K~`wVL_>{-KJH|#CL zwj1`NVa2FF)D0YS;`$|N7;6{x->rt-X&CEGJz7~tlSdC)AB#NlmQ<KKWK+yiL`^&y zs7X#3Fb-o^d9l{lYLe@gzgstZ9B#dwj@w(XS+=fXK(ZF6Yo1gdZ+t!&Zyx+zeE9o| z4v6#sYf*goD|OvOL?uMD)Zv)TzsImc277982xhUKv-y54?s~&eH6(F>3nNo=WfKgB zrQ}^c8iZ`)e2X6r?}NUaK2r4vaAZ{WLY;F^HuMpdeZh=+TvB;D4h-~;z2XGK4aoDd z91S0(yr(80(8!|9a^Y}y5pzBIz5$fB!%E$DTTjoLJV$SMOjV*?g^`sgH8-5E<19z> zN!Oxy3pl6GT`<i(5uLS3XZ&!m0QLhPD?XS6MtwR9lMbA?$5647=M*FLS9Y>{VSU_e z{IZ{hH9>5}r4qjjAw`w!J6(%Dt`Zv>RPNiEBJZP6fwAG(`OK^u@Jtjthl>^x6|?>+ zNSR&rdjJr|u$+~|819l@Eu~_Rl~^TgNAVjUaASzWBnJWDa~s6){TzLj_mswRor{t% z4{*&8!+R+KJhf#y^1TR@sd+Z&-k|4!(uMOu4*^{YS_!%gl%pk$pp!r^2Au-B0(3U$ zrJ!}7zX4^-b{XhJptOgP7Ux>ft3a;<WvzEGGOeoTH0kbo#b&u*wboPYY{PzUyf+%g zQ5Us$uVEVud)=^445QMc?sA{K@)o)#9C>0G$H&zkbG_PQW>f4`!=@Ux%rLBDbnSg* z7!FW!F&v@f%44Zjd0b<pZg7o}Vl~_xeC+YDiLv8kv|!5U<TusHZ{_secWM&LE11wV z$xSslXf{4N`T6LkAC~6FB9H&jV@pwN+xubyg%VfaL8rPJpPdprEp}?`l+#XLlMKh3 zN8zydKUG`~F<60!ZG4lsuWv%*M>%!jnqf{|ZtT&(mf+}ttyL?Ythf)hs*|77vC45x zpVWt+?g?abCwR9yIijLrQ+~saK>gXg$m;PpzTkvl4%+jK0NAah-OUJi<b;+u&cnr3 zb2&Uk_=`yCNSr!9GK$}Tcw%Iw=%GiVBF5*$5e12n#XyJR2d|Fo7f+l!04p@=M<A?= z50O#)&78~?6J{5dbKF4pxJH&w6LYK|d=OcF99~*CY@P*Dog7?Il?=uc4@nHherPF( zEWca4d?YNdk1W4IUQpF<{=o^<O~OV;oCq9Cz6q-(b@|CrsF{x)TGK4i{xV}^Kuz;< zi6MrqU%VLs1R7;tbCTQXKBuOoDzAz>qLH~J_vt9zY5Fp<yp@LJ=zj6!sR&<7T`rF6 zZ{09@d26JJIhU7rsq&2=Yy=R)AW>O$GtO{$8im`bX|8y_dieK?aC$P@lmI<_G(1iJ z2TRoJ=4~DtjNI~a9Jwpq+ts)tAdAo0-58NmUx)^+0FKoDK0O$fkw?}xZa=y%+_*ib zF1K;}arL=RBTq0~b-lBO2`!y3Jn^I^1LtYt+y`1TF8Q3d*oNCcC+J0{7|hbFiUF)t zE>3ZeDR{h`&dM#S+M>GiK)12ojK`9#@x&xVV<Yo>ys;%(w<nIUE~rT?LAzZ_m-FJt zaa)iv0K{=u^$(F1QxO!8MKUt`I-73`vf$0e<p$fZkhffNcYOM6+&r=tH@5bx#$5@# zu~jchfcKkzh+z)8ZV&giR$WN6rEH1LLv21D;*dw0YCv&aYk_->gLt$i`9s_->R3ID zsjevq0@e;A_2SjZm*R=MYUBmXch@BKUWeq@n|}>I;!=kbT4KD|0eTE>c1Ug}iB{us zhj`MhI=o9BoNd%~o%&%SN^W_8Xjv1*(i=*Co#l#$nna)K#39wmADX_b@6JI>c;^Rr zZ8r0--u96E9C-lWG`!=Iqv7>85G~Mol0R*pB2hbPaXc{w#eLD@v}o?dXg*AARF;n( zgk{qAu(lhW{M3t$SaR#=<WDuz7qTwkYRl1>C&W?YjP$0K<Tk_yB7JM!9^;a-+ET|x zx0HC1z6k{qH3<$z$Hf+!bHG}IKC%RP+m-{W6Fna92S;fGa>pe<6VZ{TeZb0;AB_y~ zy0|zl`RO=xl6zGrPZ;X%WoBR@a9m=+&}w$9-S_0r$W~1=Ab|xmaZ3Xn_+b>T@az_O zbkuwthQ1_!*0#51B}UB$8m$k(R0~s1U47$u{Sf|Fmd+iQd^6IcivAikU}WUc;*wcS z>z5SF+V=LWk%{7xk;#cA1-Mu}f7?4F6EKcRR+SWwhTMYKwztM4@B-_L3!7eBoJ+Ly zh_#^-_`x}1ZB<DD4LAxMC#IKF4L`Eq`F}v7YycKV4+qLxRbnx&9;_^O&1GvVML&DK zasrONUS4r0ZL+dEh?QNUeDk3{;w*1mFoFw4ok2fDN-L4jappm2wVDT!VJ5j52F(RV z6eN0X`Wa_wH#bt=xWv+uamjy**cQS`l*~b`fH9oj9<_B{yPCvVD8&m4HvbvlYZ3#* zOc5**IBosW|AMXY2^M=NvivT-X{cJ`s8l3;jf*GYoblhtrw65e;O!~R$48Nvk>zI# z-a*V~!0c^xA9hj+b@*cn@TLCS&Ev&dnCIirU#LxD1=#1F7y~J+(i8G_6e@W)FVyf< zoQ=pPn<Hd3FXo9L@mQu8xBQ2`-`R^B1y?Vwg_%d?$Kk)o@-yUIa`oevoA1FlE~9)1 znpeo-;eTpsh3P)Qc*vbj2mB82YT|g!-STxpu7}}OdLDa2uOFVVTVWD15<48Ev9zAY zf`v2ZPo6b(`b_M3t(#dpAF4lx#;K2|pLUz-di0YX1Q&YuV+vyWa}acVPBBk}j($5l zjyqp-&x1-?8+bJk4V@<ghW|#VAmB``J$;eQ9`8w;&OyOSe0V2N;ru1%MCoIsIx9MU z!%>dUMC_r`!(sOV+Yr>#GiIhvniY8%OQ2t<c(4P5)4TIWVQ}D!oIcL?!C^QLT@QTz zSp=Sx+rxP&XI=0D=})w(A1PVF7>5j=K}W5>6vv9N%f&thhe}Xi1V*El=8zE8P<=SG zLOWhO=+pqqO&9B7)y-Ul1>jSsPoA}4e%&HCwDT+lPiDE#lZoC}dI!q$#@-Ty{J=7t z44vsLSBSrjM8y6whK8Rxcytsp6I6WM9itmV{w*RnP&86zk@x3kr+>ls!F7S_^Uecb zdM}GkGvyBuzMnC%%Vh*@r#$<WZ;CfC@H}(sJh9BqCr3}Q+&q|zQNU|(TUKd~3OdT7 z?t<L2oY!)qp$nXMLJMSur4k$zn0D(A)04X70LpV}gZntS&dW$^#RHC)&OMzMB%RA4 zAS!leF4hb`+4UO3HW`wd<ZC;mEe~JNv*SMi&Ni8Lcy9b>^4=>j1h?yWiFKv$J)fUB zxHb?xY|n0$?+@kYVpZ%xSjKS)rmqhT<T~dBA{Z`M>Qo^z9t-6<H|G6G+~Gi@mZs|5 zIoSHdpmVy2myOL^P`gBe$n1EEc&0jMJx(3JIdFi)F|(isy=QKPvsQw>G_*((nhiJm zmrzQeUA-N+2?<T%?~3q+Q){QrORY=3QiSg(1&^Id3@+j<FP|k=Czpw(p>0bUC;6rS zuBGspT`q28-u)PUDbQ=^y*&39RCPSUez?;+z|>`J<E3tIXPpF5500lj3|)x*N(^S| zVe-UM_J`#BHmAG8lFyZ#8nQW(-g6L`&Qj|2f&?y(!MX5wj?3+dqw?1TzjEHk3TQ4Z z(G&lz>ST6drI8f&eX%wzH9p)I5rzAk8m{E|;sr(fVhlL9r~+5Q<`qYC^NtVp&O0GU znhP4lATo!KLwn^N7A!B?8!Jr8I7l4H%v*Gjd24_qKtJ(+D&NeJ1WC&?y}-c!^Pd?W z><jFT;<5z4MpWkA1Le52Xo$pry?mE*<Qf00a_<u;iEy7GS&WDAYyMn{0-S?=COKG5 zn(OrR1^Pw?I;S|)u(c>3$BXyFY2$bcaU417v&PLa7&~uxm~q3auX5WJmlW)L=M-(^ z?B@Eb$Hbdq@giH2=QSjOnegOGNRcQ)$SR8iN?MHD1^Q#C>U3wM^Iv$Me&f%7xY0@p zMsQgbyq43>v*91r@8{b149QwpR97^k=m^*?F5IcmGR0UEZ<7?OkQ8GB_myP+A!(O| zsk6nQWnUK+Fj8{qa<=<?FOro<{F=p27d<6e&HR+xrk`FEKkQ+C@)}+LHDsQjE?ToY zKfU9{Q-v?3Utv5I1RJMtD-p8)sG_}##vs*0a<9m|j;eOJQ<5x7Q>5e_D3u)-VQrRD zeKSgJXQ(+-B!~YILa`HJCUz!jQ^$0lC5%HcN26)2MYsY*_*~q&&<kn3B``Et?W_r& z=PV2H)Ul&V{aJS{ecC?Qh#St_9EZ)2!D5y`9rVoD`5?}5nV{}OK2+ZCLu=AQyujsz zn#O13mLQuQjLN!C;O~Lq!IPc0;Dz;}q2h%qUt|rS7djUgH?9yr6rgU%D?T(7JRD`E z4AFNABJPl2@K^ZSunh10iViHAiHs5|@D?H*2njnSH@(Ov^JeklO~Eq)Lvj@JD%5X7 zJ)Me>e|M;s(Bfd@&D<GU2oLN9huY;7UC1JvpRpm0)iYc92gHRdf)^veH#pykD{SF4 zEiMR^Is1hU@&#Dp95*gB-ptxAACqW>$SgsbDl2S{V0I%e*J@--gTIP%`Ka+#Pvfuv z7KsJRky}2%H5<JG-LWM)n#1DH22#DTB-F!61nvuzIUfe5h-_^Qbf+9;F?;d+X$+|b z3!seci<BCKAWd*a1ic#gbNQ}IM|otF%04ZW?+gnua#<^D>+>z{vl}c`AhX<IzToe} z^eziF?#Sy{oS$11mijV`TN<j1jzu(=<F-H)Wn9RIcnAfDAOZ3_F+VP+2c7A2r=F{a zWU<_^^WbgyrS4uP?<JxD#PP*z3HvxdIiuhk=8`nU%4^GVg)#e_A!i51%lG3j|E|g~ zmE$`E3rRi8J7QAl-5j_z5W=DN10)eRznCo%cFMB!4E0W~kb>W(l%?ALZ$rJEULk*T zfhguA>+)K}6R#)?2K`^%=0?7D#n)130;z`DE%^AF6YPMmIc?swc#ilcb<^T<dFRxu zr%|MKTQaJW@|{-zadDIvbQXi=0HegKFiH3J`N%DNxs5xDgZ+x~5GLLLnUh=GIoIEc zs>h2xYfv$E<@x<w&oFAaW9J}w|F=Z#2`C(1W(_;TWxJQZP>_cK8Y(=zyeTt4_XSv( z`~k|+Zbg>A;@PP41$PV+Z*Fl;<JjUHEUc|AE?!oGv?!HktS?lf4mgqZ;JhK&r#?8? zFYmx$PSL2mq9E4aLUHO-jD2bcQe`SG?wq%OaG6uI0QCphi%v&f62@;J>Xlp^`kE`M zy1(!+94tJA(#U)e=m$OdMCYOawI((`sX{#|=k%O2oo{kFJ3WI_oE5=UQn095rwZ18 z0xVdp8nuC%&s%v|7ceLDtZp9E(A_ByWabyzVKF*P>;!YlVUP7ts<?DVzqK;wJVfx{ zf{UCbQ0#XqG8Do(xT6R;Am<INd|}0xs(+)oW$0n8feL&9dRTk<Qozk{#Z8UH?YM#= zvg{E5XE&qab5W$I7js!*X0u4w8IzZa>yrYwY6!v9SiDg%t}sY1CiGo;5HAqlF?e1+ z$x=|8W=ZDQRbD?sT-3&ydmhh`_ZI@EIp0d&J>K#=2Lx70S0dAQ^gR=0sqp4VT&DZ> z(lp=t*M_+9nb)*eQ5dCnPefT;O(&h97yF4b<J<J!zP{v=^vDS|u}Ma2dAjV@EG|a0 z?77SK@*r`8ZGu(-74p74&<<ljPdT6bPgQ}JS9=QY2xKEYc7nZ<Qw7U~vXz;zns@(@ zbFk%K%4w^O^eZB+0(nU>E;6br>PrO@ML85II&oK8WNtpZgC>flD7_%RnBy<REJZtM zlWab_ihzD1fU2C<1ndw#mD2|*96N;%xhh<iny$F%M&@Aul~ddS057|>Tyf5_`r@2@ zap}}BBx3e6A|I9L)JuridwEXY^QCNLb#uK}YWn*!%V@e=61-#-GGZ6B5e29jQK=Sp z4HcI~i*p+u%&G}+oZ)<l18!ti^~q}?Dx52K9-Lr4X7$q`OkD7*RgcHi)wv-}!F-wC zDhOV(yl4(1APC=;6wSiXBe{j})UB*VGkOP9@|TNry?={QqRG-z2Fx@av07I8GqioV z*ye&|f0y8WD7%-NKIU(Cy{P&cN1>!eRL4ErjHDhIV#VdZzbuk^3)7ISk>u}_xRJD? zuNz54<B)KL;Wi?tuSor0BWIA<-g}pk(*cLHQO`XTiN)VA{J7k63d8I^{X7GX%qm5n zdUh$-yig(Qiy!;RRCC$2Vf3=C=O6*Qm8>OMm9b<nq%7*M;<wYC&*(n^mZxIO)H!np zrdc6^P^7FJTR(j|x7ug24U%PNmqQMRyT=E-<tJQz%9fl%*4Q!5A!{xTSqX^aAmanR zp=U0jz7rsaj$u~@TlWCQ!IG$0&KT~c@Hjqja8@N@P)wJXaG(^+U3H+edzz5Uu}UsB zSq&+C8o<VPZxlL?xZ!&%ay%dJy-a%dsq<Mky6@iiPcps_l^#t>{xccxsz9c`Unt68 z>iuc=o!4p8KX1G5+(X3oL!|mj*{{ubR}Crk{Vw;r$G;}yePhP^H!=w4IG?%heITXZ zx1Cz|FnPgbRB?WUt8-?+yq_D~j|=sHk5554WAPa%^Z4hW13<qA9Rj))bOh*j(8ED@ zfL4M22Xrhb&cv33K-z&GjrWQoJ-{}C_bc(<5wr`EtSe|w&^<u=fOZG%56bVH-Rl9$ z5#QdRIM2)J2buug7nI|${XscsdjRNlpaVdE4|)*jji7@;*MlAm`YPy9&`qGf0_Awv z2v8mmdno80prb)K+&>m{5a<!0hk@3B#y}^4R)HP^Iv#W)=rN$jfgTS!3A7RPBv7vX zs|V%EKgzq#edjRZg?N7q^m@>zK>q;B0jLth({|8OP&OXDLAxMr7=IO@l*_cb6?81< zlc2nY>JCs&cMw0?eLoKLZoFRzdM_w1O1mGF*GG|Wll%TPvMS%-M3(w1=trO}pd5U9 z9`tL_b)efp*Mqi#z6hF&EcX&<A?Pch5zyB`%Rw3LDCirY6`*f}9sv3dC@)ib7xZw@ z_dv&h{sVLZ==-3PKsSNT0{tiGe9+CH=YUc^FI4&#l;h6dgI)>x1L!rN+d%&a`XA7n zL4O3j3-o8uKZE8W9=T#XA9Ot^!yQ9WVZ4k2jR1cLl=1#GXd&paC?~|ZdW?O2T|GvV zo=~OO>F(FCv&ih7W7s8zB@KJPutyAg*|66P!`gk<-H!|lBJZlZ+|r?b;qGe1Sh5u3 zIx@w$&ss6|e--1hAjQr!Y=L1H8rEnS%bfCZ;gj+{YuGx&UN`J5!?*@bdAYMrdGnCR z6~myei*cq;v3(31V%RXlMjKXb*gV6|GHjV)O@{r&um=o#!LXMN<IJ@Bh02!tndMQj zJq(jFD0yR?VZ0Ph?M*doo?&Mhw#=|5!)`K+!+PrO-wk`)u>TnLvtb?J4|TV*YYICD z7&g$b6AU}qu=5RTFpQVIsl1yEd&aQm4clbcr-p4cY=>c`s6SL*C)X5q_BL!E!^RnQ zv|;RIDeqLn*y~p8a>ITyEPztZuVJU1YbtU|4P%|8yaNrJYS>J}>J3|BSOMw><t=ti zVW-@%?uHFEY^Y)P8up-JPaC$zuu-Uc)Qz#ODeSO5QtSl7-Zbo8!~SX57Q=WAn(~&p zrmzz=tirGh4Qn*)GQ+Mi>=wiBFl=Dha|5lexE6NC7={+r#eQqpb%y=Pu=@-PLPt?Q zqt<qLI~vx-utA0$V%TKErW<ylVU31eX4qAR-D21shDEUYNd3~$HHDoXhV?e=K*I(Z zHp#G43|nm2`G#F;*yV=(!LXHvtupLM!#*`^vte5e+hN!uY!=gSoa36pPNQL$7<P+c zcNq4dVUHR%puHz=uxkoCm4;OrHo>rohSeFi*s$e>tuU+xT`TqT1lNRp;D*gMY=vQ$ z8g{Q?=<&OGXrp0o8um}awis3pm0I2H?wZ2ReufP&>>9&<XV~3_{l%~s413uy-uI$z zL|qfyFpT|2enp%bR%O_1!+18U+FNYc`G&EFscvjE3@3HE7|!5yc?Y3)r}hqUO<`x0 zVPg$D*|5omU1(UNVOJS;tzowqc86hW4SUhBJuyeBe(C9&!p{DN9c0*PhD|eUzG1b7 zePq~YhJ9z)4~9)E^W2@~ny@RtFzi`y;|jYAT>t&vusaO9$FQx2?Jz92lgC@=n!-+R z!}=OF$go2UyTq`hVb>b=d&8bIti`aG4BKE>2TX8iJa=|YVW*d2eGIEKtje$nhD|i= zeVEt=7daofrm*uhOg{?tZ`Txd0vKdw3ti;ox+aWU!}PP*>+G7sP9K>5E7-oS2^W6C zq<-G&njjA&v5Muorm({`BZ_r0tfygn8+MRkLkx=<HrlYG4Li=TsfNuo>@36T4O?bd zlVMjFcC}$Q8Frgt_Z#-GVXF;$&ahVv`@3PA4ExluZw=dOSODuO-S~4&h(E(R8P?M< zuD~Qm*coA1rD5^J+=_B;Ow%JLqSeXGvJv<@tWmA+ys9TUG`htMJI=f#EO`j#a&~&g z(eQU#;Vy-jV89XY+$lEz*Ed1x`PiS<JYr3J_y>#nc&lQuvx4iev1Gcs;B#<bX?tCN z-P`s-?WX!D2Rz`UoT5p7+27`O92@1h%})2o9UX5*5#g$2F6*uv8F>W9IW6Z}{l=lr zmfU#b;sPfY`EASS<t_Dl*CabG$I06-V4Zz+@(rG{?O?k_O~s_v4O^PIY#y{}6;wNC z^Ler?7W?SjL*P<@=RUs|5S<}s4NSj91Cctub2L=^!5NEP4?<T8mYh96m!JyQhuiEH z)?&G9ZQYW|GZw%`<|<c?3a3`N9u!!Jv-A|hxw#^w3dcKk#-O3M$qvh-xNUF#)Oo38 zC+b>PnN#7QIno_ZDOMNcJ6GV>*|^O&#y<h}_3149oCiX^fTvqvPs|tp4nJ?AE#RCz zb#DDku_x1fVy|7G6UM%|V3gzU-iRQ#;c^LS6n1ci=uF-4kDA?iUAX#4I6LCoHS*qs zRY+5S?YuD6JGjYPMd|ut@|;CnMahHtJ+1*FiGTFCr%5pFyo{AAp-vW?ElwrE!ec>n zWrwV(li^gR0jCmQ5PPGXAt+c39p`aMCB||kRw@`E>>-?oYevb#Wo|Qs=TXf3lscW< z7{L0;Ig1v-uajrh&)3rpIIi|jv05UmlOWn36&&M^%6I*P&V%=0Ga)xGGq~xa$mKwX z0@Y2<{;bl?9q-jI>Dhqe$#HNo62=EKiMd^R0<b847#~LRad4Oss)*R~B>@Ll*WxRm z+e&n>H5Vb|a}wHGesAZ#pMrPYsVJvQu2Wm`m*t3c19RY$F8&g>3^GT*2f7#NKR|nf zmUnU*27`Wp_wk?~gEH<v16>IEPtc3q_sc-P!21=TUxBU!CI9`P-{HLl^gp0X?;k;5 z0fl1F@D^wuDC@xj(2qgGp#K6b1!Z1n56W^+dHVr>9QB3{PSK<XJ1I8B{Ti0CtyrC5 zzcb!H8g{o~e=+PG!{{q@;|s&SGOPpqq;7O}O<`wW!wxWv`CRR>?ofHmoQiSSSFweL z)fslXVRsw$l3^PR``)nah818?N8R9-ZFQrcVfz_&tYIe@Hr=q(4eN<|S>^5Rn!;G< z?_om>iy6k6T-`mzFs}Vm?El<oGE+&Tc_$3gXmYRW|KE*fm-I#xO)>n^QlBqP-<DO_ ziXOWkEi4;Jw1{^~6a0(X!CMgXBQmy|hmg7`{SI^C0vhB=YX`N?#-4MY!m{i3FogDS zsZ@@f{$`ox{_Ov2d-w?|&Hp#;;g?uvkZKQkmQ42c@I%!4+1tahzA15P33-_N?uxZV zdtefJ53ZW%gxjKnSZr5-)h(DW?}c9ki+am+=}-{X!mw77v#Un!DyOYRO&c(;Q7f<p z?M;c;-8E>xmIjTp`@3kFF#GD=oyq|If6+=Y;=NWXTdTvWkPlm(tcQ0nkFt%S3Ropp zF)@U?n{7-Sv^VHcpln<CzS4bXvF1DTHovp3Kg8;KnlKPz*lgFNhxn<z^9{S%?A>nI z1BN|f*hhwaX4rRz{a_gHZ&Ww-a!p}ppkW6acD-RY7`EE5=L~z*u)iDjtzlaY<D{Cp zdzEVnJ6Lt%Vyq!FURD|Qq+yY#1Cgi0{a3F+%wbKGoIQ?PPB}ZDdN7<RPXYd3Z(mrU z)J~Nd_Q{JD)Z%64tjW`s@Z^cq8QFT1bxOO=^L?8pnV;)3^eL1j1>Rc*MW*Ia+4Mpo z>NHHb%R8$#eV>-fXajt_^m_>chZY5Q&*<}K%q`P|=DdLd?*(N>`YY_I(m+#~$DFy? zOxL6*2dlkhhHWr=uNxMRJRLiuX8Op2>d3t<@mx9>U%kDgvE}f_4_mmI9^dC?eB*}_ zewd%}p(QFzW%yRTFg|@`C?2_YU3}SUmAa#(adotD6L#sBTQYKMVJssV&w=OooQ)r} zSND-*oH>2LyoL33Gbb;aK6UQQ8MvkdO8xXjvWAfh7IfF0q*p2}Pm;D{2nMKlhlw(< zdP}9~IaoiDT3`De1Yu$Qai~3u+VK`$(c7J=nhz*<n)pc<Hf7-)2F@_1Au~9sJB<|1 zJmi7&>vCN;qiu8UvujR=oICrLZeqk2kGjd~SYCJjgQ)hZWBP{cK$z)#>p)mTlbcbA zLrL7Iw0bk{lgTt>y@~o4O@Tghi<u8_;5KL!bP?z<(6d3016=~jG+zPAZ2mAZw`Oyi z!p<zi&Tvg(xp++NU251<X73rpwj1`NVXX6%mvx@HG1o9^u!?ayRPDWISS2sJj>eN` zVdpMJJYI%Ss(=`rIDms3mGS1M%3(R))EZfShkTUbiypGS_zD8Uj+DK?Cquxy*b96C zu$p9S3Xl0I<r&r0IFcYaVG1?}_v6NT3~^vj_$c2-VH`V<!x0W|pD?Z$lYPS6A54yX zTp5JVQFrTiykyyu=-j&c1$7XmcZq$0qYHSB$2I-vRUKfFFfaf(eC;$Vrdv@F56vj1 z?2j^eH{rJ+qnOTHaQ4j9-C|sewu_^Jbj>lfwgnKy!+3+v6w~+8Pu*d!BP_Pw+j&JX z3pIxt_7DrJ(^d?-E7STG%`fU*RE@$?n3rW$8oT6uh5K<C3`k$1$H4&hn6V;E3UF^< zrNMPzs5BN7^}(u7Y#EYupV&4eYx7mi)LGciDRmP|<q{DTl~80|(OD}NxN+^MQvc%S zd2|Vj!zUDnk1mQ}En@y2`};h?E5h>j!{@v`gGck8wA`X2cuyL3s+8gv#_eg;2-8DG z58W#69pHK};Jha9oy3D#Z$Z0VEa<VPT-)d|?BW)*hlHhzsp<F0`ym)G>muP~ShKAZ zZMb?jx+E&EZdl2e3wewH#?cG-G1Zwe-YIWs$0<=EoF^W@;vy)3d}rs2Pb2C%->}1C zMddH^J*&22(77(&w}aEbvamlWv*!Vz<)8<FMnN$@(=Y)v2Fj}LSD>eX4hLnXKMeG0 z(8ED*0;Ro8pqRsvs&JK6g*1ho$@r$&bk`J?!lT$C!zfd+>kXsAsMzC%eQy{mN`A$d zKJtXx<B))2Tz#V0WW&xktiiB<8TO4~KN^OZb>;2pnu?sBhVeEPb%VF5sJjykn`qb+ z!)6$^$*@li`_?elVk)l~YL>cD;+otW+T<v=c=A7T=;ivlJ~*hMu4g=1$nzPxq6+>T z(Zlg+oXUnXhZ@(Ea8Uf8JeY{}JL*gxx`tXh_1XsvIy#J471ebJA|kUdd;-2P<J92S z8yQv~>OAgwYm?{B!LEGw;@j>hz^|YY=2&U%*>i9>!i<@Vrq|9{Sht{7cSfhQA3dUg zwW}V~*bark8z1(#p$exfMD1*VQk92loUaxTEsM@#*b>f(6;_E<38=*lM02p~?p_oM z!~oc(5DpaX?Dsa0IP(?8N#dUVVZ5<0Qd42v@u`QJOh26q+6@#vsfJ#lOF<8C-x(K| z;GH_l#h~Qn`+lH(tgz9f<8O-9xnILhgV|ed*lmX0W!S@pJ!aTjhP`JP+ckA#f@=!n zyq6Ycy945>n?ZZ=n2tyfy2%!MLdmjowM~c0;I`>C3AtZ%O+0Z0n{{i#xuNpVj3#`H z$iWgyP*$1xXs)Z9jFsuNGv~9vG=Ij-S~Oid55X|kq_Wx=^juPEH0$A_%A)Dm@rhO_ zpPRz;zRtqz?N3Bp?`!SP!SY^`z5QV<q2%Hj1x+<|O{eQqFE>|+l@5|s*+fO<y^j+D z;<YFO?fl254l^XweVNJ9$IyMbveGAl@ycAu=4h~se~t??Y5W%`gZ35ZVW3}vGXD9_ z-1kVx(|TzNJ2MTN<C?+_^OxE~7g0=MhxtpfzZ%BTU&Y=x>?gwzA1*Hk+tnV&sA&p2 z)PxnICahR8R$P^Qp(+^*;Ra}&1yo!$97jftYpF`MY{^|3tm@x_b8Yq-)m&V;>hxK& zX06_ovu!gNVyk!L#FDF5f8L`ixGt6)i4(?-D7e1=Gouqnbbobwe?Y5a{aa#*Bgz22 zx;>T{nd%_!1IMc}1`f|e5csegP@SG_m&~u5J(IU+Og<YEX>-s^v_2wp?_TK2rFQ~T zxmQomJqGS+op+k#cUE^e7G}oTQ|C|DNi^*Z(tW*1X%0B@_=<@i<~tt8P$lnuCGSdw z>CB!v=k(b+uQeMCs>4p*%}9cm>FDiLhs*1RQ7|uzQ?L25;%sqU|1hqY73tt9E`AI; zSTvph%IG^8bWc#MacbxRdMYR@%qgIKK&OH-MAJdXgU$qH+|L4KmOT_1MmuUWA?p~n z&^3kSCTO+SVAvnc-pz(#tizS}fMHJ=_Kaa481}JYm55k%qsldfo#g6mZ$;v(SMTT% zpT41S)6c6qpZxZ_7?#)&Uq)e-@zq~Mlh15>t8qtbWL)Y><s`lxl2Kb82#gQgkX32f z4r2<ZW6t)R`7$gaJqOJ<nE8@Cp?QGJ;aw#;>Kx9cv7XVyCBG!>cYubH-+ky8E~!F% zJ4^yThob!=tp=?CtpTN9$AQw$YFO4}qDfD=SB&bUVk^zwt%kYfy$ZLbCpT<+hov<V z->~g1{9RqNA@bK38h7k@VV70RLH$=J*Tpt|7~8mMbRs-DF*3BKarMWrzj1qP<Bn}_ zc_5q@P3ULPAsMlJ3@|=N<M-IkvAhti5$<=EIOcWd7*?ODbEK(~tY=ZPB<G8$BasH) zPR>QM=giXSSIX`$-}@rAbD<Wc+OE$b8GWqaUK}BWJ^^R+6ekw`y@YA-FK9q0&P!N& z8bi|Xw3b+=>|&9qe;9tIY%%Cu7r)p|*-JrLkbeW(6ZCRW7SJm}_Xqtg=nzm8tcDSw zH-aKpIM;zzg8m-#2vB}!{PH_<#xs^PXwti06+6}a8g|(FC^pZqgkjBwJ!Kfnm&z+c zQYbG6MHF+7ov-5=%I8;<C!xW7i-v{G#kRMHKeKe-*zna$+a))|R$+J^=U1-YGN7pi zjod>Hks2JZ`D#^UJWBVLa@f3}1o;v8?XAgm$!C(U;uO+BEj8{+kjLPt6MKUC!YsR5 zJ=T2W&#~t2fsOx-HIFFW2zg;#?^@V@ZE#~%aP^k_;M)EhtNO1V9b6Bat?4$82(@K3 z`C^96g0^fn9~sE7THLnPoD8caZCedySS@SYYAC~MdD~WVGpu%R+iG5h)o9yR^E0eg zv~9H@!)m{5R%4B8ijZJ9jc`9EZ{v<GkxR>Pu3w__=%$v%-D1s^1&tqmlNb|X{|ucp zW<DGkT8=&&-dC~Sm3L?(u($0ku?b6SX5kA9UTR^_sX450)8`-l3=AdLX$E~FOVzb# zX8nu>lNT<SJGB-X$}X$0GErICD=33Nl;E62IaD{i%ffIp*t~_(w9p-`Gj-JoYp8x? zL0!*PCR{Z$UEX78L3sYhVWl65=cd+9ubVo5p?i%1t4lWOTu(tY<`}3k4f6g$AoB#O zGhlZz0*SdTv3o{_-44RHShk?kKN=T*$l<xz$G{htAtJN+jqWJ#5{Jj)kgto#YC!1A z&~$c&K3$3yZWylS%5kRPcmr<ArwYdAhgTw$0pAb5!(BIc)`^DyaGYtQO#@Xl#q^$3 zbyLUpDQls~I#kYD(QnWy>!!kW^%F0H;w20nkty~@oO0JTwK}%8jx#4G7b@hQ_zgrK zr6#B2u9|$z7q!(g$by&aSZlct^B0>2dhb#fe-~9a^V~<E%qky)GAcd;?FsrhD4U2a zp!D9qKo0`_3Um<Yx1g1v-+_(={WmBS2xlwkk)Yc_CxHGJ^d!(9L8(Xn1bQ0i&!AI4 znFFSSVjYj@h6SJvcn^bK3yLmA1IM7+gQ6L7BA{r7oD$HLplBi*ZU*fHdMhZ#oEq)` zCI2&^<bM{F{Lh1ue?2JqUj!xp-$2R#3Mlzs10_GgEc^(w@P7kJeuP!{5mw>f21@=N zpyWqbg`az~=zdpFy3YkX<mdD$-H(FO{a&EtuK*=~Ur@R~5|sSZO36P4l>F78<mW^b z`Nx5he>^DpStQ9n50v~1K*@g=DEaF^$$vH|`4@wd|6EY=^MW7pUk6J5-+_|<51{1d zZcFmt1WNu}K*@g_DEaRMB|j(W$j>QX@~;IY{|lhxe+iWQFN2bQ11R}7f|CC$Q1X8R zO8)Oa$-fnp{M$guzXO!~{{<!g&!FV*nxp*O?MZ%)8j?Q>O8#D;<gWlFe;-itb1xeC zt3c`g7*O)ZLCJq4DEY^MlApUn$$vB``8n3ed^{JlJLn?NJwaLgdxKJSdN$-K)imi` ztYYlAD|VLIqbjM`)rPTDD0Z7+cNzAuVbFbCd;c(OlVM*Ph7#@CD@6RMUl4j1V;)uv zA#t%Gh7B|9Xv2;(jQLJ^>kYf!FfJ0%a6D|-V}`9a>~DsBYS?DOauK)cMxkp8J4|oI zI7+N;)ETzeF!x3d9CA*TGFp`^txCSb-V0RAW&d%Ujjb0P7JIC<^|jVj^Hz7BTh$+` z<|h7qb@RyPP<Zv{om*Ry8|Ji7;j9Y2b$Kkg4mZo<6yz$*k~Mx2sQ)Uq4E5mt&eB6- z%}JB9ZBzdjUfpa0)=|Litq=gtSh58os&J}(<7V*JG`B<QIFBQ^j_9Kt&oh-2DhvFP zvvK>#<`EsJkrv`c+a*O+{nu6nH&g}R-cnc<TwB$DLskE`gRem;O}AVf+J)`piy4-2 zTKO(S2QqBqJm_86&dIP{vP;{+4BKV9v>nQ@UA{}(xf!;*@6vW&hVAGsZRcm$uGppR zf(+aJ+O!RwHTYU}<LdpINB!Km9UAM_pLk?5FPDLC8m&rnu5$Iz@-?g>()Cc*m6@k0 ze}oc2oq)$BK3)ogJRH`Qfr^Eyht@8rn_9PPEwsC6cho|=i-_k;BMLaG5m8g5hNn*_ zvCoakodo!s*+(DOG*)U<$IADJXjD9>lPU&Q1VCSkIK6OIZd+O^t0h*B)C=kM(a<|u z<h^w#Ep-m;K8+|qWi588_4)0pW~cr7GhkQWH{|%WP*1b#DsHULIRry}mH3x{7P}t4 zrS>@+a@GG=<7+WSq$AF+F(Z+Zqnah-=`SK@FwS#pa~(!jjgZT(OTbG%jt^+u+rZEy zR~Mvgrag7U*)Z3*IC72Xi1&apVg3Zl1icru0+cuda6c#$<^j+XK_3L22Kp%I<)CPR z8m<9-9Q1n7CqQooeHxUB@(gGTDD<?3H$m5eatL}IDBCRPYYiWQz5x0W=*ys=g1!O@ zJ=NI&x&@T{&?AK(?XU0`fs!BXxA3Fg7JlxaCqLS2;g|Le?*s8p_u015{h^@b9}Y_Q z4+W+Bm7wGw1xoj+o6-F#pyZzpO8!}(<Y%TLKQlS`=Yx`;Z6o>XK*|3bQ1V{^O8(!1 zlK)yz^0VC}KXozkQx_xu&7kCe5|sQ;gOdLlQ1Vj;BR_R8^1lE|ezvOQ-vCPfFF?uv zB`Ep70VV&xLCL=rl>FO4$<KO({M5O~U!J4<)VavN7byAJ0+YWtDEX;tk)OI2`MDIE z{M5DRel;lhYe30Q9gF<bvB*yyi~L-!P5zTW$<Owk{O5p@pE?)$F90R~g`niW2$cLy zpyXcxO8%Qc$$uLt`R@cJ|2?4OXJ3l^_koiCK~VBP0{RRn>&`bospD}DO$SbC(%E;# z*yB-bf!SMR*ky)YWf+FsTzR(`hVtWLYYc;*Tx_FZ&^=tN)i9O|^$RpwF@<rGorm=| z>=46P0@TmP8g_zV3k+Li*ky)YW!R&JJz*H{P*cB@xhBl2H~y<%;tFWjs`Pvgk2^1w z;Lk=>PO0IP4}lELnC4+sh4_}Xq>nXYE6|K#SbWZmshI4Z?44hESm_(68fA^OJDGh1 zoYbcbwZ9Jk1{}}6ztxH$Nlz*j>yW{kxu3_HPEj+rw_}@1Dr$}zg!))#wCTDmG=}TM zhJv#WKmVPz-{F0LPa?y|sTo9sQ{m#bBFiz%tdhf^_kuDD-U3jwAWdP1U2nyvxu!7Z zw_WTa!yba^n_Ti@a8yiT=X<k<&b@GO@xv8}JqMG=tZ=Im3D&P`moeS=FjZy5ejfmb zWTaD+Ht_Voufo!a>P9M^=FG>YCniJN$rQza$zi4MNHR{Fx+rtUT2$Eev+ki{`#-_; zpyTNG_k?}!%(G|e#0#ryeWJS=g<+}{z^XqbxdxJXm9FBBdU}f1$_?^1bCs4xfzffC z(j|`jrsLxH<ULUsnC5w)BU}*GL<5bNgXV)?0ooq)N>JtzR30)d_ghfrg_|rd&=ht~ zHEgPD(&;v}*I?Km%-%}Fo;0k*uu8<4@^ZjJ-B^X)kFAyqs019Gkqa0iKFDm&-fiT9 z+In7Tx~oi(hnT67blA0qlr6PV^C|vPMt^0NGAJ(%fN|tA6b(=eL`lrvY%xod?#5DV z3T!C`<w;CMa^AdR{*Gr&MS;7B2y3Kqb=H7*^4w@V`CaRVL9cB)8(q=jH{;FS-{i`U zgHkIw#+36WtpTkYuq(A&ym3nbcgPkd$Antf!8R_^E#g8WtN^XU(#)icR}a<YM)0VV z%sA5Opo{_O^YN_=zq9b`m`an`Qy0yiJgt8Enb=mtwHUWcp*eHr5+sg)J;$Ds7>rDo z%)7)EdBxh1a8I8Kd1o)7LVzPg=mW5hyBKEZD0MZy4wA2<<ZCZ6<61`HrPo-fxKNMF zrj>V^vW^35Px*L~6yd0t^$!cI`?zW|earBS4=_9|z(ax1@8bim--nf|KcNT%=BmGH zSH`_~XD<2<@3UQugz-2DO&V+DQwZQW6M4psTNz+og!lfy>p&|(&juY2x&-uC&~rg2 zfu09C6_obofL;j7Qau+5sWm)JVdpr*PIOILs?}bDVV9ac)E^=x?A&eGUkqDk*h_{{ z`Br(G4I7N;R*WjM`i1p?V$5ZVonqJ&!`wN&xt!C(D2$YYwXx8*5FT%4L37pyCh#S> zW6+n0IR(pKi@O6ND^T&pBUP*2_jqC~3XgCQ<yz>(SS*R=hU|D#%Ttvi<Sky;)d}x) zC4*jztr8hYy|#-x)Q0l5B$k)NWE4PKpSKry=OBthn0iJsi)l1WXNZa3J5x*-!?a#Z z_#;J(I{ASaMeH_wV>b95ew{Lkm^6A>icU&3=`Y!zIh<LCnT2bmqc8;=Y+1%lCSrja zf<A|d1>Ts!Wh`>bN_sOm6O$3CdF*xY5$3V;_Xu{v`m0e`EL@WBUrW56-v<}x4lBl; z(D_&u-9C@?GdK4Job>wxri%x3kqk@oLU}(B{`02RQ@T|be48iV_d$8m>ne7!G7!ri zI$-fGLrD+QQ(U~u!aD$%ukdmmFUxZjzwrS#hP>k`87o{R<HpLcQuQ**7e08!dIC7T zhiS)R%|^G%1@DA)rstnQ_W*qol$8|<k`!+$Wb_pAUxPw-m*P7gnM8{(O<}p_RWTNN z#b&ssBB@*yYcech_HH+f1zGK}KdkZ!T~nB2)h@<fui9gOSM3cmY?Wcm!D^5FM78(2 zVJyDo#~pt{?D!aqE?TZH#wB-DCpT2%VzlJjpTje_m5n#v;jji=d)f4Bu#V&XorqxE zlKG0Bxqw3=D)G)Dw-9aAfY{{NX_HSobxn05FW$^MkIQkDd^|C`Aemp2m{BpM1{)`4 z%RQLGav~RXgv_esg3zja?!No(n&jyi#{GfTq9dETOP<>Habj}l)h`lVa8=ui|G=Th zaz^4Z+=12_Sy~ZKoD*Hein=CA*{BC*@9Y!!xw(u(67;oHDSxdLmJcJNzp6@Zt?S+N z?$RF3A+a*(wVLTIxZhC1Uz0dJO3BeJT~Q@PW67^@n_&F}g>Zx0Inm@-)yelp<08X8 z)yb{eaC1jTp|^UN5H5^tT!Y_Nf%<>oZqz#53pkc{1B!2wTelR%l0Q&xXI^rN>p{mC zBy(C@5`pCNoA*XAW1xG2N?57jY>x1a5so?!6{|nmqxjA$JA|8Myc%s9Op4)y)NQxt z?yNq%0b5L2jzM%qfz+o#)Q36qv3xgEec=2k>jw4&u(dxh7;XI}PS-%XTG0cgo%RCk zfa7@=b=uRSV)Vvaz(LPWx8tQ$jE*wJdK5%=6qaWKN5bM0*y-_=6LW?H=7>n19Pf$j zhJ_*-RWE(Vs<yj`cr;Lnp4SWbrB|Tcv)8a3c+^LazF?2JvjC3=MnO;d8-7$>?uQD2 zk~LpE#EPD6I}Y^>baIv=9(JxP8Lvl)9riBu+5&_FPfTR6F6CenM=^Pk0YkyN8BzhA z;<Vrk<CMp}dw5q2^QGxhWIP^%_Mt52uE0R#h=sV~g^WC3-ec^7@xHFUHe@Y)h@CA% ziVj5ckt_RI^aKoTAIMIvpi0CZfT~Z!!JgSL!HT2}80`~TMv>uQLjr$rc}QLt+>20x z+ot;Ayzy>@#fSeYI0ieNyA~Z;6ff$Jn-lV|g1BQiuWNB=xYt#uI!oPERmBC+6**Kp z5stERf=~vAB6rM3Xs?HdwmN!*2(RSOaDI#^TZIT8SsI0HbO7-53^2m##k}ZTiRpO| z*et-nKnwySID4KUo@avIMTnpEd1bz<wlYpQXviYOQDUA3!T}ct7dCVRwjX$oL<*&) z5i<Y_kmmeKaVk|%K1SC33odurseKPNTvObwEAH9RTW`t>aV&Y>z~az?p+39P*5mwr z9J<;**cCBffFJJaz->Hv#lZ?T{v~;P6z5gv6@jxYHQ-Bz0E6$01jcqqf;0m0te4NF z%HYQc_7vA%W~`?d1LjPQqoP}er%!;FOa<MDp6`oj=1fnW@ZWw#WdU~yEIS(+v^^#e zRpIdG6e=HVwY{gGXOJ_%y`4kMmdx#bB_zw)-le5ez@Fa8m<@!r*Z6?cUQ}Hc;x$8c zSqx|=EhPq!5499_Mz-mzy*Eh=`?n;qd$Pf`MZ$WTdJL<IXI&iW)WG`bYtRbNZ$Me{ z{|(A2>3dM>zdwK;1zHqv8YY8o$NMzUpFpXRw1Tb&4deS;ptQHy#rx4`cs~%7_7d)U z(tVd|3*Y~McjOZp+oqiR-R}>B@}2Dq<<egZ&>*QEMU!@e6k|6?F{%NIon_bshAlH} zrD3-kcAsGn8OFF&d9NFWcyckOhq?<tx){e=72D6S0fvn*tkSTlhRrmLDXZ=>=2YI* zhH-{KvD*y0%dp1``>SEE8uoX?xYk15_`xuq+pAc6*A#X*POlhOL#Vr4<EGeD!(KD& z4a2@O><7d0f*x<!HQ}T@!}=OF+_1w9<0-tZyN2-;Ud4C{ulnyA!+vMj?S|cL*Z|}t z<sIyra4Mr=RfbJ8Y?5K@A1W{PC3W{w!!9@MR>STzjMtSsh+mOhmO@k5xd?w%-o>sd zELZI)c8y^-n>}h~>h6<<wHU_nbydt?Q>{GS94kPd`5CBy{p1AtbUp7w<mSv_BKC;k zX*mjvr&{WxdY-%EY*)iXg_(*LTd^aN+w>{)HF5KGNQZ4>p?obyl<3$y8}wa_y}L`} z2Y@TR<{b*eSIv6;Ji^|?@Uebm7*!oZKOXfB-%)BC=#@dBT|v=*l6q(%K59Kglh#9u zu^v*a&NUUu0&c~wFzjlxhq_icideh4yvdwl0h~f-L#hwp%fT6A3kAUVuz%ViBVBmO zDGx)KT00ZIJFN6p=$+W7A}S=+PJMI|TEAr;V^Of10demb3v&C9vCwz-7z<gW$VBlT z`k8T!!sk@D;1tJcpm8cF!!i?;>A-Oojboa^&LqQ5aZO>FL{WQ-4O?gSUNWpI8Hhz5 zX*qLU4=lM^{dob*+-n453E@|J#8!V^9^7!|Gd*I#RIFnL8>2w!t9TCp#%F*0O0vYd zuS96X?mTcB7Jaanh~XF~l_g4I;JLv(53562NZ6U_DVXk@6ywf+d@BMp^68?Cc2g6m z^fA!yjD1uOw()GF8~dX`nJRHN6^;aD7}5GmYH&<UQ-dbm1fbZdu%*~JuBnK_m@bwy z3=<hH#uin1*`g}1JGu}%&K+Jr$9@U+k$q8<JS!@l{Xt)1oz|%4?uVm?e<FMMrR?ET z6qj>N;2^-Hx;nR?zc;$M+Rx`I8R>sdVh4B%N5whf5IdDa4$094Rm~OBjgPT=Ehi&v z*YOFQ%`p18<mYu5NLbo&-1KL0UPAJf&*2>0TN>Tco_{g6n78Eyx>cQge{@r8-G0@{ zRxH@6;`j!~<lV0Q8_MVF+J7xw`yc9x;Rkf>-w?Nx&ut#(_SC27`B{*h=Holy{CdQH z2p2+T_R$|k%4XKxeNfh!wWym=f7M6p?%J6$;+@eAX2wg^5ZW)|;C&xq{TbVa^s>dB z1{qUTdb#B2<G@rdOhthcQQ*_NW6bmHZfb8kH*hR6Wm@-&78bxlClL`2OhWNUiST!$ zJ{B8#4H&yo%o40EwHs9+V$-G!*oAsVELBT6V;72*3ztRh=j#%=!=pJpiwimwx9<=< z5FMxrbRtUg(18l=SsXekO9v{aXI^{QN9T#Z9IpelH#$)5x}XCU8o&<JNo{qYSdFny z$YkJX1d9*ng>`ho^XG$zt!YlJbgQ&G<G<t9?eH}G8-6X$EzX4+cT{O+LmCyq`lnyY zjD|GZVCzo(9Cl$QfX&yoa-fybxKkJAVpqJ^g~>s<_%xQJouaT#QTfY!%bJRP6pW?H z(}bFcSs3H04a_#EPa1lHUIE%0l;4?4e*?O&`+bo6{aDbIz^8%U1j@FVd{2Y^7L<7g zBLmWhxek<h3jIy#%kVq({To2ppIr%>2g-MrE6VExN_iY<<vZK2c~)c66n2g`>?GHu zht{aQGYn&rE5;gAd4F%%jfVZzu+@gWZ`enMq2YJs(f2B^#IQ2Mpxe0iI5w>IMjOUL zquAdJV~;|ye;BsOurCe!*09+~(+6_dl5o{DO=0IIm?)*l;c6U}cfVn*)f9WlunmS$ zzl|q5VEi=lNY2neeMBnSrWWW<qTvoy0v#pel!XU?WGYmBfx#b6FZ`rI21Q!RfF_O_ z{2vsmFoNSLTbT+~{;u>_Sv#Wh8GeOoDBRy!p{k^}+=qV7Y|<yf(+tOPpq!*Yc58@& zLN%4i3cfRga!N~^bedGbQj7|gVk{_%v1U??1ywOBSc=7yrGr``kA#=6uj|59%V)Oq zh&LY-h&;7ExLV-)FHM<!7F?NXRRu6UEXWa-a(Pm5|39czyxRD%QYN0`_@|DM$?)`$ zc7SKrLbKF<23xEk-<_VjQFgsOIO+No)vLJh>mP=JX^{sy!o^VmHPAR1lx|^ArGXwA z21>vD3Y1|!6qISg4yC3EO{!)ocB=a|>`={8jB1wJLnY;6sJ>k6EyLb3tSV7c5v@s7 zaS{B)ijreFpEJ>vE*wx5D<4fwYfec`@}rvMj(B2uMFY5F$*r;EPc_pQ4vi)Mfw_mJ z2jVy>%tPR0ZYoVpEl*d%Ry>JqzoUPu+iP6%dFo3#+gg*{vZc$C@Y9T!&4q|`0MM?Q z{)_jT#1og3F>w$5U7ZYJhNf{Pk>v6UeyJQfpswArBMTfvM@{p21zSSnnlHfSywL@Z zPZ4XPvwZ^})Q80nn{O5Pp^6otkrP^wn`)9D4r+~*R+iuw#cu$9mH177TN_|&ZRJF$ zU6>)!u+}6e#K+-e7t}1vEAA9&8>^C+R;+}v3J`r7PeK8#!XfCbuW|M($#0&Q<B9gw z$?s#y$m-2u+)cKkpsBSURn&{0!;S-$v1UY{x_ENC#Pi=hJPrpM@Es{IfpgZm_`ryT zil_&7c`^O22Y4rWEw8u_d^L%F$+f8ShN^ZOI|XxUC$CwEFRCwIfOvlZaTs#0hUs20 z;g8PlAZ0RVuD^z@9{Bz~DDO(trvWFB&z~&kT6<SWVn(KR4vtgE=v#7;wqDCRKv=Iu z`<Nqkcsp|vQduGK)P-+QJEL#vUL2S{I<UWRQ2)e8C7$!-og>Tan^29TeU96!#K|ap zRi#Y%Zjc;BxFC6c=JkX083!5e7a1F1_j>UyCnfZ0LTlaI#RAkU@RSAibKVj8m*b7c z<gi)MGX*El!O<d%g<(z>AzWMT37OzLB0`vpD1<d^z+s0Sz4fW{*d5G%aQRADWTd}a zLWT^>8p*JMPmBU)Tk4p+*b!0So<y#KhtirnYWF^vX?M9K^K`j~o%$xDh;<W&7XtmU z1YsI>gnQkCn<SLQqL)(X_CmKOmW6+SJ}mips?fb+uM!^5aiWp|MwT`}qWa;{08eMp zwpLC|pN|s_m^w`H;dI%V5V*m)Qk><L_nOL6B_0@Y7%ix+T~IqvEYSPQ#67(#nR`2x zf%{O0;+H<LK!?h~a~kD1`v>-LmWiBskijg(bAvcH!+U)-e6s>UV5dU+u19tzKWBQF z9k|u;3}8$kD!@=$yp;xe>KrvvtdtD+*H=6bAEQsvuok_9+&!SJcQ46uK{P(|_V8@8 zYfKHM(u*QIb(8yB@~(Rz{Lz*f1LS86d?faHY_En^V{Ho3OM4go8;sS{#lhiN5fTda zhQCU3^74ZnipHXg6U=3IQp*L;SrLis=ZzE>ZVmMH^{-^=Fo%-*;vAsSV2|+9=iV^n z%GMD7M4}f|j7Q+<D3MQ{bhNzR6(|Ij89Xn64--3MohW9Gm@)kc>LsQZRDb$NM+$cw zpM#T>mkpKP6s={OTxzke?J;5rCBPYu#2tzsM=dqCi!Yo?CHxDm&+BY4Rv903(%;#V z+hEzVYJhzzMwmj<>XzrcFqg9W!~mRIeeMO6`H@v0(4DG2o}hIdzB7r^Zi4l$h-Il7 zAMjO2bey#btDW%yt9JB`SXM7^MyeOiPECYGKGbdazENN8-K$~WcfbD`DadD&`~H;s z&aNT(U-7-mkd}-n7Pu%m*-mi*Cr5FAB!K5L98}A;3-??~j}S|o8(5qC8<fh^kUXbh ziTi#z=nufJ1>FYvM^N00DLYnhKTX3Uc*h+#4QoMhhfTvjK|6x~JNLak+z;TLJwV(- z*U%l5-}eVC13eD38|W#Zdw|x1?g_dCv?nMltiGTL(0xEz^l)>X>;M@AdN<w&gR&x} zzgs|Y-=^GsIvkWr<3ni3RcWM2dzy-|r>WR1v&WvMV&@vR)UZDow$iXa8FrsxPa4)@ z7`p@N?gqn9ce)sRpXx6AoNBM!uzrSd&P?r{XxOQSv2s@4vkbf0u-gq|&QW_C4dX5r z#aa#Pjk2m(U)L0Nh8uRcVcZR@_P9rdCfpTj*y)CyXBhXOsJ%ZL#(gJ>@s>)J$2}#A zZ8Ypn!#+0bpN8e5C!xGWt|{#7VOS5t`WtqjVPg$D(y+OPEi`PsVSh7>w^XXT|1fN` zVP6_nh}cnk?OapX>1x=XhH>Ox?QsT+rm*}~j3+QE#y!1?tuyR%!~SL1kA|Uzc6omf zQwWt|k#nPK3OmQ(UF99`n!?UB!+1-rx?5}5*@j(Y*u{ojX&7&;Ro<HoyWOxS4QnyX zT@;IBMBH`Z-(mS{Jo&PF<wAAxt<O=G&~2!XCC64Kg2}N}iBX~C*mz=8L2_(OVpMT* z?1aRqlH}NliBV<Av6B*`%9CSHNsQ|59Xp9duI^%RS0<!;GP@+l4ow9A7n|jgN5+m= zk<BXC&hq9$bY0A)J@C2`b$Cb=$QO_<AvuBc7Qt8tD|S6hJTouEQL~I8nv+pRhh%Ic zcmuW~_^rn8TC|4xG%Q?{x*X|rEL*1*b_2v>6|CHGBx*=%RJ)U?b>kqvlL%;mwvUND z{O-YTS63Vz2_Ahqhz#nfY)T#HDXi(t!zP<NY(UkcSag{zHo4%MBdU?qR(gruTXFnI z5spkM!q{Vx_|0n<X=4{lVWBXvIUWEh3?7!VYVdd^4|R;TuH>o2H+sjr?7(J+8t}n; z7`N+CM%sa@ZjJ6bnsUa`SD^htzXxTT@)PJOpcwCLm<!72yATB9q7BPI(Ly&|49f4< zfEIz?1zHMvFK9>5``z#Rfj)^GqAeIry0t>FDehN2H%_sIhOKl>Mb52;-DlWChP`Ll zhlXu8>_@{EB8}9II@hEpzhcGu+=?jIzGB1?(@7|#-&R{8#nj?v6x2bjZn26q^#^z5 z@-OQaM|$8usxahp14q>B>?f+8#NYyk4;qH<7iroDmgB?UiY$-P(7HC>JSh-wY|TIa zxvZ=eRl*v1qyU3$g$+BRktQl7BH?{;>6D6o$>CK=R1>2Ls**<*<1pH)<gsPRW6P_O zCwIrt%L-~W7$sft7t-~S6}OYV7Fj{<XEZ-tEe3qKR1EmkD28_zFCD)9!gGhOzVPhf zFI-p~Tekgsc>2OQv1L2NFeSF^KVmomhargJsKl7~pq9kaO6*gws!AMHlQ?QZRpR)G ziQ^|#B~CkK^V^VXm7P^gF~;7WR$<xLNkrzwWQ?bAc%Z)h+A-XR;3U^>z5;|7?$X?p zRc3$6?9ROak{~u96S=x&#h4L;TDBY=c_gT&u{-<dz_z%nw=;NCwscGe5p&*Ku3IIZ zQn5Im{F4kuVRU8!*E+A+3*OV(k$GQh!tpS@h88r$`3=`J3qjKwlk4Bq-cp!uN7)ZK z7aPU{BeWKM#;|u`QhD29`jc>=Kj%u}nJM}e#ZAV5*aBzPw#UF0Yqt@g*JQ74dH2q4 zYTI(D;aF3aLl%ZUaV(Q}#BloUVeI3jYFIrkfSpIJrGF)TLSB>MU6w=pshV>D<a@g# zq}ENlQ%sl6_7NZShNM_2wM%{az=!EW1N=_k-Y0hSSSa=y857*m!Kq5EBNwN}9-b0u zmq>6q_8<$~poyd`FBvQ!&xF(sV)-h>Z>;o83?iuIXHoavDlJeQs%xC2Jhk>r47j<y zF7{p7itHo29dTe*y)zRB8z>%dDg_VZ3_-m+DR8UL;l+c*VJ7BtV(E|KFwa)-JM8nR zGMoX|)(gY$gn>tSWoKBdLF)+1FA2l7!oc&zG8y)xB?nu-I8fCO#+0**4-$Ve>K~;g ztWwrayeH)uiJ%n25@nbTe?B1$cM1a!UC4A+(`$*Q*BmfBBMdhQ14rom44lW&$pYPj z#%Qk>`<1(lZeA&bL8*lzG!7=Vk{szAh$T%7ZxnBwr%<h7{vthFn}zEG*yh>{UeKt1 zt(`i5#)5e`<9jBz4eKHio_50$k&l0!G1S2F`zhG{KWY#YXw7}J+{ufpK`g|}P8!5w zfNg0I4fw{Q=V=hU!fyqzD1I*HD{c{dWx_J0F<`L}RfO(=)f<-(Jt+-DLJhlkSl>_s z;n;4Si|-3fgZ>``IuvvSXeH<v&=Ww%g3bp$0`xr4aiCX%Vw|YqKG35<9|ncp24<;A zpv);Jg0jFun`vN1I2n{h1L-9zS~1<yz>Itv=myZ~pq22`Y|v4l3qYrX)`Ff53bz~1 z18u;6W~3`XuLFgK+i(LYw4a81KyL?St-^QilK&Iv3!u=78rWxj0F*i5G0;yy*MM#T zZ2|qtecuZDJl+csU+`l?JJ44_nK#}6?FITCC{JDZJ7|9wAK>DLfNlcL+Uz6H{Sdw< zkdagaqe(R|#iqDlRRdFu`A6;j)_AWo>{i3>H0)W!))@w^(slPc!+ti5%LLSoy<Ag~ z)61{}4C7fIYL9J)`ft2p>_sRx*|5ciop0C*!!9-KA;VS~_L5;64CDN^y1|rDzXTAs ziebsQi!ogk>tonJ!wxp=Si^Ykh05btgYt5$L9y!%yTP!#4C5IVYVQTZUN-C<!`?US zzlOCM#t{Z}H{zPY4#yP~<G6yl!Iip-aiy+eQw*D7*sl%yjbZm0_K;!AkqcGc3fF|Y zpfQ9L`Un{W&!I}>?*XVYf)1=XYAS#UV{yRz920yT2O5W($k8RmF-@&XJLPf>Fb*}5 z1LJsfqX3fvBSRnNOi`;*CGvNWajA)1y@jhMvPJIq^s`o?r2MM(ip^94lX6618ik+t zWRr~%MEIy@rvj%_9i{^&7CME4AvMFDGKf%asaeI3-GQk)bYmj&vG-(i=RkFbKBjEA z<-je6ZsCc_U+PJ_a))kswLBTJxq}f;#&BMalQ%GD0Bs%4KkhTwVpmOc9b=-5fpEwP z*X298Gw_PX<6^w3UB;`L=u73ItptAFlTCii4LL)N-o`JIPuZxC?a3y8tSetFdH!ZT zQQHioniv-KH)Vc^pZ8>wJ5J;Vib77&46L~xnExSdqcyc>h{dLw=+d$38|KwIO<RwH zZ)%VJP!r=+IcSTmviD?@eWEKn<m667OlHVWm#X|sDV0yzcY4A>v&o;F@;e65{Tyxi zT{$TCP+$JfCVQsJhE2a*rjpuDcR}S+CVOw*lTGfKCYQFnxNb|X#sy`r+>P9`M6T3^ zBh~$TJa2#=VkxgC`u-eW?9qKWbVew@sy(KWnwav+LAep1Z?eh0AT5-hPv}a@{gewT zmojhPjoe0&+ZBULp^G344>d;m_c;hh(}L$R`Ky11TDa9jn~DEHMrBS)$gfO>nkeHk zkr61#bxJNO{wCZ~FeP8=uJl&xaN|@HIj`23DJgJDKEYveuje}jC>NoLjNcSD%YpK+ z{#H|Wn3S6><0B|g-jmIp->W;W6|XI23Z(p^CZ@5<rOfAdBlji^Icr~(x$wZeg>(YC zwmp>=YBe#`cci#x<QrE%<H7PH<5Cm3{;XkO-2}JzcpUty_UL;xF$R@`wrcS6o@}xo zRM{Lb`9-oR_c32C%_jRX4Q*M0Q#J!X)O}@eqikS_#8s2$Ezpq`YBe!jTt$Tzkui)G z*Nfr3eO#lAOHJf@PQz0Xaw_0v?qE$ukBhOSb{R`*Vjfd2+IkW{@5v_rMK`{XgCO7e zMe-^81y49=Hu<l*@|hm#erM>EBRv%Acgp=>H?rSM#i%dOR{OZBEJoEtH~*nrY)=QL z+Eb35d(UX&QWLp8)^PaRQ;&mR)gHs4CZ>jR&{iBj@5v^6b4oT!k)NY2*~&q=?7MkS zHrZdRY*_KjWqqNx(_K)xlzFo!)NH2nY&E&G=*3049d&`RqH#f)57N5(Wb^NTMXqQ& zZKTc^OC2>a1Oa3%=#ESs#2_EfNBpYx=npk9b(Dj)df?|h*<|OZWTQs+bF?K}IVg9w zCm1xF>~<;}U;T0!i)uUF1(i#g7`w11o7|2jm)5+vXiKif1!XpxRL=+LJY7Yu)M367 zcY}`$R}CX2$fYKRpoem`QEy`0!=7s6Ruj4RR&HNU;#{+j9rebcCUW#wj!2#pL2ih^ zr;&k0Qb(WT<E$}GHIeh6tl>M-$2HEl)I_dBcJkq`d>ls^hnmQ7XjXT|`MAa#mzu~m zYPVbyj7v@As#Y#(ZMA`G_PKMkaj1zL<9Fh?)5md)aj1zL$0^6$0%z`wu+wgEvD5CD z!VmKo=1m|YSJHUTvBs??a-S^R+OIAWiyjBRsy&uoHL>(62W>sL8`)D;wn$C+g!wb& ze#!-vOPL(e^B(=4&U3nk_}~KP;7<_R!R;90Z@dtH?6HDQv=FO_VVbAD!Xk@y&laK1 zLN6ST$HlO!U4~UnY}J*EwodZ-E}Q&CX`%MyG6X3<sEKZ=T*|E7joc*~YL1&s3w@*g z`qZcaL^&r}Xw}5fUZ}p2+L`X9IQUiV5myt#tQ=98yq*+{S!Fl5A%%W1<Cn;$T#iC} zPd0xiRd%mpr`IPTr`zi|jOE!pr(In;r(h!TX@+~<Axfo0%~S!ChJ|i*3*wLaWOMHd zja_Oc&=9?z{$3sn=*bqlYGV9dtG;X>a@wPP@-%9Xi*cfMrQ8TV^OADW))4%>C!72m zRKDA``Z?&ja-_SW9F#l96Kpn_2UC8(MP&o?%T2eFazW)%=0*5<Pc}c_WpZiDi;K48 zYFtp}<(^Q`Y;x}vx&GdGXCKEYmO5%;{5+hBy*j$DJL5?CRqZkM)WkGW4$Aen2iasl z;f4}<{};)oT+Eu-lTG&Ol)o`j=I3b3-^xL`=bL0NTnxFoLhiM$zcqxOPtxtEZN`ks zrOa#b^PX&e{+q}Rl;k-j7%3~6h`#v1;t$DjjK>Cgs-=>e=%bD5BPl}|dxXZo$K#?e z)GpIUO)NvoMO*jd=RMivzwL$?VXTAk7s;pWuRP(P+2nuV%2#WizZs)yn_*NF!=nDC zOs?$oo@{bI6}h{M(bFtO)kN2}sE>9LqiUBiswT#$a%IM7Hu>MWA#OWH+m_E5{TF`T zlTH4%He*z6GmL6tjH<sWlXG9*lTGeV8lxNq@Qs-C_E<nCTWqR{E(P(&?ccb0$K&8v zwMT!biE*kNw1xRid$P$cRN1}}lmAUN<z8-*J-3<XQvQy(velX=H{DLk_v&ZLT&WE5 zH=Ca^O~SDh_6d$rE#x2{$5e|!H8GC%P@i<e#t_VTbimw4_>){{UWLNvaWfAp569=! z#CBb|Y0E2HFuLCvnv^>|)g88$sDJz%^o81EN~wt{r5u#|0Dj)1-_vFHRoSrOmz!=U z<$}tk%qCx+%qDk#lS|jVxM)kR#sy_I??&z*k?U_Q8D8(1W~rnm#?LVINp~EZfflVj zN{Ck%dz_?dpJ}Bgrj>H?t6%5H=EmV}Xi>+r)#P}ATc-XuHz@yR{JbZd8>3w}vdd@s zD_44GGz^sOA0^2qAG<19AGlud{LK_o+xYC7=$6W*%*XNbo@{cD7P*1q90#M{6KHd= zXB~99rI?!N$_eU|J_Sx6jC*&h%XK=<z`W4lpzwLzOe^JKTB(WUO1Wu^tHr!0n>(kf zJFXQ^E<>F1i<%f>l}nlao>Dfs(>26d#tQs#HN!%#CWd^DkFx-y3>ax}M;TVQz9c!_ zIMqbX1;Q!)-HEDccpUty_81B^F?E%Lwy@gCo@}z~Rkmx#lgoHYxu0@D<x(cr_u7+9 z?s+0tX3VFBT5=?Br227Wooyji6BwLj>KoREgSBTLrByuqs`eOCH8G^h5rt_4e%_N! z_9ZG?+O1zAn{p?4f<d#%ZdTd-v0?(PMC5hMh@jV(%N}1wIGCSR0`s$)qA+PV=*~y@ zc~3UCu1dubS|vY6TXCcul<S|d$R_)GH;y#Ko==z?)ONZHDwi_f^W}zYa&Hv5{`R-4 z7evrGmJ`%OS8h|EFeh-$0UnQoU)3ISf|{5Ul!LYo#?O1Q$-c*xjd};EC2JaB-IJd# zRry&TseH;l#S;#iP5%8VzdY=eBZZ2gGq7!Uvbe?Epc0rH)D(qD-J(1GS|yuXkE&Z( z$0h4CJU6JP&`msExOVLp-RbH}#cXc<Ron{5niH%$K}*;PEn%mDr61BAtdq0n3`<cp z(I;z^J7dQ1IOD--4aTJ=a;;acuGm+E64ezYsw>7)x(>#BZKn^(d=>w=&s>wBCQ5iE ztGh3GETHp@OHJhZyK;34qm3$bx?!%X+r)gQ8^YUdVCN6Xypn(1XTC{L6D7R6TL}q| z9dv<7P!lC=QVChwnpr;1g~q8Sa{f~}v3)FmWN?Bv?&j&!WIoHd)I_c?g{x=R0;lUI zVVScGBmd?i{CqramIdWuj#3kIuX5AYKk)OOZ0`J9-EpmWa#_oy{Guk7MU_jLpSc_) z+2rofP~%ujZ?;rx4rQyg5UYtHZdIR1d!sF@$HA{^kA6@SYZ>LBtpWIXPd3@Ph_;l@ z<;i6zQ|_l+P`Q-p>C=>*O>U9M4U}b{RrbfxA`7va7^YI??q2M4pAm7oPi*gW$5?dt zW6Hnj{9)OK4lO!2{kI&tu1~#5Q4^(fQ7P>(x{3C!-N3?@{3$wif1t+(dX90biJW_C ztZ*dz`>?Gw^0*k+YL{`XCgwNgqOD``^PX(-d#ik==qH6Z>mtQL*OepP73HAZI#00K zWNIl7x%W}oF!|-C+ex{gaw&5ue%_PK&j*@Z+VbL}Ex8&OlzFKq6f~RMA+B8HY{a#L z`0&<Vd2Xb~vdUnoRyQbrq_0iL=EiW>4fvLB)G?k?VMvc@<xiz2Wv6y^WDi5^{}4Bn zIb}Eg9xHPFea$iAbN#c}a;};fs&PAUbo6m7F%C76<5=~()Gka-o@SsAzp6dPkeZkl z%0XLyz|VWK$v!bHUOc&UCFOp~1(i#g4|+n)W;)Mg4P{0v?VtHL*Fvf$hGnL5u|7Z# zrQKj$eEyBjpx*3r?>ysF6FJXJ#S!LA_;?)rs`eO1YGNEI2W>rspZ8>weO5{~mL>Z+ z+LEmtlw0P@KiOoTqq1SsFP9-u+vzT-T*@4<8@U&lT!zexi?-xyTu>&rt$0s1|2B%; z0K8D<3hm=r2R+|XMosj6LVeP|z0)6BKm|0*?&#Na!gzFhXhQ{<aSA~T<Ksz+!mRui zX6gr%N}?^EnczLy+`KF;^qyRXKIJbpF;A#m%IvutxmRoGyXHZ&DRjC%3k_#rr*G(! z!TjSs7g#K)iLvl|^%2VhLhg+&d0g~`+GWmEQ<-tm)^G6ho^0}ON(-?kmmyC1K}~c^ zeM6ZydP2=+I?o*%VrqaWjrkwK8lL$|<nK}ot(q9xKdWzYIU1QGwmc4gReSV@niyu~ zpsi*2c~3Uk52|do{B_VOQ6l|Z=~9)SF{xaXeUvYav&nzVjY;?$^8K>g^1I5WT>pq? zHrY?7$z~}3w|Jr4TX*B{=l+kfDffxp$bL~|2bi9N)#@sG-hD2#9H1t~)2qsXiJs6% zwKmYR4%%QGY9hy*>VI*Ac@U?X$X^|^QF}~XH8Ia92W`FL+9b&)`yZ*e8T?CRQ|>3b zk^QlTv<&<3rj>ltzNL6!(Ew!`>f>y*5UYtH-mJdbtH9X{ZB~cZ(b{3oGj}3G=^c2b zdm@yF8kL&ZPf~8Wajh@)vbpnhD)esK==qGkP!77OCdRDFrrba6M)p=$Hkj~uav8@e zE!_o`OPNpZM(%$#R&f$-`(wfjDZ4%YxX*HnO*PRKY-?pdiS+{3wd4*amf~Xg)GouP zCe{neMcJM%3#0p;p-9QkSNYgKS^5cPaL{h~x!RJiT$Jq}p-`#m^4qC==6|%4eh!92 zInrHG4$8e6KkvyVyQ9j66~Ekc_fsyYT*~yf4%y^lIK}Oo`s1Q4xf&Og`4`W#pxNa1 zFuAly*?iiPt7%A?_liCJlTGg4u3Qkrv5cf~4HVMS+ll14#j>UnSk}}Og-P9_JKQ_y zJ=xsCATHuYR+K`1wpBGvmW$QIbUsLZxQkUaYL~fKP0Yp0<zLG}pJkJOh{|U!!?>HD zgRUzFb6Lt2<ro5N4u0N~P4=NG8&>>snQCe~-366PnTtK4W;2~<l*y$<%I1@9C*^aE z3(CA+?CGCu{;d|d0gj7djMG1pQsv{k*iuPN48?d~Ear(_kAq*;9%E5WOe^J}ty}Q( zo@}y@OAD<hHw2cH`zaSxE@eLA2{oJPJSS^tce6_65(}-G7@n!>qg|}2P`eDLnwTe* z>lm2s$IpAR$v@o<G5ibN*qaq4Cm+UR+wv*<D_V1(Z1U%&#i%Ejv7@#bMm5nb^*3cg zd9f#(+(jCrT$OlHYBy(J<H5<}7Mp6KOH0%@qUW>|yB-I>sy+HcO^j3Jpsi8(c~3Uk z7pm-@#ZFJuZ)MOZB3L;nJr3k>2P1TRJoi|$sg$UhDqvFg=+>L~c~3U?n%tO$e_5Zx zJqPYdD*j^k=+-7*jAwH%sWDEiU|@Ivea4*TJxPmgH8DP~NX2%YmQ;^}U)3ICTTP5@ z<)Ez^{JbZd>}%c7v#0P&WK-@6PcUdU**Cbd)tcvL=2^9!?tAq!WhRtC{$`VVi^ibL z1)$EuT!c4!e3Xy#Qj1A7(Y3o$F*#U6>v8a_+G9+ri7}}hwDmoH-jhxCy=kHK<TA7= z_fsyYT*~C0e(%X9_hAh!j+ZMuCifd}27`IrdoKHbI6D(~D!%uR-`ho5lD)Lr+7UuT zSwh;#l2poiEoEOKX)hrZt+b(3ib|W(LY5+>gcd3)rJ^WWwD3RAoO`aDx!>RS_xqpM z>&`rP=JUMIe&)>FnYrAYVhi$e6{ki~grSI9^zaffhD<2BI*sPe<c?`VfLQ|egT90< z1ug+p@XkRJ_{DYeubdOE0CMR~54NCeams)h`7hkt94=bHoS*8Mh=B6J;N101;`+~d zfOsz8Q+O&H{PJ+`|B(k^HvJ2?n&MK&=TH{9Z>{(2llLms4sH!%3u^Ew_T+hX!-+~g zUL<inumv6s*aM!U)E>l;utoQwG!6(PzeZ&7c<<zTV+*|B;1YnVJ2m1A!4f>q5-+GZ ztc6~IE$GqM3skRoN`fE11@n;-0^vd{=}iN+ATG=WrW_0OIPl|s=5V2fh@-Lle@Qp6 zcl`_h`~M@|z&!ph+&>hT`5%5&y+E>!*1NbhhApTu7U~F`ry|j4Mt<iD<MG<f^}-f- z31crg^adqu^#3uzQtc9r;t#|MMFNFg2FwR%&gCwOlforn3kZWSf#<r&I7*8bsay|i zfrspW^w`h!z!rE6qj_xNiQ@p*16$ysNb_*!@i@r!z!rFn#UA)KQVkHp83GB1xE|O7 z4>jz8kKKWw)FyJYKFsyN7I;jiJgEDXwEI(9;sJZH4%$1mpl@LhP^t2akNnvBm`&Zq z^S`ix%llgvKeiEvjgo-^Ni+0Tto}RoIL*L>w?C1<k86%gkf-gK5II_>aZ3<e5X&5% z5`_5Cv(3~JUsJ<6C_!vN31SaWz2GQeh4%viTfnyADZ&4R4crd&A%P!zA<n6^07Dx6 zMj)*<h-xnu#09O>xw*v_q-ZHmZgHIw57>)!kXvj)Zm|cbTG59Der$J6Zn1`NA>Y06 z_r`#^!2C|2T;<<BJ~*d5y@EVj4~`k!Tw)9I5kSi&@qoQp2f4%+<Pv*;YBEm?<Hru; z<Pse^I6dyaV*{7>n9Ps8`mYisTqq5!{yX(J&A@~=Gm*fLy8)MApI;hz$FC#YQp6U- zv=w{Fz}*k%9u;(jMn)Uiw)nn<I1(XRALV*u3%nC}yhV{WB4{H5$9pS}cP7^xTj0GD zd-Kdr$g?Qmc#P|TE$~R8c{qZU6OMB|umv86u?L@fe&D(u2`9Lo*aFW?><Occ8`jMr za<tCkdSDAYPW5`2V(DZakCR*vY=KAafAl!T^}rT*<Y5o0zUc2j*ufKDHrE?l;C=nS z_RisYV+*{Cu{V01)gV(*7kqy*dB-G<_%zoGTi{hrdEuiMeDC#uZ&(NY6kE_wv4<?O z6w!wSe(d|04Q(EscMCR&P;a~>UVl@uzYM~0ypRRInUKJbU)!7ZP+=-H#N(gRjy*u- zL%?Xwk6n-1XfLFfaA6$4>c3;aTwwA(Pr{G;lEXz~7b+9pQv92UeWAQ@c>s4W`jEhn z-ONohsDKUOpVEx$5t#cZ9bWL`ex$h6-6Nd7CdcD(hTE#J1^MXc_2Be1ay=9r&vHGm z1s+{AkFg--gj}u%w!ow3KYA=j*~U-WV+%Y4QIkWnX&LlZ5_G(lLB|gAc9JL(5n97P z2V+lcfu|_;lpMg2L{D!^YN7i*8igN_^DYA(Z$GX#w!mAG@}}P11<x~wqSFEth!^w& ztcBXf7W4z`1u9OVBa7^ZI_>2T#(ZjjFZXW^RzqBv3(QcC2dwb^zkNn<xM(X%H@S28 zze_i;MR|^i{P@cMk8}fb%)fBQQ`~>LXE2i|*ZwGLxUR7UwKWNQQ|H*?v~%oW9&dQJ zF!sh4c<bOi!I)Qr?ukcNWgrkQ_=dGm*Vux(#$KR$f<7eh;~QW;M?$zzZ@p>27Q}_Q zz<kf~fE7Qk35SbFDBX<zDc!&>;HeXS{F(ocbOZCzzi{VKT;4m|ct;xecWPWi*n%3e z!yZlp7*6)^4vfElQ~3e~#0i(UqYk#fdlB{?BtU+NaRD(IYr)RrdSMH^oN?~qYI>*; zh`1iG7weFOV?o=%9>AT6J|ysCvoV_^At`|t(Hnnn444Z{O9JI8|Mppda|$h)=i0*p z9<R&XoMH>|5`?{YW{te{afR!FE$|4(>E|gM;sJZH4oNr`lnwR(l^yz!z>mEKv*G-i zQ||vA8@S#CjMn_vn{ZD5VXnt}EhC?sYivQjV*jHz@A2p=*Be{ly&Ze^shbF%6kq3h zVGF!=V=poE1~zmbvzS)zl|uy{&jPL|w!m{g<w?yF;l5WC6sRRWL&rKKVPFgD2z!8P z3i^=1kDZR$9Ek#F4Q;VE{@xfc7no)oC9L>yk8`-F?*FGW19$DeuyZgQ${*cfCs;Co zN)7S)yCiVhV3fyRpsN2D{&{Yh@TTUU$^>(P`T1YCSGZgdDsa^Q#KmO|Oaq=#m|s~J zP+Z>knVNIhuqx!XC~QHCD#adsTCfg}*G;Y$w!o``7LN&!M-kTpTi{W}6Ho6u_yTym zO1NIw0<Xu|i#jhAMk75sM%dyze0hJZzs2>$7I;4AiEjWy#1_9PFqtR5GOic4!0R<% zuQVR7J6tbpf!F*0DwTJ+p4bA<wttPUlIw*n@cN3q#L@r2c%c7x(GqDNP>Azq&6Co4 zt|zv@^B3i*C@sX0MrVQW{$6tD6Y+#G1M8uuU~3516I8OOBa^@{4kntmz!NA)hT?!g z*pLG3fs(<oAU>Qb;PU=<#E;#dVpDJSLieMP>+mXwLBca`uCWDi4#X*<enZDcec}Oo zu?|v%El3ge02S|XmLFT1lUpQ3fp7(o-5Y;z444Z{Hpn@FA6Fjd6lw}xFGANe+Xpt{ zmQUgU=jYtqVhi#!iYK@5y*E|x4eKDc*n-?*58!H|4+;F(qkGvN!c=aF$3L;L2dF#< z7_IrSCvr=YHzfjG_1`gIE-=a58}R(Nnp`d@fDPfFxVS8Uxq;H*1wZZ-ipyLt&RE|m z!3b@VWcYeWF+8;88H1V94ABSZ=_JmZ#o!;#NO;AqF>FDurePA?F=LDRa-)z2s3#H^ zv~J>hVGF!w;C#WzU4yRbgrct~5HF}<tc4oJ7W8QB1*%=>LjphkEX;?ow?q*Ao+`!= zv=^oL#Pe@5X24j1Jwf${=Xk|04r?3-Qu3w<>ISPJpV)%@U@kDJf51drAn@ZZ;Be9S zgUW_cf{G8y2jzi*@&JL96Qmat;5T_}DIg1%6U0->Gv4uwYY8VV6c5DpKh*=U@Ba(m zmE!Xr)5oLqk?@AwGOz_D=7m$lGm|GCuovr~Jh26}h&@0>eyczxXFt?NFWZlkTa;+d zO#Z)P1NSCCIRO*@W{2RM!nI^hndlKYS~qiZiY>^?Dx4a)V<Qw@SJK9A#0&C>wU9?_ z$#A_ubq0M%;KyIb$t~6pE~L6Q4cLOXaB6^g0XtAje%viMr+sE!mwCM2adV3;$n7@l zMIFa*$9l!%@t*5}E$~Rf9^x#9ICChYe<Rw2!alsBmLIrY*aEM;IM)W^41-P?#^f4V z#>5gihH~g&#xRc|=y)X07@$3Z@+Kq&^bPx~aIJC3!X!{tLZNX2zc>%#I5`T!1*hJ0 zVGBwcbAeg+FWe)z1bEt%G$#&NwQzHfEy#TqP6=v)0;o+vARe$6>mUu-f|i9nKs5$^ zNZ`jlgV|IK_M^DO<Db~r15~`v<nv=+<dz_BN}zbK`tKMp7nsE)!Cd9vK3BP15R$U^ zTZ3bOQo&^b%rcO30>AX$q`2~O{TTh3l9VnGEg_Y?Z&Q!p_`|A|TUXcu<!y?=oHBqh z1zj7Vt|9T<qjrYp=<|u|jV<uLhrQvc<j?`=$>jd%$z=3SA8m9OSNqV$ArIsVk?5~? zY_@SJ*aAv5MPc+8m*u_sB@3>c@R{p{E%16qc?rmm?9Y(MKrbPEAQ&j%!qOnGEU`oq z7^-@U!iEEb)fX-hTL64R0eLSC5D(akbx=Xrf@X_7K;?rzB=BRmU^YiWxX=W8<L`|D zbAicw`Gg<$Glz?YZO)|u!v4=`2JRzHYGB2W{T;K>e;5rYk)l#UJpPG|JwS!7Dslrq z_8)F}@TTOS$^&zODf2H}7P_md_u+j~7XQS><qS-<f8h#KTqaB~&xt%hCyN@8z3bdO zG8jL(EecyuMuTu_#)vS+bfOngpbISUr!NxdlyiW+B;`v8L(n(u2a_mlDIg0IKvl*$ zpd*uST(X>;qX`>|3qLfDY!nyce~Js@f!nr7;Fqsqf0Z)H0~BFz-mwM!1?K^na614A z{J4s^l+ix}NuEO|Yj6VKf=k+ixS{oN6cN4@jx8wZu{cFC=m#;>4+f#zE(h34Q9i^I z`YYDMsDLdfb?gZ$6`qp}esQRAaxH}W8j6GQKg9ujM@TFu@QY(IE&+H24XU{z=)`ph zy3t{XmQ1@;BfeGQIdMnp6Wo%(7Qpo}f#<R{@8Kzn>wzusFv1?>^)P7o=Y2g)7f*aA zx!%|UZ*%MoCpmp?8ZG1T%;tJx3q0radZGgd@9Vq$c|3Etp4b9U8|>L<@;8mg>onI3 zTi~@2dr7bu5^iD-$ZZACE=V}T^}-f-Ev38^hX^r-pmUdj=yrQS=u;>VPgr9;v@C2v z%fg<pR}+0m;1`EGjzdZazpyYAohWLfaRRvz&wq*odx9#JM1a=(;_$(7puN0Ylwpn< z@{0YS&tfhxPoNJ8{I~%eE+WCX9XyVJ0>l9USlH|D9N@A6_8pLM0zZBjH{Bp2+<!_p z<^r>V!-N$-?rMt5q+Y0krZ4EEb~q~Y;aY#cP=)u$z_Z-efh{Pp4Vc2`A)nDa@#k_q zu?3!6alWWi%>I;?c)(t)gVMtm<Qsc{N(+5R;KxqrWur+Qug5>Ju?KK{2^g*Uv3FuN z+RMv@`oQYHW58TsMxqZ1{J1GxE~rRZ{1X?K1u(Y}C|dL59;Ud|P3?VtAU(z7d7fKC z*n(VSV$V^+j8SgG+T|MuKaeey4wQ0{oG+n)UE6r3#}~K+YysgECiK2;rx9Jyasgjs zSa3of*ArV*3F6X#7aySGnPds)Rb<G+nBxU40_$Pa!4`}<xs<0dvUp$Gz%PzG90yWD zFs7FHvR-dGutl{)N)5~jJh|q_y-q1Pms?x_OHO&fzRb-nwjj5~I3)w&6$9wi=I96n zfp|geSPOZ^7UUUwfr?Wd$RhhuBpfC1%Q2riX+)QU(H7zXdol6vSg;4E9-|KlSot^m zK4v2cFZXXvZw#0V%$Ed;*8I4&TrLPnS^N_hmjy7JLCy*Mxb+m5^OuP2{Q|L+@ZsAP z6bYVRVGGLWB~Fcj2*Ut9-ZB~8!l{ma`WUZ`YO4kx4G96-AohcqEVdN51W>`Bu9Cnn zuI7Ktd2f2K1$Bl~2F%=l;eNz9=QCE@lH{OuJ~#K+g4}oD6v6C2wD)Bq#0ye^wGvzl z+9&n`RWACFz>nX>$uWu=@%cTF`Okb{597%>KYq_&B}&o_Z3(L(kJy5|;B*61^Iy1v zgP^4_r3Nsh&^d+_dXPsdS-cUwkii9Es6PvaH3U&KEx>IGTM(lt_U3cTEIH2vPxKo< z#}ixNDTzJt9G7ar`XJ>5G~9ALumv82DG%z#HTanu9Tg!EFUU34LJeXIY7l#Yiue4U zAAbbqb8euA5scUCpZM4d*zeGX1b%#F%tsPlF4Q1aLmsgOabYen$MMu4Kkj%g7m2y$ z@lRY_9>C<iv7H}x62+w+#z!}_l85oVArekNzrAv530sf@9h@4@I1NJL0ei6y@`o*` zE9?QPMD!tnAKL)4d1{E)>u)OdhZcanfGxsPlKl84+>+$wLP=uv-#NfsV2=0~?o2Kh zatCY(|HQ@R0nCa2!ktHP@xy-T2Qc(nA9C@Z_u;r=6cO&X*n(Wx@p%6Im>~S2F$pDH zPi%qbBFfW0K!F_`91zTKclGxV2vrCOWcw=wvqJ*Hg5BASF#i?)0pb1%o<6>81<!zB zKi5!(TX4V%q=8KgAODrEzCIob7Qt+`{i;B=!b)~<h);k&!!N)i47qT=D)@vbga!mC z_y&Y?U0j2`!u;6&p(qX?zd&C$*lZ64Pqu4lSTLK!66)%PqTxgt;OQB{4pj*E3HA2z zSHQbmgM(dHDY*Lj2DrP1qL>vzd?ML6G86-w;pY<);^Xh7fD^?18W@Z+8XUTcn;b9S zRe|0LKK>r;2<|p_Z`WW~_fU4Qf_s1m6h=r`U|>KnB$FfebM@ku3#R~s*@zLWfRY%( zQE|$RlvO}jsIQNIZ`rvA_yq=p_=K{toB;*p=jy*o0cA2YgqxT^p9r=ul{@YxJBOJH z9s%yS7`b@2<!tv*1#ee>51tD0^>GV!4MxnrH*>0~&sI-YcXnSTRjhq<xDY~oQM2i@ z2TIP*HITO1)!my7nM1`E+;?Y4XfWH=k8I_Z0#0H`Z?Ui=LfQV%$U+#XC=~)c75vzK z0l}+K{rLKXK;;BbMetXP#&B-QapDSLvscizt?&u#yA37Gqwh9oKU9n3?(htD^<zT^ z;%xV4Q>nq5UEST;A-%PUH&WbSS0oEoK;6LKC)5XZr%1L3gR{{+AUHTI5ao$%2tYl` z6S|Q<+Y80M64evi$IBaa3UBD5*bTM!-r@>odqJrLqjGVF;_ppEKp@qup`<<8;R>Wf zhA=`xUENnGaH9fM?>9GB53ZEq;j_{QszSkSl|m#tIDlIg!E8?yr9T=%JOje~Jrq3H zZed=iY^WIVCUYw@3(gh=)ScN8Z1*tSgQ<pqa!3`QnYo1>7fU52*wr6(>|VWl02(<W zLUE@L;LW>dn7=!P^k92Zr3;OQ+p>K8Q8Ngm3+ybc?9pK7kBBh(C~$@lhIc@)PbAvx z>Wd296*~DiZ)A+`BO@bGh{8B9`|kFKM)EhfcbtJfGtM0?`+D)j?Z*xc_HjpaZ@<up zzPkAVA)$8e!9IbZ3gghI654k^871hv-ZJKndOWG=Glm5Qvi%g$&>z-2jG=}Z>f?^e zhLb*qdq9}4hXNc^P}!r#hii!&%|E5IPfY(H<1{M^)H)Obf)!>_YpQiYTS5bqCu)+R zY^u4DLx7u4DC7w3NA>Qrg3W;O(>owwMF<*nP)~xSy0Our4IN|{xTz|HtU~o2!8t^d z9)kR#gP?ZJ>5M*J{sHKig^r~Q{C%i4iibw3uBq0}z#E|Lx%qg(p_Cflp{Kgo*_+tf zTUcA!k3}WLMrB4CoD1KLcC!|n^HrK!FR(J3Wi`{(+L5+@hNX$E9c?QWGwh=6F}Ipw z4J_IYQ&T#e+Q!Km!vZ=Er+;vVFQ_9@4OAXOu#PH~5Y#p}!yF$SbVM~yqX-C93t8#K zpk^AHj1}x)G-i6?qE++oaSvrclMkVqKXO5SPyvh(Ph{cQLTIQO^sW#F=lJh~hQm-a zZ_(CbprL>bCf877`+LE0+QT&%&38~lYJq4vfLb@2;xORY44XI_SC0TUsDCvyWcjIa zJ<zD_?-AgqhK@5H)GTo}LsoX6%UlojH$%)fJz8j@w_DN-riNxyo#qDzcp-d<leW9N zlYfA}8lHkVp{%13-rp%gSKG-GO|u}4>VY0^jCfD=Kt;>Zn-AMawG1)&{joGpQ8zo~ zhrqq?WomjFgCD5>eEv)J;I|s1wyRreH9H=yNgbkErc=Gcs%_H{qn12vwb$$4cMsk< zOFn(z5d)o{RqIoSoP4OGx_zRl)9e*nbe)X%9n4*3*Bag?tGiL#s3Uo|%<h(cFBY~K zc5li`Hg%54t8lw|<@xPsy*$6p!)s?0NOnuw@B278G@{(tv`w{D@B723i8s;=>_5Lw zJF7G;P#}BvHE-RN@lN|KG`9UrFv?H9SK;rsCEU6ESz>L=tgPotG@^RyM7vGy&IpP; zy62$x&M~zIl3r=5Z2fdjM00J7XZgLG{s$ah-!2#IpJ(mhd_c$h=A?<5Z<bx^{-HW! z`Su6nDqAjY7;`{$ar*bUWeyu+?A%l<OY=ss=fy~@cCWot*1Fxhdc8FJ!wX5f&3c>X zuX7GKH>haQLHjvVJV)dfr&-;aseNhXh?Or+=oeH*Hg4Fh{#;|%`*m0PJ8OP7b6q#g z>OqEL@w9pOpVl-DRY+uqw2V-ax7Hn&b*!s&t95Ge=Mn0w84V#{u5a^toVSjZKUsM~ z@{`?Jnls<0Dqgv>@}gMuxQ@W>Kc@c{mCK&1wLbgzgRc@6Y0ouQ*j=<JJ?a`7H^Og1 zX!swW@^fNYRuauGg~TRwZtS<H;;H$!CEsLY0>cYVZhJCBwqIk=nUCuR2AuXux-+}} zdUwr-MbppLILw*Y7}PlZb-w>sD|<Dwo7vmfoKc+lNu>B|=dRQt%*B3gvfG#3y>j2U zVvlcy+z%PSWCf+3GkJl5DrY}lJ-aqf@AsWa+oGhV9J=+>_VsRoZr3{f2DXv?U7g2w z-pM7ZRPMi{c(7>5$y0SIA*LH;r~0@TG<{WNPgytMzGnW=4|DnrJEL&k=34ZE<3}SC zxB8!r8fA2CYx|tFsxMwyb?mbec;hfp@15n2#z8;7Z(Y)}>Aqunb;>~3BX<7PRpzQ9 zL%&>DFBKrZV2`otOhfhpHN$SP_R_^GW?o3%)=$Lr+4cQf;w|zv-plr15ZSY~?VRE4 zJ(~OV2kn|!@j)}kmw9$V{@U?-?<pKfm^Hno&E!@?)TT_oTcKh{j_%Q!mF~LRLBCGI za(k}*Wg(rbqYwNU*mm~bhJ;nJd*?n_svP~!Kj8JQQaKfwrv3-&*DQbTbG9i&Pw?)p zf-TQv4?os;(=9nW_E!9_&9)a;G!;K>O-TJVEU$8ra>e@#+w8ZEncP{Ol%DX7lvj@7 zNP+$W9U0XdeO0cEntfQVR{KSB^`kpN$=7#P_`DlD!kis+PHINh(W)i-^Hu$F#x3%6 z-gWAH;rD)BX=74%u9=#nf4E}Ph=XSFxvkzi*DPh%p4GCLdm!2G_x_mAPm(t(Ol;Om zIR1ord3i>(q+Nu|*71k@pK5!3%JAFW@=@;P$_o)^|45oKUbw`u4;-r)e0YzyR=+b9 zYtmL<Xo@kCOj0_lZF9b(se6R}0{Mdn293P6*@rnX;roRPAKQk16%1{Nw>msKpwjT< z_ArKb<Rwe%*c%;T=Z{W!|C4-QF!ZWhk>`PhqOvoq=BVa7xvU*_yhHlQO3$h9HkdSz z8qsn}`RsXbwH+De!6NF+R%7|-8M+xpwzFPux-wia|GjE#j-eFG-mdGQV#2|TgS&>O zx72@^UTA%N|3??~2bOa#U&%ggGRh);YkRPgeV1kU1S#F<Hv?Cy&i`{&ft|V`Oln8T z*-b~s9#vM#Z639K#Eg*<VtH<(({{bo&Yd-EY2Mps+nYsAG;ih?)$CalaKoX?;PcQp zuT92dGIL%v?mO|J>FMeFv11LNoRcs7qdZ;a${gK5#d`)15~hZ#S&dgz%l@JwK6qYq z?K9y)ZztO3kNI%tV!wW6kvFg9Y<r_F8JDJGKYDh>nPojUHO3!UuqQv!CF-|h^&XSN z8)eHz>Ez7sncGjdC%<l_&Y@q*q7O@aS06r8!FanhVOGedmCQiJTRxMk8zY@#Cbr)^ zYSw+>L+91jeKVfudy0CyE_)>ta3VGHms615TziqW6Ple_vNxDom(LD59ymjC>$2F_ zE~{evZfD;=S*MyaFJsF5khX>)&ko+(|IBOfYFo|FfUdp5vt{+0#_QE-UacG%y1Uk( z?xaz%$KW83g)$Bu8b^=q(pvL!Q$+LD{QGsUP4^agAGACt)%iaAMn>w|tJ|%e?g%g< zbg!{}Tl6~Owhl@w9i3x!QSrm{*$ZQS#qE>$VR`nU@|i8A)ANI>D|B6+c?H|w(n(DT zTjoB+^mpOB`x{M8+T5Kx>9Lu3j_=4<)}9RIr3P>OUKKaESDiIw9?w?jKdCLWaFE9J zi~!AAvz@`+GWI67FUNRQ^ecb=z{{j%b@kZu3)Z&ph}j~ao10?HeEf5Bg3s<RuR^N| z<Wr8!8`A%L=SsGV=#CMe*#STIuDDRpl5ldw$#?gypGPUg$voP!d$6wY!JC$L32)Vo z#El5Q+En#^+&!~*H9ZHnpDwRf5I>Zpea7j+@L7fLm*+gck(1w9x2R|KkQ)2uMM_iN zYyTN&IaSB&ncH&Ty^okm8!t;Al;8b!VC?u$^PFG5FcFk7Z1WQ8R(~F9VDbI&_n{(% zal`J78L=sHoxn}yi#PXvTkN!1<VF8A%mTBTo=rcbYSv7<|5o6%k*37Fg19`JoYD91 zi=J}SZeEct|G;*C+B|QKo~z2Ht{UkdW3Rnysw!9-D^<|ow@=zw>Cc1yWs}G3dm1rh zO77rx$B`Fxn)Wn@T0cG+=}^j^<``d}GNJ5APW{qh6K1RsKXC6{qNwNK$Rp=2>9#3u zTDgvy5;WcNVYs=CW8R?yzKx;-Z~Ok(n<Hi(b0S?VdyuPGZb@^i$}{OlMvn!$HrHQw zk5QeXwIgn^a$CWRD{-PR>P_CVl9r}-XU<yQz5Y(pD`!WIF6;0j|1Wk+i=sQvZ$33L zQ}9~Xqona^A%Pv0Lw6~6|7bi}uwA5wWvVDSsoAApa)$hkw=>0Ob**D3g<p;~dZR3U z*f}pbOmS<7h)d??bq@EhB@cdCx!6tqlv2yvL5pqT-Mecm56PZu*fw;sv1CgAbR#>X z?+@MyTK-U7udkVKx?FgtjPC6{D!Tm(k{mwO?|kBVO}1XBWBk%9FYdc7s;r(+aCf&! zoL)-0t*JofgnjIl8De5jhb7o#e@u?sy!OxIaSx_mxvXhXUX}8r-_Y)sKk=jcU$Tp? z?Rpof5wSBXxPR==Lz>N6i~~Y$pPz1>v@T?jbbXEB!7$q?>{2)X)+eW3(oS7jwd-Ab z&*cbfhc}~EsAq%=vUC3!hvu$m5V`QaL}hJw)Z<f2p2uJMUjA}%sO0)si(+k|t1~xy zWYwpx6AxM<HrLB!!w$!;`qH^sdw#9dDn9QR7AkC*8YTYg&T#d~2c9i`H>LIRKE{$u zGw(%cY&1#iZ@#SI%QAMH-=V4Tt`Rpr_Bi~`ovpoQ@q#QP!zInyj*o_z?@qWQ-ke?k zs;Z#ttU<xCvZTWn@9a%39F%%|T{Wso;)m0r!c`gv$2RW%@@8<7aLK`nFPk-v)Y)IK z`JwSmP*tw6On$@`c`K!QS-U;AFLpkDIyr0fuV^Q=dn?Z7EYqCy*2-~iX1rSQL#eza zTE!WE^bKFLn^xa*?QyxRU@<KJeqL^cT=<s+ug|xf#JbF*)4q$29nm(jX6E>)+5JYm zGRv=d`YQI)u4&Ov9}R2&UMrn;J#yM8ml4V3>H1b$Gk@)T7wlr2;I3ENxkv2e;<?uk z?DAM_`lqzHt80?@E#qI?nwd*e2E=cFc2jbCq0jAW_t}jLr5QRouIA;<X;)oSKA+oF z9aG6_H$ES6_0Kzvz_#Iz`?f8Qzw5vf{Pync@x!%IYjm2lTKBI!CQ>$g%FC677U^T+ z<lo*4sEn|WU4L5AE;6iW+uDjRp1;x>Jl)OS&9P8i@T>9K*Q7|J-~fw4(~8ZfJtG2c zC{EjS%JfdVz~u=xzQsaQHPR=Jk%;<yeEGpC<GU7k-YE6oJKMt0%IbIR?&Ax*m5ety zxHM0F*1kP0bfDouG11J}x&?_7W{cik9hW74>7mEQ5oOJH$JqAhGUV4Bx>{z^`g7lQ zhqZpI5^AEW!*}%Wn4O<mzp%CV((I3GCOjQ`GH}_*b0<559e=(Imk21fWZ$mTU)?@G zKD$*YZ-HRXGtrOdJHuu&H;0@GvEKVpr+eORo2K|zLIa-uSjY6sONn{+ry)fA(SwXf ziE#?f1I>=t7H7R*>2O-7scE;=WV@u)+mE9p2hC^hWZFzNUmw}eq0#2|Oy?lEwQRRc zIp<R0#plBX$CnD36irYO&in3dabtVg35Uf3Te9N{PB(x1x%r!@)2_ng+*kU!^8?>I zU77G|<NFc;^LY=3-un|u{BK$nOI7XtZS}6@$=Iq6zo_i+wma)G%!`tqi%ZXbzI8|V z8tsVRVrs4Z^wsN>s`rKMzqb8^ZBpyKhh_`M*-iBq>)v;0XtL4do9uBXI?7@uzWMWY z)j8dCAF;SqkE@@Et*ac<WVg!oU8P~dBYT;l!+)AAkM)++pOesb$G7yoM)5v3fpX@h z<sud9q{Mr)YM(F78FcmIiz_mVi(F^eNImegRGB9p`@U!H?d4fE>$>BQAK4hcO682H zUCEJt^=7Uk`UO0g`*LIEGwCRW=3&LEuJ)I1&-j?(Z@v25tvqXs=L24|D@F^?+j?k; z?a0*?fws?DN~I*DVqPga4*Ik7+s#>bB9qpe&x$h|vhv~T_l%bPXBrH2@&a_)mME1d zjuCm{l_xcL=UvUGsWX@SoZ&jJ|FSVF(#)N<Dl9Wy5O~M*K=U7!s`b@h-R4cJtd`!s zGCb;SX8G!5;YHOC`z1#>REeE$IKK53i)EAa!*$i!2HUTTrN0DCKEd2m_Mp{G@6(;M z(u=t%zF!I=On#Ri%S|}<qW<af;YM3jzeaekG0!euYdrgR*z|QbqCb9qZ5IDh`B2P{ z1*Lg0#U(p4Gf%E(Pdaz<N>#_|H1pO*0riW=I^FGzg>%oR)ntwLES=c$-0^e4C%=WV z<9-UaEqm^~==2?@H&HRihh6SDv2ARfr+0MOc2$)&^K^x?b-r^<^-I!!#*+FzI^8(0 zF+4>+;i>5HFr{bS9kE)6S4$TxTemXn^Y%McwjBpqs$ucx4n8+swRo@ZAb(+2^U;WJ zoAN$r>39cty$ipQx6rBdd9L&7Qw9V5%cY*osgHd7q~KKP%|rbqH6N^=s<}aRZ)})B z!$hwnv7<%B;ZNiBHzvid*SWtWHrwv#qLCLGmrts;U)maf)Tq(;<Kl?^XEeL@mM;E7 zzB49Tok{cAF!e+kJKje9(RAIKyw>%ZKMhO29BcI6a7RnWHmx~hNc0`|Ir{U(?N^uV z8Fykw+`IZEqxEtsK0W>YDZ&1uc-^FRK}}P~8YZv(5!U12pyifXq|vf<w%S4my#U+R zemyFFMV8L%XCB__CuKZr@~z32Kb`!fW~TL|XVL<jI`ie;_l7D?5EMJtSv)Ig^E zue_#iU43ZdXX%87HR-K_x5dY-R!ix~Z$F%V`s6e_U%j^4=WR<`Cre8O-FoflQ|jC_ z^6StWt9K@t-1l-82wS706gqd`CEXg~hEI{>CZDiccy80i#?AS|q7$t~MHOaPZ5GXn zIsHj3#;bi?$DyyguD>1QC3fTEu<9QkZ{(IN^S{)l_U-xQl1;xC6^aMBzxY!eX1x4l zVmMo_*28A(qI>h|>&vsR>SmGeb4PY%zH|`()bIJg0hz5?CrJ5zsr%X!FnMXlT@zvH z`6Fur1di%G6#njX;_a}84W}aGP4&&4ROVLKyf_tovNO`*^P+txwm&&}ydivpkIr>> z=QY|3ehzhv@@4lJ-cCH?v)^X9SKI0d;r;gLxe8ST4tw;W`Kt8WTUnb5Rb!WVIDL7y zVu4z)*TPp5#!5TcZXBEVBKWmLYn4Uwt|tW--U+PuX@AM(mZ0Ihfayyke4oYo6seru zSuSq=_O|Ct6E|&xQ0<M4-XuL=mbAWkT@`gd{mW|U+O^GDgEr5rsxDMFOB6W%riMBA z>SLSdGrr%w?RxQ!-BZI2Wi@F^157$fb#hGG=5;VH)vg^=yr^4bTv7Sxh93iL^d9bI zFL?c~|MhOszPvB_D_A~jmKVPZD&3c#9)F}jWvtZOp=Y(fHJB$~3Loj(eaS^Xc7>P8 z(6<(y2Zw($Bs^PBorllfF1kU|yR2ZZ#f{cq38Xyooadx4zA878_80vv`gCyWnuYH7 zAJmA%9`QOk>hq|#&;P6<{!ITBdzDi^2oU|GBcFr^e|ct0_Rp2BIi=J!sj=_(><*m? zpRWwE)cpB0_E()1n|v?5-ZW^{S4G>qKbr)frVm(t_SSZj{8%Nop#yyN=SPZ0pKE`n zl%v&_tv9noGFjx?xaKFv*37oBl4yG0lx%)f_w4F7rgj;*6)fLl-wNuhE~^f|JYn{Y zL66k5@-J0Kns?-@2YJm9Pc^+Wbl8l5pOR0LN&l=_aqx0NxsmyP@mIfghHhIs^Xwq= z_RPX(Ju_^jyNiu$*UPp{o>U~&E%$BOB;D}VD+wpGinLyAAF*r5&hus~)Ky(_GW_lw z{nmKr*Z~9A#96h^EG4BKC&nM2dHeL~+7DT}Ib#NQhL?YQ=(lKP>dALWi39qX)*gEF zT0+OjUq3`|&Ro);25T%`d`mw|<=Xbkq9X=YPT#o9^;YPT_vP_TU)qa9iUd1C#BD1N z?(ax-h*=cV@zV77AEi$d8my=6`2MZN`{NfK-P{3Nrv4Tl&Ww{@DA3<Kv3^7A%aVoc zGuhLhWKOJGCRbav)9}T>s<<nTV)unlm8#cY6kk(P{h}>CX39<T{JKJ`#kb0AuhlsJ zxBf5Ax_?^qW3V~#e{Z~~{C3Gw8`2*`eX9Le`pt9?O>*rL+A7*UdvzJZH?IGv-A1zv zx(`b1jPp?b<G(1f<NC?f&6A8X1T&XD8@8><zxGeNhiE};r`wSoPct^Z365f1%@)aV z_L?8&^ySU9f>jeTVs|Yl`tZVJZMAmk<wO&`1x)!3%F@9i_uBG$eowMKnW49GpIm%L zYW49~J61lrAWq8H{99r70hi;htW^TnqSl@s>^8GbVz<bvy8XM;Mvq-K=4+$9lv9rM zp)gk6H_@auq3=ll`x3K4H1LD`GOcLG@d`l=FF&s@YCO11pk-D+?J$98>1iqD2ZpG8 z78`FOT`m!`AiAho-^|NCF*jIZ%~YL(suy>W{uA`;eumx4g~_RpoOH#6#rKq7JGLO? zr+s9at8v)uZ%;yQ%h+E&(dNE0_+q-2*z+c*pQ0P~m>7$F6B%UD>Xh9oOWJGL$cTv4 zw5wsHy*7A;Jqn&`su@(XE^7bC1cQC`x^WBhf2b_mwLhrq(1YZq`|ava=5A`X|9p7y z=HeYg3>O%`uPrE=v({{*{t$(hJW}32T{aa>^q81y>~W<tL~--4b*;Y`KaYQ1?HJek zE8OJn4*T?;F;;pK=9f=R_&(_Nmrw0^Kg!t)qgOC1KdjBQxc=NASEo{Cs-B2W)2O>E zHZYz)>OVJmcJU~E(*F<7Z&`V&?BZd`62&;x^xVzsyyrAtJD!<I_IF*%ycM)IOf*95 zYWA>%uTRY%pD}N5)|VsSojYIbnkwadjFjgz)2mM`YNy|v^+;D+NcxpFX>Su8YSQD< zW)6zqqC7tC;41~vzOD&mIIcaJu|F!x?4ItvN$HZt7a|i<;vXpq->ym!P)!;zg(<n@ z@_HW&BcIqx!Rz0hS6xoolCpXU86Pbk4tm_-x$DbXnW&sqk3LPG|887v?wJtxks@{* zjbHDPYyIHA{?f0=_`<c_=a#>`WpQ#+B`dbbpzzC?vpXezj(9&ZS?0*IVO?tT&F4-^ zcDM3a6dt{QScgf7;OJn<g`Ekz2dsB+-Cb5c?4?S>eUJMsUY;3g!uxz3Z`jVNU2&YD zeEP}hVx6`ot+zz4o%F`v^_Tbr(!OPGi>bK{A6H1elljQQF$}+#Gj2Ve+_HUX{mSM2 zjOzSn>|b%BY0sn$Wk=VVo0IZC#j?+QzxLIbGj=_hiDvU<KRAoslo=vyYqrV5eCp(v zT2Dq9J(w?L;VB;f$6m+&#e|@K6)R$67fk6nZPS%AXpEru+n3iTPM+{q{P*EG9~a6- zvBKj{Do?w7Dk4?wNL`)Z^EEdWKV4^OPixQ16qu#qc||sT&u?cr))RZS)v_>^S8C1K z-=EqXp4lc~G3tq{mvtNIU$-lNKACu?-1DKt$*=vhl;4v6HNxlA8b4Vhxi#H$Q^!g5 zW2@`?KiIs`dHkOtZ-;v_&f5GIT{PfbwWLJ!!GV&uJu<d_I`T|X+qTpov@7G%%&NTc zDrtY(=RLLh85#KKaD>+lwpygyolynN&E$J_*(t613sqyu@kuHqaKWLvg?XfWC#$Zz zt{v3!w6;b=_nYgm^ScNCx_teyqv_$XnT6WkQ>$hg3|6x_Uo_IlEA<Z3>`+Mcl9GZ0 z7rM_cK6XT9@IzCje&t(Exh;G3*hV~f*8JbPQ$3e@Jh&KiDsr=7mMQu%z<E`S+Rnuj zkJgq{eyn<y{_S+K#_gr)m!b<yjKT{w?vCAd`^GGn-z+7!?0tq^A?hAaoS)o^?wWEh zNZQ~-%-cT=o7Dt0#IH*3D;}D^S!9QN)a$az3!TD89ZdHyT{Cj~+OiRv<#%E|=DsL) zc%hv>Zgt|R8SP7+FS47lw|GxsyUm@U^=W6_k7<00i2nZ`@ASS+FX{iI-hv$Oc8cV` zcI(eve8Eg`S(1#tLuI+8MA^!_`!|R0PyMw}T<yAYrbB-6owmSR+fyp8#9j%i`nlnP zhg9l+dp!E5<JqrBhgBKD>)NKxw{^10m}J)K+tPU>w2t*canJ$v)w`>`E>#NovaU?O z*K+OcY%8%HPXo+yGpmf(W;^e=P*U(MrLoH)IKJW5r?_U7%@>r7+6xc8SgCx$rTX@y zolp1d5mxl<%u9$YEkC3%arnNbx3^o~)!&w$sWQqoPknU5Qjh-OuUn;Nd{Mo2dC{f8 zy24dk1;@W|m@%?>q3Y|lW3Ssj%$$7e=;5Lt;Wgt^Wo9bttGi2Y*k+mOqkoR^dYh;p zdj34rO*-$AN4A{tsIS&>amvPvW3`H|H5|7atrYHmOIB!__59OfW$yd^h4LRfy4C;0 z=uooX=7X2w$mN&6h6gT=Jvm8sRwXN`WRFmjKbfz+pD112_DaddZd5p9scg~Bv+8o; z8BZPr#8hVL&406Q#Jo|Nfe+){Y#i1(oSS)cjqLrg{?|+oi9WiwN-%i#j>p?GI|PTT zoPTUf_CNXYY1p=HqxX^Vx~g)$%gZYv<z#%>W3FbfX2mB1-w;1{IqkEVgI$+CK73&7 zG18yN{QaN4Z=IAH>H2-57ul~VJ!VyzjVar2QNzgUo~bW_|D4+xbVg_8sPQlItG0Qi zknzJtspM4d?<LNLYA3rBV<vA=eE33ccEu$0JAzDj^TwE$WIVY&AzSAm(@Tf&!?ULQ z$f(AdhL0UB{<PG3-u%5EwA4rE<pk-RD~nIwH<dMJqp;<G%BwAhg`!2C*?W@lcc}2k zQF7x%{rB#5W(<C<t?v3HVu!S5h0vB2X|{9LpNu5wBj-ETckFKcs_PiH#K!l&XR>a~ zy`c?b<(I#;FuU9$ro2(eik$z98?~)S{MClZq&!Lf=bbvfz`*}uj<2S7{_l?c=Qi%? zKY9H7Gwz*PYl3b)NS7h??N=y0Z}fCOH}buxJTb=bO3+VoJl$_EbL_X--uvWycGLdl zpBbM5x03Q0DJWVg^uh5}-|yu3`0$AO&*R@SS$)6j&lr}zdg&k!iKI)XjDx>^owB{^ z*)};5-@C~ZkE>jNx^kG?NfWQVM-7B8nfOn)nY=f$C9Sl;`gm5h`Q{|~Xthb-jBKWP zl^iG@F~N4?j;B=?2f8mPl;6Epxo)=6+}%f&6Njc8OjmMQ?EKi;-K*|=`CXEJGM^^t zCG&Oios0*4zsm*%FS&GRO^o4i>sKpMC$7=Z(C{3ZpgTS~Svv8=>tKf5l=4M;V#1~u zb-wyE>h+z&7LVjFN<S1)SiCYRDd4n$oX88gq`l=1!7DU$_MLwnmreF-SU$R%_f5Ep zl#hErP?NB$^ynYmHpSB`XTH94vcWg2t5SEbQiPH0_vr(Dg+JCxR2GyN|BM~>N_;@J zR-$!9n?TV5*15}7=SqF6tjAUV@(KR+i0pr~=&{Ry&zGN({E++}-BQ=xqpRPT&g#DQ z$gaxl-kPwfJu}B1CG~N|r7*fRda{AoZ6kU4FCh$4p64#i3>8id{Xp6qnZJ?tL-=~9 zelN0e-MggbUgE^GhQQE+>%^a&);Bmhh`rCQTirsN<d^hc@|~0~;cwKDxPL8!S@QOp z-QzGRvoJE>U7jgFeCPhn9a*b$w+?)++Az4p?8`vCs4W}6F56d;?(}KLfpf=>JjvM? zZavOIKzEnE-iy=|hmGgVahmEF(Am`yxu7iZ;@EzQs|$zEkPi-VE+hV@hw6?{K5;34 z<Y#2&A|Y{f*_EV+j3;D284rA-u3btHh^`^?+owxgBj+#AU=I@zDB3;0LS%Qkn4emh zoRUq_!ICX^GOm&DWIp>(db0n^!ItwrTjWJ&UoO^~uDLU6=roDWO*-S7_bp|q-Q2N% zg}=(5DQ)h9I!%szb?9tYcO>Uq<akl^bYqKnY<<F)jrS8iJNg|W$Aj~pKT9^-Za5d? zEgZ{iwH-n9JtcMh6B53aG{0QX6Rs%ic=n-v$<%VYLZ4X?BC2vN9V~IfH-a-ua!<|e zG&7aU`bc<lePc51=545ysdriDxghM^4An5@FvIRjmf}OU)S#gPmp(}dd)w5HZ(8TI zE2({{ghfktRow5byF*euW!l+g_ukyS9JceFTF6|9{S~+F)IJ*N;kRjX?Z*+%V$wE! zKJqCwE6;AH!~AjVt{=wBwq7due!(fFDrqT0nbgO4=EetK{-h^A8sDCO+biB|(ht_) zHR&!BHpFh**8WwuVBeaEK~fe|%d%1oZ|CWI*OU3zT$cQbH`0Ph-&XH?+x)m>6Pa)A ze)5AI`O!Iz)IXW;k@=sI*|oV%9>LE|n<KSG%w0RM<YkwIhwEmE>)kH8i#F7ZKCxwz z_3Qo7^(qhY-gkI=jtL#?t(&`RWfF;>%*XSetbf^=zx$GSne0TjTvZpH+5@kh^(Q@= zcG23#`)AhM!-C7IIt;H*mASIvyIyR;PBLG2E*2Q4%G^8g&E5M?E_vKdBK<{Vvg?Fv zzrtp`)Ja`5bdBs?n<+c=CRxuetzf*I#tK#z@t0XNz;(m28)RG{{r-*Gf%)<Cm1lY_ z?cVw3lu6{82h6hMAd{Pc!%X&EDl9Uu9<*FNU-Q=IthRlc!|goUeYZI@JSkk(BV`{d zQ7bTF$3<6xZRrO`&K4;hvS-~(``x!p97OJ?G%z#g?9FYBoh)&_re=9rN4-Ar7nq<p za`N+udLsmj;>A4NtG#pO1&&VL;kVqoB<oYjT~$x3tA&dWk2_p3xk%{#%jW@E15doM zOzzCPtD<syOva~G)_(FQci)+!<Y&D7!MdoX6ruPr`q!sfnLf0%4f-|sc-d<m(fAa@ zw?ctIDNzUX9=nTH=iJo4{$WDdy&F9?4w=&q?;I@^;%aYA+Rvj*$yxVy8R$LPt?<3c zXPINsPba;ti~?0MUy3t5xHe+Ng)VY@B<B~TeURgK*W>uQ!g@m+a(zMU)B<K<&*>EB zD8XIFP6#B5j9RPH(oi{R(Ug|Qo+lk0$9Ejq8-KoKleggAdR61|2mHkLv=s}<S<hwW zn4~mMEhX0*V&koqerDf{dvnR-V^V`ymra*<%_GmfU1UB?u2*g=-*<Pa?#EPFt;<!$ zNxG+Q=>NJCXJ(*gzFm81@{Q@G3q^N-9=v$0M2?pG-drK6r^e$Iey7%TDvE1XCYn}t zT9NA!<a%z#9>Mls=c+@@bl2x!m)~#R>M{Lil<J{h6IJq*&Y$+Ur>UuNN@m{bNmF|4 z2OH#D9Mq7zqCSLOD%UjivoZ5*#Kz=iZMC2KKN^tszQ*LvVxfSW$KJhFtWmnNY2~L* z)$gChE-RgD=&E2(@2~ZlSvY!p+|!CK(`jEd9zB0X+I#YF!JqA&N-}y5KBLZNB;*sG zgYNbtg3_}XU-kTFt-ISWi|8NUu+wY4xOo*RpMSgl)o-_BT#xsL7;^n8XYjjGxAs@a z9#8#V(R{!)qU7p{f!kFtiIDmiREbSi8&R<M`1gYC>)j%D4XxZ9dxh=r)6J{W==|lK z!7GCbk~-t$d>_<Ae;w|0cG>6puzSl)S9-cel?*HmC_STZ=lW%(amBf<GKQlj8^<{f zj~%rsHsW60rN~_)WHj2(&zm`6T2Y2lf`@W{?<K=Z7|ZLf*62K3rg3|9c7I`g4U;)z z5A3+QiBYVya_Efw0*2?|CO5-`pq85HnSo!A?O?B$IwhOA_j7!B(aWc+hRn;qHc@c( z;!6!%Mv?aX+w!HT?%W(!Wj{})Pw!Kf>^3i%emdgZ;akz)owF~#+8%k+vhk+oq^ChA zZf&Sg^p(DIYR%&1^2-fEChX407~@>(bb9Zh2_c$i#yrk{JJDL@-tUhCx<eRZM$5{V zS$~{0xm^C(N2U6$nK3;>RCCYi-VkQrb-P(!<K7cL%kJ((J$A}T(_?z#LFE_D7ucrk zU;ZSq%*(QEedf&!tBkTO!yOkUhqXGzd~JyFTx2gNkZZgA%!Aj;BjdiUYm1waUwf5V zEqihFo}_7RW+QD63H@C5eZaB_Ubdb^Yp0i-A2Qy#^qBd?f|?kEBR$E_L>Ft>WF%Ub zzGx5#3A}6*CsdK)7pT9|>ie}*$F`Lns$W?x;~=YS;OYNv#27D;b=%_iPZFNna=_^9 z?k)3<o^IC)QZgRJt{J1S`&ZTLwu^q>%ghWM!_HLL%+b6t!!Frs$0y%x&4Ljp)dz_w z>li**`(Etm4~zK&UG#pN7G{)7&9Jn)?!Q6e{O}_cb`gU^?*6J<zG<$qWX}N&PwyY@ zdxkjW9@2gEY*nC3>zxDdD;enL@ka?8pPO`wO!pCHKJF^HUFCcvTK3kf#&pl*1LH>r zr7xFTb^hJr6OMWNW7H?Q%Eg+@jq%Icc6@t<+sUa$@q&+(y*EhgC@NpG>X1okVN1x< zf|S>PiuW#fet*lyPim%h*7t9uq+OINo)<FuxAYLZ3pWEwJx9xW>8%%iJleZhS7^IR zhvctjSJU-R7Qgz_ET>i%@$f)#fO}S>%h<g}^@-n21e=64rcUcnQdugZn^<N&bD-=A z?fZ9+ndPfK)tAg~F3znp{ybLopu6<N3#${~Sw^(mT#&C-c$ZUlH*0jmaPNqXJMJG8 zviI<84Lr6vrQnIwoUs9mrhV=VOt{!45mUWTe)S>M-$KDFYMqXsS5E$uow!m|Sa<NS z0O9zpi^sZrDcKg?Z_AYf7VZNlrf->`ykF@v>&2^8N6!^a-SkFM()3|d(8cEFX9^ig zmN(6&%M>k0$-nw_gI7+#{v>u<_pb9Z-;~#Xn_%FtZ7?uq@{vO~joOPYj&JJx<a9i7 zzof@kIWxO#t4)G(rw2~Fp#S#Z>JLMe=j^Tec66~w!u7o#5zoCMs*3UwO~23B_WpKj zVyfi2uA_(Uj@?o|Do9pISTa>D@Z7V#y9?$<UEflq-c?$4Btv}3$yv@}^F@BYo4R+F z#phcJSKD^!&#P7_RBr6I%`wsX)TBUb@=TRLQ<JZe-PU{LyD>b-qweF87%RZ+>47J; zjNxG>bq$RjOy+vdmX!g%>V6(*ANr#KN~7)(j2_on$p#AC3Cv=8g85far=Ffrv4f59 zP#25&1c~rdlSHT<?BN>fioXG!#XQT|HSKo_JnqE_@T?jHN<&$aXsPknmNDpC40nq< zJY1pT=Z`i}_b{`V@RUEKwOSs%zJs!OQz(e`u$b?V0G`={fL`Z_mb@HDJBta=2m?oL z()WFI4m@|xV#3R@ERY2Oz3l@nc{z|V7E=v&qHyc;!^L!tFxtan!aui@VnEMHqiwt# z^ll!c8H#cP<)U(K{RKJ)o~&ju;}MQ33iJ*A(KcH0a^T5D7Sk6kA?zrvMbFql4tdK5 zy=)0MXfr%B2?4!f1TA?v;^;ez34h}Q-m_P2KrjF3%Ry+Qfp-Lwaz=l?hqm!@AO;qb z{I!C}D<MAVf%<1L;V;Rd6d*{@I8taUix~<@Kp}8ae?H{{Pm{BlDkuqhl#0QSqH!Rl zEan^z$Lm(oJbJ$1RbwpXeAG}0M~23cqco6a=nt+Zl5FUl!IZ`cH8p!=L6D<y;Q4qK z6KV~@$fN>3?NA==VKGb45?U>UAvDfVw3WpihnA2vGY=s?{bCrUfxl2A?QkfK15fF* zn0{ypVMxUWKIs{O_OO_Nh(ppnoW_CI(X*J1XbI^V6c{s|UOuBJO$jPMC<O>3X&eQ# zmBoxjOW<4?b{;+84i;~FR-`m$JRAiYM~TuTAXjLi>r{7trgM}jjUy^KP(x6naa7P& z7E>N^AQgXRIb_f|qbZFO;y`IaP@!?gpsg(C3Y3^4WJP9WqnAJckvCssDa~Be)W}<L z#?UxW<1A)4T7q{1L+S;cGoI3D^y@9>aWu{ZN;8MU8DCqQL+4DSaVF3>s+0zGDk?qK zZ@IpubJQqJBT6tCH&kgHbxJdp!?A3P^rCYnQJNUUA>)`jjYAz*m?S+@BwnKm>|4&7 z6sLwKJsLEQ7Nto?O9&HJpWjaBOh$WHOg&W2Fj_&-qH(m*Ru&VE2oOF5Jw<~=-}LC9 zJuGG!T9W>*P2=cNn)}EVH8aMTf+MKv`f{dF8hHPV9<m_l(m1e(#SBKSDA|mg0>N2y z4!mQ4#q2~8K`VivN8><Ev6zl%390z$D~k>tebWO+0T%NC+6<#7gsC)+A==7fE<sE1 zHW772Mb(!BZ}viC3lGPT#zDgk(#%3j2n}J;H|ZQBw1>sqfjFeTrqejal!m-ZtYYa` z)Oh=*$Ar?rV^m~3G^TM(Db0Aags?QNBACvZf%dSNn|U~<G>#diA?X=0cDEayV@_!l zc-o;EjblM+NO}@o^6t|)Gbv3WN)OBiAXv~imS`)B3B479z~iL>bPm)4i@BaBUzRk^ zY)W$;ASl#l*vzMMV02<J+flw?^n@^*#+i$@vY5~lQFM$SO_4=(4vYqP{zJx}xipRy zrK#g^4lcZnx+4&I$7gFw)5Mb=D;fu71I2X(Tv3Sf<##+qQwOARME#WXulY2NEv4Ck zmVnag5Ra#)$Bxo8ApvR6wlogRL|Due4o83MA3phl*XgsEzj-+JG>!wMImqD*dIx`? z3Mu0)pM{hL1{Ro|KyaXOV8mcCH&J`h+b<ep5V9|45v2)49CAE$q;VEg8t6d~y8H!9 z=o}bTSWGxxkbb(D#&M!Fq&?@%o`nt$ebcj)(yZs<IMF!EC`}|<f_IDNdsI1nIWW6M z^E$M72(ln7qj6l&Ru+@A_kEh4kLVm%N^=2mNWHtzIBt{%-U5P(kzufQ%4#~tozh%p zp;|;11UDMT18qh9i^EZ$u-TN(VN;qk#8CwZ3LZ3$C)&zllH-8JzTbT2hv<-xH1E(- z2z?-U(m38|YwvlA^OCL&^z`^pnog8v(hj|8oaL0p1uY@0F#KLX=d3_`SWNg!4Ki*l zr*V8K%@(vo(J_8xi=pI$#oI6ZC=GB_kOje)#_>m6(YXw@7oDGmoVrHmprICN;9XbZ z9GyRn6G&<DVTnG9_rkW(IYE@h5v7N;pFkQXn9}^`aW#a}!10unPcV%WN@>ocC6vlF zDa~4Xdcr6T^ivUJK?tRBR-&yeCiE`|UtXwn(m60IW-*5#&HzfqV63EZA}9^av>_~f z^lC4ivkL7&^B=S%?J$DIft0YA_fQ!MBg@XLT$j#4T@Go^B8U~TAVktQQD`fR>4MS> z<&$$z;wzoAhSF%Da|c6YL5QMp)}pN}=3BHxNn)(BEV)YOtfMshkbsOoYiXSIlm=$V zke*fTw`1v?4U`7X%}G04PvdN)G@cwzH&YR16o|b2ViTnqj?zQg;YJ!~Go`WMaD=Mf zqsc{I4)i{B{*E@2df!arL{l0l9|!}33{j)&%h`(du$YFZ<BX$J3`R7K6GLfWCJEvD z;+;s{mxGE7aekwv5QtESp>g8SRu;1fEx~*C_}i$!`f^a$MVie#<r7EaplJcpka+sN zsIj1P5-5!d!jtler*RVh3(j^*!+Sj;k;Z`;3yZ0NmJk9euU@C8CkgFgF)ex0vxCM- zrZj|85-B&A&e=(640*~Yna0^gX(pj1gcT`1sIl}d=iO)zi|LIvlksO4jkAZ+Yyb!f zX*NgEl&UWW4JC;445eobrD8Dl&^Y@jjS^?SndC7iItONJET%oei*a=OXq;3^qsrN@ zH8AxwowJ|P@a8L(#yLP~*c{H{!!w@KIR`0?3(D6>j_v@BbBNNQlO-y27rtFg=NzUq za2=B5>ky5TMrn-E5`ss{Y1GyFmUBAV!(v`Wn<Xd}gONt#WKbHINrJc1nDZ#|zMLbJ z#uDX=jE5OC&QVHpt3U3`QoeUllkCgMq%?O2p*MLV3&K$v=NQ_`VnVM6Z;{Or_voDC zlqL<OM+sRFj?p+L&{h`HhT4n%zM<R+9bo&WCyUZRzaaCi6Ex0AN+ZDGNDS~X$43s{ z@%a>`DML##zMQ0SvMCMuGkTv?+kAR@awyGwG*Xg&kxk>E=8N(LBLjp3Ij^44IcLxw z7V`(n7vY?yan4d2lnCmV1J^_HsKEM`PcEf_`5|dPXK9>slx8uwqTt51Sx)D`tOi|| z5bS*;^En#l0;N$z92k2yW@p`?b1qUEc=NsrvLIZbaW0{)==uiYK$6zwl<^ri@+gfl z;wT{t!X+99S}2PNM+68Lu2v1Br{@aV!(wKmh{$pIGK~Wz%wk3X1clQN*4EKEXbOTf zWjvgG8s{3N83hm&(ngxI=^S(jK^&OZk@5K&jf096X{MniluxwnLbL*lw>=k7ni{m3 zj6XMMoI*<T5@}F#Wt<MkL7lrV=O(3TMV-PHSr7_ooFcT9#Y{s>@a|qLkD6>>PBEn! zfa;5sa}kYGLTTo6I9tT4Hqkkylm@Q%lJ;Ce<J_V&&rlK|6-fnkeCEBkDa|-E);S;x z!YvvHMgtc5dp68rpRMQ9-^(ct?{%#*8s`qBfio-!cZVw<qvxvv?O`zmP`=1Gc8A8f zOKGT9jVy_D%LjB08fp=T_qcPH#;K$<<d5bCMqNZrq;GxQr!;4U;k*KeN*V`6kK(!s zOY~6*d$y0xsiHJ6&m{f*0gdyJ(!iJjsSx*8T1MwoQySj$org3|4W+3Qz~kYbn(>Wv zPA#Q5D%$(URy8!vBT5s2mI%f8S#P(V&Us8}3Q>YdKYc{wJfSo&Dnf8z|B$3}o}xW? z9;HO7;LpU-Ap6(vjA*z)8n_+~VV31tM>?k-?Lo&2<VxCe9gTwyGr&P@Ocq%!_I9X2 z0hD*#KvN>58G<Uq4OtML(Ks*ARu=ONCq2vD1KQ}E21;`RrDrxkP<TP(G@`Bew*c60 zdDxN<=Ov|yL1`WdA`}{FoL6WoiwR2z<E5JU%zs{^J?J_uPdj`?<1|qkU4Wpl+|x>l zp077(55CS%#<3<E=Pjl2geCeY{V+g7THkVRrZh0GBjfX18s{CQff+l5xgRD((mC(Z z9&|p4%4Z0rg7+);Z9g9<jUs2i=Cd29A@og83#Ea1IP^mZA84Fbw3Wr|hcqZUhWy;m zgXo-(lm;@cfGh~DG|nfq6^(Tq&XCq>G+?7If3-u@6p)6O^NGf3r!??SJ5bIW2dqOC z*q8H}(x{@ISA;AG?KI98v=!awfI2(mU3T<JH01T=bWob3Xgu7AEC^p{oKCbAU4y0e zqIvNd)Z}TLuasskDnJ>Iu9L?3MrlZW{u=Ol6P@#&(m;$t9L_fy=Le-B@mwgnizab> z^VLOZe)DjC&^SLS4LXQY-UDVAqvGz%`9*1Dc=Gj=#(`K^%n2OMx4n+r>6|~5W-h{$ ze({^e>83RHC@vVE&x<*rj?y<hJ(T7eI=(w03qm)I15W6=1cx(kZyp-7`f`|9gW8w| z#vn=G{sldP#XN?V2*sFQX|#vVL2Vgn2B4A~&f)Z<aiB-w`36YFRwz!Va|9_(8QM?k zU4X_BqBO2ZgA9hd!l=1)PJc=R^+m=pAsS}@rBO#q$d^^rJ3hx9VM+tPTak7)fX0D$ zf1~*!hf|xr;V3;lqLjuSl@Dq6A~cQ|r9q8`>hB8*Rcz>-fs|%APdSUxIO3EBj!?*8 zWLQe3(m8`DO+3oiP^5t%PUA>W8nQnrbeBAxBS~qT(2~p(BxoEdN(1LIXj;OU)Ai*P zog+<YqELe$N2LbU8;v7FX&^=j4MT3DfepU!9^YjtjTz#Q_AEo=$WfYTih_=(UwanP zIfE&U1WGe$KXNn<%+^@Ut%!pR#<)ZJJLnv^+XS@@#8KkJH-yF+N@*b9z%g(JAy~Zm zg8y(}F;&rW0PIF#D2+3m(wN}gjP5NglytP|FAls<p2a+Xmf{@Ua2jVMr6KwLxV$}) z&KX5%;D|}mGm^$ppfm<(3E^BYj1lmKH(zizjpiGuJ(K!UpmCHajX6a@_4VD2PkNLo z%>}e1=~kj~;HoK$se?GkU>MuZ=F?9{Q<}4ADZz<Pg~k~}X)HPW*_+*r==mB;X`ubc zadcy7oN<%}owQS-vqEDQoim=&@SYcpqjBJ0d|1pG9FBgzHo7E$HvLu3@arMIPD_qE z6KEW0UA>%mXR%T`M~%|(9=}v+92im2y)>Nkc*Qql(m9i8=~1U~G$_p!4(HtRf{S#H zCZ&OtlkrD`#?hiQx*SgSkg5%I4*V*Lu66Tpv}hb{O7n%o5z*hv=X^(p(zK)Ytj^JC z(>S`61`VcESh_ak7(G2xC=JY4NxpPx96d^dhB_)#h&*{i=jc<K8l)h{Q#~4IDy7+k zG{|81`um@ubD$TadlXT7CdaR-G>##qiQ;g2`llw*InyW&91F;C#gN9CPH6%V2SSZs z)>1mhh|>H(OOl@HG>$Q)f!}H&t}mZnS<pEql*Skp4(ZRvG!EP!fv^8SdZf?91<^S( zD2+Bxe>bIZ%>Lq(*=$3TQ?%)?eritRn9(>ElqMMxgMy>sLpGf=lhSDLq{o8Bv7|I9 z7{j=2D}SHPfvc40xWmJ-q;Y2d#aXyq79|aB`YT^>*Y4k(*)$G}DlDc6Cq0%|e;Cp^ z^C%5mha~f{xipRyrCGq?Oy0h29i3xMY0}V=951YBocWZ-o5Kls{eOg=37k#k8^`b1 zl0;;Q5E^AmW|%>t?2>&;wrR{<3}a@D86hIsD=DI6X|Y6->><gPElDa7DYPdcD#`zS ze&>1L=REg}{^yhF-rxCs-`~5P_ndq0nLGK+5^E&Yt`6`NH2q`i(>_p6M|g%AlIW<% zZ(JQLrxQH%IletEItI$2)xf*ohRS*5vCBD}ce=pyqWNjh@0|nXbcKg{!2B0#*=cj* zV14L4SM$D&S;y%03~gNl<#dCGUO7@ZKOZY+UW(8o|M~r4c!rsF+4E_)KsofzeD0`? zgqrQ2@m22)meT{CAAI%c9w>*dLUTvaD@Q8oMB!zo>h#E8pI-3L^>anDhqj)9a(cr< zM+ec978g$rmXiPv-EUJFrI`DF0_8jc&l|k|l}?jZ1j|W;r@Sf0u49h`%IO2od{Yjs z^-H4OsuV0I2_9O1?EL8yC?^>nd;Qbzj)tv*<%HoOr=35^fpYr7vzOcT{kZ98gXQ#t zhhATlXJ6kyIsM_GzsqTwA8L5Keh&Sd0?&%P=Dv6?r+=WF0q~^p{``OSdpTI2f$+39 z^|7x{2L#GVg=ajMv-gcZ%v3Uxnm>c!q3c7tZlngvNrT6{$N~L&pSqdBa?;@$Y3gI& z_e%?ulK~H1-O={x+|Of!<qU@BX)`fud$v$Upd7kG*!w(%EUQ*+`#V_95O^rjj(cXH zoGf_ObIvoJ3O5UulMN4@b1SkhD^Si*c&hOJH?~$Y!*3+j&yT|6U&n?9${7aFS6t52 z{R?XZ%NY*OVPAcQ1<Dx#k6Dyai*j{W=deCM2G0yrj-5Xv0_BW^XB*dNQJwde1nV;j zo-(E!JAXz7%6S|fb8&$BY%0{cZLplt@C-9OXV>S)1Lcf?$1KX&+I6}6RIr>U;8|vV z+WL$Mlrt8dU0hDfidS0(%XtzW`h2Gt`^E;!83zx&18*LL(&KK-;rJR4&lq33#s$im z0MBCMG1ERY^UCS6!TL;u=THIj`7_sNLZF;U@MQD;(P{tY@V?e$c<8#<zK)v|C}#>h z(@Z(0N}&&*>1!_Sjil!DQ}Ep4>z^rsa-N2Va)_>feo98LoM+%!ZGPJ0^yxr3Q{lOj z%lV-1q~C(&JPQvc+Sh|q1LaJE=S5QvZCw&K<?w#pbMVYD?W*Y6Lem1}JP*%*_s?{A z{QdKMpqv@-m{S4zXZgbIm4fYh0Ulb%Y`bOz%9#ldt-IzysM6v?Zw1Sl1rJ@}m??y9 zW}qBeoxJ<L$T0C>BeOJ8iT>-2m*ClCe%kSRF;LEIczPox6gs&2L365$Eazo-#+ZJ# z=Zo2aa^}E8ubYT|_16df2$nM!9=cAj*Bf&J<;;U;GM97v%?}?4mNOroH+=P(7bxcy zcy8o&Eo{4KW3Zf8;VEW*+J1f|P|j=c*z5U=@$YR7mh(D1^m@l$|GX9`X8}C>xISx6 zZq4ERwGf`3W??ZWTWkvg<t&0{y4h>uLPK{q%Heh8VtBUu`e#v~oHyXH=fP#=hfN8# zYY9AbEo%GcjX*g|;dzDYGwz-0=EFB5sd@M&JQqxT?Dgu>Ksj_4$Q`xTkhG2ddj7az zId8$U!q={4fpV6^(=C4}WImn<RXR7nO|YD|;mI;5Q+jno+wwp;E8wAbc&MKn7TUQx zSk61}M4Rz4Cx2`!0_CiPCl8mi`=M6mQpr3~{j&-l`uw82S4?PSpd4Ct<@dkJ6*)UE zSk4-FsCd(SY^ww1tcB-M-ha=Zy$%P<SqD#f)9{<vw>D7DdU(uW^VTmdSkAlfj5F<u zX4m>aIUC@4$m}-{LR}A@nGr09UY+HRq9e$zV;chH&?=WZ${Y;XUQWBNR<NA+;Gvmj z+qEfB&SrQ9ayhfNx2_N@2d^5U=m@gqYz~yO1?Ak$<#ap0?2TYKAHZV<z`Z}VB~Z>* zcsg=9i(8*~KUmH-c>L$nt$}j3!$W^r)jSB@`2E-%J_p$W5B+^)dz@|$l(Q2a`rEEl z&h<Z?GfN0P@}GA;gr~nbS(Z0@XxkYmXBRxh%|4=^ZM5=-U^%<ti8ep&`m-xg&K`Km zn=)v7_4Tqlg5~UmXOj78&&zuP<?MsUG#%U70#!Z=mh%xjUm1t>?F*E%AD)q1PQz)R zFASFRF+4OP_Ih=HpqvBn7#N?dZaFx}Of@5^e*Od=I!<jl2Lk0Bgy(bmY3LiC-|<Ya zoKN9-+BC|}vx9+h4#D%^*DasHQ{DWu<8>%d4r&r**Qd6t;(iI%=L?kcr>U>?eI6+1 zFg$kM%^e>2d9a)>;kn6IpTmK2j=*z=`DwZ_)OOVK-Gk*Eg=dCu9Xk>z=PP*Zb#J9N zr<y5XBsE^g;K^@(+ID>vDCamlcD=lO&r0(aX=FKH!&Bb;wEcWMP|gW>exskJ7CYD7 z^jWZ+Z{XQ(PLz)r4{av`<$Mc|>0HeDYCCqCw_c2-+I141v*xE=55EnRa|)i0rjuz6 zZ!mUFO0b;M@Z>S`u&MFTb_(T~KYD5Y^OR7iycwy%L(CsDwgMDm$VyMO5_wY1A5<MM zD1#+ZXsgT5?*K(lTC%d)DV<r_?v#G4>~e}tzsV_2vZtt1X0US6DT`Ps=M;0>2(|)I zwuW0-$>o%TtQ2(0NmhzF<svH!T*-N&Jn1#36k(-=qbjnJ<~+4n`Nt_uSZVJRd)1Wc z6ne*vwtP{x74+T*ZH1z&LhCPW_dAMS575@oDRgB<TPvr~Ig+++PN5ZzwpgdoyrHeD zQ!cU6)+yI}!*705($=RuD+8Po$4X_VbYP{bQwFnA!zs_OQqw7mS*h-n4_I06l)bEM za>{3{lyS<}tmKKZb^e)^Tb$=2E47`Hiw=0RJrZT960AJ$JXKhUcS>DW>N=$*D+Qd= zm6eW8F@NqI+uu&fX61}i#<TK^Q(j=@Pp2$pWvf%(Wu>B1cC&JmYu8a$GMwiUD=VE+ zAdgqW6;8R8l}DUXjg?}q<a=4!={zl1iFQh7R`NR~%*xYF8O6#}r_5nxnp4)YGRLKF zW92oce8S2ir<`DAfm6=1@`_XbVP&aP3Ycp$+U7;sxlx>zH=IJ>gG1X`SHn82Jnoc^ ztc-C=UsfhK<uO(!IpsN4MmS{|D<hq<hm~<o`G%D&r(9rVLzHdB4d$Fd+Xm+;$I4o# zRAXheQ<|}|+$mjH=@Vs3&S0gxQ^v9~)G05rlI4`8tSmJp=MFXRoX~Q3MmkOzQ(V?s z_LOndHdabF&&RA3bIMn&yy&Q(S?TONxy>1!wq;Sa6{T2N>6DtRY;ja0R?0i26D#>0 z6=o&mlwqtabJPS@HapKkR>nAGGb<CE@+B)HoN}I(Nlv*Te+b(fE~^|X|2m}(E5i(h zp6`^B=24}Ml8eToN%|00KpCZTB6~VpPou2Fv{-T#awWIpk_$Se7c0r2$eqecZ>Nl6 zrJGZxveMHjud>qBDQj8j@3MBWvdAe%S-HhgXIQE4Jo&B<VY|mErC9mSDR;5*gH!Hf z<tL{ku+r2i!&qtVl;>D!?387!^mNJ=R$4mc3s$;2<rFKeopOnlOs5p$3*Vte@s|8* ztPFF?gRDI7`llx=Q=Br0m1$0SoRt|)d5)E*ow9(HnNC^9%2cQ9Vdc0{yc!;1<*-wJ zV&yBRTxR8Srxd&)gl)f5Zeit!Q=(Zp;FKDy9CXS(tQ>Mmb5?2_#k+{;%*q{3Nn$15 zDZ^MP=afmTv~|iXR@ysd5i50_vYM59oU)CT`c65-N=K)B$4YspTxO-BQwkRhVT*Rk z9jvr=N&{9ZJEa{fHJy^gN)4wBW2LH7o?<1|DX+3p-6?BXY3P*Qth98>aaNi;<pL{> zosys5%x>kB+gNGplsH!IcS<W(UUbLKL#)hjN)juxos!AQJf}Rt$}3KJnw2?DnZwFV zr@Y0=ey40@<twLr!pZ@se8b8fr<`Nuuv79C3Sm3tlv`QZ=ag!!eCw3^SvlyG&a51A z$^ceQIAs(opF3qbE61I(kd-4&*}}>mHx>t3+2@p#tn6~iMOH4ja;__khMM1ru*Ycy zR?a%5J}b*jIo@j1k(F^yNoHlFQyyjIai>gXWwujZV`Z#Uwy-k5DIc+t>6DYK^mWPw zR{A?7>ZTC3Jf;<1oo`|#)p;thlID~qtekL48&=jjC54quPI-cr45vKD%6g|PU?rcc z&ni|{IL}sAP8r2pGY_)zty8{bWwoRJVWqDduba)?o3tf6C7P8!PN~bvmMGgltytOW zl<utTbV>#*+nq9rm5?j>C8Z1s4@$}y9^#GKWt2hb-WR(Xm6ajkEWgLR-;(6sT!F_Z zso^xgC%Sdpn3}Pn(26|XZ(8RLK{4;l*E9ouhp|G5CnnDPBPAbs>X6dFuhb=_nO~_# zN*litQ`0=7PwHGbF)`+uxq;KCnCgVWN-@<54N^*N^DJ8_RJ&11p-PWe3RU_UrBJ0` zPzqIgu3w3zIxkcT)%h)@P@UH(h3fpCQmD>5ltOj>NGVk3&y+%SKBg3^^J%3}oqzQ! zwW!X2D23{LMJZJ0yivZMuSIpfQ7KgC;!2@9msJYYxsp<-&UYz=>KvyOs&fOsQk&}B zOes|7HcFv7cToz}xtCI?&S9lcod+p}>YS|<s`DtNP@Tssh3fo_Ux}kSzn~PV^IWA+ zofj&F>im{csLpGYLUn#mDOBejN})P`q!g<2XG)<uAM-2mROi!5p*sJn6sq$dN})Pm zQ3};LuUTT<u^dlzzELSu=i*ACI+s-n)wz;VsLpr!l{!>sdhgF=)uB2!Pzu$#nNq0E zZInWF?xGZ`b1$V(ox@6@IuB9`)j3-!ROeBCr7qQZyi%yn&nSiJ{DM-b&U2MQbzZ0x zs`Fb)p*pWo3f1{NrBI!BD23|$kzc7tb^c5#ROe$#p*o*d3f1{nrBI#!Pzu%gic+Y~ zdHF1Zb4op`^NmWOIu}<8)w!%+iK%HSUCFOdROqgNLh5Go4_WY#vfV0FWo*05PvdDe zEF~*CE~c`1c9TzuuM=;Mf})<%x@|nQf;OjMO(3P5`G>4p)>FWcw&Xgs=^mn7o?_0Y z)Q7Y=CB`ZReN=p0Nz;c#EfsGo?J2~+Q^Z`en6vo;^VnoHPE3xDty^obQ^>Q~c-G~$ z9#VE0<vH_i4pXh$#@3~QH=8IlH)wm!{6o9qX}oA_Z~j4vu`NxtN^LI2e9B-wmTG7{ zwP;LfYi0hS9Gr7W>E<aIi&`<W%`=*P@YJG5v~@NAw9?j7JgR1vdDh!{Vr^DXp^^5| zZLe0f3a(qs6Wm1tPmFB^^@>)iTP4;`vh`MR{qu<JjX2vs)N?4u^%%|leCD6I=gW*v z4>Rrsobr`X`Y7c)qYPKdS)(jd%HKvg=M=iqi{qwxB^xC+28rJ1%wBKU9{U^V#uH~} z=9z%<i&bK+XRD`REb7&v^Jzuvsb^=4Q{ruUhV{5UTxpdUJ31?TCCA28GS43IDRFh9 zOja@1&vv|=Qr9XwJ<7C;#*(&Z^G}cI99xd<jL>UV!4)h~i>!j{C{h+!#r5h^tGJmk z&nYzCw2d|Y^h|i%DsD{}W0l(WD45_W=;u1IujQg|Amnmzt~5`q0#95Vl{(UT>_ia7 zRwp#hdSY$QX9biEwiU4!TWdY8$5scFK9+JvL3gXTmS$PSl|02Or+H#ZYIJ<fA!dIG zPeHrlV;&d9jH!)hk6CH0Qq0yT*3QGuR&guRGMnz^{7O$jR^3`}8)Az`c}i`%vyYY5 zZR^_6aSE=?4G=1C{^>cE-&b<IxWVRG2#WcCC{NK)i0(=86mtyLt4%U(9@V;SZQJw9 zjOdkY*Pk)2oRX%TTg{nqf~D%&<J2i`g&bi$ZZ)3dDQIa-y{0DT4P==gp^Bztng#zl zrMgk*&S+1e)h3?9oMI0_^V`aHu2NaFl{Wv-3YXs5dSYVX@a|K9$CZ<8J?<FnZIxJS z>gE*NV?C|n&eUD45@Tmee_J1S<Sq&*w*;vA&ST5D$0>FMe{hOjf4T>h)&V8cDz47Y z+jOT)af%(~X;!h}p{K24J0mnRpiK1?jC)+YJ|_8yPpK1k*eD16N<7`q?pJEXA2puZ zo~L!&T6ShS#f|bE*5j16PO;<O-YNEcagSBpc-8k5Z?4uJWYRl2kL?Xsymr;0`BC0_ z;_RB>6jz^$)?+7BDB3FSs-U%}V2z5c*~FCG(0S}kV8!#qj4_^;*5k5RVUPJm#ZdEr zhZXibV?2!m9#(u=tpXlaeC0F^c$^YXW6{$b-S-=h_pT9*#boo36mR{Zett(O)Ma#y zARg+CfBXv0l|@Y%&Vy?S>SIx8{yeA@DmharR5Hz6rZCENYvtoQqlR%r<?<_T#g;5P z$L1KXw<6iuI}?ie5sEKruAfag`<>F%D2>fZD@r?~%v4IUQC@Zmt&p*?RGObkGoIT_ z$zK`O>($yE?-X~uAMiZ5=8waBXnQQ>&T(|Cdga)8xX&u?toN-|>e{2=kX35g-Z)_u zw{CpyDd^`qb*bl%TMv#c^Temva*kLJ4$9)@*)Bt(hHi~=N{qcgJO|4B2n{p+^IjhM zUL&Gt8*7vgmGZPvI-A!!;+bibp-Oorpezk2tBo?lQD(eq*|Ct4Hyh6)GhWNl3aZa; zqij~nA*19r<1U`#MyalppN&FynTY2PqtG1yqFgmf6Q_8uSZl{_H<{zSKEznW#?kp? zwx{6ej>qVn@Oxq!7|$l35*J7BC}#MmxcCdA@S0i1>}L;@_*#37XFVwMAawoB=8jf= zhB0+B;gnahdBtJp*tb@3*ILP@1W@k!un&|P!{qOgeP<~1%|aArws(@>``r7cM|yU% zNv92-P>l?sz6Vv%>@%GnTGo75Iic=k3Z9TZ>xV#=_w9?6aSv1QsH`7V*3R>HbP=ix zQ}C#)pHx=N=t*_FZ&swNbf(}@SwE|+UGcTg2{n!>cvRLej-t|+|F-evqPVA-p1sHv zJSvOcG4%ev74>1)K12T!>K&%wQCVj|6*B};J<feoMyTCP!K1Qpmn{C47Eu?=-TuB% zCz<l@r1g*2S!9*xtQ|Gin}xs}zSyoX1&_-5UA1e{^zUj4Rgx-hHh5IK&Z(?{v-8vz zDuyX|RMvTwHK^*m451!m3Lcep0hFEdufOr-g>tT4VW!|wS@eFcjMpcPe(fpL2&Ujs zSr<XwV%khS|7*&jt3pj>3Lce3cXvwGxH`M53blYKcvRM(DyzV_b@vIifhl-Y)?X^? z`n#sD66yd`@Tjc6LEXgdYVhWU(?Wg66g(>HvdWs<@8cFi{lgSID(fFdnYhsKr@Ovc z0C!E(v!Zm$GaEcAi{5RQK8$VN=b%tkn1V-T{R@h!LgTe$-Na5p-NzI>D(kAsD!9Ax zA)y{(3LcdeGG{gOZJC@kV8Mwugi2=$9+edZ%C5b4H`%*hsEJI$qq68KEq9b{*8_9f z))i_#Q}C#)+$!teXPfO5Y8_MXs4V(D<=pu2oBD9uk~vXAeasX*Dl4zbs{hEs&O&|9 z6g(=6u16*7__DZxLS1DF9+h>S$|{=paY(3=B}}Ew29L_h56Z3^pVZq?IG3A;cQXZ# z%A)(SWgZ^6eCH*hS}+BV$|?ZLj#rTr`(_H&n<;oy)(tAF(Dk*33iT*c@Te^MeiiA% z_#zo?g__0`JSyu(owcytaG{nk1&_)q<g&~m6H0H=?WcmS54SP}kIE{nvWCvOb&60& znSw`U-4w_w>axx=1&_)qqO!JsnrpLAg-T*-gy2zGMO_v-+D*RLet|ouRAveum36bq zqU$K38Zrfs$|?q`yvd>CYj5U18-(h_6g(=cxXNn!`T7K*1~3JW$|~X7MOpVRo4;77 zCzygqWznZBGUwlYX~JHiUStX$l|{dw?olQxROzFKD|vrqfS$e06g(=cl%uGIzy6TY zN~rBj!K1QDJBmuLbLqfG?cI1CW(ppab*rN&>*Vn1RfYPEDR@*CeIJFaz2g^^SSnOr zTK>%jkIE{mvKEXe{D@FxnSw`Ul~Y+&F77xZR2)<As4RMgEaUY+{l(pdYQq#fDyzK9 zq83bSl5`=}^<kJPcvMyem9_b)qqhn*mMM5tRz*iqR`FWzCKPhV@;s*CQCYV;ipDE8 zb>=%ltziltl@$$&b`v$`&zbp!+RGF?Dyx#p3Z?Ij66z#V@TjaiRMy9}`b7(MnJIWw z)}1PAcDu2&g}S+vskGVPQCakEvdqJ&xjz0usA^2Xqq3@~tPeUb4-3_VDR@*?RYy@> z=vZ#(=0*>u;89uC97R39^UH(rLS-`rkIJg<D9YL&esWSPmo=3scvRM1j-sqjisyY< zs5h8`M`hIjWzWm4PMs(%)CWw#qq6Q+S!)k}ku20#Ou?hF==&CAyk_Lueo3fHOu?hF zVpLYEv;upCDq5O)C=`N6WyONB*Yn+D#~c&tE~em7S+!Kw&BZp36{;mu@Te^Mehj(Z zXmGV-MWK?If=6Y=sjO|6SML+*ai-u=S@DjdcGKMG=H|vrOu?hF>Nv{I4WU*t1&_+A z3(C%o^B<SUFVr5U;89uiR8~sG+V=`|iYa(h);%ig+^3&x5b9s1;89uks;nn>j~yk{ zEw@q+nQzD?kIJeK%Fd1PyOPEV70VPnDyxCYy7lR5TZC%O6g(=cp~|AUAyi+c;89uk zsjQB3cN7<D3{&u^tot2B?WQ%VtD76MnSw`UHF6Zqjq<OKUoF&Xrr=RojX}}eppDLz zZC%z!Ou?hFny9Qp1CGrS>U*Z(QCUqv+1Dxb{zh+?Wxrqx9+lNhWp#UIS_7eOE92E0 z9+lM`6wM9V7C+JM*UB!d0aNg(tQIP3@{2Dl5-O1?cvMzPM^P4yS5=oajwyIl)&q{B z@!EL&QkGE5n1V-TwF2eu!x}E@Q>NfiSr4kLHSKOJCe$US;89tv9c9~9(`A(|OPcxn z4dhW-Z5&1Is{h4{D}}1h6g(=ct)r+^>ci?Ts~1!7sH}F5vROinW(ppa)gF}X!y9v5 zIlkUyy}}ecDyxIax?x(wT|%v73Lcf!F_86$yFT2;6g(=clgg_1&l|&q`kE<tR90tD z_E;YF{?0Y=u3djK1&_+=qOwX{d}pIjMat1=c=uN7wYRIwqMrZt;L7|$-N_U@D(fMY zRlRbzmxVHK3SxstwW}K_yUzbz=DS=%J;W3|D(hjDb-6&{4~0r+3Lcf!-L;D<^F{Mw z)9boEoX8YBDyxUe8e1{pMxo|21&_+=3Cdp2|MbB9uL!l4DR@*?FO~IL-0WULeasX* zDyugr+lOhp@~;-^2d3arSqUoZ!r3heLPg!?jTbyB>k&u6k>0&q0oRA6nSw`UB|3^` z6n*X>R86MfQCWRJ*=w7Zp6pdgsAf#Tqq34z)}FbY%r6bvPY`-C1&_)~R#|bMPE8bQ z2vhK=tgy=J{=}BHLQP=`9+lM>RAti>)EjGFEw@;xSDAuGW%W~8SH@+`5NbVB@Tjc* zj-v6ZRwXWXN7ox4GX;;zN^um`u+;4_DMFoQ3Lcd;0F<5cYoZeV5$bQI;89rvRo3OC zJe7qiQl4sU{xT?eR8}e|J2$?3x8z2lDwhWof=6WyQd#5vuF*uO`<Q}9Wu<|#$5+Y8 zot_h_D^u{OtaO#t@X+Z6LJeXH9+j1$vi{iJ_kd92n1V-T4OUrGn~i*3sF#_7M`dM# zvgb;AZ`u0`I3csGWC|XYHAH1Ct9xjJP<xqzM`dM!vg1{{+x8+ton#6gm6ffs%FlnV zgHTtPf=6WyRatBEm+T@`$qFHC@TjauRo2vp$1D;mhADVd)-aWIq|cl;gnE!EcvRMK zm33@HiM2w7nSw`UjR0lmVV_lB+$Pj$rr=RokEyJ=gY)JQ>LsS&QCTBh7IoLnpPp}c z#;qHxn1V-TjZ#?~FXS#M)Ly3GQCW|Jvg^j^%%WLBeajR)Dr>aLT3WQs9-%HX1&_)a zqp~`Fw&ic3idFRH20SY336*uYVv*rO-Nh6<Dr+n#J6;c!>%3g3=1jq(vYu2~>py$x zNud&$f=6YIb6Ix0esSY9j460j)_9dg<0aHIrr=Ro6F~XLOQ^+6!K1P!sw^5Wp|&su zkII^)vS_@7`jRPlRMupbwXjm{dxbj36g(<x3Ml`033bEm-rRskWj&>`UTOT%5}~4* zf=6XN?I<djJ`3>vx+pzsz!W?x>lsJUd3jCvuSbRI%oIE-Ybq$a_I|oy<Rzg7Fa?jw zdRAraANRsMp~f-=kII^+vPS>(_9~%fGX;;zdQN5C@LabMLak&99+mYxC_7#cKf8Rt zP<xnyM`cY{S<}ML?-c4=rr=RoGeFsM<&#N;HdS=T*WXORqq1I5StmR7dqAk7(KOcH z?~>_jo0*`>n|-;>zY!ao6cDNkQ}C#)St{$m)MsB5sxedWsCK;w%Fd0?8om9TP(7G} zM`gXFvK}Zty{S-HOu?hFW`nZhRX_P~1)-i{3Lcg9vdS9VVt6H?7BK~n%9^9H3cp+P ztWfVW1&_*_tFoT$`T9db9cBt1l{F8Pof~u=mEq>b?@Ym?vgWI-YB3u}3RS$48F;h7 zqq1HBMQ`iS-1xHRfF(lJWeOgZ^{UEB?Ye23P`#LfM`gXHvd%=6IWN>$rr=RoudA&7 zYp3@TYB5vrsH_E`>^WsuwR^@2wT~%yRMtY3MeolG^*dAWsH{bx>^%JN=r22jDscz( zyLUgRe(!6s%6hC(^QJ=G%M?5+>kUwLZd}^jx$;UkHy&XM9@VZTDr;h|iBUp5#uPj% zYbmJmruH;9iWHijSEv`5f=6Y&sj{a2Q>3C$?=S_A%321>_Tj*F2i6Pq5mWG}thZFw z%<T_n2=yaV@TjciF3U6v@As~7eVF%7(##!@<WX5~tE}`r@hyZZ#}qs&YlX^s_WE1C zDCXYNi)RWRmGzF!ns<DRP;HrlM`f)9W!K)H@`M`;6=n(^m9<J`)h=41piqx91&_*F z?b=0i<H@Ya^@N(m6g(<xjmlcSq)ls~RxkyR%3A9v8kt39mc8TsrE+?<n<;oy);dQ~ z4e321p^h;HkIGsP%J$*FkFMV@)LEwBQCaV*EP9VfsJxY_o}mytDr<wv`f%=%DMFQI z3LcfUQDt46eqxqTcQXZ#%Gv~qP9D@7OG<5dS*WH=!K1R?Q(0#UjlC??!%V@WvNo%B zot#&^oKR^@!K1R?S6S_PJhE4)Cz*mrWo-dv*Nt4KK5H!0i%h|zvOZ8*9S;@!TBzkr z!K1Rag33>WX*RlMi+1bAcBbG_S=&@rsOp6zp}u4a9+kBnl%0q1w~fv%l=*lH8$2p& zhsv7u%*_Xd%3Z~y;89sSLD_R<-E+5g6si<c@Tja0Ro0;Fxqk_DH&gJatX-h&JY0MB zY6YR1F$Isx+O4v_J=WrJp?WX{kILGkvc5c4?PZ|`GX;;z+N-i+rgb-$t$Dq!3r%7Q z9+kBZ6pa^cPZw_fz4uo$=-GUx;89s0sjQMK_g*j5YNp^(S^FJDrPJqMueo!|E~em7 zSsy!!R)E*8>?|wPai-u=SqDJT+@P)bo13n9f2D$+oo5OjmGz0rD!Quht3nm1O02nC zg*+<jprdF%wafd<8uY9@Q}C#)PaQ?=8rJdpyM(IC6g(>H5GdQOF6%zoy43YyJEq`K zS)Zw_r@wErRH!gh@TjcM16kf*LZNnzU<w|U^@Ym%eO^{;p`Kw19+h<%6s?D}(P!CX z-Rzyu6g(>HOO;iB$+!|iZD0x>m372Xly&&FvMU~US%;W{M`ay#6pa_X=OEN2rr=Ro zUx6xb2%_d)Uon?ZrK%apZ1AY8V=8OMfOY4DYQPjcD(g5XdrqPE0fb6q3Lcg9waPkm z%d&|=jb{oTm30D?J*Qm$>$ZVoTpuoB3Lcg9jmp|pX3KLz?O+NXmGvzsdrn!ttyvMF zPA~<J$~vjC%53~QU8pNe!K1QHfwFxVeQ{Q0p-NZx#tR;mby{V8A8y-As5(r+qq4qp z?V@t&zLW{B4?8mjkIMR9Wqnuu{boW9W(ppa^#drr4I&g<t<1?0F6$Yl;89sWs;rNj z)E_F;3Z~#uSwDfY$MV0APWgPK%R0yuJSyvFmGyT<*YZOB$rL;)>laY=8sOQDpPUn_ z>|Ne?!K1Q%Rawhc6nsahrcA-3vd)0A^Ki|_xfcsHkSTan)^93nX348bLOstEJSyuf zC_4}D@7^Q7Q13DYkIMR8WmTy+bDmHqn1V-Tol{vQW=Fjw)O9tyK7>bQomW|-xBj+U zs2WVcqp~i5vhUkm{^_Y-h3di-JSyuCmDTK*TyF?9k|}sp)<sZuZglD2ZlO@GGX;;z zx}>s>6`FWPs69-<qq6=4WyeeR;qOerqq6=|S=(x)JSADT-0k%|JSyvNP<HL5_u0m| z<Lf@A;89tZRn~yL=YA8aH&gJatbYPoSuSfNQ}C#)D=LeAms6-&Ou?hF{sm=^uiSTi zJzc1Gn1V-TT~%2t=Pk)C)JIIgqq699Ecd}if0gv0P(LySkIISyRnQC!oz1^2w=71e zyfwY?f=6Z1-%QZITjBkMDe_lf3Lce3zhy1I7x4ApCliFapDB1$Rvu6^4{5tHc=z*b z-FWq83Lce3-(@CQzn|#;gHS`5f=6ZL17*i+)o*hj5NaY*@TjcoRMwGmgLeuwmnnEu z7XAG)xgY!F;{C0KTE!GRD(iZc^>5d-DnjjM3LceJ0Mt#U|IC9>{4IBk7V2xJ;89sO zsH`a+s{Sg}A56icvI?rKvIXwzAk+=~MFa4tEc&K78LzeX=4vKX1*YIpS%pB^b)$U6 z6VI)7bHjeo5<Duau*&*mV5$3rdYH4|QCT;EqSLl{5Sp_8(+Wb3U<w|URYYa&>X1G{ zsJTqRqq2&Evg6g@iMA7j+QJk(D(hyI^+Aa`J%l>R6g(=cn9DNF3QceS`;tEH^;f=F z(#$t^kw<0G_W;Ux(fim!RbdJql|_G9MSe$h@^g1q7wSQ#;89s6Ro3*`^EwEX&J;W< z>lRS959xhup{6qhkIE{gvR*IUb+l0Hn1V-Tm39>MR@s}^5A5#x@F-L8s4V*KC+Wk< zD-(AJ^#@b%s4V(>=(28<Ts*X#P=#tyzWMzx@~ABOmPX0yc+a`sLRDc39+g!Nl)c{Q zIsfK7LN#Ry9+h>Q$~yIDu0){{n1V-Tl?P?l-j)So-Vtg9Q}C#)3Mwo5-i(Dpy}%Sa zDyyQ(nm+cmszR+`3LcepyUIFOX|}J1dzpeqWkvr-)^|+7qq68bG-bTLeeQ)>Qp2d) z-YCPPvhDz7*F(BTI?K(&GEBjvvhGw_ML)VZuTb_&E#XmFl~op9vrTbpZ#&L{M`h7p zQj&IsI{)yYP>(PLkIJeFs+eiEc@Wy$F83m#GMIu#WmVHzS7!7OYAjRms4V*C7dgKA z-FDzxp=K}zkIJHNIF)w&ow~G=P>Yy?M`hIjMQapoO$YD1Si<$;dZyq}S$C_fT`enj z6>1+-@Te^M4)NSk<xP%x5GwiS&uxYJnkjfxR*cG8bg|@fLS0}A9+edfsu*Y8QL@k~ zp{|cJvf1EKS+!JFbeo=Ig(}AsJSwX;D7(%_zc%_eq3l<i!K1R`R94<IJzo~8C1=5- zvf@G6<7@i<_7{q|@#@7CJSwY>%8D&IrMOU;Ou?hF=r4@Px$==l3&#mHfhl-YRy~z< z>h*rRg_^?@JSyuRl~w&n#+O2^WC|XYb+5{*_HNRnLhWJ-9+g!el$#q>E<7*Pai-u= zSq)Uy<XP*t33Y)fcvMzHP<C#7*s1n@p$f!%^AH}Db)U-W(CMpOLX~F<9+h>!%F6#h z%?zRJ7ZbyyvKpzZPk(s&RiRpQ7Cb7evC2CB=doo%^<fGgmDNOL-SPa=Z-pAh6g(=c zDJc6nQTKsgzbw>Lrr=Ro%~V$3f4@B})B>j9QCZC$MPozvw0CyL*9NBGQCTe<Wgg(3 zcA<_i1&_*V3CdpE&^_%!{lyeKD(eB2MfbD|Rl1Hhqu^0ltw7m1PxrJ7buUx!sH_K7 z7Twb>R8OYhQCY1)**Q=5v<o$gDR@*?8<n-`tG0WDn#UA8Dyyx^qI=qfdY>tHR8~8c zb)ehiqC%Zu3Lcf!-eplQPj8%g)%$Da^en0_{WRZwO&*oiL1mTP_r+U6-NqC=Dyt(X zJ6=sL?R{OS`b@#2vO1}(6RC?!3e|%tcvMzrP<Fg7-!Z0`P$QUvM`d+US-al-{WhUq zVhSFW)zxKDZ_&Nq-d|3qXX}}QM`b;vvglr7p}t@W9+lM%)GelD^B_d`ehc*nQ}C#) zhgBBcODt6JdQ{I)2p*NyU1ia|#6sCG9fn6`^-x)K@3&B0I13(?)f1E*FS_?zsBEU- zQCYoI7Tx<T)C)|(qq2HCirQT%W6?uf+<Lf%DR@*?f}_lXP`iPv&I`4lDR@-YBcSY@ z-~Mc&`a*rj6g(;`QDqIkv~jOcp?j#-p%6SOs}HEkW*^mX!Mrc86RI>*@TjaLm6f-2 zr3Zzo%@jN;D_Lc|{QRTe3)Pk>cvMzcWmP^`<pZJmGX;;z>I=$VAKu=y$DZ<Tyv8yG zkIL$&vOc-*_dkW2!xTI!t3N0^UVC1CcBN2jn1V-TrKqe5QPl?vb$}^&RMr5M)pu{t zi$eX(6g(<xpvo$jyl#z9`R=8eVSfLMJSr;{ls�e72~OP!*VhM`aCCS-(wuzp7C6 znSw`UrMWDs%YbIfd**kqmmgvZ9+j1@vc5i0vc6D*nSw`UWq`8d^={$kHwiU`DR@-Y zV3pPT@gc7XwU8-zR92>Imw6DXb<h3dh1$XtJSuC5%G$U*bfZv5nSw`UWjTuaaO3Tz zYKB}NUStX$m6h!%s^PNK`lEy@QlCmPf769LDr+bxdo5b!w%sd*s>T#ND(g{|)nLSi zV?woH3Lcd;43wRR_fHtOU8p3c;89t_Ro1#06HW^?nkjfx)(F+E9`)baCDhAI!K1Ps zQ&|;8AJ`+*I;P-JStI|WU7s=qkIEXQvVQpHiT5SzH>TiGS&zFc8qZbDsz0{Ot%o-> zAT1PvM`evxS(yhHP7|sEQ}C#)F`(?)OW#v5#?8Zcrr=RoPpGWP-%ZXX)I&_cqq4?= zqGOr1s9F2EO>kL{G6j#ydQxRA{wLQOp=L7$kIEVc%3eqPJ?o33LTzFS9+fp-Wo>#d zZk13cn1V-TO#o%*{DURB6cj2?L$9^)sH}-9Yhu2C9~G)HQ}C#)Nvd6CN36b8sMbuu zqp~Ketf!`)J|R>FQ}C#)DgV)~8BD>WvYt{|1FH4tCt2&6f=6XN?b=2CMfbCfaC74; zrr=Ro�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 literal 1213452 zcmeFa3t$^pnJ+$mBz2S2a@s%x6mY32Y14-j+lh@!Gb7DNGt!Kt+RlU0qA0c;tMLm- zPLpn1(mHOV4(4&oE@k%*TORkqvU{PsuuUi|#7Rlg@(P7z%j511&)aTbx3Fw!%ftWQ zcg~D7BaI$uyM?_sW6$WE@B7Yo-rsqD=i+OUnc=Z(mtEcNe%5tw*wE9xetl=38{TPI z*Z1`GbushyWrEP83c^=!t^WS*azXebc^lHt3IA2z#w||>^}fyiMxo;S-<}bgpXa;e z*WVWGcWLxn0=?&4|8e%VG~OwkeJiBFPeh@m<UM!ndf^4XN53MRTl)U|3gO%r`CT^t zE8!)1Pd_XytMab+(07IB`<}P)t-^VIA3XcMglW*)APcQao^Zcyush$^2tq5pm$tn) z@B2S0wA$}Szb~}X`!T@m_miIxTD{)GTZC46kG2=zuWk@pz23*~6I!dizu6|V{_cl@ zukiu?wtQdk+3)$c2);`1l{*9<z1`jXRilFM?0Ys1{vRs?E3djmIQyPWgZ~T5z@|-! zfSBm)mbJL5YHC>YPmPak>X0N+uuvP~aYNPos$bM{$?^2C3%M~ERO9|&EFuo1cFv3^ zGcIgzR5F5*xU7mdrzc0JCUaRA+7RVnK+}S8KlioA!vjMM#sjf<Fr<oG(~~1pH)l8X z1fxSGe4^oqDutqPkv!SdH#(J>Nai>V`8=6RjAYWgQ<=o@cru%{W7ZQ4$09~JsES#T zxWm?C$XZxe6-nGRId$`-%fB8Y8qg&v;uoj0$(cPa+=ig0MMJu*h{3_3z0)Z-G8B#Y z)sQNSIiR}NyOCiv6wp*8R&*+t9xibilfww99u>Ey(mThjxLG;0F%S>L!|{kNB8u7c zlsmK=Lt($9N1`GN4#v(dUpI#R5mgSWinytJaw<2H8g-$26~AHV@u(&Sk+OdOlsmS) zN?200P#`QSlfzRZ>B*gL*TJ|P2!<3@49<*?N0SroNcD#NK`9WCbjG|awR(+6P>w}Z zjxKi{i|Be(LacL{nG_|c%kRE;RMzB>8WQ8l^klA#yI&F&DW=6jVM&~x%I31ene;Tu z4i!`vBfnn^Yla?GqCpqo@I-RjU1mUO=!zPV!iG4QOHPg?Gb5hq;tz;{fM#fVToE@< zj-)c<>B&@lDx1!gW*#WDa9EFp{V{P<M<9sTA0OP*H-sotlqgr+p$&*JRn;SUJT7X3 zF+G_}Pp<P0ge*q<S|BXzMlldWW9i{tlc{V;#DZc-j)zeO-ATY}+hl3J>S82f#AB3T z!Q@1Gd~aFa>7pJD1Y!ZC7{$Oy<}zt_$<oDmED%=1D7QPu_fC&(>KjQ9yQ6A|N<<5W z{JJg%#*&#q@R;1`4!9wP^bl%tD1;2jOzlc-O^@WpTnT1~njVl*E0JDIzDbii$K6FK zD#qe^G#=B%bT*jYlNyPqbHi>fF)<L<{UIY7ViA(lnbdG@Dzn$+Rb157SWt?fw(OZs zWpeIp$#t*ylu})OH697e@rXDwGwtHnCC8*dR0_yqRNmsoM2uK89Fjxg^o%>vx(p+v zNm?8ME^*W2kB3lYBt`U(Cx>^r`1L?cM<T&kR2)xDYHq)JWHlI#1>~?eII|<;PX8Xw zFBuR48iaRg!uJ?qIUq-)5)+2&-2TP<h_i0Qk!>SewwB<+VZY`NDq<?NC*^LAdg7`Q z@CWrExl`TlHiQHIm|xW-OAxw!+=xIT#UiR0M@x~+xl6!CO^W&Du-_1Or81LcVor+( z^>8q5AmwIK!I@ibaRs;+r6M53^f;P}F^Hm6X(Oqt{<wnjH;uOG=BbRk`R$Dv;ZQV& zHe>T-`fW2QO?ENw^UKIHcpaR|45!K(?>;}IM?g0uad><xn;K1*6z#r{957@(5Mx0f z97~V7i%VZ9=9kd6B0W<RgOkZ=ci#7DaVexJ{t$OQoGfJ@g?N|I1t_>zU7?2%jz>aT zP>KeqP9!I(^$I4b>bU73Ck#ChMm4ZRN-Q^)%20B<3!FbF`jrUM(}*HSsmT#Jl}+!Q zv}LQC7;+;JmNd<P%=Bibi*iJU@Q-OMf?JYh9zv4oTEtM~KtVo}L@R4<bTJwUp(hiK zibi@em`dhmGVU@4aVD#A$sh2Gv1xPwlH-HvTS`e{sJXf(OI9kBCqPsT$K!rgRfASf zVG9#PuGEZ*@lYrhmys<zc|2%hqO3}CBqT+|iJ9?SdQ;y-GK-??PQjQM52KBh0})YA zPVSsZ?o5R;Qzc?5E-FSOprEr=NFr*&q>-r|<?R>pH!f>RI1+K@pOJJ+zPK1sVxf?v zBVT6H<0B;hrA#JSCT|r<3K&83YN;$pd(v6T7%L9Bb)NFJJ1oVukOX;4y+T*Q_4os! zpsK`Gad13Yg4-C7bv58e$1jIo1lp{Uj#MP9=_>leqTO`6IHMxSs;>KGw1|c7OkZkp zCprdhLPd;)!%|T4%OaB{)0q@Wls>Pn9}2jpMl>aeE>32Onw+#9`JtgiG<9<#fU=s} zlM`San3>cjvqBDi<<w{rd7jvrNlv3bkWFNB5Qq%p(Tm=oMK!cSNaXCq)Kp39impHa z-A^s7+1S4EVYh%o1FZVxAUb1ClHEMkqbwAAvxy8VeFE&<mju`(GRV|arqHc-A$M2C zmN>I|(Ot3}i|Udd5_gQ0<Xub+L;`43C}%ypeKCJnLXQXCI#n7NRE82tG!T<95OC)m zYPPD$;fOz6ARJIa+ThT@n_YyuX!!j|Hb_NQ2K#c!9kyg8Kw@HQWM({Njb@Nz6sS&a zMYM-0s|d8t3%1^auFC_~T@Leb>Or-k++nW+WDi=DU@*$+63<$zIYu5@cCY-iI@NY* zuvx`pF<DVD%$UwnXVj|Smc^Y|)7b>I!P!J|dU|}XV7JI_B8%@jMUNVRP*@h-J&AP? z0)e>S2#En#wyjf*P}q<(RrI^zQ7LL@aSd&N8y*Y9BC)6x7IhbVy<ZQ+jj*POTerCp z0a=M_21L8NysTFu2C5)N?*VuFx?WR47~{xMaf`d*UXLDSNJ7^DO`zM0NZc>^(Ge22 zx;segb%@)57SP45oo*LK$Uuok4UfcKh%U`gB`G9hoDp}&qbnT55Ls0Nz_?@5r5otf zN*L|LO9Iwqgmk|eQvwKBi5p-7ekDZQ+|lncR8{sX)E0J@xQWI>S|A8%y|uF>Y|(fm zqQoU+`Z_nJTaQU$KRN_VLc5~6(H{**{f458N_LnUBR5vo6-f`qf#r>m8><FmK{==y z$fNSMdZU3!89%z~+f<K%e>4;f$D?s%ugAc@H$WY8S&xYtAGWxQKyO5kMO7-rcDv{b zR&NxYQhyj-4JkX!<g5$b7YG@OL_KYaZh7y%PYwrULk$Md-eEKmLATlMK5Y2WGenwT zq@2l75K8f~4j~w&E{d1`VHzHW6x6}wv`5nP#n7vag_STOAJF8oadIDIh95IVF&2A0 zxg$01@}C;ykRiq6@c<8DU}^%>1nHbDT`U;^x=<`C$8{7k788moW*jnEcl80Csv4RR zL6LLQxoZ>6HpqsIZmDefi{v#@7~2lJ69|M6Nr^-yKYAmSglr(~L5NakVC1gHWR_Lv zT$lFZFxHkZ2c)S{B$hv!E$@{Xq8d>{nifMRb#jEFC?|7CSArSnRH|{^AH*aG55-`r zWKJzA1{G@8Aa%gSyIg=KYACU2BuF%T99=pof?$R<DIiIj9U7M4uHZy5){bLpLsE;e zMu19bqFOMlK-yR}#A{$53M-K~=H-gnRu=b|7?%77#G^_9s!&p57^V9$TN)0C=*~`K z5IHzJmMWPNLyuh112iAOz4J~aP(?#(FpgPTmi6ArgsyZb7z{+vNk*tD6_2<WLW+kX z0hYB?nY~I|TntC!kQWB=;xm1op^u@~hXa_jahGwP?8(uI#B?%~MTc#4W^y=-*0;>g zdO8I(W>?)UGy3d1sKZ}i0RZ)Mc>f}W?yGH|$>yde9Ni8Zkz!LX9*C^nxnOg|yc=aP zo0&`_&Q^cR#*Cy0W=F*m2VI!;QUgXfEKZNQ8-Xq)jS=(5f?_;4;3|fgHjqMbh&r7) z>YH#@Vz6;Ukoip@uj%Y{n7`LCDH;&nqNmI7E8(~jL^Y=gM90)VCWA2d6-Ke09(H$m zyD=2Oq(8=Wy}dnsE=N5mcZw1Yhs1TA8@e~RanV>X9u8?3@9R>@Ed566iUcDeF}7oz zCNf+OF;YQ^#y}u0#<gvVo*2}wS4t?t82^Xjn1YPQwCGSd1?E7|)`!9o%)LvPTzzu_ z!!0)xkf7CwKvIcY6)mJ<5L8Nn@wtYK()^k@pkM-Z^N<#cCfvP;s2D}^M8g>KIB49x z1q`6ke-G3A76t@cHF-!a_bi4kODrzY#G1548IVFsf>F9+9vA((LhU%3Vp&cM4!v1d z9ITLa?&1(c+T=2+<U}Gioto6I-%6vV@mp?20neopBU6(p7a%>E&ba|oE^8*0P2~zp zCUOkZJxCsuv2Of#yF!Xa&cKR_5ky-vnM#dp>Y+(ni0@>{OehAgkb`~=eZ%zRZmcSS zbjSD<W*vKSr4#vng&MF>Ko7-=#8}nATF|DRZ0QsUCV&j&tfInM8j>nQ6R`*fHCH{5 zw<Qysn7PvZ5sY9l7g7kxNSb5;R$zLlhPz{^in@j+5lj#`*^i}?5Cxtdpik}(#4&pw zWDX{#$1z@~gt7fVR+adHsSm@52mNRS3SrujMl3Liu@eLAo=j>Q6G-lW=@>>wLNcnR zI5WxDtPuPOOb=w)l28xC%Gi{9=#BZzU@)l1{a9uw_%x0_P9{0NX`Ss`c_Kuyasa`B zd1P^l<{f5s(CWz!p5c|_g*G`PNpc9Qg$3Urr8DHt%6;x<Nlzy(Mir7cs7jQjb`q8a zv@9htl@>v7KB5O>VrpVKx3?_adu~osf?D1d);uw#9tvaiC;(Yf8bc3ni|!OLgtCDZ zO-$oVO>OF#NKV32J0&rz>B#u(-iaMfmwHT<R0Sh1XCz1VVnmBY*B(a!z!GS#=ui{U z6~}B|TrLZ$hhtHIcnIB+o=$9LNlC?nKn{sPSi8PsJf<iyEL&hE$vyGh6Nnl*qH2h_ zb;GE?&UU3I8uw!n6swh3uhP`i9{hw|6dM#n$EXI2RGZe7FTQT{qc^2tu!m(Q|K8Fr z_r^dp8dPa%cC#i^ch$vtV>B9yXsQ|!gI;c9VcCxfRCLz8uyG|KM|A}~C%Jq&u~&)v zm8gtK8LV}q`j*JFUKPXOpo+PjSO&tNY>_~Z2e2xGI*pVJOwE)`ANFApU5^DI;|8fS zU)II!i$<haRMRnfz$#0*d(>cftwb@dr8Sx=v!b93`~8X>j)vKMtR%<$h|eT-5arS} zHVA5eNX2ZF5-YAS42_}GjFs*a2uNZWBY<!ilFqqQ$>w=C^>uCP?%dQfkjhTYV4-4D zpVy!a)9rFx^G6JtxRf{buvzpTcW(y6nK05Jj!FB$8O-6J2VIhshKSj^5E|YHaiM6H ztv_PU(H{u<qbMa7N!f%wgq7b2#3K@>NHiHe_Sons8bViDLmQ8x7E^-}mMh*wRG4D4 z(jB+`at+p5?Qu8Yc3)Bp24Y6c@QZ<9Nxuzy41$u3`ZYZ2?zbUxLnugk2xGa)sZD*D zvY)`xX)?1bRkmz}rZS|-RAi!Jk)jVhbj+cZ4H7Ztfbf<u_bk!`8WnHX{4_$sJE|$j z71{~l=wcUe<sE54xjM7Kp+F*llnf-%S|{|Wsa-SE5KvAaCaxJoo4|TQ8C@B4kd~z~ zr7mnHMsgBdG6|XbMdXhS;9g@f$_q?OGcM{<b_1yiG#unwlU;<U0q9PVM^PG5Y@W=d zMwxZcpU#y<rWELiOA*EWc8YL6MEH7JhOZ09Bm*KGvew;`U$4Y48yyW{??(@6ta}m? zi_56_Q3IV3xuo=A)fqFRaD@#CV{Xac6~oY-Hf@N0zq>!&tr$V<O9*LVS=YW>3mcJW z5GyX|2oJexSdSXO9C3_B@iepU!fgm>SeiuN%IeFzkwF7%sx&1UjSXo5_b_0CDn~H; z9K|5Jyt}<2>W>=ncvux>4`dwGOEEB^>eq%aJ>>FpBi8?QC4lw)U~F?#E}7Kd7*=E{ zjyZ1;wc1chBDxVf9nfxJkHKJE3Y4xKY&5Vs6p%3aiUx>M!tF11okXzWhkXT6xhx5L z(HLTv7KVM>5-J<?xE%NDN-!cvFl6^!v*`1ynAub#*wHd14GfiW@54epCIX{qw+LSr zHp~NRk`%{I1nlB^^8k&xT;BI#Toa1KXp;|0m19_A3BkUQqQ#?11XD&)jD3(c?yT(7 zu=Od1_+i)<^~B3@OuAq|Vo2LO@gWtn@F*w2&AMLhKh4{Plz^dN37y3-J`js514EkP zE{velkgt&t8p;7_YhrM-e=snh#fK8^Y5=;h9#_LEngchTdx#0TXaseZs_lTHOGDZg zj19}P4|H*?2S;SgQ&Q&mspO&f_+ush`b9OShtUq90&YeOtk9KJM)X{DRl^z;I`<U7 zpcdLZ;594-p%KHRVVLG{hXypP$Zj4=NP~gWq7A}0Hm?PAMZ@gY7F5Orh14Uh1Hfb8 z9gr|5y(N?gU?Fx$(mjU6Xyz0npvP!q8c)Syj7s8-WI<;xibc~h%90dEzsLwl2E<)4 z#qFWHtIWc89c!Lp9cf81p*e(v=RzK%j42AH3YhPe2l=3kBSO)L?suf7tav1+jCnoD z2*}tx<}N|yc?nWI>JLDii6|DzfUZTAL_9XA(WHhuPBP}FqiQ^k<qgIa)0sNuK>0ii zM%F=e(`dq&Ws@G;stg3ALC->>h!8GOS(g2d5Dcjr<_ML+k}3q+D3;LFIEFOVI%)uY z86`lWEujsHvMy;s1B+xVxK#^akoI_m6$KMrrKP1j%|fD##l1iX8=BmlJu@SOSzSX3 zVbMxVYzq!3O7Dh5NPlx&O$<nASxZ6<>Tnp{>3||8jLn$F@gvz-ra*+DthuuUTNg3& zp<)4#g``H6z}z$T!eNEbVqK6L5KG8%x7frmMAy_nNJHhMSk@{X*k_?c!k8;C3PGuw z?V1=<;s$04u`$@i-aG5j-$xe(Lo2JAl$Ux?L;^u67(^1r1`H2LjtLO#e8EN>^yyJ- zJ(@Zl0~D++>LC>I!qlEC$+7S*MWY6$gT(7LOR|UL!7MqZ=fQ%DTQ7MBlAwZ(eyDVn zS^><v7(pYdU~R5Q;uc2+)`762Boqj-6!a>5hNuU_m?*-^C(uJ$6s<%_wMIWh(lA+r zSp_C@z1U!+gYA7`EZkI-^&kmqSP4h>gtF7KBLNz0*YxWcuaMN%0tr+A-CgWJgAKQS z8MELrcBO3AhZ1EyhM1_RGFqw_1fip$a;FYPqjD(d*FwBJdiM>82%-mDE?KDAv~gK| z2T?45eq;pgyTdzoD-sjcXfT3NB^QotirRxy7;;e!1!d~1ROlzfL|yU6bvY1aVe;;j zfGFsfG2P8Ykay1p!$~Zqp=HBdMrC1*(Wf6fjRWZ9Q_fYGTn82Akg!*ZhpIvi!wy+g z4_dw}7TU5@z$RA%E2kPZ^^=Dcs!?2wVN(q{eq6Lwn9;{#fb5Sb$Y{o^v|1+;dnP8t zPX6>-zxK~M%dk$scAnB9W+IfzC2*bqCkYZNo4dsji~-|=37RoTXxIi`3bS^GmV()? zKmw}CYy$2>v|l+va}I@*2J5kLF(hVoaA5;d8f_*Fj1e<?$t6Z`4x3{xj`>CW2FIsz z31wmjW?fQ~Zm6}MQUKCG5L=x~?SAYmWy9b^Y$it=&MCgw@s%FIwowlhsN6WtHj`kp zMVN((Cv#)ui4DhIvh?r}OSJ-MW=AQ=8fO<=VQJEX7dC@VWoVdOq+^g`NNq0=2@Yg) zV)k4n;-8`Tl>>Fe+#Sf`@R_-a(+Z`PM9u&Vq-fE>3Bh_YS*a{xO)nvh?50%%Cx}+c zF%{wjS*xoAqS=8&fYv1JJ%LD4%x1AjFeH4~JUPvPsS%Y=yV%2e^cXQQh2<`cy|A}$ zk}aI{vBeZPD3ml>1ER^TL=fu?<ZA(da+}7wNFl(6k=T-?c@h>QgLZvlGK4mL5)45} zfP!tL#I`|{nDitZ^91KOzM0eu3BHwG64KkLp5Bqc(h>Qs503=X<5pO_;QU++3yw50 z0)~7KqrrB{F)*uhlnRs_6eSHSUo2S|z~0b-UMP;z_*JR66LaSt?60&^%hg}N6dDdP z&;h9cHdtf(Hcn5_PL~pD_!Zz-DiDR7aKfCKVV8!`wgRaG<fLR#V)Dk$wxWeep}^EM z6EIvRQArKp3=bn__@Su;rky5|G{t5KE^IlN%+d)eS_Q<a1CWWGjF`ocpi`Crae~P` z*oTr?&I@LK0xA(4Pwr$HKzJrxu~!}Ev+N*mTer>&jKYoRV-25&UBgyS9&m~Ta9S1_ zhypR093S7yAd%GG6sw>to*=R3=@a&he4;pIOuqA|(<WG~VzKZPAUxSDt1YuEt5XbH zASy}@j+RJaA!m|1cJrh&p%DcPGg0?R)}XPWDMFTf1da2px-8!uqB=pRuLR!aS&iK~ z`*-6gf9zjdMyv~lqUZy~RBJ}wvG%_{u3%aaCzUpJCtPK^OZQ``B7}MG(q)})jKzW) zHuQ?Ip`n<|Q4dxTBUlvIu%462X56PTAgQqKf!#4U&#?)M#yDw)#&HB?Y?lW$W`aUk zSw}w#LBm1=UoUVk0#MJ+2m~Y8aa*A19wm0JP+@sJAP4*sagu1QK%SbRjkFdO(p<vw zG@bTHSQEMs;v)$zGbl^gS)hcR9;GSTgoIV$_1uud>~sPGiOCTu$E;|Pu;@;Bn!mOu zl)1$!5P?*B94Ckv%@h|(>D?B9izhza%=-t0;zRTdZ3(`D-3~QtEKusHKtY_Qu{pg^ zU%YTxOFR-ICq5e+wVXRK7HBXv&h{s=aNDjd92}D0%+)v=2P;lg5lfmy%UTc!EUnxE zfr0Gv1dhr<KA_G!<p3ZgpIpEoHs3)+Sizwna0x;^G72C;N*d;3juVpGxO5q{GKAp7 z!0lBOd*@v~;h>3il8{l`-VLPqMs?dhNSnBw;VA$hjIcE5q8p;k-v!9b4qF};JE&}z zSZSQ>CL^J+Qv?aS)nm@}DcZ0=rJXS*@os@we<VIdd!#*4=&Ugg<ybT|72Kg-<WkC> zTqaq{(w3~wKskk{6{t9NJR~zb5gcK)*HU-}TeQV~n!0y-iY2ApU$7S5C=fapaP8<b za}eE`alWd<kpQs7VOaE&trmh?(e7A1CuZlXJq5m-SrbU%DHIN7VX<UXgkpJK$XveM zgeI$4Qj9@A5#w|ugpFO*`B_O6L%Yec0Ia`8TiUq`oTp6KpaferVvzwzPVZ(k%!Ea# z!~ja1jkM}5vVh42A|x{lI5lK8z#)hT&qp#YCw6$LyIDZk%^53X#H#?X`YE<u#^yTO zZ_Bd00OU(_1xHLI+I;{gH)jKFJGNol-t45LYR#MQQmEZevfUG9ER#k*8%JuV*bvM{ zSq0W%<+1|>%E^^yts8<&bjPvS`*NfX1CCn-&h8$N93y50J9^1vA4m=lV^aqcbF__s zuUoU~>O}EjuRY8yU~r(0lcq*-vIfJMLf#D&AdbxE1>ezP@<{Rm!$QN#vn7F@c{Py2 z9zfJV$9TvF*+qvHOshol#)nlWtG8-F9PTZM?VLs|tjQ<^6d2?%OxQ8AGofOYnF32L z;yB<t&T1P=2Ld_kB-vegRIJ6wbS{zy)2w*#{s4OZRx!5h3Uyk8w8qZ7WSxeDvL~G@ zhe2Qtmx1kZoW%~Mz;5b_kj?rOA9a?1bj9H(TyExtqXalORvdfNHbNp~Fqd<y)LTAK zH80L*SU|Lf4%P#hXeqHuti)Q>gfEE-fr9DO_(&<A(g+eEgSmpppk+~H(9$>-fh8Qq zQ`litnl*!|6fZD5_Xc-i#}t(xZXL?(C3XZEO0uHB4|ee3OneGzG6-h@b+)O`0f=IB z1fT=LoLFs><!WGxoyjY*aTQ97r~q@c02T^|iP^4C?2w#9M<AU|j6%TB;Ld_fIb<E6 zJE_^t(j*jyTT{c<z>w&Rm{E+aJrP+{njL(Y2?t}z>{w!QW+GwlJaqtAE9;~|XOcF6 z*r03<8?I?0!wGQlA&N9_t(`PQJ`<@49tYw<796X$jW%lnzl}xI#=I?)a@k9)@O5~4 z@1#u)tId_4)Z2*^K-_jiuLsds#>6=FLW)7l?w!Or<ScSJL9IKT0Y(Vf*$;AMO+id$ z5~)mPD&q#(iBKfU%uL$jz|H^;3Hc?=Qn<!P>w-AA9Hu=PZj~476(bC_E?A=8gp+S! z_ex<G*4<)QCX~P{CT;4_v2P@dU&q+83;RkW9Qcihn{Y@Zj9n5DH$ji=*P_@ZkI^TP zdJOwd@Ea}}Q_2xKLxi*Kn-Bs$4kG*#H-}d}!9XB@ZF_M<p$B|AUD%C&MZ%#AcJi2o z6?+&XA=>T2Y&iNBG29M9P)mWu9ooXiNN|$R;ec%JBW4>_tgq;C=rGxY*<B4B!vXNO z%$hseP$Lkcg>_B5IhmmoAa1`gSPjXBAG;=zYUEGE4_3B0;wHw<eH^00##SCsMqY>+ zvz0iAV`C1MY(wHEcpJvLj4pvYCJMupf$muKVlPS*DT_SDx{IcO5DOxaD1OQAjuo~b z;20xLH{$^2C@RSg(jL)g=~Hp$70m<0)M!Y<iAwBoMHRx{%|6Vnjg=p5!y+>_8DT@E zY}g7wa<re#($az^+?5<4H)2@pR<K<H+YHxj>RG?3r)yJB_okknO+6bn^=#bK)4QqU zBm-9aqKY5;SmR=HCO0*j&Y@*?vBkM3tUrV!I6Fc4pkpHx%U&{53K~cd%4(Dgq^2{j zw0swqbQwy5$R#Bi>JiILGP5ML;8bWFCE5^iS_^9<*oA6kEqp@#u?lU3{0%y7B{c#E zv2dI)j^hb-8P?!}3MDVm*odnY-0QHFR9-B)sQxJQ48%q2Ab26!SukCzF7|2*{T5bS z$YM=YIlu&UK8##QjwZ0*a7SWf6bH_;xxIx`%{F3kYH|n4Ndj93F)_Il6V5h<mj%Af zumE(E6>=3#0`is(=HYw?np{sG8N$;?hAH)t0bM@sfPx4_gK46nFgfiw4o9Hjn|38` z&Op@<!jRod8#Iei7~Y#1PYkago-R!a3y~f6M0h10bKw~khQa*(q$jWGVa%tLWCU|j z8hH*(PmX$1PgICR7Ka7AUCiJ(n3u=7bZ*=e;Y#_D)b6Bbo-%}ILNH8ev>4FMd1hi_ zZ^bOznMv*P%rXm6o@ET-m1PX!8B&Jv$})!V$})y1jT;AgWEn?zWEn?zWSNC1&oYMa z$})y<CG5_bn{blNqvA7!cS4YpvS<;ogmY%50%ss9a0aHFGk`A6W68<1CufH6<jgRo zoEgx~Ikm$(HO2_x&6zM|oC)aSjESuDaK!?=Yiz>XUxx7Xmtji%Wk8p|fMh+>iXkd- zh7e$ld{HVgayMt_R`cde2yf1WDdS8)7w7ThlqX|?d-5ejDO-Y-aLsu)aTs&$sKghT za>f9ba!yZH%v-RZ^b}4OqFgvJgjbzphzcnHPrQT^bK)hO7{ViNXpuaG6Q}kNP8{JO zoGe7SaAF8A;lvQ72|Hb(B;=+mW*M5!lEMql(<ND!o~Te52;rT?gel`pKv$S2#`j`4 z>mg7X!jm(@lyYW3H|M<-gv10Pyg3u5j57gUoZ%LSQa!@V5T2YFrj#=Sx;SHRjkl0s z2v5!oQ_7hEU7Vd1yhEBDOG3R8&ZeV(hj9%yRiLNm0FGd)Gc&c<0i_v%;c=W&$M%XM zErZgDL!3z|0b})Tf`QVLW1b0yx`TNYukJF#I0Iea<BnFb`)$Pv3j^L>5yIOm!jySM zK(|+W$GzojmJr^Y2~)<IfG*Ct<ixmVm>I&8GsBc}W<WRR)VO!2B1Z^s&V(uBOh7m1 zv7~pWB1Z^s&V(uBOh7m1^bY9r@~B-oLU?l~Oc`eax;T3cVW`ybA(vZg!<paW(%s$L zW8LC{>sf@)d|41~{i+~b{yRZ<F5MtJv87RH^fwF7{I_P|+rM5Sd@H(C`1tkb2zNHN z2;xs#gzLx76~1!xT;YnJpDX-oe3|g@>1D!qKeR%4>&Ekh5B8lW$PKN+6HD;6wF<&( zT7|YtTZNClzg77DNAdfyR^bz$Y!$W~ZWY>(wh9}*+A7@lc&o7OH?6`Cf7dEJ(C8Ds z-{KQ)Io~JjxY8$dcl(5>3j0+n1+@ub6qXB@vF~{>t-@>nUCwM57VMV^&B8f&R|zZe zM^w#lcNu=$1aiwE+_Xwq0o)4EHsW0+ECB^kE`gh7&|l8n`taKX_<5jchKb(ufF&C8 zrw#U1>|M%m+}z0Ab6!NTTxfx-M#gIuzRMYRa!EFd5&yQq9r=7NAWirqxAY~ymjK57 zYX&FI;T&LjXo-TS4Dlp0z1(cayNz)r+Y-3rDM=JQyyQQR5&29w3f(#QBhy9r(%(uJ zA_@=vT?P!fv+YgbbUEWj*mjsHEy?{#W+#8><$t!x2Uzj1&0(exEde!8Zwmco%(hBc z3Z9e`6hg`;3iAqtgL0Dlcpl5KM!+ex+n5U;OUeZ*6~&T7xy{2wX+!><XYoG|lpIGs zQ~L6kmj^O8Gk=z|(nda0C@Bn_l2VjHNjCER{HlMK39m&A?Y~Qf;va{#BTc#KwZg^B zbRoX4D!3?`-ypm}cs={Gxm^OP4&il{yH_(e{QF9Q{$9@hY-;=WWpHDgoxiJv)d=0i z_<IHZ=+_7L6#m!X&q-O^OmVmjCG4Uycf@;58MHP>PVs7i$L})y+9q$e7YY|3{H-;7 zqR>?Oy9_yF=S|U%B`CdAKQ2csE<gKs#woz1B1!U<C}G8PUFt9swAK16QrM=8A$KoB z-KRe?@xSvRD^>{0P%G(g8KmtwmYGASR+Ho<>F55V9Br(%1XM}KVdb5Jl~#=^t3~wI zOH@%^Vx{xS>;7<h6ss+WRXs*sSp%c%NPxBZ_@z+GSb5`T6-DEfRHIf=L0<X%`18<f z@Vs<MR#t*u#}a16U9eSDR8~}$QcVTdi>lVLqIUPns=m6Ohbqjjsww~~t3a!<EL>Sf zS{1zlm2WP2ekup5=zp%F6|KtN=qh?ct0|Oz-un2fDdwqf-MxxJ|GL)Xt11brzG7eX zPL^t$%&V%UtD;4s`V|G$E`h0XeL<BAVtT5m$g8b4spmiAVuY%CG^#3Us(#x|RTUgn zufnOSpQD<-@#>d6Y^Zw0PF1}h)$ZTfP)#XF_3M+WE4n)4-7D4A5LeewU*iUh>Pok& z-#}Dd|FO3saH~gDRcmDR+ov|3@m`+lHzifq?s7)^fU2u}uD(mC>Qy8)u5)@pI%v*p zds20UHPw__pYhJ7s_JhxMyu(_{?F4ExA9E&TW$2#U~kodT8g}1*d1LpwA#I}E4*sx z#H*p2sK&iI)vwg3rQf`|-lN{?>iTNkO;+p5pQ`ub)lj{DMw|0`qcv_9s(Q6WZ}mIY zUg+IKHB=tfR6SMWZlhYNsa~iG`xmU*s@C00HB?{Kx|``gS2I@4yPy8EHT>7OTdJ1E z%-S~uRKGy*MZ7_v&Z~dwzOnEO?j)#Fw^@C67rgj7(CSntUB9xlI(I79t5xkqzrXAZ z)U?%oPei!x>nrQKQ35)n>Q@n0--VcGpiAyWzH8}BwA0mpX=hE%9JaQJKeWob`nAQL ziGtxXzO(cUG!p-z)%2Z#Dg!$3Q0HZ=XL2;+OjHHdtG(I(2iGci2G`M^+3f*mc#h;u zE*tn`(1dtK`f8rfF&Y1vTsi1JlM6UOd`4Ov&*Tzf@IC|W)}THE6_NF6{jo*-8Q(~8 zX8I@3?EZ@X%K9qL=-!P#E(Mpk72xbOAe#~aG12LV5=f}wd?~L1dEqw`1kT<hQhE(Z z;Rcerl(*KrXu0A|wU!vIM*(c@JEZElU!wMv&$Vu#sOQSP+DfkKQfOP_PON%V-qyUK z7nk@(ph8%Q2CZwSNpq3w%xe9&U_)JAAQr%&ixk0e)iouYYH8rDb~$dLtkgQ#i>p{` zT*s}~yc7`>bO$9AFxn@S>9#9ZY^q-EW(Bsc>q_JxRP^FnA(7qi-lOH9tH`Zntv<!X zwQm@&LwB(f(SlGljT#9ZTZ8<tYe}?UjGNf%Qj#3Ro$AnljQiYh%5CaqT#W>st|fs9 z=^;bbLLpqOLyA$$FDrc^$Gq#f7_;VGGgYs^E))}VP;oD02wHeq?lawVB{8i-W%Tnu zmR?iYv;pnr5mmyis^TbW_ohD5B3W`znel>8x5sca9XB{hmMrq)#C5hL8D7`{__}T~ ztw*i)OL^OA7`o3@T=XGwJ*ZsEiz`{s?W%d95olgQRp2km1+Dd{6o0Yqbc~9zxQ;u6 zburCvR4%_SHi~O-L%59%3Q4$5TaTQ;WolvFkL?5@)(Z05TXD+Fm0fk-A1SMn90@_q z{sigk-PAY16!y9+L|xZZy|`-E>r&47;%R5E>yF;~RJhl3k#Ajk-m9t}wS;<I_kThg z{EMVAzOE~XarHXxhF9qx1zQJaC^I$V*0)mQPEsp+^{S|^^Uh<88Y|yFR`9aEtC1BW z5`cyxQlCSY;s*Tj!A*VasygbJx@uy)UKRS)u6Zj2uf98(>r=;%y%`#`)8L9OT=_S` z<&9CI8K>U+o$FHVU*9FrxCtl}!VM5&m0JjLO@M;?1`J$U#R6~NLGPAapi*&t18&rU zLU?GzvhSWQ$)7rJ9H@3Tbs>LVgnJ1Jys9hGabIf3^?yR?+u57$n98?mH{E$^ZT8Uk z{-P*zwlsYIrzr`qOIh?8XpaxnRxC{_ByDxTOo?hiF>TRiYkOr7hsIB4FKT*ZR$IX) zQwm-6LIbFhq(S2!Tt_wCyZ}|6<(Df!p<)mU`OZLrb$yE55%I)JpwXUrgC+n9^_?pA zU#LdyK`JdJiu}v8Y<sBocisk2C}R{xW^rl2F4f5GzKnutQ6!C+<hYW4Zl>?pab*S3 z)}yog`P|(>ykE#&G0gpc0cGKcrsq95UY9mFG;{yotyr9uUUsj8tyP*8O^QE*mfpz2 zf$l3Hh#1P=t6$H-C#(w0t;=wVm*DVfRP_=Msx#%+eS2J01j2&Cbh^%h-92Kr61E0) z$jmdjiN$ud1!}G>rP)khx>Y=w`K;n~Qq=x}6t7bOsY4Ar7viKn7xbRj0R7P`Yd@3w zs%(AiBx>2+DHQAC)mMqLdfy$&;{Tu5`~JM|wmM^l@hFby|307lu+Hk5hi<J2Cb~$3 zp>?#a{K9iLjGDa?GX46kC6MAs#^QEXXFcz9oW19-aP=TMJydEeUH<mHI<;?SvsCS~ zOU(X=wEhqA&H^Sha=5-ofOTMI5)ErnWwTRFGnp%Bb|zHiYc~seqHWhi?tHic=sGVn zgNnSfdZPISe56DAte$9>rf`-XUV1$l!lk$Fte$9B%5go;B|1wv&_fj~M|h}W<p>W| ztQMkN6)Qt{Wf?=bvh1v$Xs7ObrViRmrQ=yW(WGzMRdRNn)e~*qm;g1zXZ1vv-Xg%X zK4(4d9bgDA;lvQGA_mA=J<)}WIhZ<VFX41nPc*yy!=V!Tte)sHEyLNfdZI}wIPMWA z1>H=ov`f}7b<ke5>%X9$=+TJ;u5`skXo=C8$>9o$qj!vqCPp%8=tH-XWq1^Wp9!pQ z;%dq%+(5sR!xNd*uu#Au&45gmpj>=#n;O56uJmg2Kfrx>J2T0>*+hnI+@m|)9M|FT zJNg`em*9T9@mp@r(%piI5xQ;_;VA&@E9Q!TDHk4Babu<gF6jC^*KK+BWq5$UR9Eax zdE8Ntpz&m0hXTXz*|o|QFqQ7)o0yu)jU~p1N4(q=kh?2mJ-ot2;v>lnI2JPf#lQM* zdbp(SOpl@#QQct@hE*8?x#|VRX=8Ntb0UfB()S9mx+*E`Il7J7s<YGC<jfwos`u$E zxkr7S;1?fqX*Qjm#F3G#8<?d_uw7)ib+|zxJx(`MbD;o0F~ra=U$EoegemLZEEW+P zkz(7#95J*JDAGL1i;=fc<>CUE5nMp*3WqD1a_ffExEaAInR4ChO8^k%NbOE%U^r-< z7i_%;U6%)}yBy}>)Prh6xx-#J$hz(=0f96<mL8_txacN}9BvSB#`I=P3?S!Ruw_?Y z-R^qUb#K_v)4hIuXP*n)-f3Cab@y7v?aN3c<gmfys*!Z&1|vO5+ldBJ<2Q`vM(BFp ztEP6`Bvhi|fvHMDth?9OBw1ITA~VCoSS>JFCJw6dp+aAkfQy8xBvx&zLBs1|4I<Rv z>J+1y>iFT&s`$|y8jBhfJF!kvm4q^oDqK|}wEk7`qq*Va@K~w_%?^a6dQm}_qy~>V zisWdH#i<4(emh`IBHS5Ui-w(hszHRdpcVzBL5<Qonw!eu2HF~oCMIeSptT)M*WyCm zks5q<?x`J^owO6D7N2CcdJ!GXjpFJ;h_Gtn0YsCz(TQ4tu2s@UbG++X!>`%}b;pjW z>a`y};p)w*{#f_DFq*4v;a-sO)CR2UUANBN24LZ5!-fs*?OlERj+gfK?aM~)Y83wc zf26m*szHGEd;VNCf^L0ocgnH~SHm!3TkPLuZNgQondlg_K?h*C*S1){qR{3?D6W>3 zptM;Z(l!4ZUx!b?7<!!>7}MpbWGI8LYj1|rU*NqJ@3lh1O5zlF;|;+Z?6&AiwC}r8 z1#7kD>y5%SD}^0`a1vK)2*Pc9g~G3q9?nc<r$%$_YX&ZBk4@*&6X{zpuxSrWO-!f9 zaXXYa4AWKVk=yp35*8N)sQMR2amCbCot^J)5cYA1GpUe*LQ?}JmiuugQzKAK4U|ys zhvK~K>MmrC<Kb;N^0C_igwf8&b?ZUFP?V2v5S~Up23{)&e`fJ^297`!v@7gPwrGS3 z`S_L+I?BhZXx*}7V$yaRgW*S@TYnCRPy)2Kb#5=EdmrG}faaSu=w5@=`Cp*<&AFT( zC6*VzU4Z+RaT@!}=rSY8T+)UJ!u?=y3+P^X9*4EzM-<}XRV8#Q0Ds7$v0aO8q9@(4 zI_N0)k9pCRq#ybFJ<$Chi?&jHF9F?eO89xD3+_~+OO;%Y7hMl1uBe0VTF@my_m>uJ zrSM&i+m}8Knjf;N%Bz@{zrR6Q`7_kR_q>7!u^T^LbbA1Q|EmOH<wcwh>^<qe0{GRS z`He-l#HQQhE(etFSH2n_$0N3NidRj$=_o(m1Uk*4C4U)R3BOf<@2r#GpMdV}8vHuI z@4tiQ5sQxMQKj&G6Ey$320x0&?<^V^*;9$%xvvp~m*J(SQhX_SyDS<;h)*ScG0?rG z20sel-a7fsf$lwZ@cUGq{5}V|<2CqE{{Ey+e$Rq#31lukh4d?tFD<}bV$m={d@9M8 zwRO-@Ip0`Dhw@zFFNxc0Jm}D5JfHUXPr&X?&!atd^vhpJb1bO&8#-FHs<S_9SIuWt z^W3h-RP+6hBT!G^6?_K+@r6@M^Pvuyw)+ka#@C))_~Fw0)-|w?s^$$HoebUCby%H! zxIJ<7m2ecs+w5RGdrO<3nhm=7sBYdztW|SQr)qvjdgww}au>^{zvWQhJAc$G`#$Aw zlV%ThNWXq!;kjn>$ifq^Z8~|n$sA~r%yVatv@bljbncPd<%^HxTBL_4BTlcCC}903 zXI@7E|1t|S3l<NK8Cx;C(7y2O(*AGc{#i1Qoc_^nxT2zC1yIe8ceKfQy`z20R%r{8 z0Re05`Z+=e#F#pFc&24ux#Y?3L3*g>Ar|<#Mc@8ou*>~on{W2>Fe!6~b4#Sf6Q`HR zz6V1$9ilQj+81h;eD7V5?pb*HaeQ9&*z6A*XO95(sgoS=$m|bZGrO?6=^IZ!ZiZT3 z1#9E%LgU(n*(VzNPiB@KqJsbA4)VC^efPucd(hu7x^Sw+ckqPo!N%n$@{w_6|0B6q z0p9F;FuY{p2QABi@i#F8KBt$Ht>DBDH~q1e?Eg^BK#Q3jm(5@3=DY6$XT9klc`$qI zoP~dF%4es22e)oNHhU*P4d#*j;F#}I$C?)ULoL3$cP=h2s`GNkm~4JcL7wO3jy0P3 zD5YY%mG&ppd|;0WlDWgaxsQOy+|#)?nSn9gT+q$0YE8#f^Q5-++j{>~sxS19>fB?w z)zUpnwZ#Q(@tAZ#P=^E4dedRO|Iy47>f*xU*Jh5Y=Im48qs~V<kBcox5F!89@5UFw zjOXutFHFY++q1X>(hQ8FG*bC&fQM8t1Koh-2d^RXuHJk=GzZ6kXF;Vfo?dc@x@1&h z;;K2`u?@whQ+jLStw*neKS7|Hh2O#yVJ6kgQwcb<4<B`Qq1o5g;9J?~Yt!0%E5mKR zHmTjW(%%kyC+wZDi?EBZ$6=4dz8&`M_?=dpPO42OV0+5fcCK&bGS!sY)V#mVlvd~c ztGf;#g%8i`X+~eH6<vx~yb(QyM(SJervb)Z+roY+9gBDu%3*m1W)Uy_z7$V0?rUS= zf1QBeM!eLCr)+peI3Gr`w>B;nUV-MW758Jl0#RsfTqe9?67g+bfwxU~#aJ<<#BVj~ z`zzq~{N|P-4Rv4e&~0PH_xxt!+roIYHm<-g@18Y7SlIYddYd1IzZY&epVik89~o~D zuZlN}SH~O08y8v{2JjBz9fExeez)QGdb~Hl{8s#K$GZdO5xgn9qj+}$Hioc_<DJHv z!@CFYTk*ROxczwV!g~Puevh!a?Hv@X!qZ+by?6%dm^LtBx|*3NNzuUsjO^6ZHwf+c zQp?{UY{Qqs_Q7;9gWZR3KQrBrZ!a^Qz?ae<_oCvvoSCTlBNG8rk;dK3v<;>!nQ08B zPG*{hsf(FNWy_UZV~enrE7NI*E**iIO`x)nCamxOB&b;z<7N1z%tp;-CNx;8`R>PI zh7cXgORFK;{b_ma;jY8d;$b;2U37Hqb*QQR*Ikrtn)f#xH5+A9TMePOcvvw{O8pBr zFIUWONQbDNoo<uXF7!(mWm}Z_RSojI*dXW6m(0UQRWxV4&L;T%lq6`0Dem~)isr~_ z)Mj^f3bQ-cFj>`EY;1=>*Nh7x1tG*ts`;>*-`1k$ry)@Gtd{d?`(|lK+AM96wyNgO z(87tj`4IQzIRxSTs`(4m{Cd|B$$We*J||`0!Kaw-O4rZLlX-=;fpg#U9XN@YNYva3 z*EG)DsLw0vLx*6|%&#+YbF-?N5dL>ln$11to4X&Ra{di+evKJyQO$4X@Ax<{oR;(T z&AkmY#5;#yW$x+QTj%3T^PABq_~y0%q?!kb+ia}md^vw}v+rPVbhIxxGSdu5v)ntm zCD$yUyK}{%cGlnqug?InqLCUVgibNP!rCWkKHi2v>W((*aWx<6l=~)B-`u}}zntHR z{!Db_Ar+R<yxIuM&}dV1`)D4mZ8W^_gQa=3840sHI*L%vG|A>K5f*(E-GfH+2oR@a z6KVG?7P;BO?X#y2=L0L?bUU2(FWi2CVm{26=OZf^O+L_UM$i{H_-*MBdCGu#e&QK5 zf7?@Fz|)zrY1w!C4aUrh<H|FW6Pe_woKO80Y5$Z}ewD6Ax*p>!Sx#Ld_f7TYT2(V7 zswPUoyAFW+J;AZwU^=`0xI$O@B2^1HrqAEdA(}@t^DUj4neElgKM^(aM^Zw1t8}Au z!;MFM4@T3z2M@13fu2b|)+U>~Tjajox$NJ|Yj@|U2q0ml`7I4B1Zw`S2f&`vb>=V3 zEjh(RTYo}r`m_51<rF5PP!3$NR5d?H#D(HLZy>{tspyHVQRY`PBQe36YDT-0Hwqb* zjW?nj@^olLBeHR|I!`@!bT>oox!213cdoDjyn?Gfd4X_Gu7n#W+9!wFPyd9P_$_#w zg&BMmX8I7mo0;jgD1*Eca63#ggMGMQI#@8BhKZz7v+y4<Y0UHn$f90mx)~<U`Ta2Y z8SK+A1(@lZFmXSA1(V5OOOQ?PWTq7`y@#1PV0tezQL3!ojQ*-!t>?!(zN6mpvs1vT zCQpqnNCD+S)x6_A2K?;(_>s+j0q}k15mfp2D_x6SNA&z>seYkAtUc287}b0^pX*q| zQXF+(?r5h@+*_BTi-=BNhdNJEvRHmj5>^Cuep}-q<9hVVkX@sFp!ChX8ereSp^i%n zrLDlP)#7)BC%>l<fkRQGm-$Vb-4(vMFC$%v-BrGWGUM5FQt=)9H4ACi_ljZtJGdsg zPNKVtB6hMQHtz<79VV)|qqEPn?Oyf}Qdf8~=fL?6K92gG8?b3V+p-VBq5nI%*ZU40 zo?ju(H_xNrK&;gJ)P_(m^M*T``SR&k0Z!@3ptAY)UU}`?MQQeUv)uHI&5>kD?k;6+ zF?R<f!Pj;z>}GxJx1pfsTa~$=`wpCf53-3Ik^6sf>#~QCZo-o%0aH!meUu~ZOak)= z4t2Dn0#bHT4fzD90`twg;g>YO>TX7YEVr}t?Lg1RSJ)x3!DEc~*AbfUbEaQL91g1{ zV=I006h$g;iEuB}zK>Ii%!Ybfm~+*9Cof+A#JRB&@Z`^t)SrtZgGc*r=s?!~FW4)T zlpg~HDf7j$f?@~wC<yv){GxB}n%^%j9@0@rM*EbbzPT&OdJ2Jo^|){DHDq1Rv5)xX ze6Y&-YZ1-=Ju3I#_9fr!?|ui!{Eh~A_OXhdZGmT|@~J-M%Q@eu)b#z){u{rP`RbDk zaBFTpXs2bdEMCe(|Lckjshax^8cTc!6*MWv!KM>5675F8{<pbDeD8c1@<1_<E9Otp zgf;S<{DvbXsrDTK4V8r6ik{q0QpK1B!~BI5(i;!@9{R;=o4%7bX2BAb?8bMM@SJ2k zmH$(br2ztj`#%uwf2Ug5bb^BW3#2cCYlU@w)i+DnUdY+rU6Jk6U|<?1g>>S#$Pe>2 z7F4<E*}P#=^i5|uqS!wS7s#@IDq)EZKrt7n8-l?81cCh#a{O@~*mgjr`K@hW>z`kB zq$H^0obO+j@GUZpfZ*2(3G02nxx>F%T%5hNqqhas4iIzmN5HjdsH3}t>&rRUb1HKE z54e{5FP(X7?fU&Fd1RcUn*X%c_*9c|FpnM<t8AvSoOiS=dr27Xf;-kFZCHx2F9O8U zX0+*XN*<Iy-@&7D|AOxwr%*-gEH-a^*Qm63tm%aGMbHb#@nekUd``23iZ2Mh)N}%< zF9CJiGTB5qeo{esQ_Nq<eb@T-|HX62(f$p-`3*=d4EiB^zQ)4_!9`7yaiQAv6$Vkw z|F5GHK~wK|_!RuJdn1Xr-guPe-ToABGc7*}Iy2ph?<LH%AKyV{`a66%_A4-TFxa>7 z<=7RJ5e!D&M42fF(*QHklnXay3a0lJO#c%mgV9mpqs5wLVI@j7<QYueRK}Sp3KQo% z3KQpdN5S;pVd8E-0~7CTd><z6_CH{HJ>&8_n0T0XKvrDJU^l_UVSf%2ckyYM-oUV* zD`0<Lz^;Z^U&FBNFmbm7FmboLVB&7G1?*oHut#9xZXYdRe_O!53=JlC`)Zgt=OLIl z=Lwj&+nECP69w#1m@Z?X`f>sL3z!rJy9$jRPnSnw;-j4J!?cZI*^o&^U!~2Ox@1$9 zs`<C~0ZkK`bKlDa)cJewC+qAR1uAZNvRDP|Uf%cQB~YFH2wCCon|7g8XFo<Q7eJWd zRM7(W@(~wiRfOyCHnUD1A939PJ2zRO!i*vXZM7A&=ggHf#+rX~GsFV(zw75Dyyl2M z?@{R{Cb>8cLy9Ti!6xYtP0oCF@%L!Lq_u}f=N5A390Ei*ecd6N!hDF&F<vmQz6KrK zzCd&42cvRd)698l{;&4|pa1Iv_&yzw8)i<JFLy9M-yCe#=kK~7SQ~0ZavYIFOhq2k z4iNBM?1AZWyfn3B=kW(%;@D5a6vx{vH29VZzL9eTUpIc&FP{cb*h3%dp*(B?9nZ}s zHr9R%gEg#b5mt@h9Xdx?1=p+Aw=vgWv0Ty*l?Cpan_6H`GT19FUoKqKeW`F!!$m^d zQ>~{~oLqLeW%``$ODR}*PU5`??^e915_o9I%zmiz&-ro_@!iQ_4ZdbqT&}g9;J24i zP+Yi)Tum@o!zC+(OLA?(B_lrJlI~XFlFUU<z4FxRlP^EKiiL-k_3VeHKDgi9L|n2A z*08KuSca5Xwtgu~36d4|LsZ-qH_;bM@PL)Nq9tPcSq=kt#ZBbu?F`m%VT*9#&~o9z z?q$M-0~efHIo-A$2!R%k?T030xNB}A*HnI+gn`t~nek*sAXU!oT$e913zk`Y3D^6b zOXQTyO%0T85YxiUfj@nSn_yvOkbawlcDznkl%q`zly2nex{r0eyy$8bAoMhsxq{Gw zD@rd)vQrJ$zpLo#_2dN4k}_9R2%8#qF{~hb{*JGGsOYNOf-dE*97|B=Fjv&6YlCU! z!goGuk>V$485s>TzZqZ3D-LlkWf8QgVFjZ?TeNBZ#^Q8v+JX{Iqu_LPuFKW0zta4@ zqN{n!716j|En}_-PS2>^^+?gx-*TWpG;rlu%xC44g^*J9!28-Uz-+LnsZP_goTU$$ zeuS4Q7{!$6(LcjWwX>KSGy-_W1)%|c8{Q&K4{WLnLZgZ?7le8U2V4-E9=Oj1`3u+{ zC_tR?qBL)6xCCE%e(=E6$UzXYhg{IJLTE23nKWD3)Ihb5o~!=(&_5JieZg{dUYRRa zTN_A%({sh^euGT{7P0V{WoTut2>%m6;z+z=YCHo7O}TQ2GZsG3H#Lw<q}2Y+x!>PW z<a`c+@c0;Krz<M6O${Ui&xh&o{tJ|%tCv}>+R9wfL~~OENo}eZ&;9$g8@MYcXX4k? zu!p{Qr8@?{R!(yPqoG!XYU~F;updPh5fre)e;BH(tfw6@%H}dqLh6K&`4TIH0z$}* zSC&EESO(F`Ae+k|<7JRNWsrNyAb(W`VO<0kY&(R<%4oh<2Kl!#$Wlr~7oS&`LAuHy zY<3Z@&SyDD&S}U@&jkg@hy__$fZS5X$8<ria%>bK8Qj!BrHG!7-4Xlw`7AHV_7Te! zqY<3jP+kTsmvuz)`g{KV?L}9gwOlb8!RZ%7KU@(vdhQMk|LTH*UthCaF&dX&7lO9v z*PelMuPnNv=?r=pjmxjqfHpOB;M;)r<-h*r=T{c|de(BqXk31wGCTab^iAJbD7w0k znle0$#^u*50WC`YTYvDu5Bdszbz80&jmxiB6<kqpVp8bcMOR_V6{B(aMg6WO^vn2j zceGh*EBKYLTrnD#U$o1nn1(xV`ohYhs~O7`qjC8~i%Z3Lz5c6jetlEHuX`+4jK<{` zjVOzLNhkl|siLb7Tdo+5%dhr=D;NawtGVFUXDwHZ#^u+=1y_`YPyB=8aP^qwiqW|I zdL46Rm%|VI)jw}rQt<0vELV)i<<})HzdF}{^7lno4J7{XFdA3;-T`P+1GW3~+}iWu zuXFiMwhJv+MB{GXUk^wz<&&RpM5Attlpf0!(YRe*%3N7!;V-5yN71)kz1ad2joZ~5 zm@8_J=y~cxLmw!*qUl?Dh=y}|kIkMzJ^~vS0TXm20}4~eu^+c+A4t6oYQs1{pGuB! zt)6Vb5a&a7LeJG$Dv3ihHpD(*MThnHW*qy_RaUTcCf9d`MD0sIda;K$7>UcOXfI!K zmC=^B6gDd~c1T>uSwJ>%ixv9BXgW1Mk|nyyR5@%q)wR9?G>g=N)<XvaC{fL1Gs6iS zbg2Nv2K&rjFC2E1;?ScTiS6ViUK50!nBr&kY}+t&?k2FNo7y83C>U&#GyoMrbo7*+ zr*eZ>mNVtPr0%z9BQ=qv843Ce<@9dPlYh|AH9kHyY~$?He|AwAPiJw!kSTm7ModpF zG#N4_U97Yvj1(@I!TC@+p|=-D9a32;iZ~IPOAjZ<anz8bi>ki{Q>k6dJ=YHA*5{>6 z;%r(lgTrVJ5@k<1R}RZ%lEY<S97{@JOMEFcR19t&9GlAIbj87U0Hr_33lF6yt)g3p zDs9_1Y7I;NQBp`urE+9^oDo79Q)p1dnKkSH4~(UTcL9L%G?Pi^_9li2kQhd?rBg!3 z%p{8DNQc{t4z{PX6j(~i{4XWtKqqNg;G9m%k(N`E8^uCnIVk~_lClz2O3Hx_Ql~U> z5WB#o<hHOXr7yr84jjVFLGFNB(rRNcsK))lSVXkO^e(;hhFJU7rfyk_tE#3#3qEE8 zT+TPd<A$pFRljxL4@Wvn0nh)dH?CuQ@9j^m-TLb{ZnVx_&~E)1wp)K7fbJUgqwsj` z*1v(q3eKm(Zhf<aj_uZW48<7>G$|KgTyX*Q&hT{MWxL@W16hJoL$(sVs*TjM!b8Dp z_t@2cJKz#%zG%@=Gv-A{P4qV{8W`E*Mb`<;_v)ad;pKAbzd0T+ei(xZtLvb<8Fa7l zqAN*18sz_J37yw2Uh1CTUk4ox4gS6kIvRw3sSY|y=Wlq?mE<q+`wr-SV$l}ztt7tG zae20kA9fj+@C#E95k2ED^*!+rf3N)b01DC(&?GKqWNcE%i;f2Bi=cVa>o{E@d?o%) z0DT>3zEFdXrmY?W&6}tXiKi03Yk<2BH1jp+20`~B(EQ4xt5iQ|SJ3Z4GxU1$wX(mI zUSpuiS#*{7b%XA9(EMEueode|X3@aN9<Ov>1m+RYouCSjhw|Ht?zdprihk;{wT!G{ z{{9SfcY<c}YEHML0>2M~?taktNdV!YaRKwUr2J8NzR98?I(oe78-+VlMpwQYo+kD7 zmeGl2yXL8$-&qG8`8!`mSMD$6?|aMW%Kas|c7GjoB<lZX9ds9f?u&KMQ9K?iqbrXG zrQdhT=*r_k)1yDEgO2$9tPVO#zyGL%j`%fDC2>4n<%RNhSsir5?`3t+QTSd{2OYIX zmzU9%%TwBU)d{*sFm*@|h1aWI&H%n~qageZUU~}ks6<ZEM8dZ$8b*kZ7r*_0|FRCc zn?Sd_R}fC&rKgg-B6<2Rpt-b<kyWIl$=y!SH1=~kN_VgD5t|!8^QRVFC4b)z#9xBu zHE-hls5~-$j>$Q~&}7b?77f|y5i6Vu`yl8(VbPL&WppL{s69VXC%?x*_v0G;s9ZHt zW9WD)g|8KKue4~Zg|D|xek$mO>fo2Dli!`7duI)PB=7&GPJW*O-Qha;{d1lCehRu@ z*5F6o=C)0a%z&{{eyjmqw?$hiKPbKfb@IC&bfY!+tpdOOb@ICpbRVt3kHUAPPJWMq z?%Or^QGNSWo&4HF)K9$hR7<}%ij1W2sgxgn&_(gmQ;pxa$VdvGO8j!5+h@^M;z#lQ zphW{Cdn)mJNJO6vFFlp`QGWbbB#PowiQmseEFa>frxHIZ&o7rS?!-$E$<s>wdO;&w zbk+FnuxJ>=D*SE%-CcF?`)Hl~J`cJRb@2OXo&0_ex@CSIi%RjO{8(er)QWE>=&q@Q z-}QC!+X1@C8vIBeyrWKj_k-?lO8I&8#~&@@SKj}lCD6y}priiKkILxE`<;}|PnOY@ z`%C?XU(`WI{paWEprd%K2;k#*y!w;0y!`4q=*ZtI>Y!@{-L-YlQTpj+be$sRqh89> zy$&r;FX(hHt@Mb9Qt@ekv9V~aU|QXTb$`MU`Pqkwdm4H>AF4u?9wc93jgDxD_Dtxh z+j}PT)a;xIeS01B&Qh`l^fVNz^iX`AMdgYTd#O93ck;ig#9oV@rZt`JOX&$$iZ8W0 z-B8%6>K7gWs--8<JNeOWAc9qTO6l`;&{G=O5AD>hmi|;WY0AO*)S{;$aJ>)l|6`)B zH{6tmG~#a%+VLG?CMwHYnTbjf&4J)pDZVrmZeV-Ju3@Ha_)^chLD-HjQ8Wl+_(qs% z8sF=fX%D_pX1WhwKQrBrufj|p$CpyBL3jXPYK9twL-<m|)gT<km-dh}2q*A;1v8z* zm%6zP!sGb9mYJTyw}Y9U!Iv6GUVz@fOf9fnz)Wp0UCvCaVQOclc9^bYrZq5iGLs0? zPG*{hi6$Q!g!^Hl>E8z7BuvxHM1?%dOr0?8W~S{h?PaES!*nY%9fs-c%=8pYcQR8u z3h*2=#bG+YO#5Imndt$T-pNd-V0sTTwV}wqmzmmOx}KRtnBK=sahPsorfHb|oSF8) zw4Ismhv@^%^Z-o5%!I?PYv^dfduR)rVV+dYRYw$a0SXJA0A64^E7lx+6^uvmIyFKR z_iuN7PsOo0^Vz=li(qp5Rb5Z3=H0{(%$DBM*sBOL*jxTp#t_HFUcY!$ojuml|CdC4 z>$l(q-$Cx)T&<e#iW7@rZ2MlZz}%kxHkG=+W8v6?@89zfnRh&n%sA?6yMqct*I}k_ zAWts1%7Hsrd4Se|U;5heR1SVgst1nx4&FgUVKm<eT>>OLgrn*m3#(u_w2$1rXo?G< z%mB&{{7`<NwZms9KaimOz~5;~V%{&pbEc5)%8@j-T1*#i2*t^49M2{#s!kvs%@&*o zw}+sEuDyGG*;(z25e0r$`*Y01drMs72s;#@=5NIb$-?<acI<gtHNUIR{~hg+V+o>~ z=DXoqo4r)XH(LAf74uoi<Y)FQw0%}5KYJg`bFD=;Pq7Ts%_r3S?EM5~T0-_Lf09mh z*auq8XK0WAy@1R;?K@!N7sqD0o}N2=d&~UoOP{<20CScKNj}?~&o<`+ZP3bb9-Sn~ z2U^75Pd6j4a!Y4V0Mp`oXjjW}1c;=7eY!OtSq()S?R0?L4+R+%B!nZU-_y4Lv0U(t zD`#4uJwshQeEMJaJ=dOldf#(b=6<oSuRXV9U*DB8OMpB5k7Dn-nTv?YX&ewRshmMG z$ZBv@eG1OZ23F^@Yt(!e=O0)~9aj$1Xh1c!7AsX)I^am@69~Y^5poz$n6nR19F&uE zuCYxumH4c27#db?dkR<_ePpcE`OSw7^J~NkXSEm`o?gQUgl4wlu*N=k#SoggRGxo( zgRf28_V2#82e!fPJE)G0<|AX=coU2_apO3Q<J>q2<0Lmu!#K^285lFZgR@KF&wQ+L zG#|*pM)fA2T>;zfzE4B`3Fa}$ryR!-Zn)a7uE;f=8zJM<VoQ6jc{bA0Zp{7IxBo!| zQ8Q<dMmIiiT=_iq-wVf;L&NFG8P$xg#<{cy*y(KP3lMNTE?tjNG;__@d}QWU(>w*A z4pFOZJ~x_IJ`b%nBHk<TzI^eKnYVzK;+G|y_`dB6VAyhc10d^i$#Fnt2(tQg2O$0! zX!4r@Xg$4(N;d@}Ko0W?QMFMKX|+OQB{d!Uo;HtHJoZhKb~hn({Fuuz*qT|BIl*Am zTzrYa^7x))CSpuYNwYvSS!T-M`+0`_EKHPI&1}>07ntdT2<pSk)PeNjCIr>D|6UN6 zo$vYVeISKa9+V7<Bcw25wS+}SHSZ<aSUk;g?<sCo^PeV!O+>#S0+jGJl+`H)C5R0r zsmf^y&!PEGbLhR>5CDg7Op-GWgs?gACW3q;ybW#RP5~vn4P9M;65fVBL+QZy65fUi z1zN(}P+ob-H^Or$V$V3-%c`bzya<WahUDga31QO`H2>)q!sW9NE!p<cvrp@g5(n|} zb3jL!X$!vGG+r>>SuovKFnzLMqKxJ)zFRO+8gm%cOK!TTU|L@=sRh$p3ntPW!Cg?9 zv5$k1CM$Iw$H1-fVx^M~Kt3j#k25<Ry1KzW+4X9K;UDlev%b<7nW?N4u46i~G!adS z#qpho8YwmTSy!|Jm#OBT5lA=h+y@>K#MWxx%Fyax!lbT2;~ZNfnQCV~hLE|BmQet> zw={VAEZ#zgq<GBD4uISL7sLCD3f@!y@euP~9OQbzpa}&P?*NbLpopHt$ARZ50C5I! z9TB;0c38xDyNBD~!cJ;_opGVQC$I80KQLp0U+<Il%&dZv0?s+UN6p_$b?h|C9;@ao z3$2u9d1n$@HV;E_3HOGU){f&vTG@(E#&G&>8YOs7J5%TdUQep#GKtijC^#jXr~0Uy zzl83qcf%oZLLW>sZ{a8SRdb&Fu!@LgZV@fW?AKak^C<LQEpFX|5K!yB07BLLQ=<2^ z`O)uDp!6v$`c@jE8II?TxEUVG8$+gldtQOsr#tT>!j*IEr|lj}L*L4I`a$RI&O_{X z<sAKj+Zecwf!iK%+e7#R7M_01J1OY-Ir^G+QkOYDM_=>K!^})y)x7fr{p9D^k9p@w zZlfRb&d2f1&(XKEgKFN|p<2l+z4d4S6uc`+gPm{SrIgM;1H+Se*&vztLnv5<g=Ma* zgMeyr&LJ8DojzAJ5uiXX>v^M)v;oN53fkYp+X_@>s&}N|!qQixI(1s03-L=dtEh<5 z{B=vwtewJ{&BZNav(GHOZN>2*O<W02eh44a_?h{gxkvUk{`z}34Eht4zy_iJpL223 zIAzrr)A%utzbmJn05!;;Aj^*}%Tr`|!m|8|EWBGdd)v<h^K0fw<Pr`@>nEU`Zu759 z<y8J%(<oN?yGQUfl^^HtrV|~e@<jgbF=lvb;hDCD=i2h`+r!9m_~OX(GsPp%Xpm8& zMLOh6L&Liu)|%Nc<{{Xc*>H@TZiAhh?kSjPfW%?{3e$J-Qhqp9gv|a7hdb|Jy;bw3 zHk~TNqmW{1et!oQqQwEA`_=y6WmX&y@HG4wQquRJZ(ce%`^+-moqr9geb2tdxBtU1 zsPmzfYX6tAms$BN9ip7H+eGAdn>@d#QOSRSx;RhXNR7&T$me!JLt&>2>G)kl-3;)P zYq^W_-7Z#oyI?u~ED{tUr@%e=bC`8=xV`IXeg1O~03sgvOvgU_BK$M2MMxT?e?Van zj_qgA1~uO#=l`bTK2VU}jxR3`s<Qb6QidSV&4_e(*H3ZQouPWwzO}wtI*X&3f5w_< z9A@v*On!77FlvBd)$$J(8fcg~G_;NS=u4p4X7MD`QnbJ00Q^w$pL_zoC`dD=u}FcQ zJo771cOd8g`s2XUn5LbTMJ<09aW%O+l0m<NRh{Q{C^T3Kx12}UVeoLdq%b&K9wnEs zQ~s;-CMA>s8EQf#{^MdBqEA61Fa8{aviVbJB)R<xD@Ap#bVvGZ3uq*!t4CVg8kZIy zR{DQ(>kp(a!Ygu<{|skOiON&%P0ZH|RP(ugZycF{N*R9><?^fc-O`YndD*^O8b@b* z_i*(g<o6=@?0e&lzWt4G2epT@PjsR<W?m)s@+_U%z;Z?G%dYm#{R+gV?=7ILyaa)4 zo+AIv3)KGSeEa_vWa@ml5n)jKzv`Ra&-}Q0=IwId->~4`Hlr>chch+bzli3JGW`9Z zVSZ3*$>v&hewGqUH;>C}{|yNMMMuiK(XbegW88!aFpeS7;~>z6za^U=wGyHEBoatE zfMW`>$;+FZ=eQ@oi}F<n_yx9;Cy!FGn?2ri`dm5xC#x||TRd*n6C?-9MgQq0_y@t! z>(G+$mZM`p?gd3No3i-~Y|U)K<W>gzIP4tu6_{veM>CTd97Za+jxZOrhnAbZ0n-A5 zEl0+3({`A40^Tfq0j7UqSQ6arZn4vjL;3fEKsR^5cvBnAh(KRt4&si+<Db|A78sVV z#*aGx(Bt@lZkMqGa>sTilc;d`X0uEdwQyOK-N>>WgKwJRnEjL0f^Y765TLjmply?w zje$m<wae9oXB$;0-<r;wM0k2^-?P{F=GHKZFLynSoMjpMS`I+@(9M3m|98GwQp=*6 zP5XMUo@rh@c6!Oa-fMHO=EaQr_A|tX*{MipzIFQC{HMtWJ>O3U=%-nMISiWFw^P_2 zWYkO1@dgcQm}Y);v5m_1hszLO<A^**fc7C0hmevS{x$~xGW7Vc(%hx?|A%k3lYGAT z){g0Y*QTgG1+DsYd&4B^)9sBTuKGmPXy3Ka$MGy<jB3ftH%&b7$oXK}ckR`_IU3@D z9nugvK+0WY^AZ(0Iw6+U{!}-QX;1+=uXi*^i(BFpoo|9fGlOe%DAvSqyIGKqL8;=t zYp<Gl9lB9#EQMv7xvK36a7K2`ER!)$Gj<GljUFaR2pv8!`OA{<HZU~1kP7fpTKg-c zn>-(dcbl1aBf#qB2zjNfkrt1K&E|G(_TiRe%}bFJfXn@#qZGgGd@HL=mR@)MBdXNC zTRXNx>l?%S_P>k;ybwawJl_f+mpX`3r-67uL6+HKpaX;K*vf+N14IM91FNig2uzSd zZi2&rsl!ktYx9uJ6(2Xu<|iIPB0CsSLsMXc(g#MI&h~3&FEqM!>Skz-`H$Qaq&`o0 z(iT%hsm+Edwjil^GR;Ufl0vT{bYff4Wrqv70?5@xm*<>rVJc`zzF?@bhx*$NA#;>k z1zzi4i^y<Eum&bRg}G3GJyL+N;gnN4uz9)ds_Adn%}m>D>Tx8=FO;qyGYO$QrRQfb zv-Dm0KuYDZK<hu|o4o|-a}OrB4x`zo4$0j4g$mrYh@Roaw|xtm3+24AP4DaS&5}|z z9UU<Ry#cdd+P4X937vq23DSV(r&;k3dEx&CFsS<4+T-ft3HANz+9T>Wo>AG{)c#KZ zCz}dHy#eieN}M&bviWtE^Hkz^6KxuCOc7!tV~*6l=<~)Y*+gS<65bqB)CLF%6!`Xr z#ldY9to&`?GH*L|daLAn@EqQ@Wn=qpQz16`Sx~4m!n{AQ*0x(g?Pc~0h>2vL(4o9) z?W6r)_ubV5_<XEEZGx0t4y{t#*j&}mkz3-^#~X6X=VOcheb-zp_~d6vlkvBJ=z2_n z-p92U<Tsy`^P9g<;QIkK%->4pBMK&3UbcvNnR%oY{cZ#5$!UC`VTfiBwAtUU@V#RI z0N;bxK@+jG<hVjK!om-mn@-B+qxsE`OA9|}mSz`L$oY3Z04GZSH+=87o>(9qS^BZW zB<+9gl)Uo1e>tmzNK7a-BVQ;%Nz}>a=I@&bCn6^If0CH_-a+F`efY-5(WO%6zIXc$ zjKRr?I(y`mP};c&<;cH>I%HCg+-Uv!8<;`rf7EyPV{k2-EL_kKy>>zFKjC{9O$E$L zO&W^X?2)$FQ@@p(7NFh`T#f#txBity?<xvVlSaNO=22<kRI{|Wz#=Bi9$rC_Ye%90 zE0jfR=0-b8^ID@7rQ1+#S=vhXoCC#5(t+kyXh&W=qAear9`*l|@6O>uf0PP<-q)0E zr6hTBHB>ICi%qAOvvbWDf?}SS$`dKTF`m*a6_uo6>3#$Tb$YwAPX7?F1-#9|)d(v$ z(NS=2x(lWw42uJ6S)2tFqEk4xhQntw<Kt0w3N1O29^cE1TT|(sV>wF;h%~u#JSC*F z!StTgNIabz9uqdxjdkPc$rO&XrRiW{5i*49x^_*baBpOAkd^?1AXW<)(|8isu@ykf zFvxBL+M53V$$J~{D5~>scs5x=fWRymG$_g{QPKDj0X1={>?FI%EZKyV@2W_U1VQ<T z$u5E-CT^k($MvIrx3#6UTH3#l)vAbKH6aM7D2P^3|81jfl^CnhT10By=Xc*{W_C84 zNcue2|9#)<dgn@Z?zzwJzR#KSeeQGSoZ83|#+8(;T+Kw~LVQcNS_zs*D=MY<Y7k%? zM$)LzxmDN#ws&tO{%HP2ir3~(sB@zW)9A?k7dC;suA{+|#aw$K2T>7@w^B(#17!_m zP|u)eLKz`Y{4}|#t&iXrcDIedvwT>*M*T)(8)YZX4+d+YM)W#hk&taj)h%TGKyi@! zzlz;S&}@L3wk?G8nGtmt%Ys(AsBewt2p&`4G+^+};8_N)%GJQ`*tSl9(A=^Wg8ER9 z#8Vptj5viCylTnY4IZ8-+ro5GgzC5mk9qR329Gs()bXgcb^xl0LqYMaCcX_6M?X<- z`w>``;=@YusoC<QM|>Fi7Y7Y=fbpO}GGyeqq5Ck}M0eO|-30eajF75g+x&1<)Z56& z04(_uT7(G$_wEq36h&=nv_1|n#~uW(2@4j+He~_dlO((LB}xgo2WVnfDE49obq;(t ze4^gkhz%A+aJTW~C(wXo=)uj1(FiP=yn<tu%E=Ze!%k$BBb-IWd>fd5C>*9oz1}U? z&EZ2pkhCo;;jQmm6RC#3(tHW^)`heyDW*5N=79jPs~Y!Wy!5O1ck>K$8&fyq_hqJj zjbG}xyOpcqvut>GfRYU_?cpJLlu)lRj`kvxJTgy6+-jR=8*VtT=qJQWygK$;Hy<%H zr0xm06Kqb!lH_9>G64;Wj943f@vvLo_A!sfK;V(2QHuOhT21|kOFM>w@e=;sJn2m% zGPhEIUrAkLQ%zrcuRT`Z;<^Bt7EE1zXm?}Q79u+^xyV6>CG}lRRHOT{FDzb)9T`Rw zvTtaKYRstRbzcH=Yj&(FBXR=fRR+br&WH>N#d$Kd+XG@PqM>^*2oH4XvD$nuf*Z)M zj+cCez69;8SRE2{vH<e#s_evFP4KxpD{<F)3Jms&zf^|73*$;QX@H>=*>MO=q*MeG zX!T?Jh|kQpSPhz)^$up9#VkZ%EaU-``3lDu6$524{$IhrWow(XU)xedBH|sHGHr55 zgz5(<nGi@DC^C4IAY*<M++-|se~b@6pz&B<az9z@5gofC4+Rbf1ayTmdn{W~gC}fc zP*;pPRx9ZZgs*98nc7O`eb`mT=+r^`IX{p=Ptmpvrw4m$Gqsh*+OosNzZjDj=;GhH z@6*O$)6}b@r$EafXlWc{Tb2f;Xo#F7rDb=m+tLO-uwH%Junj+ra@_B?s?WsCdhE_v zm>JC^&y0eu-$1HqDn>Z>ka)ZtBOC;qQ`9l+mp&MPh=PL8;=x4haPGAYc=g8R;rRJr zqjtNv5|f-~pph;bOoN=g0r59ZiLkFTItqI}hm!3AGQcRz-L|0(4aIgA;`oCbPVN4E zrN9=+Z=lo7V$yUlwj24E24)n3DCT`>WYo1D4HNP+Z`ds7?XJdl&5eG?cFhYqE=Q<t zLb|w>WuWAEej}(>=20q1-V{97;>oSh_jFG(wG<TPS+_z{D$+F$ib}AR<C>oRC7vk5 zMKLJ2lj;SS@@0dFUG(UgQWw+6yhHh=dZP0ru(so0PG-O~kDNA}j@sbPzc(bb>{y)_ zafw`Zq!Lz?No{nJ$2$p6?4ga2Ln)JbiHixYZB*CnjBz+P(y%FK&`V9{ZE%R!j|57* z<#dUz*2Q#df7F23Dcvf)@j0JEEcmif>9umGnC)%dAJy$gsXBV09=p-2h-<UOThT?L z9Lcj+&m3$#xzP>^Y=|*>d#AsVl}+0?n9<|W`jab0UJS5a3Et7r3jRg%tFcf8H6zZR znBM`bHX_E{9upX;8zFlP!RMib+$+$0_2_*vD41O56j>Cbfa#f-!>_;=;KNYsdb;nO z2_AKIF++>rKQPsd-&IIsw?g?`rvA@By~VDSU!=s}K)u1dETCm_(zIL~^Qu6-$&_nc zjxsKCtTL{4v@&jTt}<?aUeB?ex%)=7d8z?W_^VbTa8V;Cx0I7qHlF{;JXc<pl8221 z^RNM4-o)H`FqH@4hjmQ>Atfb6l7C^I+yHN|y=~sbmI&@s8R51mlA>xA)AoIATu5<b zT_qr-f081}&zRSj<kglK?m<S8pOPZUe=^UNm7!!!%qYZzLT_PRItb~Pq)6gl%yUXm zT3S~H2q_^cl5iom@LpqZE=FXCGNu;iWMFH>F^JDG6GwNFB$a#XssbT3NQyKJmKq$P zoNU2ypJhu(iX?_hiP720=-Q$9#&3u+dLlMstRKcHPgX|jqHc`zPf{d(Oqzd`E3E4k z5K=-?Br!%xjLlKT)_Rn&vs7#XIYJrRVCOi_H~Ss_Qm093krZj64d4({j`wt?26e)u zgrrE~)HI2!z_qT|Ku8Hmkwk%%7&i=MVlI3P_qk0aeW7Sw`#?x7k|HhVrTH7R;JCkT zOGt_&E@X)@*oj?5%%}~?O)-n$>cRgzEQKG1?CjQc2?*)Cq(~PHEf7y5hbSYj7~V6i zbI88IZG-CFHJQ~i4=c(yXxXf5J_xBnQlz0&YRDamEk0G+;xlcl&QBZ~YHSUXA`Ky_ z;W%tliMr*u-=%Ayub{1K5eOLuNs)%>QUj&-3>oeg3y%8%TS8JKK|?LPH&$c0sqo`E zP2Tu-7=EQ6k|K#q&G+nkOVf1@=@GWHq)2)pOP{l1B~FW8>|7j2``|R<2y>iqZ11@l zF^_RpPCdDL=Gn9GL_=a4Eh{t46T<D`Z;;Otw;w|@r-v6tmaaI@=8#xmDV<TevSE#K z^@^3(uK0iSuukVTla!2^E?Pl93DnkE|Dp*_^P<|6F2ZD_Y#2!{nJ!8nM55BM_fN-5 z3J=O?`oZN^ypVM6wg68cMd?BXu<+U{Bm>FQH9_7G5R#$`pTH`c@XsMk(UV17d+V%s zYhHgOsb>b<=*qJ7(Bj)I_)phE3&Jv8h4`iG^#66n!K9uh=Fw7bZ?CsNpdmHfbkF|B ztecZk_gLICsUa*yA*bsX1$V!cl=?5pREDHU4TVdl>sr%&^56HMYv3}Uwww2%EJY9R z;=c|5@=ZY~pW?sA<~Y-xOOcCy>3aUc@1tt9szquA=^|I8yW=~m9B?vSRtmrWP6oOW zmefgRzzCBnMRAqfO7Nl?kD^hvq$*7*!lX)ZN$qFbRO(65MVM466`W+=@D+rAlJx6G zrW9cy<@nB=YG}Ew8igx$15_RYgX>YeloK4WF_NVy7t!^_oQY6uz1Pd8UxZ2ZYZN${ zF6y6AOf9I+{!KDXKQg68NxvK+JcgyHZ$@El|H}bnLlev=p@3;_{pftJT$ZA~8HMY# zHD!+`rO0|sS8keLl)jm+<@hDY-$p$1Nm7btujm?`CUq>ha+6(xwEp<j50g@-m{P~4 zNgc;h)Ds}cvKNj=LukF%L{sXxG^sq6LN;RTQ;Uy_B&GbOR9>3Y7?z^`7(s44Rev}s zHPe(DlO~0#&CDARR3_dtyFMwk*pxaxP3i=env7q9Y`*J5N6fD=rA|nb8p~2te(5@= zq~M21zi6tGuCZxSCxV;lqJ9PC#k(JQ`tGEZ)z>*OP3k0;qP_&>!^aoy{5C1|Thp(T z(xk?*6!jmdHh=gBKR|YNfud`>DK#!l$_v*_7xfva<rsUi-x2c%Oerr*!C5&7jvq=X z9#Tu($;7d1{_nl;#nUo=Ns6}er;9MDb;2p&WV)<!y7^b1|1&9d40(c!FsV}G!O3({ zy-nA#zu!@olqxi(2$L$64^F0CukQTKGbns!z?A8x6k$@OPGu=8gj1eYo0C%4m{NpE zl{$^3DD~({oHN8x|J-Iu5hhjYba0aG*S(ADk?vLqpD?8elPWcVrKs+rt8Ckntx2gj zO)0{pN}T~tri<z>y3Tqy+LDx_LlfvCOsdqG;3U)Q>57vsN=ltU83-3)Ql$#ONv7AC zu7}@9N|l*Xgh`b;i=~F*m#)OmE8kB_)tOR+NtHSqoTOiuv_G;sDb;F95hhjY9G0@u z>yWGLv!v87O)0{pN}ZeHmoe+2c}b~VrW9dPr3zWfYTq*+y#�rSgZS6k$@O&P(xY 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%0D$6Bkz7*kf`u$;Y0v?QHOc0yIZQGzIh+?&Ekck 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≧AGI2F?``lxi{hdXxllD9 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%0Amw)HtBQR_XXm)85q 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%0D9nx2w@Wbghna8m#l6B&mAi-pYT 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ᴫ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%0A~2d6+@|r?`fItY)R#_1 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 diff --git a/non-source/foreign/x64/freetype.pdb b/non-source/foreign/x64/freetype.pdb new file mode 100644 index 0000000000000000000000000000000000000000..49f9577c59f3b89e9a47276d44b88c671e10f8fd GIT binary patch literal 290816 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 E0j71h=l}o! literal 0 HcmV?d00001 diff --git a/non-source/foreign/x64/libfreetype-mac.a b/non-source/foreign/x64/libfreetype-mac.a deleted file mode 100644 index 180adefebd2ceeed956422b421e478e4603a1587..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1235272 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�n?LJ7BB`PC<Yg>hPBXwDv^}k9E+KX4T)#sH*w=2 z3k@@2IP)48d1F0H57vjhw4U)0!mAU8pSBbWP$juF^Tt?!Y+Mu|lL64J$fHXj*kMCV z%;lQV3Q<dvkQFvU(3lnWaP{9aX5;gm9??efFFm-3x_6G@$%$=lyEC>Zuik*Ozjgll zKY`*W7KJb`;X$5Dy*eZW2d`CFlv+G|5730>@K=l`HlwXYm;M=ei<f--tGI_xi+)6l z9<RET7JVvGudCNa%6&WN;fzgW25ddX!bsb?1)5gXTFkM=zgqX0lt@?`aD^2Mqvq+g z;RRFoL1Lji^vjbJs9yaY_r>7?FygOQd(fR<Eowr(JAp`ob5jl>o-vFXG%ZKu0>m;1 zKIh6%*w!5c5f2tbq@R!BaS5WT5()8(K{?2}Z+~~ox>$EtZ(nb7PkVRYIjvotedlyG z?QMze>Db@hcFykh=DwH!Tf2JpHuc4JAVx)Al=jZnuGqCLJ)P~Hdt!V0JNnws+1u3H z*V5A)yP~CiPg`H?iuT=oZLv$c``VkEI<~iepe5Gb+t%I*lxWh;dz-p@5z^E@5Zl(W zr@y1ACw6gH$L`q09Zk*G#?I~R>f7DY8awL^_1n*>-raRg%O>y&FJI&;*3vT2(j05< z=<020ZSQD_F`%Zsr=_{Ct7m^~V_Q?t_P!o4*&Evj=GwbDV_Unx5)k`4I<_*;o0|5v zckCDEmcFKr_U7u&Js{NHyQzJkWp{mhUvpcmp>uajPe*%aOMO>wdmpI;kR5I9&DVCe z^!CO!Z5NIjI@_=7Z`o24>uBlRa(S$_sdG<%)1H>iJzf3XvF@hc-s`)1n7{s(?T}21 zy4u=X`^2@W{{tTo$K_4H=#5?4*VfWQWY8BzqwYxH_P*W8D`NP6`4zFc_RdW$O?~}6 zEdaFa-QL;MoeW%;#}WhGO`R0QrY1@WBI{{x5usCfB8d7Xl$7Kq5H!Ttb#055DuEYY z+%*u}T61}9BYrh4z3qECFBhpx5!5w7>I1PvXLHwXR*~)f*Pv?D_q6Y8>SLB$I(KUv zC(zy~u&$|Fz10Kly=24HDof$w{`QXDEZgdyo~HfCT2trlrk>qFYRF+rPha5Ovi;K9 zroQ&hbpd2Ii=w|z8w&oHaH<&(yG=g7x<lW(Ka6f@$`|nr(2T^hQ(v)q>X`ozo>h0| zCsJPEKg0ZQwf6-D;hPHlTMPX8)c^nId&c-(1=g%6114!QxW^U8^DE#Jw;2AayOcs9 zea^)f!#{Ne{PGp>uUdhhiWTr*6QLiinQK?TKO=(gWB}9{Cyk?i=dO(4N9l8v9Q8Z= zi&wxuZw34Y!zZmMJ$Uo{j{a4Kzq%lt_=LHK<-@0C1$^R0@m<>2u7E!S{Al?){QWE7 zbHb+>{tXfQX!_kN;NKF#cWDAOHh^C=z6<;03iuyd0spfR{8LES9<I-mCby_EACCSP zSHNFuINT;cIu8Hv3iuZp4(T(F!=G9KpL&!y#C=%=|9dOorwqr{8%KX`1^gRU!2j_I z_;ZHu=(@LD?}4z@_(kP8V)&Hnu(|Py{nrZg?=T$VXUvUP>{k(dSH}sT#IIO=d->-W zs{A-v(0?O-QNQE=HHObH>~RU63IL+?UEGQYzN5iN9Q8RI`kniaSHS<m3ixl2;79XY zio}ZX^De_*gEa9SP~KAvKWX^Hjq<+}iLngb<HBlJz~`am#qjG5pJ_+y19x~5pZ&%X z+)h4MNAOwCS9%<N+i!_~-HXI``CYhEIUxTp#E-+j{zcMv{D0)P#Q(%^iGSyBiU0NA z694`eiSOjIQhBZf_n&>@<<ybx;W8N>CqDJze}%bTsqbasRTjQ(h47SxKdp^sS^QCJ zJYUmBxGcP$iV6?sc<?L>U$pRRR|wzrat+{aQ9R4yOGktNZn(g+EWE;mG=xU>hS*8V z!pHe#GoB88Eeo%pL5AnH74kR9Z;9}9Ye6oHU&$@Act-WLEPT?!U$sK`yoD!L2(Ns- z24q$UpS19r6~fCZG~kUZgjZR(iD?=CyDU7pLi}+HU(Z#SBIPq#DexF~suv57(V)ch zU;0{>evGr_c=oSQJ}J)I;Q7Ex^w(=RC$8`;qhEQUhJRg^__FZDcWC&R^tCK}?424= zvjY9acWF3pj>fY*{>2*3r3F08!WS+44J*X2u!?i#3hAeeFpt|SMt^*>z{NHx7Ooco z#bW=WXv_Gk+@b-et{}gvIt~BC3i0PH++QKQd#eWU0xLYr(ofZE_^0%>EWF|}4H#ZQ zzm3zt#Pg~Z=+9oM;Z^!tM!)R68c@1I{j7MOhQCpbfMxOP_h|T^tDapJzSyPV*K5eK z@b2q0{0V(63*XhF0e7wtUe>DtyafQyviMatMZ%rdMZ>Qbc#Nk~77O3CU&F^&kbl{b zhM&Ji-pkUjr@@Nn3=RN_@Ru^h`xXga&i}ZD_pDGpl~ys=u26q>9aO?A=Ks?g{-qW2 zzxbCLUcCZ;RiDv-b5=;d`wk7yt`Ohsf>_B1w#7;Y%1X*keM#vkq<ALq`9)IsX3Rh1 zad@%n)5>l<Y2(YCjZeH9{K^c^?1)$~JocfbhPMuGd5X}ZNGlA_?24lFz74$6OO-#f zFN)$l1-!9sif494QM^-;@AB=6XZA)>Jl@c-%ka$ZD2jI#@a7E9?2n>&!@!$0JlY}h zIJsPsUVSU-9_9RH;H|$}`7?W@C_S!AqzupOlA?Ie18<2N6!4gRQWWn@)Xgfc?clNI zP!z8gc!vzn?3JQ;eZU(tJnMdn;@u9s8N)OCr6?YEyjJd3{#X~~aq=@S<#!x-I}PuR z1}|1mPlvpB8J^iSMbo_qc#fXgH%0Mw121Lt%+4u_cMI^^xVHn3**it?zCn6CRTGcd zJw@?&WaZ9%if8suQ9Ry$HNIc*%nmAw_b0$B{h;ERJyaBL2k^?cR|JpQMMd#G1iV8j z#WVY;DBfMbs~l21vy+PAJq)~^Hz=OjOGWXX0p9$u;+c6<6z>nvr<7(C&+Mn7cs0N) zyGilPjw*`R0legh;+Z{F6z>zjtM?Rd_yy|ew}Cfdc>nSOcuxT@b+ghlJF95Ar$VW> z-Ku!jtrf*P4|wy2XLeUnysLnh{HW41`>QD4Fz_lrrg&zD6~+59@D3TC*<(fV9s^$4 zr<9)AWkvCx2VUu?6|d?A<aZ`)j|#&xJFO_aTHuv_M(LToRur!fcx9hgJhR)1;@u9s zk*_MA*>6ShjskCfT=AZGfqWbX-l4B4-kmRicRFmz%C9S)*>y$Jy$E>g|3>l5zA1{g z8+c`RE1ubTMe%L{Ug?D5nY~vO?;F4yy<hRn?kkG-IPeY~RXnr*isG$CpF94D;+Y*- z6z@-fH(_{Y4;IDS0lc#BDLu0bi{gC<c;!D(ycd$+UBH{2Q#`X1i_&`-csqZnc-1dZ zzRv(JWq4*c7Nz$Gu$f1GqV&vuT!#1P9ncxE*f|I7{j<M{#oFON{#kv0*4|gxJ8tg- zuv_;4?`N=YoA7=R?`vYQcWk*m7JC=`O|XmUUxzotf6x36{Y5N>A<;Rz@n-z<@Mik2 zhT>qn55wMOyd8Km-Ua6W)+d#p4KM(Sw-pMGcz=X9@nYuxD;RVPe-wre!=Je|7Q>pu zA1>JYNxV<OaPP@mVlfPj&iN7E^w;7|K8`^llD`9ZlfMeQiT66ZiFfnOvDkU=AI>QL zyYMFd>39?WE-3un|C_k?fv>x+@BNduV34jSZa6bViLSb`T1^$OP#h<a0|#wpK&rhH zmttuxf)IgVK_e%e9z5TEIS?JatDF9od*$wSSEuogmcR%k$ZZ0mM(s4)*o?^49M|0& z)QzCb{+_S*`|~~jl2-iv_Pf74a=!1+pZDkedB5ME|Nns(18)SL1ys1d&3m|8fO3C7 zQ0@nBYiinty$DqJujbr;3@HC%u<r`?3xfU4!M^sRjyLrY*U!fSYz9i6CvS214#r{9 z(|X|h(8~k6nws8@{VxLC7vRSOyeYu<1b8{)Jcauz%J>7q-3@#X@I2tVfv*EHR9*KA z#-r~7&H^t7{&yf#IO~Rj{k_1qV9x->-y48CfJd)wYU%|xf6(>t<kd}0IIa6n0UibU zKVbh7Q1m_wl)l~xR6H%f_W~crQT~4l+ycB5;!F{(+W>^cb#DeruMcf^em@1g0rv}l zXOd6uAn}yG|C>Y+`~gBMy}k`pxIaRPf*%H2ItKgdt?u3el=}k02=4%yL-1LcgT-}M z0wu>=fa1Ru$p5-OLI}yRosamxAlP3Dd=vH)fTHvFC|&kmpzO<lM7i$mBuXprd4vYO z@)N-I*dHQsB=`M5;cpH0FOo>IKX{qvn>Jtzcq8w0_^nHun%;>0E?@`n%3yB?z5)A< zm+;|#yobB~fH6??ehmnzbqnus`1b++9Hf`v{!*ay@Z(KQO(gxgZvbBpzh44w#{O0y z|Lax<_%~!yxt|SGy)>6~{eBgwbbAd@^nQMk!|4FqFZBF<<N5CXmH@xe>Gs_LK9_d; z*8==(fY|_NsZ2=Xbq@pINB-XiJRSQley^$NcYvP*%KeXl!n-NhuLG{eegRPW`1xBM z?;nA}yEoW(0!8l?K+!9m>*-YlE<>N^1pAr6{=<##{}fREkDl%MC<6XA;WI$-^BSPy zX%6;3+~D+22Fm|)6vAJ}zn{V(ytf18z5)1J?BAs@kaX)-ks0OwFqujA54_RqyLCY6 z|CC_=4w*vshk$<w91QlI!M--we?8d0P395)=?E?Sn_tJ8J@7dqm;En*@_%Wte*|U9 z{Y^l*e*$4;zXT}zpSCkc4}A7ChqnN)$9@X%1Hda@)ztJ(U^nn&;J04s>2fcy75j%z z^>XuHUSaEX>q<b1%DU|@Z)$oO@H4;F)byL=({HtT{dO<#{kVSucoMJ`cna{#Abk*+ z0a6s!y$UEj|L>PN{Nn(x3UG)(6sdI=0)_Xo02h9vsYyj_Gw?FtIRQQdlI))i@YDcT z1o%n{8UO1ZO1V6L`D<Q2_X3xZUtR%}{Cz7Oo(2^EKg3bx=-~kG4)Ce~I|KZ!0H2|6 zA^g7sQl+lDFWB!0@QMJ>3h?9rzfWWeHxb~U1vn7k<pG`vYynTq34b$|w*gOlk;C&& zbUnNd$p5-{g{SxJK*@P+uwNDIzY*YPmb?FdZnk|w>muOq6TTm)aBmKF?faGe-<q15 zuEu{BC_8DcwWM`#2SVzVY2><q?Ghb8{7-BJp0Di_!9ENBo!F;=@*e@Fu@47(4)}Z6 z`+~g(NL8>Z9qjEuiu$V7V4p`1=U|@&irzSoBED)Q*tK4_0eddkdjf0^a31|xxB!O& z+!|m<fK35Tqg>$+2iO;2I>6QdXHN+71(*x4C&2aq=RF-x91n0Pz^wsx1lSbdw5QjJ z!vXdMm=3Ttz*(3SpCbY00_+K}J-~TS*AvGB90j79Rob_(7B~$2UEn_88ldJ<Uk5A# zUkl6uR|9tee;e2bd<}3X@YTSrz;@skAXU$*9w1fDsw|MIW>p$URkLaXkSb<X2aqae zRU0r1Yz4yVi7mj3ur~$!0{QJi?DIhR&jmOe;0!Q>|8%fV0lTn|2m1(+Ds0t$AXU|> zVIWn|s(nDJmQ_PQs*F`d;41!eK&pyWyMR;?tNMUs=~X*{WQ|o@fh5tYG!TAPZ2-dR zstzE3t6KSpPbnAo6K4q|I3D0|fVlv-2AB@8J;0^_XUS(4K0xJ1*>eGI4KN*Gdw@*= zDt}t|0EYuqK9&2{0Mh}s2iO$gEW%p&0EYw21-Lc9bb##vHU&6KKDF=xDnHAf3vg?I z=>XdUYzlA|Wm@<EhXc$7xHZ6Zfb9V`1vpD!3m@QcfVlv-2AB@8J;0^_XGu?tCyoa= z9AGZMtpTP3Y!47%;cg@!w4#hT`U^9_whyZutY|ulzitjs{*Iz=+1rD|k4Qh+)4_fL z@~lE9(|_&`uf$LOx#0in<QEH1<Eg*D4&jq^zE=jj>Ph{*JK!hlw4WD!=q2l-sX#y3 z=kVU(pR7Bk0=;CP!x3mIe6p|MNRUT`N`I>o`GWly<PYH|>!7a;{>i%MGWeAL@cABo zOYl$jHEa&{WSw^`@R#gs*rYfKpRD8lV~{slw|!H<Pxd*eJ`jGgui;%mzGNT6Ey14b zTlj+npUO^u%|V`IU&2&~ueII0n_dy(O9%TG1OHot{Zom2!M;7%lYIpL6v8L_2DXOy zG-%S_ju2n6FW|$$o^0%%BJW7PWL^ETU{Ce|{9Ujo>+0tO`pG_k?qE;W{naj*e!D$> zz0o6kvTm&MD|@m|e15=h|3k<B{a{blf!`ePlXc&1!9Q8&)kWN*xAl4te=yPS4Q^L^ zXXWF+x?T0C@Y6TCJr(Hp{b#q+Hn~6LQGXvv=-=%2gCYK8opwIhlXcmDkUsbgk2wBh z2%oIWely@F>#$u3KmV8Gmjge^I_&b0zR9}l*MdF$r;dL?qMy&WT{n73-gJ<6t>VL; z4ffv@f7rJKd#Curo(uL*2mE5NYo1m*YW;Jkp9A1j`8%V*{=o)&34UtvpKGv}8u01X z)#2X)zqR4N4ZpSaedwdseqKX(UA9^4AKF8({BLaoKVJs97QgtSdiy^$*p<w+_+M?{ zcYj0t|GB|m_x06=A8D|wKUnL(z9Ig<Yl#0)gZ(27@qfBO-u(^qzR=*mufhL!8~FKF z1OB##_;xj<&-WYb!wvY7wN~E0Xt3YafPZ}hKY!fd-_-lT?H}CMcXLzkg_rfdqyI)7 zS?axL`;EO9=(JAnjq7{+uDJe&?Y%oVz|+ggE}hX4YS&daaoWj@mtNO@?UiN$`~3vH zinC81R<>(7GL<+H&}efIr}tvV!s!A|@AUru_75Ai?*40_-PC*8`d*y@>%DY4XQOVo zv8ne%H(Yl;0DKM>ZNK7!_*`-2=6CKi*Bv+Z?!4lLoxRuge~`Ft;4Dv5Z@t@9xIptF zomYG3HP_up{K2V<Ge+CRPq16G6&pvMwg*4NgYr$B1?#nAZ@qTxEhxy%iUFC!u_d&` zxwzhKJGXDUy7xvMqC<~%K2D0g(&OEB4JW)ny6%H$dV8;q$U*Wd4nGMgiO^2WkpO;T zF2s3*osp_h31_34g5UdeVygE_J7(3((LFnaR`K0N3fvHmxzz=@g7Z_xsz={<gY+82 zRZ8L<WbC~1rYo-9CWk7UZn=8<%{sB>sHRQn<f3b?d*2n;+|YYr|FzrjB6V)K`C87Z z-Jnz^0qocxxe>19PdbOB@9j?9h`H-J@@K7sazWL>GwX-#Kp{l!w3_Aco!3_wCx_j5 zRd2Vc(j3Wpy*<k1j&tEv*K(*2rV=;gyNb-wd(CxMaH!AZy;5u>c8~OZI$|chRwL@} zeV42fHRPLXuDU^VuDhD!WOW%daU)T-eGot3wPsN9ltVS&zw_#=f*q~uOdBU6DaIe{ zb+K>g?Y}m0vD6IKz-4W=Ff^nil~q!$jN3WQnk1E{yCDY5h%@SoYfZ{`5(*J}{bXK6 z@CGMgb$3^gAOI64QBvVtc0K0{RWzD<dx?O9oD`a?dv{!M)irYQDoRelb^{cvwhvx+ z({{JkC~5oltDCL~S-U2;hx4JHqm5xpWv>^^zKK+>vDSF^c2c4$_18PC_|)cpE4w<o zm=uw>hvTk^9Wjxt;_4}~Jvs5%ORaWgZ{Lph_1<^|G#b+7CY|nF<k}a`M+QMFRuoaE z+iP@)vcCRPNiwHU|5fZ(Vk<VQ|J+v9Zf4h2H(q$X&cfE@%Z!fd23MF@jw0`<(x_8X zt($PXDs?nskbb+byRx5iu9X5pj_KWT{dRXz9(2oP>w7Pt*6hEL8sUmvy`e&~U>`IJ z#zQE2O-A`*@wkI3-59UNMGar^fb2W^wqM&T$&GWBbJEr-wfYRoIbBZXDygox=9=ra zq2ykxcU`ZlBhFWOGixXXRR@c`JHe<bS2daofu!UKQLfm7&9ch-sHm>Lx%bK|ZoFbq z#@N2=#_MrK7Ln`ixv;x7spPhK({<Ore^bVssS;_xdv|R(tM{xknqJJ`Z?Avj`Zu*# z|JI+mzT=EHy=DEI&u(u&vtvCTZ|acm`i_pX&Nu`3<~N_!0c>yI`r>W8>vJ9b68(Ms zXaD>Qb&=?HSigntsZE47waZ|0Oik(o9qVu8KJV?civWL#9h#czv7g*~dv8Q!nf$M} z_p;0uCcYd0{?nCJdUTDNrXOf-`g74<(Uhyj?WIA!mTpJ#*W26Gd0A&-gO5OGn8_~v zO~1bx68z0HYhG^AAN0t@svP{Uk-we~IbY8P|GpdDo)BtO(PIAU<?XrN!;gn~i#{f- zjlYCo1MKa+<|<0S71wBDj=x6!TJ>-Ve}P<6$H$tRYI$m;E&k}xY`c-x=)-gfdwVx^ z8G-O=3-o50%+%io=qVY}f7jgf9doH84?o*?QtVZk*k2=m3wxcv(O0{F8?VrZEMpEQ z+p>WB>ARYr<{X<=GE2$d>HK70m~A#F+1mKEe6P8w9nvj7X>OWkZ3a48r?J0(=BuCL zndjHR?^pfPI~qLeT6?pny<o+?61uXT7pxhZCJ$N-9$J7t)){<t0S(tdU>-bl3he5_ zhHUiVHoG{q{@xi;m+$075{b(u8s6RV3uz`Z5~6943t|vBl|KcG?vmg(h&H?FBz51) z9`4@YVh&w1x?9M8PetH<GNain!f-9=iCjw~!zAM$(VWx7T`I5XA6+}6`$L`{9C+Gd zx=ocr`5Zpg=$?)q_vnt~2aa$@lBU1(?wqbOZY~F#lPTZJmX$L8ARO^)Qyb*VAL&8E zc4Lnz&NMuWkzcq_(NrpHQ1~>y(`dF8-ca<ES>uCSnft~%j+NV9ltOsrKgRP~;qqlW zC+@P8tgc)C7<V{xhYCS1Z6Osb>3EuNx--6bHE@<oX!No{G=cEEniXZ9k2BA6??#Wk zuNU4~X}26=_kf&dqS!Sc$<0Bqk=z}wSICl^#B?i2x?PHqUU|^PjQK~~QBqy{>D^J! z1C~u<MG<H|?E28-a{4{&3Xl}~-P$V3asN*VFrC$VcA06rG(^vZrcR^82mXzI$gpH6 zJxV|X`Xvg7xFtu>u++rwrZ(q@yI>;HL)Y3>V@RErcKRhGEp;D}42B-w>Ycnut0o9P zFn{QxbGe^tV1DwV^iOefW7kl{n4O~#yX&UksJQmz$-VA+S=DvRE186G*UL?#>y>oG z%)MIcC!)ur%|~MX`;ScguNSZXvB6W;|JYqYoR5083gmZf<q9&^RCt+D*?Mg!&gAaS ztz}KJRZt45a%7uKZ++=k-}55N>FdXpI}-g?<z6^O{!eE;H=-hG(sdtA&KduDz0)4N zu}ja03PooY%6BSWyI#khx8NZS)jmz-o8%5Z2;2hVEI6~||6h}Hf^(@Xr8BSR=2|p0 zo5aJDg99^^<{%&mjCVQ>3dVlky@K9US(N<U-|i`sme{7m5^#Z%k#5YtgGba@AmTE` z7etIUKOJ??ZsMLI%V=buLzyo&AIf}zhxq=IXf5-Nm@GFThhCNBNs^@S=+VXez&LVI z>DOFg#2YqBkMcHZN9V0{=8K7yZiH!tdLw5<qs%@C?n@*eg7+b07)2{@cCCb4t9T6{ zB&l+Dcnvw?sS%!v^4pM}rP48!L>c3zdaDBZr{m2}Q;X;hZdD#n<OiOBY0udt<lv}Q z3g2<rW$#GsUL=Vcx$>u=ZVv&6S3jP|v8f#4I(p?5+jsh%V5p4pqX&vUnf8)0O^jrv zy*Vye+Y~**`<gOw5n6?Zw?GG#qiQ`8MBz9N!!GD533@ugLXb2;h_aste-o;X_&?db zV9FSM(}fpa;4Ci9-mVIJGS#xjt_RrrLi3)?7bthr#lb$BTAp}$ty-$LD)Xo8t>@A9 zUlK)MB?_5pqHtc%7O$^`TzG4G-m*kp0{<o`;c=wV5p-Zzygfl-DiRE3=pm$NR7QW# zkQ)Ve(dH$2t7vKNv3&)x&|Xm@ajBZs-pbc%lQ*mRERt^1U3<E}nBny!-a*>@g|6t7 z)fJwUdz{iBlssRs{%kbkY`ZmOw0z6LTgT-qJiZZ8CcZ6jPxPa~s>+;b2cOa{gV}A5 z;7s7o7I7H&td2-rb7(h~PuQvIHp=9%<pxKeCR&9{6<#d{@&lvCERBEDYSBV2ms9qP z3c7DJ?tXgWxz?zpqZp7xiDbgps>`95PgA>ZFw>Y&v2Dke9}_MY`fkDE=~a?9xBkN- zofuxz^%CYfdN1*+rrJ~rmyi18o&MxCl5+jm-koF$yJ@T>6OZe19pM(y%-`JB6cw(- zF}3^qlCZQlYjFiy={BxjG~Oq^w?en^=Eo^;ehaA;DZ8%Bi%3b=dBz`V*}+>#ovHg4 z6_|Tjt49UY^Se5bl^qMA_VS!$UU6TC=P2P#raQn%kP6P2vQ%dW_b$3l(rcuXAWpnq z*DM<UFKH~UXAyf{1(wUH@hhB13_MHmMN17-8J@*0Y(*z!l~3`Ny3gLkjY@Lm@?pN& zZBvx?TsC^!PB3yPCXHg!7P(pbux_YYcVg`@t0VbyF4jhIXQe#MMSHls;feQ}>)N-q zQQ~xkWSJ5QHz5vECJHx8Iv`bq)LnyQZ>}yuu@#EC<FbJw&UV8mamW{&C}J}Z71oH$ z!7%|1q*J?<RCv2s8@LQrULpMsm}_)mh2chjldi^pS8D?SN4OB@Ao8x3r7>_$Fxr;J zz&WHvBNvuJ#)YTVqBtDkLdD@2ExbI1rm7Cv-~v>YGSori9PRBx75OoJxo+@jYp?LM zXPj#;PTT-4dTs|zfwQ6dDYTh`xmz~f{c_b4vAMg$imC%SXJ>Qj_78Y!7%g|%;x0}s zy_3RWo*O%Nrt&Xq@FVZm<OpYoAnq&$dybeFlJy2B3o^q+!j~0+5QQF5kM{~eJ@V*l zAyc@Z`SCtjF|Lk_7w>}Qpo%_>MlVouNuti3<@eQy9jL~aP!@aO;F2sb3+w^*P=jvC zM%gV8b@`l!_>w++Vd>&s`0lDiSydR(Bw@Umw^ow}sR>?asdJIun%u=u>k50-rM76A zs~7eS(s3y49+MSzIm3nlzfCtO?13U9z$GY>S4(RaQ^dI-XDAw|+|Sz~N8Wf47#tI* zE9@?oijlmM!fvisjGW;{e{-$zx58daz!9vlI|VC<OJKCXaKLD5U?R}KIV49T7nVrI zg(ugdI2^$WyJOT8c6X>2c7J=FOXB@4_Hyd^qepWCU!+=`)p&ifFlVY$@u1+>bX(M1 z)buQpfk-hfb`VhSvOJb_an5fqhZzujH{o0L7}cB+U6&l)vZ9QtmF)gkHAv<>RPRg< zH|KqF9-L6R)&$xWe216v-IJ561;2Rb4!RU{nRY~9vUoAVf)J`6dmJ5)i~FjscLdke zefKNm)kjxGh1Do2TKH5vCd0EwcWC@!v~A>vG4=3ZV(h}4P{tgIUgq?vuCvEerPmql z4CqBik#R^Er+>pZ$iVQ3Q&Q)Se#68<t3P><Pw{RKFQ1NjpZ{n+TsNQeA){}HTu;9v zx@Zl_Ip<ft?taSZWbVc%h2y@Jj>c;+h(?|?z!NfNv!37@%GtE6lZ7b&5us%H>{=6| z$mIOp^bLUtr`(!QRw%Ciw!q2r=SC_J_Q6_yOi`0D-zxs{V~P^n8?iY8uaV%C+koRs zO$4*29%_MWA*UW{)q5kS8xzhk(_RVl9-4YkE+SO^oL7A^LnQxPdulhGaAZs9=AT=a zDufou^idP|S`X~;)&;IORRhZ@#4KZZeKoMeDReeOi-d15r|{(30mYtZQw28BKUIsY z=2h)Bma`T(r0_@w%1Q!{D{y{HfJoGf3nL^b$<gs_%I?B7NxCQsu)U01g`wQ94sO{f zl+L`H1O0VFEvLZ47do{4k`{Ia4g4h}OuyUAF`J)i;T_GA5R_kX_AGWi!iow)2%~6E z=B9KWx37KGK|R@B?a-(9%mwWtsdt_{9^PQ^{CG;Dgi%+50AV({63nr5<~QHd?8>s9 zwvXq=g5O`)`q^U$NnFc3E>l==n_VUfg{zIal|2n7G!4eQ#x+nHWe{C?y!U1wP*|j^ z9j9A3RHjSe95eE4jiT%p_qs|vc~6_Nn{CYwK4x=45ypnPzMWVrqYW<;D(@bK(FYw6 zg`p$3AYP-w5US)s9x0SRp7)T3Nvw^X*;M`(;aG){?ukqC(skS`rU^G}cm`7UWmo2( zTb?Sgms({|UbwBwKi3?dq_ldW;sG-1m43>rlPba^rj$m;LHPzULPZXzn<);C>NK)A z4a4_GRGB1G(6ClIu;18H#W^P9j>*EkfaOgX4q|BLt*jB?wyUn~*SIcz2b~uaS-r>u zZFpt%@NmIRdt1$cA$>_E%Y~J}ahvp&Or?AlOJGW;;A>xj&X4ZL6N%rX0Cfu9eHu<n zD%dYtS3obyJoo|wR#)FXnFNXoH8Q?PsuvOkif4BU)?m4Ag7C0q!k_<+u1-?02yXcg zjaDTb3AQ*~qO{EU)o`y?xH{^~0`&`Out4&$W@)b{%$Oogy6b4ti(Tf4uplt_sPc7~ z-d(i5(NQ<|?US~ai~huf(9~&ocSTuVbGJF2j9{{5mWh>F(r1+;&e90Ck^Iac1Uz2= zU>4P<Zr2-L<t1{B|3z*@XkHb`KADqUe<6*+yrw8;CqKR`crux*l>*j_>((O%kEnL9 z6{)hcl+dX%u34PXmKJIhy^?-}0*bIFajE+ZMt+eCz}&@TW=b3-7?mltSt&lYhT0`y z653atOogu&FC}Y|kaap4Cx*%MiU*p5v{oR_W1VEwBJziY!xEMeJ8bTmX*!%5s+OK4 z?);d(3{^iR&kDim*nO*4{f80jwDT+A{8oZE4?Iy8|9UolAmJgKf25^`7VA+LPs}dg z)clC%X=<6%jBTjxjW6}DWhnoFH)m6>x{G^wt!Wgeqgu4uJkLDL7M9+44o%6nM0)0r zq$`P8)sC;yEZ{>P((gQsNMP$so@lntgfzGIxNovf@k!I-z+5G{$edGT;w`RS_|$YW zNgkhV`FJMG3~YYX-if_^Z3AA6$B&w$Z>oO#=rg=x8S@%6(q|qme+4m3CzXtBnIKsw zn9NK=E97!tn$W`^_4zrhuX*mcwFNOLG5RH|Ye4}I+w`fF;APUpDV@3eGWA1jg{dW3 zUWj+KB*G^p^R+G%8nn4~mIEl>s6anu%ZJxkp}Ht-lCbEM6uw3LChJKd2#aQtv35OD z=}Efx&-p5grk8DjE@o9ltEIM_lq`vgv2vu3$haOYy?o7Ro9dvc<$8X6mWRf%%r^T3 zZ42m?QtK(4j5Yl6<oWEz&X&~fmEbWU{oA7c>Pi&8b};4ZBc`k<^CV9$R90A7M;fYK zpA3((L>g34iHIGo&&H8gl~$q5Whc?1RU#NW#bFcD&XD;OGuoaZiT0b37tH&AO8Fom zwxNG@F3(QXURU4ck8G7bqy8h&=DDc*X)RiXj1}_9J`s%c?6I;9%dYt!wq*0_=zUy? zYD+P!vTS38JU@#sowVKm-T4{MjpkI{rV6hK4smfe4*Bo3T4y6DPn&7Vb54vP^O7?3 zL{7)d>lZlCsPp>8Tq=JFW`EbU)cw$=QszNe7*86NI5&$otd6q|x_tBDqtlk=srxby zT7@wK6)Nj!<&UcmV|-S{Y{Y_Pj?FPodBapK$7cnOcjQNP^dMnbYm^Nv|2|H7)X4aK z;Dzz~z%lv#^Q2m!c#)yXUx2zv$tHzg(-H&w8yXlWfPzv;Lu)XHvBup;mUkZ}hen(4 z<+<qYdqXyz_T|_UL{xm&Cv2D*hY)WOMw$I(DFmu==#v9xe%&+i=EKxz(TZoPdcF?6 zon_x;u+@7M_4U=@5le|s#6#hpHOSI^d=nY$2g|bgUy#W@pr}jQ-5{aJqe+dE^e<pa zjOA2KB0Y7H)_E<1YUovMMrPHFl(io2nY@2IDC7C^2>SGD!(!PW8s-V+tQ)k<>&5V+ zAlvG(S|-{-wpY+d@%yB=DVs;E&5AGWabGkgr%&qSD#*iFXMC?lKVHA*Qs30B<<4$R zUHJ4eOP+L(ccM*JJ{{QnvaRoQkHmx4yk|b0ANVv4`}a+%3=gn>deH<l%feb3jy2)S z;3Liq^Nf5kwfh_oGtZ1fJ4}eLVj^qK)xB#?gNHqz=fhXiRJt9S0a>h@e^5?E$QUl? z^d1u1H$M7{7D(ohX&0g)>sCo<vTku%9hBsbtO~1k^3&ztz`@cetPCo9RbMi0%wIzi zPR)$(VG^8kO>2De;VqaKg7TAut~B;E5Y}V8qMFd)Dxnccza*ijvEq{?^b}T{l7t?| zIvWxiFC{d{me32H(3^P?id42GQ<hD6ja`d(-P1|pKA0bPki@NY>AD|WoVX*T6hBMc z{g}r|-2JKD>S<vkLQ7onvOh`O;oz|bj_N%2mD?)8EM)_xQZ}<MB<pM<Qk;3PAz6pX z!~0MZuN^7#DuqKrBV5i>^Fd3^2g|QXQj_*-@KL2!?S7NS{X+HKn88WkG?nz_Zf&I* zjOJ7KopDjrub0K<;{GRH*h&wiK7ZtokZ-L$92_`eW7_)NC0pSKpWDd*soQ-vV}NaG zN7kt^OnPS8!V=UxpUsbIDVo+ndrK<2RDwF^sh(`x5yd+u!fDh=%JB2OQcLxZ=qqU3 z6CJCK_hqR$Qh82mH+jnCdT{W!!E8bxGgrH%WiF}7=BRob`yZsvoafq4`a-s{sAbbu z#br@4f>Tx}4Q<bdcjFrR6CEmC@OW%`ZNCydrAM`}#s{4_E3@!>Q@e=4&OGIK)^};m zqQ;8)mhKN9mp^j<zpK0*zY@K4MP4OHWgn4-mXXV@!G(SoZ}9Y@15D1QgppvhMe3_X z-@yxD&*ohmjpH$HTA}0FkY27|Q{ux;KN%w2nkE>kSG}nHb=oB5dadsNswt1v{8O~? zeUg6|4<1jQY}VUN{;llStL4WDRro>PU(Qcee^#p|oBZY`GfyiPYVbKa4>lmNDg4o$ zUOa!30vw(qq*tN+DswEC_`VSO-<3|WCB&#GMcq?~HkDMK^qiiCvh|#vmA{QFGc$3r zw?X?9dE!~)O<em{B+U!X7qwK~!vcajERi06PVmF@zq_|p-NQ7jySIxrl|InIlb16y zd$OQsri<B*;Japr72)X}QO}!#Q%BY53?Uo+=;KmOP?>hlxq`HrhCHV-c+e1{ubV7Z zy=befjYe&JQyI@Oa2Wid&5vsA@Mq(zn^OnJ)dOs-f0cd^*RQs6m(>SDR=H!X9g5uQ zDLae)Z<LY!e_hR_fO>|$Db9BcqMBs>sC4FDP<SKN`i%qANiu2#sR8}(SQ65K%(J4f zJ4|*?C4;}{>t0veLS3a=C9)0Hm#b9bi_6<q$;Wt$`f)bWbC>EX*7h5wQwQI+CjZ>B zRN-zH<-cCAlqjQ!GU`m1&ipPYCdvq|BZ(;c5oJHjpXH)pl_+Zxn<kCeQw=NB^YOrw z(ZD^~=<9L!J(`?(zO2|yGW$$s#<l)m-sPdG36gfLac`gF^(1(4uAL&ma3gwrM|?)l zj;LRI4cS}MA2tg!<rP#Odf>BUttpL`{l(xYGfd==V+c5289{IL(Zk~W(`Wgo(y2?z zzlhFOcU6-S`e#!IFI<yfK+(2#SUU6fIP$(Y&(taUCQy#8=-0c@C|Z-fyF<IYpYqsJ zDKg4AQm-~g)~fe;NmyQ%xRQm}5m&OgvyzX|2I?D5l6W8d?z1dhH}7Gz4)U#P4hCj7 zcCJq4_u)(^G>~qMyT_}^lDe<^(BN~{wYk$-ADCt2e5j#sGZi)|sE$alN!>Sa$cjQp z#Ddj-ud_H*bM<@uXlpmhK%R!>mt!>Pv1@%HGhSBrzNQDCf3(k%cyayU6Wk<owOc@P zC-u8kOWNhFB<6Q;#CWldws1_Pb@qj=sofuvYoMg6{_IX1!)nr5Y2|~YN+_Lq2X;$z zihs4fA1Bw2lgi25hL^5WEH=$Zh{OUB+K#xV%bMkY$NvbZRFO-~*HzoE(EeB6=Czim zGNtU}bS>48n3btv$`XU#ntcXg%Hm0?rKa-F#hgD|dcKSbm>=!)2GDm#YnYswibvE~ zdM2}m<l{mze5UWsNDB}#S!S(i4Y6HI5fh<WVnPbU+^7jE5mN=e$vK<K4vx-a<S&=H z!>b0Qb4Rkut*JY;I$143W)kz%!U|}|8fK%GDuy0CwWg`se+ikWGRd!jSZ$Rtf9OPM zOnkionvkDOX5m$WGBY)*wu^#sn?Kal9P+jfh1B(Lh%fX#EBRFe#iagEW)g1kxMnJG z9V1zvwq(_mm_LR)qY{3*&r-SHnF*z&9{y=^yyb96ypt^SVd@7xrHdsgm`^WJ{&+_n zgyK}=v*`oll(<paw2@-wi<6oCB15x+tEM#uwD<fv)*CGoSY4poA$;FVt7qX6<_P*! z1r%%}Ea81i?2A&RkBM06faW?Lc(D<-9d<^Hj?6X-5nWaw>)M0}8yE6Fdwr_lWznc+ zH@Z(K4o{fgPGT-H1PQwd#6WE1Y|&Gkly&|2v18|OMQyC)6BU4plkH^qrHoj=yF_7R zFkNo3@C@B;AAe?_-XFf3Y_-qcA0BcOZg;q8C9?!>YK^*gyXh3(6?RiwRMPe6ZaLLQ z-uZ#Mn^JfDH=@Z8+<|G>OuI3ua>|b>0G7y{hcKykl^-Z#>Nisk)76HmfjkziSH_vU zH)ifg=@w4RcWlh;PTh5(nRjn2h-B(6jfn>bhI9-jb=U8jrRWwlH-iH?x3tP)J2lLH zr)OtRvUibfh>6TP9CfB`_DZHMVstkoMICZuK!iGE>R~zFO_#;Sid(jXsV2j@oQX>< zeg2E(M$53@I;S?nYK6=*Y!(yID8s7FV*SoQ>C7+H1&|n^4Ns=+ERao=vI1>6?=E5~ zhgwr~dW?>N{05eLy}C1d+#(`Tc0*`EbS(%fFlMtNqm}JY#LlW?K*{DDzXKDKG>1az z=_blj)>#*@f&>?7IpxO$lKBdvK9oMUsT?w;EX~O*pBUd@R1EAfMvK{V19P7<`Aw4} zXV+@-`U+p`mf&lRQMB#G##i)6wD%0$lBwnq%0o#G`7wRj{HQ8nvS1cWv6(!Dw+2?) zaWC^*@<W;^hp}lO8*7dRWu8RUwU9mg8*Ee~id5JgA~RD`v!J~9%f{PM?YH&sZBmgA zex>cElOJgckS<Z_%<W_d3vV@H$)Z$CJWkth4frf@oMfM}#2=5O*(r)YV4Ou|x5*J( z@LTCN0We$LCV=e}w+UctbDIFRQ{8rI-2G(K{e0Qhft}04Z>i<-b%Dz`yCLe<nu~a3 zR$0c8s3ipd1H&>Q|J#zm_hip4c7HJhALc9w#^GX1y!pv!^YfOmmP#kOg`Pw@ok-8W z+I|lnX{9_QUH+OS!B`!>106q8`3xYm>j&C#JXBc6m!vk^;6v3dEG|MpNc4@?s5_h5 zo#E@l`?E|!_dY?hjdB0eOpkb0%{*;L$uf}@^{c1{T&C3owS%N35m!rnn^$dm9iXY4 zP7rM+^0iHBoNTeeCJyVCDmAX1%vrU<f)6T`l};*uSiMgc5^T;V1Jqj^Q~;3Ww1xsA zCj|-tZerGElq~K`>mV_&y?5?8DKLOf`T%_IY@Opcv4S~cj!apd{kAQs-K#YP#O6mi z=0}Bs7Ij-ySY~Z8(F*@Yb)GF1rYvm9=|)2$7>{|{K`_343+q%=@f<ZPDVj};nJ*rE z#0D}^sRfs=Xreos>W;p_lGAG9m79iHPv!@nq$>M_qCrbLCUcLAmBcb-mehTv$H8Zl z?Zhkx7gSWw@4!)9)j4j+rXDUlfolz7T5eyfcgqrZx-oE%5WiWExJ7P<>)o~z_}h(v zcZ&N-yQ%Dk8?Sm_P-3g+56x60v`N)yaNHe?usJ-6L-{rCYW&xt8S@o1ty7jBA^uIJ z!lUAhgB~ghVb@Nwz-p;OsvMnO|IN<gH&XZQ6|$YGLVcZmAz13*kd|}vKWpkLmR<x# zYWK@wBk{ej_$pFHE31F@NO7<H_Z0Ni<j_=cs#uuBk{i>P?DIB4hLzu6iNi+bc7=1K zCKzXYcEZD;q96|M<h#$q#YZgP1ly1v|2h2|*=-XV)McX!cZCCk3HClKUJ3S}V5`T5 zeagQ!0hBMJ;8!cUP~g)j#tM9Gt?;{8P?u_q{HRv;V3I?eiCgxB4fHo_>Y!rbi-?js zctC(sWL3?53YfaBjnILXZvtY`sQ7qsucLaM#&RjO5iR?ug*V64!IDt4%W(I!?F5R` zJ3$#aE=o_DTA|7EPEQtNiyM0|wwf`$1sZK;JXSQE&xrQUTQuoiU@v%##@j}VKehWm zm{gkS8}$nAfU~|=>{-3+W%{;I{Rz>kz4%y&^7RIyxpL0L*evch-IQFa;)vT^u;QrO zT(;b}Yq3VWY+Rgi6c;Er>nJ8uX>5bVaI88ilz5iD*<W$@MDBZ(kZ%;fQ7pYt!D_dz z)Ox-F&pnPp{ZTA-AlROgTveYGi|Z{TB{j=6H}+pwX)IOmcF%Y1DJX(2=8if!Y0#Pf zUW&t;<E~Z3`dS*CkZaX1JyiGvo3@&>rM<&SsZwd5fFshLrHhBs#RCsm{9c3fKOI_5 zuc>|ZT<0OPiAMV8sAiTxvLsB94p?;YUPYJSQq=rF?L8_qg^kK4j(^C6N|M+`l(fY` zDF_uTL5&fhyM}hD8kIFM&iLmoD_RW@CLx#!+)0W3ZS$~ZS_;#jQh-*wC0NTEP=&%t zp{8R&b{~@V*gq=Z$0yT{<sRt`Y=L#-#U0wp@$KyL70=L*B#^c4mN;?262V;*UA5xz z)=||>(2VKMU1vO|Q2Ecx=CVAz*hAF;^Id*u;m`1Awyad@bMAL3xf$EbHd)vO070S_ z-6Q8{LvAa&tv1>~o$1O-?mTGx#5WP`$6BcUtgS~G773$V%V8y>9F;7dxMY;0lHzd* zA5;0O<V~-7z3-vQBxg%R9Ore0oTRkcnTGeAZG<#y4^~I=dcpQ`m#k8V)Y&eznq=8_ zjBRdQQw=gN@{v|%N(*izQH|cA^vdRPyLePi$&YuS#B^0Vm2F46bEwmr?Q`*^***ur z=3?16oik~6Q+QCS_2L#c<TR5CsW!Z1@kE{N>Ys>C)v2`x&BX63zuJ@2RZ<OFr=-61 z<3-v{TkDWw51qdfx%P^q)WO@VkFd~GES*SP$Lk`<e@{W*N*CcgEV(g#DQ6m5CS8OL zIH8TR04PB=(}wIXKpT==VXBhTCETmPwF=r${-_IYg4A~<*4OwPrz>&5b$#K6^6TpY z9J4o34FEn$44FcefhEYUYG2W7bk*-xu!Zh}19cfeo8v&h%k$5*rAoi)4)bwQn1he0 z=7`KJYVMkUY(;Py98(Ku2LuZm!*gO#Iolm<S44hH1%PUImAvy~Dg&gC=8vdJz5OIt zpD-ndFnp?t(yqDNg0L9<e?6SM+O%z){=c-<P0nQdh#BMbhOP(?>qsyRh$h3a(>nAG zu%MDwWk`h$hBhgFl`rQcK49fB-Yf4KzJjYI)$;S(86dR7pdoQ!Te!>5-+=3ex~6z{ zE7Vg5ZK!D-JM9~)iH)O}3d&JT1G>|s&~8SnfULhl52@;6ZC+Gp#U(eUh8YQhg2!Fm zpEY@mVCv!QvZ&MnZhlN(?iR?oug75%<VJmwl7-M6HKSEC#pxE;u_9iqW5@1nVWgnQ zv~^nsN{&U8pJ-*eNk%(AVyzD{rwt|TNi7){aUqN)lX_`30{RB>SJr4(Qni}Dw#Z{` z!Tm!)(pmMb?%reJk^<I(M;)e}Q#I5$!D*{hJr|(cQAP-+R?idhrLDAB;wu|pNT%7l zuz>MX*=L_aH)cLv`P>kq?3%I-KD;j%hITKr1RHY_L1ld#tT0zwaWnbA!neL@O60v? zPS)R9ZwU8mCEJER+@AV)Sf^TGE?}uEwz{hKYZ3lX<|pJ^R<rWAvaab%d^dSsUPv8m zDLfW+Px~5q;AJ{Lx18D3lpUohcLr4AYO&2p={;w(ri=YQDZd^cU%6OV+sXV?_rk`` zwp3mVJCu`!J=s%>-9IUxSQDOEr#Za%buYx1v@+u7dI}xMkXwFyS>m5M*z=2tr&`i` z`i`bk2Y<os6bsx=u`uz&rjve#Wg5#gdzpxQV`e6m*EEl<cpDw6pQ97(@0i=uTHO5I z#iaXwG4X?zJv}sCqE#WRSnLjrsQ)m!-q?RQl~<*{C-dE6<|lR}Wb;Dwwo~Hn!)vvr zTb4FFWh$P3s_iAv24!1Wnq#}(Z0ff6Fp*I<?jYn{H%?&vB<vr5XEuLiLsxM;vwpnu zfnm@x(YLabU)C&6GAE{e28c3K%zUSdWI}J~E;*Spg_SPN*Sn%ao1(wVMt^Hri=>{< z+B&NC@N~~`S4-wQC^q!_W6e=2*kD*np6ZHoPrx0Dn(vBoSE}=BNIBi<9dLIA*Ld`v z(5Hz<gc)Mgyu~$GZR?3FcL+cK=!W;$5?YcU!+mOD|Agc+@^R!H)SK1W-Yiy1Y=2U{ z?rVYMyq&fp>)ZtN_+lJyrvJ#sI}Thxi7?XEi?iFLDQ$IoG3PNfVt-?h4}!h~n;C`v zsCU)F9tsE$BAE+(zH*rwOMvzKFEBqmZ!1TvHzrr?X~wd$_J~+4UJoAf{YU-Nm7{C@ zGx>+YG{6C8iA6%617J&u$6d^PC3Ud>D<tF0#xV3(`(CXvpvF{O&29tpLY|q_!S1ir zjPrd@^(<3(Mexz>xqRtE%wzQa4J!7z>Tz`3BOU9eDKwK%>Y7F@DfKq>t&@m2g>=UX z<&DfjRNU%W1C8f&h*QM@^gef8z*YIIl5ZB`5d{eOhB9>9PQ$bvwwg6%;b-CEXvmVu z_uaNsU3)wN-618UeFW9azg>E#>HLQMNP|blC2_JJ-KO*p<5CfX943)TFUxFRB62w` zaQj?72*y7;lq=QepYR<m(p1>7vBTL?Saq;1PevfRt0)4My-F%=apYcuqLLptObV=o z5L4r6K>625&|~rdcVz9T8HB0q2_xWpUgzQ*-18H3JUD3icu=VX5&EE&DU-{r^0p|d z2~N@`caB-2@98<WxcNSi##PtjDH3~n`ih$mPG%Hu&|9gbqonlCuUAb~^3CDje5ehC z=-G$b0iDq^n@XF9I5Dba-%ZhXqHjlgwH~{P?8(hIX7Y72uCKwCFh7Uh_w(Ba7jxO= zwoWmumK+?!j1PziLl2P+VWfEX&yTZ!a==k_zSN@OCY&m+OV+h#pYH4;im9&R7F%?g z)cidQZex;+#Iad>{8^02Ki15kkdC0FwT_@#`rN=l(A2`G9?Be)b4ixmz<uPAy3ot~ zc<^YPO)JKzxWXGm9J<^=!+K0OWZhw9#bJ{>v{oE?+~Jgp!)5N!R&m(k4yRTeE_a7^ za|q`kQ}<1gL8qd-hQ;)lL_?f6W674nF?)m`k*}$l)uQ~s2q;WNQshQdscymOHA1O> zC|laQ3nJN4IKm!w+El`Y+-?=uX#^Bco|)qVH!5JL{c83Q4L&*!V(ofSavn~b|En8T zEu-geQR9&n<&riIsTd?hd(MxDQD=laU1?C1%WVgT(TFeInT>DZ6rWwY1`Xkd_F@_< z`*dt-$0m@yvZm_cAZqHg<i5&Q+t_4VhuGn$ipQ(l*TC558a|P4zZ{&H6070p0ByKw z8EUOH@<s#CM>H|pI1#ap?L(<A(yNhN{3aI8!#sz1E_*^#4pPf;t@^e`hoX7f-bMSb z=x!K`i3-`GTvQ*Xd*RR^WW<w<gP5prRCB31e;azzi8eF0y1QR2XHG9h%30L^Hx^#q zIiG*A6mZQ!mC2Vj(_(%cX!iDC-x};|$dq9(r?l^DCeD>vi!$@a^>g24St7Mtdl$l} z_?<FJA6|1$Ra>-iFvdYvZw`!c>q{v9!6A2<tuUNUJ12vRsoLZcN_V1m;3x_*Z>TY+ zYs}dib5D&~r3F@X31xEssHbm!;Cc28c=`CLkjfg23=S;JP)DWm!9x>_mM!tPW_PUz zSYdO)Pn8j>Ow&77Tp;ro&MWpP@ss`Yq<yl)ogbhE+x;1uHHpWf^TzI<rfx3<yBDQt zwo#9ZmTACdGz(8)4MTv`!AsgwUwnk~K<a#tDkV*q@x^4G{)PBL@?^I8ne1}>!YE%$ ze2SN5ys7+pMOLzd9t&O?NXVM$*_HD5-M!i}mDD^>620v~{3$V30*>2^m6E;KeP623 zT4i%%=P9XAK0-UUCv)F^6n{UJkL&CfkW4hLlc_z05%xw}&(tt$Vk8&E%-&{xs&c)O z1<dZ+m=7))^T9otgNpe;C1xU4%;V?_ouMx-6w01GmHPOrt1PuwJlA%Up&jA&*MLw> zacB@;l^T4l?QCaA)l6{!-8MykHi>3qW-4|2-o&=nMg+6o!(f!SYXeDQ^FYe!Owmxc zpaYwirgSxz-(?|fuc7?g-G7d#d{b~p*23y4-gwqxVO^pg$CF;2QI{gjWN}0mCsWF7 zForztTOsA=`vH4u>Pv=G>1>H@g0-7V?ap9`_<3vc$gFZ>>frCUsVkB&d_?)Ma1mrf zU)?s8bc1(E+u75p(i&%GnziE=D&r?o2QT}zCmFt;G=+XS_5Flp!6(Z9BS}-8Yp42* z)N7meV!yb5>gScvp*F)-+KTshT=QP)=J4gGdOy7@Vc6`G>0Mxkf>1%qsphK3Gp8!5 zodOB<LHqjg`_p*ouIWjxmr_F<cIGAxES)!om%f`j>FwI}!<5#yiYlG)c@BatFx#^R zGiO=M+~J+{4KCfg$&}W5w4tzB6w<!L{>0j-!`T_j7Kp2i*1E^mz_860A(yy?b+8$8 zo3$H}Ho?|tnva!)_~KSN;F^$&9?w709x+It{#4w5_}O11No2)XNSdRIrt;(MpE6JF zsSI;1^W;dXTB4nE)6)D`3u7(kEvfq~5f;_Q?MipX!wK@dHu>Lavw~<fziTCX?Ysqe zUZtsgvp)P9KRWMrE3HD<Zuk5>LNP7y#K4Q_IA@Mb%(iB?&0Ec?{*dLVxMd@^b={@v z5y9r;>`K||h`b2DnogM|T(!TmwJy6<8<fe+qlA<C=d#;Szn!)*^C_68El)5<;q^TE zC4VzhQ(hS;pc3~`?hF#cjC+dB7>nIswnX<KQ0OmaOWjjiuhIm7Z`ihMH#j~**l6>E z<XrZiJjfd8gOe+yLdr(h>Xs03X2JLRTLbiVJaYqIrXDcs?+O<_@}tuVmeQ0)Q<573 zcU%ko<)-ou6&q#8I?kASK>S(N0Aw$QX`EiHbo6kFJE`aE_d|uY*}IP$P_3W&qj|AD z-o%_;ewKQe)1>{>r2kQU)B5^P`H8xO{;|52QNI(Y<`~!{;i=MX(k(dzO@TU;%SlQv znAP;{XrMP+C6#2^*+6dw+B4i4ATp^!w}{#G+^V@c@B{R?-Yb`f{I(%kIqp!#w}F$_ zoRs&AJ1Bj>4@!thmwJdwUu&S&=9xLUisS`QgP265%O2{#|KH{N<3zrPmW#J!(%@H7 z(Pac&|5#Po4f?6`Y7eSgW2(E~3s^<5NiuEl;t|F+Ip}-;QF+TV=Nj@w7~6Ph>4TJL zryge0baU#i7mFzl{5(+(qdgKX-KP3B_3%sbKU$XE_IT>yQ@CNKIokXL?I!}eXD2s> zHK*?U9O0c;x-;9jqd(kb?32YJMhhTfmxxs2Yd0My(>Ypku433d$h2<iA!&pHb>{mv z(hu9{QQ>AZapZ20!fV}?^IRs7bs@#jjySt)M}C4^53|dvg`pxkRq%E~hUQ=FaX}0{ zh(gGngm3ZSYQgHM{Z5csYd>u6*`cXCYxmJxKccR}F}v-V9nmR$7V{G0yK4ET`K~#n zkb58paZ1=Z9tZW89H^T@pP6eXeD|X_cV3m!WP25juf^zRUue3M^T+L@mW7f^$NCHm zFp_Rnps8M6lGn&Vs+|Ji3c;j5V)@E1D^VV!vKpArJv;~jn14B6R5Ir}L_sZ~Wh(zS z_ffuRLwzXB6_<LrXKV8})LRY?8?!4@A5SvpY*}+Q>;LruF9!;;E2&gw$t4w~WJ1K2 zyGi1ZQgd}FrHWN4g=<Yp)$@zIOr7}LvU)&`<8xX{8=vKQOeNXRX7!__dO5UEpCs&g zU-LJXcQfR1hmF~ms#NoK83v7_dG2asF(XuzoOP$rYL3CuuSn-Lv=$^>G4n&~qQ#e@ zcqY&3uH_zZ#oNlSEsup%l=r1%;QpD^!ylsnKAWBR0auOx*tbcWZ)>fu`Ak8QnTwyj z7@z5E^qa~ARqMN2QU?cqsN<!XiB2XdI04;NT!suYp~R8g*=1_&awLY=M}tR(lrV`9 zHk;y`OKABHWq!y#{of(OF!;Rv9uTeU%d+1rPfTV;G3Z#oItzw4d0~qit9L}fij<sN z5X#2PcydO>hHJF3gYqCUl_f7NR5Iu%GovPLZ*{j<_jhsw-yv1MEJ7vD+mv*FND>Bh zN9Uu`%?tTkDt)2LY2cwWo;{)6Ox@%0ms&B|y(HZu$)wr2P}N8fR5Ib{J~Q@ni_R#O zoF6C^gHdMKh{d@zP7UrmcjB~gD1C*+6Ay{HT%sYV)+oqww^N5-`ZCGVQD8mNEj}C) zzv%LfnFo^>cW~-nh&nHK#b`>QHUB;KD~fh;NE;L|QQqjK<PV*4e=GDg9`ji>n-tjX zQKEXyLcN6Ro>^kNqy=~?eFF+gcD0C2rq_UIJWr-qC&p@^*M~r7gh1zdpdM{^aAQ~1 zs2+20&B~Z?pE_97*-qidJ+1ktmT|Re*b5s(Tb76>JO#@Q{E$@nQ%zbZRB;$`QTILh zfqSUPyi<LT9*-dlt^h@Ar<bSh)XcHD=xP*IQx-UTdDQ)Bu1vX~*;rO)AB?6x_3Xes zQReeC*@tT5<9?oSU?KmoObi_~iih0Wn^+;(*8llAthU0fbsM4BF~mES(#$eWb9i{- zdkhku1NT8P@sQz@Mnl=N4>@l_!>3qQl^$pAu|Wk>l>HAnuHQsc%&dP*V~pu|;PWx0 zq<|r3j-qse){W_uvx>8Mft}zhu=0%2rsO$^vO40di5@$!)YY{o@+2Wc4o*0Y?i_UV zJ_RviT(LR`P|2wK?MU^VXG>s96*0vXDicpNlcION8uw$VOZ%S6L7&$yrB5N$vMjqI z$)2EniOBoJvDmg7RVti^8+0nnYXl;Vk!@ZQ_+~G$IoK8z#c?R70aCMH@?No9^fkjM zrmw-WGM9{=k~><G_MBo>>Ekg-7?=-zZ<VulVi!qDV`wG4Evc-JcD}pwUGK~e9@+4I z<SnwTXLB23w{D7cK&+`de#NHfy|b(dEol2)bYR}V-Z=v$U8Yzpe3x%mRGKkRI1Jbn z?VSQl79Qp69F&YeSO$(tqj+dbhJdYxl}2h@bfsg-Z^|^3uDFvuM}>O~#qP58Oi~(4 z<J39YP8{r#S^uw{Hk9e&iJFq#W)#^atg$iWH>$EBa)>ZuYO=6frgiI^aqOr#z8;hQ z5PI%Ywh#t0vzS8040o&Ub%qTGNva5?vAKUcdURBMGG<ldTJ(hL{l5&ML-EH46h#td z?yumbR1ob=rIILQOQnG4y0uh^O-u1-K26X~?5YA#T$P75#h+1nA<PWIP<G=3GHi;@ zSRGxyx@A*z+3MC!n7lK^91~&4Iz}RO@DEnzf9}ovWLI(QJQ0d(QX;klk7)Y?{`o7d zK~P_<7BMOuCeE^&j?oTj$nBUoMkcSQaEH_O<Tn+>d*$Ye@SA$sTxO~02gN*}rJ+&& zCt8!NXNyslywIx+P6-JmHVcprJWq2cRJ1{RTeFdFtN$2<N_Xe;CRx<iHd#=nfE=>e z)v@X&_{_&GL>S83nCMv)YTGpy$&Xn$UpGEfi19z!=0x4Rs;pt44&EdIixb6?uvobi z$S<6nO18AQeO0RP3THzpn>wf)hlxyWlhaI?X<+kP3}s@=@3vb^89zT}*}qnWzYdx5 zeo#aFS`~OaoBz>iWSS`whYeNZfYitDeznwm!Yich*uA!$Qp|G8=u@T)|8zsCYDIP8 zIj8wCAAhdHzv6lYVrUnVC#G@oD)YCLHnm2Drzr&aF@2faVO1WPWC=BiuML&IO}FZJ z(H_J<MC%)@?X+P{ynkMcFupZVkH2JXu2)*|C%ku+RBQX-CFuz%^|#3G0y7K$E0c(< z=FE>hio&3F0@TW_iCAQqA>4yXW|5y`Uwk)O(MjFjpv4)bRV^zA6gu9kAPLLCpDtx{ z`OQ=<HR>yksgkK=YZ0&dmOo$_VXxOp1yu`lBVf>LB#TKIBw;tGl1bZn=;ZGI4=Vsc zz79y0U#<^s{-M|&FY<qGM>4Kdwkq-eUF3fSsq$y^A?^@)jhZ#Rar^J$!{$R|Ap@&< zWD9r=&hl^<xV;h(z37lJ!~nxz`0$MxxzSpQf3MwYJqQLmQQ<*~m+2bORpZAcxioXj zyxLW2Y<>62Y*^(Vou<UC%?~q#G9e}lPhx~k3W-b`3-U_k?=%+?3IVw;7?1o!Q}i_s zAtemNB^ed7#c54wLx5%lxHkz<;aD!m<k)#(+aR|M6Kh#_3)TuyzL#yawGO=8AhweV z@x<gT&V=g9uZx64oGcv1C=<;Hri~sd|3|naTpy4}C^b_Ub7Kll_ERI}PbMrc$RoV2 zpgPFA4vDk$9>h!n?;Ss*x-(w%7NwChq_rmFtgQWowE~uP_OI4~!VjIv!nnBOubL%e zbIXsPxY1BjAAfUmRlMMrG<nPI4G3}+R1ysYl;+SXE)V^p(ZwjsDkut1DlbM^UO`cK z&ZaF!Sy4ez_^9yt#V98Pl%Uq-MurRB!Hf?m?s%`r$0bqdqV+XU5~bL%k`Y5})II5f zkBL{&S!B|eM@hp<ZfZ*vw1OO7*6?x^m!$Ym97dAd9hYQ0Mse@}RvbQ`1gI1Txg4`N z)TVp+{%31zUhh1#`lTy1ty2pF8gAfF&mwztoM_Yst}GrV&kNO73HKn+9_v@+%C9Vz zJ_kdof~Lo+Im=8iBkjZo6o8&wrCVZMxrSzCkbX!xT}R|s3g4;l1V{N2#ma{a<-hvZ z#ad`il^UX7M(`keLVye=0&HgRsZ93vOM>$IAP8#}X;g817757(0!OE!$^6`Ey8FW@ zhEaml^YNFcWR*_1U(v)R`D7ROaIz(<kZFUwW+<u3-sE>2c{`}4)@$k~|D{%}UnS%p zpH!Ptze>oRFF4N5(A%$OoATPaz~z^~MQF^DZl}$!2QB6oUYEL~p>y!JE!LBil9Qg~ ztLRA%Ntw~!qUm`A9Q6D@nI=Zh=CxSQ<vn0oX0cCgp@|CnAYbdU{;}fYq+-=IKPC&^ zv#}ge7Wdw&h^<?lA5&l^{Kks~x$d#A4mvSjHf&G3_Mg_JU0r)SRE@}xzeGKMchxOF zCW|8PQ{<)V6uBvmAxtH5x$Y_Gn?x>bkNmSgId<fC)J7zWO<q28)K05D<Ked*Cw!40 zgJb%V-E)2@=^={5t+fjETd7^>ydg`RtrDc9KKT0awFQxg3YX(%w}!+u4zW2yP$5Fm zEPw6C#}+CFt=jmb!tSaIgBUE!3qneW4IYQsu4+(IM^yM|)rGrhu&gZzDIs>oaftO* zg9c(ZR$X|&(`?%g7+N&egS^S&al}?5a|lPP%3pov*b2A?qJv}l9xqiio5zj4o-S(( zLQiDqI}Y(Hs~iUzc2-?D2Z?24K}bnQD`cZnk3(~l(*5W2$Cl{wY7`;Tt+?dJ<jzR$ z)rjJj_Ebp|C!7ybh;1byM7!+<>hhl)CxR_TPG89Vj**iEa=!j#^%||F9OHWn>UA0; z<;-!2W<jpch?^F<^el3@tm+aM6kub)2t{LQ)RekQ(-Lt(SW)3zDNcJu*zsI(h|QUZ zg`XtpXa0A+b_;5$S>dql^u=+;QG?$@czf2a)MYHxp^OT}M5bZ)u%A@e=r(x-DdPhQ z>56%MLxk0q0k(~PtxLM<!tp9B@c~1M#yTWK*mz4LTqDxs|Epf4T6!BGkss5SmAm^a zJ!N@us^sdEh2~!BQ=`LcjW|p!Q1{A>9sysy9LsS$JZQHJY%_{XteK6Ye_#cj9FRHN ze2A5e=Iq2T*cW$TjfXU_(FlZj3sriMG!Ob1pq2l`I`!tnBzj5Q*irz;U@?MURk0jg z#gF~-u@$fytV*iL68JPF#Rn=b<=w|2a%z=`1xMnlOMF1y^<?GkysbM9*|sW?K=u?| z@?-jPNp}fp^J79{gT0q#^XK0ALMyK2jUaG*6ywH%d{Vc0=T4qdm92%w=Ebe%YYj65 zm3L4JDWKj}d_ciyklK`h)tn}4Qh2s<vG}pN4=WYAu0?ODy2J-$iT4W0_43j>QsoaY zlesiyO&RQdX_Z|Io?kd2Rd^$gFMJ-ssK0>8glEuU7;{)u$h3fZa<^)_?N8O4tr61Z zGj#80ZcMZHjDbA`G~Z-XZ=V&lngCH@MO7;y(VG^zSTDFH6dmK)|E_{M16|0e-iZ&0 zQXnydZ+=W)Sn!f9i%)-*Uu7a45Q$FTvrsBLi6w|eMK))2Z5^VEn~Jb?`Rs_^IrmLt zFZ&?@N=77b;OcSKDojb37sOP=M!!JMnNmmpIDFOZVB7P9C7CIo0nuY;qubS>k+zk& zFz)KHX<sE;HCXu{Sc&|1nh*Odq$;E2-$)g<ItQBPQ}rpeM+aIf)n{qU79@C{x5i2A zf-EOhtUM<xQ*@xo01kU)GNqRvbNVCHqbPIEa+W=O%Mu$)g<DxG$evKlYE90Ufwb^E z5mIuj$zvLUt;DIG(}jIipTOySjgyBj$tl~cH5=hqj%Ss|oUH>!)8`vmdr=@(JXx1I z0yf!Cz@=%pY^bJ0=<?%#|B1wZIaw8IP3emYa|ttXNyf?qL{b!0buyoxV1=3^F3F`b z%du#>@gqc3&2SVRkujOAM)`N2AwAUu3$=%{JiCZxxg4A2DOTib8D$oVOg35A&zDSB zBM!4hxY_KQP?nr2H4L9AeKKK$`O{hsYSSSuc>tRlnn?mwlr5J^$}}oFVTYMg5h=fy z{ARj$kBufrDqlAR=mIoO0p3IKpn`;G;}qcVVwCC>pu#hvUW`(m0#ta0;)_wLQ-BK3 z(0DP*qA5U;VV#dJQ&IZv6?q=s<V*RNH^ohq=mPMqP65g-nF2JQFa_v(IWcJRuT_23 z<lS=m>3Rnqg@h36!+e!TVzcLG|Bcm2oZPzB%*zdlAu8_GlEEkyI}0*=Q~7t$(8gw7 zYwo;xW;1GUf^?ED2Nb|cQZjLy!@=p;+?Yk+Lj{$Gs389&w38jLCcNqbhPsPUstK>~ zJQB1RrJC>x&%3aExwzHLeT&hPOb~MQa>I`b*C^Bh6JoFE#3fN6`9zN76Q$U&s>vs} zB>5Dc8FS=Fl&~Ub`Og}YZ}6##CQO4-;YtEe7Pj*B<dfZ!Zzl$>8|J&VAoFrVitJmP zd<x11#(b0HlX<P-Etz}@5R%VzzXb<|v3xE0WC$a@s(&T<9Icvsp2C+CrU9jzeDaJ6 zmn}xACZAZ~rrX6Ri;_%aqQWM=3`EVGmHB`oiT9c)CE<{K@+SElS6J2LlUtH}<`a_7 zr6c)F35$~Nk=crvA^Fk};yNY1O1?@z<g{c;!q$E^;>}o-ucd5P#k#g2^KuK%SQT?^ z%F4dcFjDy|mZ=9ULUcc$uPKcdDqmBcJVDL?)7x1tlEGX_91&GA`^59|f)E)QE=H*) zj>2=>?P8Q9ah97WLpD%iV|cBzr7^@?7BgF|X%#O6VGEaV=6dk@qw0UCV8WN5g`6*f zM8<oAVAYK2dH4T->{T9rHQA-mL}yFMUiEj`xjD}lS`S#_?v-e9NwJgHg-l*|O)4F# zd0lQvUN@hR*F8@1x(wx#^_Q!?r1H1_!E#LpRanUDZQ!Bq8kbXWVR+1!gKH-jWZe-> zq#mA#3a4VW%$y|90l65Z@<$*YippF6RmJA6H|XmNr|V+OjG-5Wmy3tj^_fZdpIP|6 zYWS$I62#cP>y%q+9bnU~wQ?*s+*-8!_%&{=mq3J_gWss(;1|Zh^|c(d7zg^U`?+yY zbubQOt>s|-W6KM2V^qR-ZAssJ`5Nx8#Zb?KT%3nJP_88s6`Js?cX?g|n7SleSmg3k zT)0q+uoJUwaY;egr+Ly8+eggUa?;ev1tBrAUc`=EoE^9cJ=9PCy+vB-aF=6u7*Pv( zKm&IR0bg>-pBKjT)vC`W_T28MK59$M8r>vjEh#4CsxgY0Y^=>F0RA~$&Vg6IaBT2V z?I3(l=O1?VCRcS2{R<pEK&}*g%Re4HdN05CfA{Fov#Id)Tg!~4{Lc9P(WB?k1&jH~ z{zE1PS3G(2=tuY^G~U4Uvwr{f<D*Bv{S&9B@DWQhf5`&hH48_Nz6=ROYwgeccmDr8 zdQ`tlYJQ1Zqq}fw-4eV;_eNT^_Qafo6?```eS+Ut_?>`#Ex$*ZThs3x%=hy<i&=rh zP4Fh{Co^rah2MYSC%2VzM~_~`FTooN=6?j9S3Y|5Zhq(f2wm_KPU@eI9&Kf=YBRsj z^Sc?ha9-nB`$d!Iw*4fBZv#wri{_N*7T(V~a5{N`9Huo0?PaxtU?*YW*qe6DM$Md) z@cpUahq7in@-^p-UuFNP_O90Xi{c4GOtCI;-is3thFkrFhY;Cteha(y{E&*@zw|g~ z3THXDII~Gx9WyhYox|~{-NaHkU*DlUv;H10__OdopF11j-Xm7nI?Fcrjon95g|}Di zoV1_wGe~)RjpZEov7l^OZ{v^zH-k?6U^(-V9O#?j?0lBHjf@5B`JY69Lz$z^W#-;x zpyJK25!N3_uRmW>xetdu{C<T|^~9!Fh2^5b!HF#OC)S)&05;gl=)087if*Di!x@74 zLxZnY%pexC`TM6ZBCjU?kQbM5deV34-ApHG{lAXR0HQ~d1IO_|F4PZ1H#s;&%rA0+ zvhKsmzv$<%5t6YhRi@z%W4+v_7tLA};_&YXmqpjjxoos&8VtMOiL=;W^6P`_A`2wg zv&B{`bjbTd9Xv|Q8vjm6r*^kF^K9DJa}69Gib_}F;X6&Qz>`6N?3n23$e1k+4Bg+< z-qiF!Q;)puMib69@J3aK5-G#E2fdD(;e}9w$eUBr#T}XW6FTH7Gm}|ca8~N>m4U3* z8I5z%*&~~xQV$ND%6p$NQ|i9F-Y-si5S9&8m6l(GE4B76&{dTDKoYc<4=P=fjUCDP ze6~c^V3YDA)3{h#1Qg#b_$86%=O4++1f0jwm#!FlvPsCmfmv%VaQFZe;3}sRb>I61 zS68zqmTmg^(fy<m)BC6K4P`KwUAsrFArWOPzb*u?1hB1^Mq)B2j4$o{$8&1fr0Ova z#IG52VL)=H%u@A<PXFbG#R~Uo(!fSjR=L!a@5cHCofBl9xTA>>pzgj6e-F7!5AJMk z_1iw8&AhGIJ=ew2vSQ}@o9v)f_uM4uMo!ZcgeFyP;QN>?NiSHg%RrvLi%3$o8>GA* z7em;6A|@0tqeo_@%#d9Xb#v?(rz~#cZsL&{ox#A3M`lLd#3M8Jx~VPVAd&f=8g+l3 zi!YXUKOOf!ANiFu_bXL6G0)9*sj>0={AtnGPCrD}a?9xx&0mZ9pU4k9@rKkL%sW$O zk8mV}gH~m;4RDj*LdX`}lE4X*DfC1`Z;8zb>B{+$fW?GqW{y{%QiyB#;{m^D#K*Zs zf(xQJ(7jd{yWPXdP&k{aQc;!Vsjdp*^oi(ko-ndQAFj=JLngazV3-pt1P*WK#@&w+ zi=TU;X0)swi1?*O&5v-^gERIaQpy+`4UB15pw|SM(Y1Qwj)OY)uH}plcUT#B<F(w` zThD>EnFEh^+k4M-Jl+kDkl6fbL+AW@9gnK15*}q{zjTGiDbp3o9$C!e$lA;(Cwt<| z=htTLjd*v*cpR<cach;ft(FHKi}?ZG6LKCebUhZ~5fYn20qefEjz?8v36C<@@~CVT z)b{ym<c6)24weZ(sjYW#%x>EdcRxSzJspFs!?nYSare{AVh|DMqvDbbx~sE)ZuyDP ziIq2{YtIiZU7qKDNqOctLyv0T$CCyOGU3QQtxo0q;bdl30>A*i&xYZ=TBi6z8vqLt z_qXYMEA4B3VkI>l@DUEnaI;;0oLdsUMhg&{Bv)dIQ<HT^221@@IP4dh1Y;bB;aUfs zGTc{jn9SV4JqkS3S8QtPTV8S2gnQv^wH^L0-TTBh#uXe}mMf*2PP)}`8@umFl~z?8 z(=Aok1(Q~&>DJ&{Ox^iZ)wQka`UI}L`oxl~siLz-AimkbdXwfMwe-<5cJl%I@E*y& z`tfLbT~ki{=xE_(79@n<BFkiFdcDytGJk@@eEcPylbZNJbMw51>98<2J2*}>ex;U0 z!?{5?3(;7@O?I~XY%3RKb)Li(1ud{NnHeH#scMKrqSLATKUH+pJ(P`COhu1OJk^Rf zsjNNx(EQMf=$Y)*kDbCDsF8d|a0Rt%s^$2&JuB+ST(W|K?_}ZzubLRvw(`7=H88gO zvD!|Sb$trQl67C{o!spyv)$05!oJ%NmFNy>(<BA2BEjZ``1%#mkF!^Q6A7l5)AHEc zMlS%hCF14_t4pjpu24iLHNqT9x7Nf~?{^$Qqn?)XC7u#hRo9bMDlO?3A3K41=p5*% z=L&TPP0%3{QWw?^m0!dNw;=;erSfY%15i9)Xa)$V|EDv+hdj|6Gr%!)^#43rOo2Ts zbmfEP)2ad|QQ)Y$`3!L=8QE=KG`UlH^OJRoRk5+OqzjR6@!pT8<kj6nDo9*067B6% zTa&OKJaW5Q$<BX4noQawa-iG_=^U~vJLD*|qpAGgx{V66J6A1<k@W&%qr2A3x_hp~ zc3%3ctUf?%t&NUOp9&)b4S!;Lx{wWlc)PQY6?}BygMje1UP;5j;F5VVRXW$K-ov)$ zVQcp4&64jMkuK`i@PP#xzWFhklSWw#RSULB<ykaW{w>fbbK}cWw+(}Z-!Rp*SKdCd ztCd3=0*)b``Ud62;>np63cgE;x5nfVs~aWWZ<+NN;<*5N&$~XMXq1zL8c*e)sR*Hj z3bm`J6SB?6Lsnfq)x6x2>sLy^%a@i=&TKzDhJ^p0Ct$O<LTFE5WK`*4XBpMcQ_qtT z24>mZ){TE%Il6cy9kf}-?iw~)tIEb`nX_k4r0!HYB<P@-zjeMAqU=hGjCdAetNC<q zMoF_6qkr-#`aV`p4|TR!yGVKUVta|de%@&~9HOP;sEfrQ(iQ1yjLgE|t~S4?>SRdC zVKQwFNo@1EQJw0hsMa80uWw-Ms)4TuO4hE{mG(=Q@QHOI6QMdx+R(>P=WFfxZS`FZ z6DdDYQ}kArrC<fGjq8{cm%k8-5ER8~YQ93LGx+ET?v3|@=yWw#Xz%EXrgn5OqGY#F z=U-<*?27*W;>kk<WTVNzT%<ScxPyc9_g!4Tvm?qpP7vLw-94?>5p7(^U0k|2{A=0h z?>0r=mwu=PQnm|aVpFM`E3<eDKHkhw^?dq3y3>Q+YV>ZpK)S10=9h^JW;Qm@LI2XU zY((O=^FbNcp?3~Y!_9~ef5z_xbnoY)a(cOd%&;W_d_k<UJwNau>8^brAvf?Wt@`|N zx;>e>Fnc(OZm&@LsrtF7v%{#w7q^Q6E-YQc7?DY^9%hksXGn5i$S~A3O=$gfrU1ca zCaCtQ#|3*jPa^WOS0Cw^$CpA^{rGpSu@G)<vAEpaTI1dZo3k`1bE*7!Hbp?!>R?OM zt#R@zQnzX92GeO=NQ!B2;0diva@jr>0uou8NT~KD%;`L9x3C-);<2%(BXyh23H;0^ zu5^o$&@Ne%Wri?+s3jYH2;(wnzbaMupd=L^UQK`-cybb-3nXA{;yES_#9JykOB;gP zL`|yR?<Ean%lDA$%72I}1Wv77QJ`qmIhrm1o_oEr&TEBvy$UbHw*@A9_PCbcYGvo9 zr<2zHm#gRRkB1s<*8E6N-NopuIo|vPr33a?`hLn<E*iA<DW|OD9Q0RKn0N6rI=Xb5 zYUJd%ouRpyaE-d1?OyJIM(I3m>}HMQA85*;tAyS_3XXEA2|ajw2w^|&qxlUd`X0*s zz@yFKaf4G58ZAd3<9@>O3B)kOE5fOdZx^-F2`deud#G}<i1J4ailwjJiy3z@m(Q}~ zTgr!%U`?YCu^Wnopse+wYEW^e!#Z4{_@id#iKETCQ@cCBx8z}}H$S&5VsdZyx;i&j zFF#5SN$oye&S&z0(1>0W%Iq(;Bp36KuqY`PZgjFcHiY9YIE0p91eW&e`ccgYg8+Mp z{!UHwHyqrlFnDp<QhIb_Ph0ACHf|{lX~1;Xqt(2{6qLPeG+cZ!y+KvF<l{%#c&suh zE?kY>`|R-gBQ4Yj7^yX_a~G;FpU7depU<R?^5Q~zWrq1%?(6De_X_fJr-jcgpAB8t zn7K=7HiKNN%ix3R)S>$KRGs9r*rf}lCUAdt8@Z3Vj(N52N4eQd3VN0vc~wiveb}R@ zoQiH>q53+f&k(;ip<8_fRxwZsC?!VA^K?-v@#Z(Q_>n14l!)z?*SI`1!Kl<(<-cO} z&0Kx%c9>}1`(^Gd);P61hjJ40lQrgP%tOtr-@St0nfzqd@4Ni!=4aIqSTT8ct5=8A z@S{6}aWbb%;`LWqf65<ewZ_B3oR^Ky(`pYC_ytKS(>&NiJLSt>b@!V^{d1a^%Eo7< z4xX4_ptfE^G-2)==X1O<xt`d<wf++em@^CI>%k*3a9HMP;oVE@sX|w+E4xma%uH~4 zmhq0tNj7_FVS1LI^o_xZ904ZEEj!4`sfQ04<+ciq4FpD_zSgALKuL&`w<}xg^oKrR zn)V$%+MScqXaBs1vwOx^oZAiI%K8}DA>dl$>-cI$lQ8YI_gVUT_1Wq&F)DyS5q|jD zEtWaVIr3SWBIzRvv-X7&8hm$RwOLXR2p3kgCapjJpImZLTti|4Z*9-!Cp)rdFQjgp zQoTA#j?&+)+51fx=HET2Y;d1DbpBTQ;{GbPzXv{9=pump^J6ldm@0im$R)aZ7KhKQ z(ksfVR<RpqvfK6wH9PUtax0KjGvV6ZZ6))Fy1qKj!6P&0Kl(q$={2b2B~EeI|6uaT z-a<&-X$MOJu6g)F3k|p$3;4;qIuDnjS^=<c21M;jGDCTd*vyY*0neuHP!k_)>=aR( zz@m`+c&y0=8(N^c!!uZe`$?%g`@yfqlq@Gr;@T`amZ;%*hN`s%?;2ld8*-l_RZ#PE zTROqD3@~YniRFK#4Ot?Iwy0^TDs7y6vcW|aNXFT(5|+3645v)ckaBA`{SC>xVv2Ab z3ddO?0S*)4vZj_&$yUP{ec4|wyWG7uT71cU(;oR+_u}O#+qKV0wn}F3%QdT1mc;Rx zh+KcSk|xGTi0RHXt}7EWFtH?+(}XwbM4+-Hj%4xbx*@;(sb<JrW84g;#nAC&nKF6{ zwyBEk!&F_&bB8s|=))~oXR6jVtg~1xX)Wkn#Rl%$y_OpB3MkkcA#{hUc`LAXIYMNA z)yLvP{oP^pm(~BbZooWmwg2E`QQBebg_SCh`Xd_9-TGd&n9~}oMAh1<Q9OGxb=wyd z#_;Km(%Z4St5}>)+K?zY>89Zk18tFc0hpbr?1iGDY@vp+fAz$Z4anNU;{a6!sulK) z1<8G3OX(v~z#R9F9zy}GrhrdZ6@Y|^0x%|L?zu)WKQO~wl=g;H*?_J(s^u#zyzW}m z)`h|83c3E!oai3L;}K}DCoqN8VhI<gdVXOP95z!ddS9sa{`T1O!(`^jF=SrTnCR%K z+BKhr(b?A2UDnyfxNNb|M@;CQ&hxDInCEvyMeQI6nTt#oMyscDRsF*9Y<_M<6;T6E z5V>@=5{5f9)4?hDF5q-NQV>lj%iPTCZT}0A-!qgIfa9cpo9W^K6UFlCQt5A_-uY<g z=@*7JXK0~o)SCYpy{d*YO(28<mt+v_@`-Mr_mK1KERd1>wnV_%JW-P|>iR27<c9`* zh&(AhPgA1(vq?_AMb2JokEe-rNWejR0=t=!U+Q+PvnvHBbMlp&Y&979#TeD1R4+;6 z`&r3*JH}b1zN?gP7bMy1BlT&wO+~aPEx%q9_+z7le8WwqevR{NZdWsXn8wom<S=2% zZ?=HHG<Qrv)T9WtRke;<>b-@<^_9QRqZw`Ktx<*<li{a{Z;&BUF5~C7vYIS<R)Trw z5wRn`c*r*!3A3n;M#`Q|y3Xr7Blg1ZslcrM@==zibWGHcRY(YWtod>J#9m|S&dn#| z?k8bjVPm!<b$g>`U7Xh@bP{6l$hEkepEMrr^4k8{Ll-tTvn!;bzE4}5r|}DuW+8Ye za$J*5krQnj6KGN|KHIA1_(QZa-LppB#v0*mDiAi99^<~2#FJ<924;MU_`8sr%pBH? z7cZu9TzfsHO23QCySHsVoZYyR*ExhzR)^O(VylXJs+q&~8b?ilc=O@>k50&L<C<a~ zG+|=;Q?NCaefHdEvTyY$ZF(e`&pDhguh7_7Jr3PgJTSx4kBQqE(+S55J}X=kiYOL^ za<|%0FOxKC(3Acu%GOQ@jd6Uum2TXB<ok(80v~Q^2<4j$v3Ji*X6}U~DjRX|c>y&m zWV$eiQi*IbGiAP$nehOv6UiLNaIo(Sa7d8XQ^>+3!!)#3V}e7nhAlwMn0X^tzx&MM zc?`}i9Yz%d4bP+wzJ#ggZ~ZL)R4Uqhcx{H~8mCE7?jQ6z@Lnpert-BG!C^)OmYi2A z@ZiAs6HhQNcSo3Z91d{~+eDVVqgMzm<~W>b4hwGf1+0D9t25(z4f3$hu8kX8HJ{hh z6SS;VcuXAddtoA84u^*Q%S3!}cr{|XQRdaZg0X1NQ6;yzN+#y*GsER`z^aH``W@L= zCO;`v3UXBz36_?t6KR4BhgbSmYVv|~ODU3;5cT9#;V&?~a8dtn>fQxDuBzG}Kc`7) z3WW&}F(}9&MO)KIka{h)$fRUoiU|ZHP!zPa4_cm~G!T&336qpLou)(tjaoEb(ObPJ z0SW{tkkpz4s1P1PuJlTP3K{K{z^xFl!vFhSYoD1jk29^;dq4lrZ~AH0*?X<M_S$Q| z*M41zO#FwEdK|@WZRzFR#_mfZcSr`85_3to*OMc?$!jDFdXRZ63t|GPsOv>>?v+@f z0A#H0Ir<Se##-(GDK7%h=jf!UJOo7YcKku!^U=U={09r#pQP|l(l)sZ-ktF7lp>NQ z>70z?4Umwk*JfZA`1jIeh!?A{jN#VwAq4EjLq?hp(k$$kd;?^Nrx%HR#C%Q;bVyoB ztyT$XoO&rNhPk@ls>w6+TXSu)@P-i;{G#CZW%AQ@1=T2yv0ZOuCeA9$wcb&gX9n)X z<=}kbDJ6RlfmC){RQvS7Vtw-w`j8siEB9Og3r#@RGikWY>n9AfP13Y;n?5YCY+2HR z^+7PG1TCvtMcJ}CI{QKctH#m9y(>8D@-(%xy*#+m1KTwl*Tn3hOnqYr3#7y=Wy@7a zD$L}3Vc@A@5RH}m8nc(#QG~`pUzhBa7$xn9xTR~dX?HFlDcpZE-O5*u8>7OL(jv<& zwt_pWIMr-G9*99Hg6HLt=6h+kjo<|#)qA?&p*rs$Xb*yqPZmKGzN5t=#tkwXmZzhH zysBxZeIeP4mh1UNEsIy;UU7T0EcGLUiBX$Z&2ou`$xo9olnf*+w{!_V+OWMvLyEHe ziM4FbtjQ<|To*xi>n>@ciy4B@Yc$Xkl;3nl>hnO3&%eP(=bLWFCrfU|hU&ZnTOCx^ zG6q{JcGZI02;@WiuoKHsr>Ll7DEX7HA~zmbD=9cb%fr|@JUa07a_9NL{m;Wp3OT`~ z*~S~wSWr{L=t%OzpanB5U|o=AR_tNMtG6|13GxI-bWk9`=X4u}4(|Dy$`V44N#aqG z_9%h}uo!Vkm1=F-$>UJwqLc7WIcOy}&(w`1*8&5AzX^f#6m0BRq0`B_21u;h%AqPg zRE9Aa`d)h&r=?srJ|S7Ov6rQ8XKRu%%*2*j1gF&d&m4-4AvnZr7)j@J`U^=Px$xJn z+SPvyS;paa*83Le_Zsj7p~IC|Y<&*zM1)Wv*P9j~(gmgP)|kM0VnCD&T&P6PazI@} zI%uDXa2&H^5Er=rtWvzPk~5W1L&1D>VtSfn2oJv8kUc6^q9Z}ni>ySWkL7PHeY4;$ zDABk5`d`8G7V^9w{QDBN4lp?;q~M9_Almi*mnZT4@2$x6NxIb^qjLvMBXSw7o3?69 zCYCy6C!UV#e~OL^;mF6S4i1L5P#svko{JsVv8T{=$+~zu7fY!Rj`^_}*m-=g7(+8# zJLly0w2SMbnt;W^lLI?jVj9*6HzO2M!iVBFO952lGFN*9H8)b`r;`04nod>^&l@{h z)}Th5BbIqv18pvgCzcFF`b}7aK$inCE_tS07oEBx9{wY3*tj}(eo5daW{-Lz%M*3* zt;Wrj2hw*ijA1F#ER8b5ae=j?!VM7PCa(=<v;<@`AJWJO7*sh7P9N%ZnbKO1c*j&g zZP*d{q`>-*=Euy>5DUuS7&;FJBq}qegfCsk=klT|CW(3yXG0-P-I0pJ<S@|lZb#Xb zl-^Vn$pyN)F$@*ZgjE#3DGFqrl5l5~NWdr40TG=kLYZGkMmkRu^E%<~!t~OFR4daA zlr-$`neP<efP9uJ(VN^qbLEg+QJ4j}C3!4X;F76`+yh?KrCOiY0h3V!-P%<qwW|nq zU20d6sa@r$U2&~lac}J^_tdV_z|-BQtw}0py9UD#I*$I=ajL2%s>+0S)aXSP9kgXZ zoh*Y6Ck8kh-icm}^C9>Bqt;zfvNzq5`y_npKoCs{7Q}|3bSUvYJt=iH+O?)3^Dthb zVHc3YfjiF)Iv733X|t;_mmdH<jmj{f&3qqshZQ+*;SoCwFy=OF$(_z``!S+VI;f?W zgm+Dri8~sjR<2tXVSWa&=eDkfBe1p}<vy)i?0{fv>&U97ELw|GRzA5w2QNdDA|Zik zhI7BcmG8T%{-X@;(R(Z1vU;u!+ncGTK`4dGw<w#g)>8zhm2t}EqVPmfCuMcyFNQyy z6Wl`eO13GBx#6Bb+nOv-oO9ql87JHgQs@pQb{*n%A<A*I9y0>5Q#A~HEcBN>fg6s> z@Yob^tz_VV#r`4;C~PUHEcfVTQE$Rs$xZ0iyv0{kTqOE-<S$CPoB`R1vQiY@1v`;B z1%P?}-0-eIY>T!(C>dh8;Xas7&2g0+gH{~BVcVTr1vJKR48v*OSr0Q8c%V+f%2PKy zw>lVzT_x`Ia7$kk+X}V~ov!f(-E89QAeNh}o$+ea!x~8Cyp0#y7xceeRBJ!Z^;G96 zY$0;OZJL{i3P;bdN?Bv<N{Oa6d%$U0k4U8=??|?Al%^RYrG|>eex*diXi>vX=NYs; z4%;5KA#p8MPs(k0P7hrJ_6LcE^{uZ!?hpF^R33`I;7b~cpJ+%wu=@X0x=*BN$ov0P zvM;1;^7lp;9+fnYCg*Sw%akyTl#1$hdGkp&lFgri4JBwKqTmbTP4@Ul?WyBv2gZ;? zqil$<+bnP&p1ez&&M<AGcX|&1lxo@~Yyfx{oFN1V=BO;`W%?0Rno(4mW|HW#2hApC zPCbHA)o`*zgTo>3;Nd_CyGL+@G;@pb1kN#Z4fdgkML7~*!?6n%;CMVTa3)szF;rbj z5_cAcNminGh%*K9^jPmqw>v^6NwM6)uxCfP-0Y$li996a*0huXOm-NjYZ_8Y?kG(7 zFN-nm`V*>prZG$cp&!OONtnA!v(|+ne<bk$t<R!Iv#wAo-1OE<7^n42s-DppbFz@5 z2<slo7zNU2J;Wo6n<U6A_i6_2!;=<Zf`*mjUi9Zoj-Vow<*+Rq8Roo$N6ymcon>DI z41Ia{E!Z2s=6{Ue>4o`C9@2uM61wNN3&{7yz3`g@d`d!>Uv@eZQI5{d`EBSo8xI|p zu-C|Y{?d~lDE*^uSTt4ad$6R+dc;qznZgpQ-<tQ>n2hv7K;#p4^3WP&zGry+t32Ox z_$?;en)H4b92O%Ds!`VS$})%b9t(piAj$qH=a|-+=aDn#Pkdjgx}o|UzOmE=rjQ2@ zE;j^g5*L<Zb1n7*zg_)k-vVsnb@nV6{0(Xz_X7`e*n#Gz52rwDu?MhLw%}gaUE^H1 z5$8|QWrXA41hT;z=j~eOm0Bk$_2iLK3XWEsyL!py!}#pe&-0)#?2m2T%6s&5ynuCl z3>#vDB|4-+lg<O!GL#Z_631k@eNPtr>kwQo<4beGhG9HBhI8(EhJ%fd*pEC6<{(?p zBtfLY48-0f4EU915bHz!?mf6za3nat+~7ksiO?)2q{fL3MI;C4HQRV?PkYTVUc>4& z3~`}lykgfmB0iYuI`L6O_DEWs)^T-iGR_Hgb{nUKjD>zS8pb7X;<M9WOVv5FPF@0| zXT0@K!k`WkwsNO2J!_oSa-kGo9+EJ=N2u>`>;d92sp9ekuY|4}u8<(OksFGTGw_rk z5htC~K~FsvLDJX*<bwn7G)HCfAVN=PdU%MZoYcfE#^fY+ES^mu8^#ms^_7RVE)Or2 zhn~1t3V(426$wxm4I>dPpHPuZMk*9Nbr+K|!u`we=^sU_Q8(<g1|cB723x1&>-(4= z(>2igXXso=23p7PX?&CE&t^$k>o!*4uT)=9eW6}+;@AG6eX|O+Z%MFW`lK_#XClfw z3sU!8gnDPd6C?Hx?i|6)0z(fR1T>>k%%?{*JTW+MYPOr9BbT8>I|~7rk0Wj9fZYZY zpVcM3C1gCn(FM#Uqp19NU34e<R_>X1cw+`Y-H_gxVNANhg|j^lQ$B_8MtaV8*u$Hl zt}E4Gc!JU;KaM|~d?7e2BqEE<XnDrrbhLbwjXk{#4no{O7}EXz?tV?|O?36dq)cE= zfIY!F1>gd6lWtkW>TJ812RUrY3;>f28f843nz5fTvp)*W$zHEx|D$W?kP_0(Z7vOb zJM|!F;J*GWekw0Slqn#?VETeEF=PAzCQ{A`FV4{69nA8;eaAaZdy;4otw$R0M*<|~ zjNub&K6?oCsaXgv=D5uM1cymVrBGzYC&s2nevIJCv00aA-N$z8QixD_ta;C*KpW+I zq&wxEMSo-p0qJA?6L`8)(?+8d&ZV07a4BTweI>D7A;<@MxvWIz%o93i9-)#Xp%s{u zhJ7bocWK-co(b2mlvSN*sXYUyWHP2zc#9L$s&f!j&zG=3L+6}U4ePWjYdVFF&w0uT zZxeyg4W{Nz+c<C9o}M>tL>nT}hewMbG)^99naAkE%rZ_%QH)ez25G89Y#YjT&V0g@ zufTn$m6#09)?cHmKZriYF%U)oBQ*|IL|yeE?MNi<A*_yXt%)~0K@(<p8}5*KLar5& z6>(I~C=6}wGocYaROQ~RA!Yl~arojbQcZi)9lV~mWt4mKq){R^^Qo#Il8ZhG7`U(D z37(}4_hUYS7GrLBdmzRQp`1n`8kk6&@Fv4~6Lq=GY1*7d;(~SD0wMTFM@vtl>2^cY zJAhSiV@q|{xM3E9Ho7?3O*C~WQ*<zRJ_^@WtTAd=UP$l&n(^4SM(8!;ej!MOvb2Wf zmu0FnGIKD}|3Q)SuG|)qQ+}&hzi=Orv?lT>IGo`zjl6CQJ>3mbcWywM^VYQ|Q;1M$ z0yECX6Sc#|&Xcjf;0(r2r)f0MM$?~Rzf;a&><F~CyMD^k4LWTYTf?2YJ;~;5uCaN; z=<~VcEPXy2ngyk(Z!ijMttfl5b*mM`ocg_kW+FRA+!GogN;7Wl7m{}mg6$sK!z0&8 z*@3L{Wh45uVMMMiQk53i?DER_9QbCne|u?<9!#YsPy13|>^x6xAu&y3`lPm-8KSM7 zdQ?jMjJC=XB}Pw+Qk>D!(bRl2JW?7ehjI?i(9Nh!XVYvvS{X$Zr&eV0t6D)kDSZU< z>x1p{gjp;>$<xxgq-8gvK(pApVu2JJen$AYgk3co%o`g8BcJt#Xdr3^CkV<>u%r7+ zxhKh(%u%9yIn0!3+>60aMv~<LA`^`LXW}j$tMc<(I!@)M!@v}vCUK*TPfZlPGtfn0 zXuzPY{bmFYAqF6XUNfVeYp%VdJ~RE1#G@(sj(;Zpbl|>WG#~N00o@Zotweieu*HYB z-~0fWb>RWNgEJH#iidG(mD?k4R$Vpij-2>bpq+(Y)R~Birk2!=%T;s%_(xj?-7&%A zHtuQasM{6k;G~g_fTWnLI86`-!#hvn3LT8oQS1Ah=Q&|=uW2%oNQiz|k0ML@#bl!G zq=bbx?l__Ms9eNjXog^3OJRmJmCQ@zT(w9~akx#|wG<(l12+f-Q#^13hoTt0G4Y%W z-aSY12?lEC?vQ*^Z!$9VoZm`<H4HrsBa-`!B2@x#p%I67rgMV-K$M|5K%5wiUXM>0 zOpI1JI*Ugo7Ou$0<MIhsTwrtJor(dsco#lJ<FZHYpDc5z3#cW?7N=FSTSl>TN-pDQ zC~I71`;#88l}cir=5lZQ@6NmVrg2BZbG028LTdNAH#Envtd62@-9bB;G+`H_HvT~J z8y@12T>cNVtSBL4&HxV4p+&E2t8<>Nb&i-W^$vw>J32Go8HN52V+0h19UzAq<zlZ| z=LI~*+l>Ay^<uWhwx%R;S}@VF3uBW+!%kR|^(ekDO?2?|y$#EK-FO{VHLINkLH%|p zA5Ih(g`cZkg5i2yukoj-;y<kZedxYYM4KRf5nk|?5Ith;-mZ==v~xw_A$4?P<Wm$j zm^jjq!gMm0>gWTR#Tfc(>P0#26QS`jo-W4tbc->`Hl>SkPr4Z6{J38+?$u(9uqX*) z1*qGEVvNA4VmzKM#@J8GVvMPm>6hzz)5REd+AYRl$5V-JF$Om&#u5ov5}bH9*np@T zpPS@U3Su129>sLxvp0oFH^A;@QLPBB%!tr!eDUcvzW8(--|?)*7Zrg^1>@<8fWjzF zsR(8!s@+dkeQ@_P=b1mv2;A@y=;jeKaGAiH;5tdboRUL6Q~5)4Brdi*fjdtx)qQwq zKT|fYjQNzYk7K-q;i{VJa9dyy+|YR#`x(ZTTB1ROWE9<XDW+^r(~d-wq;l?EOKI-K zkS=h8?k?PehTBS>%Rl(<o!3R1L5j-7_Pcl(rEN6g%r7^vM6=MP;k7SvawSDrnlZ!j z8P8Oi2I3z`&x)+{EZX<<H10!s49))}J#7Dap+a0}SN#ADqSX&h#ovtg-BHY1P#>^J zEhlB`Ix*ph$HO-wueuY5JGcP=wSpg;2g6YWX4QxX?mK@fp9H_9k6rahd<0MEp}7j& zcN+mPVcejIBeZPv2Icw_hIFq`p>F_hXn@xeK_+V3dlI*@!HaF36j`#>fg8Dr%gXMh zXLMc_I!@Y!lmoX0Eg4GGbbzR36RegPFk)WO1gK|owY=TB6k+YH-Z0KN9X(R0Tu+>j zV+_f~jOO7r_=}jRBShcD(cX?|%Z>124PlE8rBulM{T-aca{~_i8oDd6=|(q{>5Eh@ zrTXbTE3(bIp{rtlT-Kttxj>2uY63B2LPMNk!uruw0TJn!(7$58!z|=STcfW)^;_dx z<F{S`v}mF!Dk;~alhKFi57}Am*^<kFO4<9448=5Tr#!WUgmyEb?6itHXnIA*n7mO{ z5RW$R4-VYMC#i?F>!LVNjvIlXbvyuk4(L_eVid%C7O>hI{V7}KW3>4Ia5+}EAW`6g zyb_zAhLv4#oCxl8!;0>AN>&ZZ$!&zi!OTWPhl4f_9AMLViJ<l~<zaP4Ps*c+1q7L$ z^1#OMp+v36V{+}1zEcx5?P-$z&;_2FK{KUx$?*I{&8<D|h%g}$a^f!^$%`Qm)1%4Y zf<#NVGet~aEnUu(NP^q6AnM7;Neoh-3bf0zMC&%z%CES0C8y`B#{Px*12|1&Oj|KB z!s&ik_pu1fRv8D<#M+nJpeMN-)@;?lw6L6JK#q17ln+)H>oAYbvtZiUS`u*xX(;oz zH*r4me<hFVXCLLkjhu;=J^imActXn_^Zmxb>F?JkoA2<Rv^^EgTWUUb(v8^21COy- z%Wf1SG`?2yRP;8YERcn_Yev>>M-5v`TWTKdeh2|%`%4GSWHhH%;Huj25biL1r)4+B z$TOdI>c*30K!Pvw9o8A%Z&<hOop-T?PPb=C)K7o}yXjDda4ddQ!4CK#+>W{7-GPo@ z$hX||*3NZa6f7}1(Rij6nc0eqFu626jl12(Fjgw!ymb_#I`UXwD&Zi<C@$AT<z%}h z_S_CuQ%I=fQq@pb!4Ni*C1#Zvy>g}>ZBk`J@Eb;tjmX^X1*fwjh|Mc&d{9dLv+zV8 z74v$a?M_5XrUOyV`%pH`L?sbju>b>uevL5NNXORH{w2?RXFeFXPu6BkayVC=fnaD% z5v9zTY7;lee2ItMvA!%5Kea-t2prAIBxoRNtpBcHMn)N&dMZff`~#Q!AbqqK?R~r; zO#nvn82GU_iNvm5!C_CYp7p?39as43y1N(~db^lCO}nH-@^;^r9WZB@5fV>7$<+dy zZ5^=ScX0P3N2<*w7+IN6+jMu&0c6GdSN9~@AW0w%$&8eJ*VT{<-x%&2cPZSXC=BrD zEU+4fOFi~!nTxT-$kvDEw`cr`oRAxwI2<M~NQe^4HTA^VC6SpZw9FQfSJmvj@6$7$ zg@VVlthi?ZY3@|>|HT=J@+8k)Hj$*Dk>N5z>@%PSCoKlNOoWA~VKiR*;h-ldgP^i; zW}n=G((OUXVsD=HpU@1Me71qVt|#;Mr#Z*>RX;#;O4xaP!Qii1%UNW&uER2eIt%lz z>?VcZQ`pMtJX7oZhw1|c&~@L#_DP6aHy%I#@I=#d{Bo{50sz|J#)SRxiG1Sc>D2Ft z`7VXzSl!(=2i;6+eFf){z)kKq{t$(%OB{j~Wz4a$$=tz2PVRlG+XR7bkB5H(Zhd<H zRA;p1Cs1|-K~OB<Y32@GfRST=nEnE>DPpeaVrg`%sFIs`Vh`rUw~w(KhuXE<B#)KC z7~@cEOT?@>&W$_96a~5-tV&1WWt8$Tza#b_4(lu7!_7*Mef<0~WFGd?+8&9&l8G<~ z4Y_OlIM+USY7ns_UHqJGJ~1N3qIP>@n%%?cZ`rJd12aOai}7)2eG_)WmYV(QJ(!0g zF`d!gYA76opEDRm$HN@SX}Au#G#sgeHnAu?SvFV1`a-GMZHHVho<k5!-7#Ut;{!7E zj)F@RJLTem*hPpDZ+WZ{CD(OfL;2CevNXW@3mN7BAzKSgo*-ylC-Vg}{JwBv!4Y`1 zkV4}koK*5V9xg{H8d7Dt?+Ma?Ag413LLkTrPY^~ViN*aoebrK3Yg7a>6O6H0wsXi5 z>A066A|1C9?a_)U39fy!Di5tW^J9`78%OX4q<sIQ`>W$aHF3RDKvWbPof3&nObN8J zBZN<vspVZpk4d(zh7YcR;Cu0FAdZ$C>R20vXflD6O0{U)pq%<*%|Yb!XHzcNpKmh8 z%02{}!TOXqE6D4Zp23#N{+F?jXh^m|cgS|f4tccG6px4b>d;{O1pdlqEL6Kh<Orvu z6v7x1eIv2sR#LK@h<EZM$UB;&l!#^3ub})nol=PADJW4Up+jEm+_!?V6cV^{cTwWK z7nDWmAoun%0Uft8WGWs1yO}j5orOkE+M@lHDNRjmk-M5j$Q@o-`V6sb?=<tGCd=HW zi7nUngruc6A6fd8tUOkmkHi#haFXd!9+E_T85%mi!{XGJCWHAU@)Aum<X8{OEwrpz z;>%URaNj_voC7dzh$HE1dpKX<>n>9n9S#DaNTnw$ZSYL(mqItA<GTp%)QGs-i_;T| z{Nn@Za!+PI=!(caTda}PH@|0izFFbn&ow5FPaAc;+z`$YWGce^@#%vlW*HnTEOd_G z=5oY{H*Hg7>>M<^h9^Vh61aODJkfgRZ)m@@bJv9RLf`zYNuQcQyi?ihqo|Fcl^Rz& z8}@p-9>^M8Z-<MTxjpM0+^@pPh;(5;aitRGQZ?PPFS7F<tk0?fn_-wqVKol9io&4F zsh%U7?AyN#9#9>k7T<DwGiFjCD76xrfqrBxAP>*F^B;JdE?>hkji=4v<0VNp{PLU$ z4_%00kAyUibRf?wC$ilG-GGdr%=k{%%MuMT%f!N;G$pXPpSaa`7RK@+(sJs^rO(|k z{>bSGb%%F51A{eh7K6;fD9EhV`HWW)e?q6Y7`STWP2(pHn8<&usR3W3g5=Tg;lxko zjht(&D#tGS!N|;ab#{(>pjNrF>a6)tmDHEa@i7$63dg}|`==!`cS;m07few#dVMu| zv(1sRuoQ%%?ew3N#Z_i;U<%O!cg`<GVMlh0=NydiG42#g#V9&+WD))AOC{A38Ly|5 z?J9s=81dd8W9mBgFL0eDcl@8mPtA+x{tzt2PzRdlPTj5=NQYI7QAUOZ^NPCN*zJJ2 zQGtOjD+T4lh6G-kf>x3>Q|H{zfviG~rh{f=5dKoIM^j%|A>)QRS7C3%^r75BC5Z^u zU6AMF?!rzTu07Qkg%fq#Wz_`_zv!xq99mz`^B8iPem!?XV9y0=8J;yjBPqA?f^j-x zBTVuNp~SNe&l$>NRYbf~Q@%ijbxJ5wBF-&rOa^XG<o19^Pq;^gP4tjbGUw6X*3u8F zL};>M47!V9+-w^$ryr7RA|Tz$x?%Jf9~2airx1?E105a#Ia-m`@(JBT=!vdXMZ}IS zTSa^l+v`O5e^f-oVI^0j^hqNJ#qenK<M7JRsL>GAXq40l3N&0R>-Z+2B=eus?FskT zd)F;37b2-gyL%UPwF%`F_Mg@BK8cHXO&{iNM#?i^Z{%Jr^f#OXj$yjYT84%L?Zw>- zSthwKkhpn~d}4+}3?99RI4?-aV{4>}=S^B{Wzt3*Ix>wo9bxbyAv(TTKQ`s}m9hiG z*%P!>)y}Zfv{A0=+?uG<H&h}WjGb(0hA?tnSMmW{1$gq3;!cs02ko6sky0^8QfJB( z<aAb1es^<F8x<q{57$SA@Qn#E*6gYuWaAQco{e<ern`yj&@iD##MNNX!w9rA91r8* z%}cn3xz_o;XkeiIYbb#3SOJ^DdbtWYDYZ*sG%`6V%5yI}gh!`(a270EC6OBVc4w3I zq{%R((>XJAfHo0lV%ragtSN7?(!jqO7j?3O$L`Uw+77+35bJN87$Y)Vv8G(=hDG+c z$R2%IQsC|>F%g;D4x#oAt_ffVU`Y~;5heSMxN1GB<sux%cqU3rqLZoT{+&sV%x|50 zxk7-uk`YwG>oNwe2vGZfplyPfXHo31>kBP3_7gmnnl5uZPU+D(m|ZAZWZ-o(l_({L zjxIP@fbQj%UsHxU_$}#7az{+0!{x@)F)VpBn>fOT+d=41HbahHO6P3Vy8?v=Qpf3a zr+M*^i&JyMUAmbI#WbpVVLnJ+fZMfNPVrUOi3MZTm@F_;Yspa~6OzqAiY9a)MANGT zAsRnaw9J$RQ85td%`8ut$Ebq~*-%i*c90pQ%22VyrGoTk2gyhz1}2QfR7QN|tBk3l z#XVHmq4<=TAr3@lYc8K=bdW!nQOggJ9LC4l*Z_g-4SBMc-<rLg0_4eF1e+=bUwp7D zN50OJ@K7E<+<fhn+@IUZ91674E{4qPGM>z<KwE>v&=fUgR5M$%R7!rjB1rZ42Z{k0 z;}znsK^#P*b(-VxJk<~LuptnOIj=_Buha`=Sa9GoOYdSFJYLZ-(f?j);LgX<sNw?y z+lr<={qMu)d8|z66KN(q%#$H^Jc`zB%xsB4W=<p?9EzZeZQ5zHL?51(z$Gf4WfEMW zjGL3>(sl0r993eydVpMzgNf^E@HLFwb9ZeR?^<||I8S30F>GuV65wVYw{V`u%OG__ z!X8$su?5b-DRz<k?CR6(bXTtixS2;bl-)KDyR%Br9bhVwW4{hUA7anP<S@1-h)g+% zd5@_^wE1up4=xH}%MLvfjYmj&X;xo}GA(|Q=~#qGf=HXY<NM;6C9tm=Ppk@JTjPo2 z@w(RoF%AG^cPS=bvHlt8R=K9iW0?J~!7B77PSA$}w+)8kEw8T&zrG3Wy$t#(3)smb z&{*<EC^ZrlV~MqlVPD;AfwdfwWU|iWx{+L8TNi#UhwB&?g~yV2f~$y(@ptufveg%- z4bQpNb9CRSaaUB&K~=#USx2M{w%FuRJ&#)XlD{Yw)ujw(5}%SVab>xOjlrVoFX$hg zTx<6iRhNOUZb;QBUFLk>+&`RUUq>fCj2Xs|RB5yc{6LmWt#%%-nTh?xrTr7Q?P~~~ zSg(>S;JqM1!*(N^s1GPqQROp|m(M08F?>Lik53PX7~G93k33yUQdpjD5cLX^9tg`r zVdkCz*s}OKW!)yME3~Y4-bpmAhqYSDY@#VX6YK4G#qJhl?^NWI%;i6UQifuTiv#et z2g`3y8D20bbYq4DfW-mvb`Kw8Gu%wH0`KD8l3TPoV41NK!J%QS=3$i{-=qA-c2e=g zyO=dIAIEgvy!@A_i(<yL1k4+T>Kxw0F$UX3NexdlW7k=DR9%eRAhx0*!{&qQQBpNE z9sKk#nO~yB*y_?ST8A4U+P{e;B7S76E-{L9;3F^RaBWqlJwR)h0rXTnocPwvVRIi8 zH&NsZZ{FfDqr1BCxpKS+FRm#)qd^X!Y;ooSml+*!q}I+GVw7hH5Bs=y$CZi$Yga0i z01i^X0AEHf*|>6qFAqm{5b8!31WifCL9QE@idJ0$H%cNU)xl-9wuns0m8&f&#YQR_ z)n;qU4e!X|KzA^kmdR+#$Y8VumuO4JwYl07d`hZ3+5$mZTbHu2%+XeghtolVgxutx zM_aBe5Dh1(I8GJS!ICG#ARVWG=n&@x`+ePi<BWe#FVTAEeQY(UMJ184cA@0z1ImI2 zH4lLqW)wHe<9Z9(68tYX_FrQU>P{vH^D-Goe-AGsE*Y=Y^L7hnzKM;V33=p}mG4cw zMO)AGeF4n(E*%HPA{{?c(&?K+m{O1vRS;R?1Q#HoFe2Q<MMw|h1t>8b{+(SS12iNY zUy^d3!V}*7Nb#1GFUn5&+2F#YUtQv+{c1F~ns|<GCGm6ckxD!rZsJMdCcX;a$?D9+ z`^z{B)FLB4QZhOn<bw1o$VmT&R13+mI<1}ZW^?PdQ8+#8t7^}5#}AR%qd|7t?zM?~ z!2g3JwxGb0v<nxkb5z{gvg-qqY%nYPLb3ur7-UG>hSz{z8w_hR#|8wIrh0lH#+*j2 z9mgb_aiD2%9uM3<tv+yn(`zTb8IVgB(crKbW@Sv`zh~rdH=@CMJ|pvXrrGuZj4$z$ zE%QDQqj5f>mk3~}sgdCjUy>V|V35O22O0&gBkm8}kArez9?U<!!fYBAfR?dEfwdn) zs7JWurin2YYuCs=PZ5%A)Vxw9g1J7{Hzm?Ph6gc`P1u`2|A7!6w<4UXZEgDg0SpyV z_Ya8G{P@RG!(JExowv{rygcREQC#K53&~`4!We?FR*3v#E+((!AN<e$gY_fH9z;$- z%`O8b3_cU^85^i63DQ=EM9YqXvE;C5ey1!{(t^z~@!2pL{|N<a^})fT2SV|8Lh<Vl z4yx_ieGkc9Yl#hFoH{`rXO4fce=KMJtqG$d(wre{C9Xc|Q;NX&e<1uSRL89Z4I_YK z9N9~Xp%S%=)8NCymXa74Y!Ske0tSjPiGmbbNr0iYP*Yx&d7qixjNw&d1RtLpDK%TL zl0~u)io~*Y4!7V`<2awm{0S&+249Nh4J#NM4{P`lhF>okb0`9u(r5NZB{!>nnH|DQ zHk&dx{CR06UkF)J63+x<$-}&%hAF{KBEcsSDj%U|rLav1-$%P|G|Hl378Kl-Z9V(g zGLlkcHw4g^qp!x7+W;frwP-r)h7)H&lXW9SXO&_fku&@~EY834zL{q|!X5@wHKCKi z_6Ww@-@_e;G#;l$>zI7uG+~8o`@vz|GB|V(&@deGIE<tVk^+vT-Wb6>YR+k8k`h@~ zT6+Rw6N(6yD~+D<e(9e)lN#iBnaS~Y(4@FIMtLNUE=eW!)5;7v?Pcap5`@nNQRkiH zW2i^=O5N(ln#uvJ1MudxIvk&@dzGD(dpGt3G1x&~w^<rECJ8=p;;m@8BN95S4pwj* z-WJ^C*$06GHw5rkSnHod+~{yeg3~YW^lXue@HI`IDU5yGPx}F{dw2|^b(#L5Rc``z zU<Nh~8tgV;pThlDr~t^pFGQR<k;FGkA`bKAo27s#30Id#oW}BG2g-gb4?Oh-H5#@0 zGZCi>3swl)h@h(wv=Kqk_TYH3Nv6D*8q{(Z$&huYy9-@wA~+8J0~}TDdXPujAAKJ$ zv@VRBFrKM?D2TW+U&cd6F)ED_R)T6!m~mJ~PlaJ5%-8U6Yf<VoJT)T0f`%(I+{UgK zDeA?24=lXBH5H*^FzG{nS=OIF2(<I4tR7$DPEL{}BBUI1q=gzYPmi#NqwgRfGWaF@ z5f-~LSTOTFRMK4v$Kni*td+^{;*Z>u+W|w&UPNG9Dw{UJ2J&TcD<Lu;k4&;G9+_zr z9^m6Cy57dT&FIE7+rz1sI&r&VT2*M1i*O1`JviTyFBT{iId&xTB~p1_tsZd!(aYEB zSmi?EPIn(|Y|lxc4Lx$BOdh9KuW11EO3CP+;2cXd!`S7TlIq5I4;*Yf8Se?2zA!N* zHd@N6h%<*TqsQ%!_siM-?D0>weGEyNNX&-`0{1cOfRGpozNl)$h0Szh<xQKjVr;`o z_X&%z1c>fSA6~{QUZs-m1lk9rLOWKs3%FW5r2)+dl_;s;6_?s=-o%@F=ui!@Az6gG z(or2Qc^i+;j^nju-0F4W(}9~lZrDYed9&hC5D~$Y-Xl^1uf$<%FiUoRG>g-Ch13e% zQ;&YP6QsTJ-giHgG7hEWe~S}47Tp)8pH5skt@SV1Zfl)59_X097X~odB!j;4Olw73 zg4c)91#$&=RG!r-BoAr84H-0w3>vSX9cc%0&rbG1L)tLqQH(r7+`dkfXbPyCQB6j( zqI<6{O-7B$=zv!=L3gI|6v(Kf4ZD5Hs6VJ;{J2)IuI0<8v3<^`0h3P~GV>{y0UG6k z`P8rZv>oG$+<eN%&YMqTo_u11D*0sc(S0(&!7L`)@*+z2S41o6fvOyQVZp_~ph(_W z7}s_~Yh0=U!HCr*g+>i&W)lO>92LH(M&tB;pY;8>;5LEt8l__-#f)HFAR=dbfK7j9 zN7*ojEzBH_Ls<~Bc9g}#uj7V=*JHS0q0J1lF<zHBLuZl=HIsu5t`o2m&|_&%>n7`~ zKy)0duSPS4%N?XH!^EWH4mL|>u#q?eO>K^EP2$utTs9av`gu;+<z#_}YAkP9*Ecup z4xXVH#h$2&FwWvWr&rmy6U+5UZeK^`wyg@DY*?QN!;Fdd2zEevmniNf0*^Qr=ukA# zI`D>y4swu|qAj_fe4;S6CBkho`W@lLy&IGS_aH<K$#eL`q90Cg@LGx}rzpJy1L6CT z4K&5EGYE3d*azDtTH9C%yglmXDz|NNSa#^8@*S#>&7X<JGHmiHYU#D#$I15f4#Vr! zs#&a13X=I*xkX4=ZL4V6BCKxWc$|9`w#^L>sWp-Z0K{aPoC;h52Uf(DkiQrfnPd;~ z^PB&Bf*d1)a3G7#uXRI^2;12<rcbXm+%H*&l{FAjxw>l+we5ZxEMEj)=oIRfdgN}N zg;6So{V;y&_DsBVgM#cm;HVL&8XJZxFxuvB22Q=N#SqwCno4C*N~`r{MZ7{S2jSG0 zMO$7+H9am{2$Qqf0o^P|z^n?Ic52?Q-I~cVEei(f9zoJ2Vs3qDpzTJ#P^meTG&t!{ z71&w2<h=}*uIzphRn+5b&|A{Ri8(*rj-}aR9w8}G^*oj-m8%8pIP*k|ijpeb`O=aO z<xPt>R8CsbLHr`}ON*DS&WYS6IJH?d?eP)3cPa_N;8UA^v9R#HsI@aqmyT&ZWk4Xl z6kv*)oFU*Uvz2PbGZnJ;mIL%%n3uN>vQ^Rsq}xy1)LU0keMv?fn%gLld3-$;s4Wbx zo<f=~gI-l>1D6v=I%6{mK4PR2u~#EJp4`rT-|j`t8T%zY<MrUajMqK%`|ksND2~pw zWg;GaXI&W9cYK}3eT(V--SCT@jH!Ygb;hkEILiPUwV!$7E7^zm#MXvrF#i}Tb*ALn z?>zh_?;}6S7|FoF&<tdhn4@dV{#p;eY5T&@d)`Vq{cqw7gL_f}ZKV`e4xG^0n^9DZ zduv_$B<}<0`0Ts|XqQdY8E@`B8YvbGf|JFg3o+9J;V4xvhh!h^kpjG?#H~vsXc9-< zR#vZ}n=T|6$IE2$FxLgyV3fkvFwPukS?4ZMH21Cn6T2#8Cu>Ieg1i{}jDi}|vpn~G zwhqWmuQXR9!4b!E{pVQCI@n6<#%to$CDnoZVDle!_jq$7YgkTg#wu03F|}VNYKHNI zFRt6dn3RT@<<9E*X&{yL{GG``HQbD?i-2=@JRX^f$1ZS2%<%Q)*__RDMn0aCl;{3= zc~)i0*)}``k8HN{(rmY-M1>8Wq8_ksZ0Dd&%x1eVmn~K`;?jDGdA|`+AOoVE@RDw4 z+^KIieqA2F>y2M`I+Ep1Pt+t03^rvTZZL?@x?Ub|U^+ta-ZuD#0{6X;t9N7Kbn~)p zm`e$niP>BqNAPrd`du}}?=msO<L#ixtE?RUK^Tj&`TwgA|2Sxwf_Qu_C`1uUq8r7N z_WT=|pY%=ibQwygu~=(Fy1k=4u60)kqGCs6&AJAd<sPeks0Xz)*DU8W>|pJx#Sj|z zG~psT-rhWl71ufN?!`B1A}n;+3ZJsj;kMfcLXe{dm94{UE5vrn_7Z4GD?G;Nk;yAC zL`N;&g!*hY6m{@S75#c7VZxhL1ko`XS-&<>R+mC<*0AB4czqQhf(T7H+0ozK1BY=g zn?$wCFP};~+yI<Q7!$}~rkN3Y7dr>cJd7TnioH8I_nA-GwwRm_4%i6Tmy$Yg{}39D zVdsolV(K&Y{}ObiS1<}MX}o<2RNx_d0c2?*u>0rev{VqHSdVq%l$wN_C=P63J1AX& z{4x8~k~c9rV8BcgFUknqch;vc9mO32W-#JvA_zjYhceB%+^WG%mGo2KvCtF(K!r?Q z^nwe52YE%y82mL#r`<|tF7u&PFZaf#^Tt`uxaLi3H^R8t1Ahtb3I&vv9GqfV529F# zQX-Qv8N?S&!-Fu~>xe3Y{=1-0wj;pt&q$WX`sVo22f?dQqHDp5JYvnYc3>?{#=<cX zT14R!XVsdSJ+~J0VlHjT(mrPKgPg_lp2WUn33wPuCR0B?vb1j`_l}3T;nt)U_XTDp zu>Bek?VB#zWrC#qMCi%&tXixOt^Et-6ZZSot&60>;TZO<6C8=5b|yObm75QIDv+EK zky?Ve@%2be?lTvC)I;(R5KAG_DJJ8^)n4#ab)N$oTp(~Pc0S_V=u)Wwn9^^UNq=!O z#N6uI+{bSEz{E=4Et*UT<3xh;1nHoJ1%XJa*_Kl~M8GS-Km^pY^>A6q3tc}!^jf9J zPz${yX8Tl?v`u{Px^;jVnRu9T*P<oDF2x=kb8Q%?)@-j$;I6U6g+tE6yG5rjByQyg zZr81IhOh&Qw}(ZX3#RKxhlLlb5~eZw4~~-36?RjksI`yD$*Qg*?=L~?7Ogq($yc<} zoYx5F@TS(@onT1K>q9q~Z4XFe*v-yiu)Q3q0)c4IJmMrfHL%H-w`V0B_T%mpAyfDx za)l2Hah_^Aj%+}A4<a_EA*-;b#U27(>%+4t6j%k;a;-)3NB=wl&)y-#o4Vb&FVRkF zW}0(D6-+x&XRrF9y>f0H({f&$XxFcfQOz58@Jrh-N7UfSmnDd2u)WOaCLv#QC89vA zTC^o05*;K#En4{uh2pD8ki+<*KWuwz4kXgx9Qg^K<S!A%kGZr9tadKvMB6ZVpzmZ( zi54Oq_fn6h#D<t;IkTO(mC_U{qWe@PFLG6$E%({ruAKr0-7(1}G?aSD0=x4$9OSd9 zysK8qC-)82p&a3~f6+}dpi)mcGAWS~A(`OO{;xsmt^*AZMwzSpp&i<UM}YhI9ca&A z(K(is=>YTL1|!C>Gk?0N)uumTtq!q;b6#+-q{uAW92rSk+mE2!(ko0yc|1t?^D2pk zO|1{QRV&`{63UVuSwjUI)CrjSu4^aGz2~z1P$<#JQmU1BIB_+klfw@^$h=K;iKxtt zoQHX^ixMVo<rmtV4u(#()#+Muv(b*XvVTqekS!DPC0&6=3Dum9D4WofanRI)yY_Ap z#qcJCdxs=e>?ZBtSDx6WgI~H%BK&aTUN(+em*hEu8|P5D+8>EGP9S66Pp!%-9d`_6 z?`Ns!MAE%~C^m?}C1#GsScphqfxz5cw{HA^DZ=fSkq)FvW(>%p5JGUA*fNHV@J8(I zv6k&_Tf1BXVd>J04#nE8Z52YISq7=zaiNdtvY$_nc>18Q5$2pGlTVm3Q7G;M#U+r2 zNV9Mx2wD72+ZW7ydoa8kTp_KwFqXRou=ikmApC|MZFvK-J_$4o!&3t59}>dwMBtIg zezA8e0`0$mhhczgjrI$4gyGR!Eo887E@{{ucx3j$SaZ9{9BqJK9sJ5lV()!9umLR; ztgdgEo;ti+=AyfkcS*Ho)MN+#7{Z{t-p$A1I%W!Um?FVwU0DfIHUaI%{xT)9<jHth z3CIi=z7~l|No;Hi?L4WdX22VB4;T(|@;ite#AQ0L2k=~)*acim1M-m<D&rnjj{G%v zp75Tqn&15r#H<VPNv1KdnTwYeH}H`KOs?^lb2c7&zG=Qmnw&)4iPH^%N2Zk`LY!_G zt7wA9^U!7~cG&579&MYeId>M%y>*7$h5_Nct0FwcWrFZd-Kf748}(leY`6r-9@-F? zNjsTIvG*(E;a37}U(ACE3g-Acn6C+j2NReP$P@5l=2nCPw_qPx(<|%3uf)Tzt_#1K zwc{TWf52<tmP2CM#k0Z8btYh);L^pCrw58ly|r4E?k&F|TrC(MKK`)>Lx_JtrU|7c z9)2Sp{tK!Ia`I|aL~i!PQWDH4I6wE8Rv9jWVI@T_vf-)n)L{^)1v9&7%U@6inQT<1 zF%$?jJ24w^B@)giXg=JHJY?zzLu|~fq}W}&0WcfO3=vI-;9yXOfNPi2(;F-ve$f+4 zEzn#Bj7`|Ods7{le(CPbu@c7p2~c5R%Z$Yygmn!s@+*E;xw$P1W+?`P87OckMgwfC zkW}ncrfw3amI7hF87ZPab#+FNi3SZOpb}~(cKbf5B^$*mHG`GjK}DZX&B`KKN<*Dg zp)_IU5pNatT6&`+i>NVHg~8(q+U)4oDn^eXuiAa*r036`*xB7Dj}cx<ohxA0pbfN8 zI>q}G!_tX_j!G<vP?bB_7588WBXC2+hTZo(t7kn{kF|2a2llfa%AR`0j_n0V1Jr9? zu}$|TD2ao}I|>5I*tNKIvOOqHw_P^ZaA}$Q1;)xoZd5y7n}A@6v&zieTDpRXSaTT$ z2-ktMmxUuWLgh7xP^s)EVPnZ9M133)-ESQ7MfD+$sGFBVy5L#G0lMn#D2mnrGmLO* z>UAm6XK`tCKT-~cyFtYqri4g0mmK7~iq>4TO7Oz?sbv!~g4=LCUHD*llZ2Jn+RKy; zpGMw<gu-}WyRTCBdHfI~jcJUrC#?^x*4_Adc&Fp$2(Wm_2+#@tPMoL2t9~3r!nFxv zb(#Xj)o$bmp9NgYdS;l+5E8hJKFo<&B#^I$%N`_5SDfOflmDiHC}t=AcYBeknA@%= zm21l2en^DIYGWiZZx}=--Q2L>)DuaR;dYLuA&!(5K!>L%W)DPWzLhSs+yKS7(zK@s z<XpLN&VE|o)C0stqOv-S^+=53o6!QhMX6JAgzA%_NVq52!?70@Y!L_zBwjg?YQym_ zeEZ-#roN-dL*v^E-%(}}h%`^xBBj?@LVEv(IWLt6m*b#JY4trQ4chbK5)RfJSoh@d z30x9}3`bmpa)~IJB5Jfwaw(~NVq+pa^;B<b%X6GF*Tio-841%7F#SSkK5yxZx6^l> z{Ec+Tou05WKClQ(AGA?uIVy%Fc0AsGCPUwMF9F`O!<Dj52agqCQxP;j!Sg~368k6Q zw61e2&j#Q@oSH;Czs!YHQYWxSQ=a72YI{9~A+TLhT#xN4eKXf1Y-_4}DG5fq3&ATg zSUtnCHX;vPCrCcyVh5||fz)+@HpHz8Y1)Mu&el@ITl(=7{h-a6wxP!ToEa_{Mm@M` z8LrX{7v^|r%GOcHli{&5+k<+^ps0da^x%Ag`mV+nwdw%3uSlAmyEsZ`0gPQ+#%$&x zi9j3DfhI_wj!zvo$53gPtM{awoYi(6yc&Zpf*n`;bWiX!%?vM%=Gl;B2BkqOtC#BP zBg-5Zq|3M|O%d~WeL@Orq{zJVu5TrwFrd7SOS{}ABjOHy>fRk%=nGXTPc=b%$`5lJ zr$ksVJTohmlNS5qpV6r%Z^UcTt~j#*{tcRpK1?M;1)mhPvKB|jk(OBVYV0a)q+X<I zn@L}L2-Jv_AQ4%_3g^W8P>_vZta%aY{%ltnE@kr~Q6=(_0i9|D6c$3h{(1PR?pCGa zqY#P6YHti);SftG9ZL$6XkKk%s_QfNTRPQb0+*XE9C&#=6(e{+_V5HI?nnjnz(XpK zt{xOzsDU1_dY4M3X&V(C>+Jy=lKfJ_$e3Zot#3uGL*m;ZoQhgW>bA?whSYee31qGr zbs{pkS(Ir^%2ESTrLbiS;*wEiHNqG>0`3~!YQo@ipqIhDW&>}F!%a##g;dz{^*r|w zQNHsst-JaV)@_tAKtM~+MHY^kWfU`lji(&GrUo;*MtVBL#jpTW7%ky~*R%$nlZwYl ztehs`Vx&8y#>T6ZcGM(bFc=X(#{oAgj`5Mvbg$fuqna5-`eWF}6ll|tun3iWoLWKP zR5<h@Jrb%tNTIzbT`rk$4)Snahwz!hCbB|aW7srl9|la%r7{kT+=ra`P!UcX*yezV zR|fX!+^K{`sp9uNa!f*S$w2I(l9}zc<h@c*`Ggww_G7e;k%l`cR~3h{6Uf$JxpOKW zQ-fH#pyQ3(P5&8Xo`@aft)Bw051FRSW(vaR+w=&kp0Jd$quk`-R!j8N)p%w*rIF*n zIZGqeW!O@M=BT$EqNfI`&^TsiiL)_%*#=7xU*NXiLrL7^=0xEB`K2NWmn~Eh{gOKj zRFXwNxsq(cu*4(C&rm^)Jx2#K6M_5BDm`&H5R>XHD&mOKO4Q+`M8-4prZD1!+z(Z$ zvO42cDo`60_0jC?0P6c5F^*z85qLEG!$|)qR?0alv+3TLc4L_l9^dzPltN-D4}D2C zuvtaqb`0BkOS5$8ExmdJsN|gtGxP+eYK+a7t1;$XiAUC}kV#p2hthnO_9V!wP>Gxy z!Evc#8lTOJ)p+}zhr}DCgg+T6Do%}8x#cod^ABSQKzT<ANLAYmg1=^KQcG@UM$H`t zk>SDy6HlbLHMdi1uDN1`<(5Obh$CH;rk%QU(~i+_M%uahl~G(eS(E4c$i%ayc$~y} z!I}1mM}ab1MG#EW-Tb>VH~+ekf0CtUbH99RsmEB{-N<ETk;+|XFWk)1q=&e8AfR<y zAEM%BpFH->5F2;eH&bo9Y_8E!2d{nRI7vFk4!)ORY>8r)z$8x_-`|7%I&4lxvlbV7 z(qJ{KFiaH<FSb8}Gkkiph$)`KF+8=5O|fm9(Is!jAK2>{7UwII^>CtDPRArIJ$B@# zBD)L}lGq$u`wn(Q$vXVG1f3Eu<yWSZnq4^#EATo3OdDc-C21>yBvBJW^HY+BM$FiS z89v37lAiEq+lPbFInqu@L$FTb7zHM`+=+*go|*TG2$5Lx98l?8R=P(DgK4oEeBB&Y zS|2M!o^|h(!DUp<lAimPN09<-rpU@=&a2{K*zmcHSUU0{Q=u`r8<`YX`%5-QG;<co zQxehwxO&7e+Fdo=CdDI&IFM=R*V1Pc*xRs1ZgUGs5rzb&%QrQW^h3yd=}6Hk^9fLZ zx^Ah3;cmAIGII1<DNYZdb&zaKgi4nWGHzyWN&90?-Nry08(LG+HhwT9FSd0BZdgO# zhtagaL=AfgO`nvOmf|rRZ?wYx;jRx#nzTHeDc$xK1Vbs<!t3l~GfYS$9IM)zQZ{Ya zOjUdysH8pKlHATl#nnghe6YYSZZD$>I5L!m4q>Y&mCvF8GGVbflgwpa85*WJ5d)x< zQf>!%@{<%UgY3R6vKEqo%If80izlVSTXD}6PH)11@Mh%1#{(OV0#-<J>2O^-ZZQh? z4u&_Ahh8p2y~OLj8;Eh_h2x2HakA<={qR{A{%*?PI|sPsiSSldNt8I;6ST#79vZt6 z0Yqas*l1L@JW;oGIjq0Sow}{b@3C2Yj16J-%Gx%mpe(1!wOUw5ggKgPoHJyz)9HDd z4E7ylG&b)C+SoOi0s=q0<rojNU5m^}ej03ATXz2u_}nc88r>H_QlJn=wGacy%QM=W zaDe1jl>Z`yfMff#=|@I8I7zk}mlE{94vUCbC}ePt9#L*kQ+9gILox;)5c_8Z#J&+E z{$k(C(UA_E^h;*kDm=#pe!?HWPr}PQh%*xkpB_~>((NX>K!GZGo}a>h3w!~|*;A|J z`qeQ99x6G%{3K^59?`o5QWm#dwO0vqBRL(e+GpT9sq+ji7OZztq@pb^puOXw4C+4D zq&VJ@U^vDh6k263bpx;oblWnw7Z5iV5<sI|Jw)YMMAFYP0NX*vimqocRO0y-HW)jn z=6T-t4KnT39-|wsD;gdQZ&yB;?ZvJw#W+CIyj^PEJt(!N&uB$6gt8Eb$ubEWV;&n` zK3G$aj*cQ3cUyfK>JJ+UcNVjiD#oG!7VJmB6|^JhafaQBjD(L$lF~iScIk2WiUb-u zSv3{);#8d5<8ZxH&WvW^adg+S?z-D_B8igN%WIsvTQY_yw@6!o_G1X~BoBhnuzsSM zqFm^UC>A_YJ%-4nJ;rUy7E*^ooNPiv&<s<|b1*kvOu1=V#hi@`Tuxn2;66NPyd}}F zZEnM^K#Vg85aSLDl$;4p?go}S>sL{4@W5E&Y>fH0!80*!m4~8sl^*IyYjzzq3pqtQ z$;A)?=5&feeVW3R9>Y_(*kquym5NEXM`@2Tk8;#{hlk=eP$a^4NRxgCKBzI=B^Fpq z8-#H~gXrk-!~?GUPt@H}RJVzTY1k#hV{RB)I0fIWFnd5CS0%R>R>|!JRC2pWgV@}@ zxsCM~QBc!@+Xl(7tbmn><Qr=1o@i|@mFU+RgSO}l^5pbGS{r^U8N^{o>&sDamIJnA zkgG0lDZCuPvT}hfVs0RBE}Y1?yt$wwht!sW!-04ETGP+gTv;|4?gnQhxm#3Ri*FPK zj!rRr=}ukVvXz&&&^!aed@4_RR-C&<dELoPIr>a~+Vx7Vg%Ys7*N!V%(D@z?&PMg? zrIMlZWtmUbh_0k3e855iFx7U~La+)M8z{r7ZL00V$+)DPd(t+19|E|ypSndKRfA?? zXkZk#PtTEBf=P*|BtHwOvfH=s!;kex+Oxp@we@8fat?;O;Ei5vBbt6LGAeJqK^E&> zv6e0%W&(j#oRmsghfT%SQpnou%rAA<oU+@@RJ5j9HA-|F((|eB>>-jC%}nbb&cUXZ zVe-uf8#z<(><7{F6PP7%4z&g|6}HGN6R|aA7$iN!k_dfZTEn%<JK*dsK|)i;8}@$_ zp>@}l<I2C6q`jJ7#zKSDMyw{kRPFRF2;2z^0roaZQ=hdQiFT5c0sy?cskgsLPMQ9p zN(S@oVbwY0<Gd?WLM(13$=YJPTRIMwKTS)MZkcf~14!8(##soJOBGu0UVMYAwB$qh z#(yl^a^G^e4|Cg>%sbJy<BsBtq2}!}ti)X8tBB2H6#Ovj#f7aur(X#o5`=J_3wG{F z4IJ;0%l~+xFeb2w6Z%4gjK5bWuHoL~Z<yV@kvxmZX_7oN=J%EKzg)7e9xGXIEqC4t z-2YDhYu3~^mpe}d?tjYRx?%4Ehe;*-NjdEQo$P<-3ZItIG#bht-5?{XxBFiynaaBu z=$O?1iZ%6V+!X?O@luPkpNXR=Cyt*njw^HHINzIu@^l=f-Z;_`7WqV2oD-o;CBR(r zU%N%RqzwJTdjNK0qTQH#ek%9;QaS4Wazry2-o@DT(n@rRuyvjex5+<a3P^;?xx)zi zpNml`%qB1`j|MSV%;}3;sCG#MyelcXO!=dHqgj`_;5%GIjV*y>S0PZAWUyu}bYt*v zDpA3VNsqNGQ@%{R8G=gckYpofDhIMtoyp7{zq*@!+L$u;y#|b`QuZoyE@}B-_<81P z!$j=5AX+7MBFX(xIdGjgL!ynBsk^olq8D^|qp2?Md31RjWF=0OrpV=q+4akvrsqu> zMkNiSayx0}gk&e%6U?LW^1Z%Wz@=(7TL5)^+HCcCn=P2ZcS83f<`R)_H;02s4hKhQ zf5A!>`$Xj7i1ZgGE0I8s|7hC_+&^!X^WJi2T0MzShcOEZk0c*OouVXc0iEh#%C0sY z`@zhn6@U8`>=@83N)Buqt%JP~zz8kwW{8`1V<TkR(K<NCi;O)gTVn%jxvG~{xLS!y z8BwH^ngYLBHWUlfbb*m(4qRAeg&0e7y6@OiHwMLvRHj%#UAnu}(f8`5E=)EnN>Jf7 zC~jU%Cx$do>Ui4ML}pF`dEzpgi7_I9VK;|95nVx6-ik3OULN7xbo6j9s?i|?Mk3(O zLl@Nz!5$d~#Va4FoUX`>onCoJdwBZ78#~?niLPS3aijx9H01guqV!?0iX<M0;*(e4 zr;<VsFEhIN)BMnCtmjqD`=YY9Qtugf2y}>a+^m46GKPjVj!vVxvYARhwn&Lrnm@~{ zlFs4eE1iCl(kmaS9t6$cO0PVmJ&WM)rj9J>PSeR{b}4%+cdtMm9v5P=;2J!w#Qh#T zP3Gb}ty+_6&w^~vbgyY@m*SX&#D-53t(vbnQum~e^L*jQEXy<d_t~GyI_}1Yaoac9 z3uKw2QLs~rNspKDE~VrYd_)0gPxxqSc6;LC@0O2{Z!a_$3W{=s6~8>cpy&I4<8#LU z1``htn`<rjtx#aqUx^+^elEmlcprXzy_>&9@)s(0gB$n%6*%9>yUf6qDfu<VYqH$y zvfSU#a^IQdelW}Z>n!(RmizxIo&T@$l}aWR+_FrIlaUnq*}xO};Vmp^vH9`CPeORw z^!)Hez*7W2JT_-rY&`PeS*&fuPYY$fBF)+{3HTr&Wz7B&Uj#hstslM^_$nVf<D3lq z9Kd|?5x*bs^L+4Z!lwZ5_ha}2k^U%PKKU4aGL`4^WB3yA-$a;)hWG%&_Y}aF0?&b( zU-*N8@AJV^zC(cb`!W79$TtF*k3V(#A>c;=^XZrT%M0j__>UF9GybE1p8(7kKk-3^ z$A=&OXy7^3_QQW1c<zVv!yf~Dc>(-%;DZJ5#{xgY2Tz@S0(fqG%%?vN$o31WY+m^e zf<J%6PYGI9GoTkwa}QVwz6AK8EIh-rZZZ7SAnHe!d<+jGuKb^Rv}MJ!@Ic9raqJI# zX94^Hz;_kE?;o_R?gID&fZybUr~K2vzc&ldZn+13#2*Mew?umNL;PL9vwb=UcwSrp zXU>m03IN}k72YLem{Q=ofX|nI#2*Yi??A|hC;vl$?=HaqP~f>0(JQ|<{zHREYXN*2 z@SLprh5r!neLi^B&nd^_kIzriSB3Dv`|+QS@Iesz;g1F0uYQn!IrwLnPgfkucR28V zKjIGw`C*YZpr%y&<5_<8t5?~*@@LdP;0xA2;D^8`J3Lgb^$+;$^kvk)v-VQ|fG=48 zfG=485Px@p{5b&lg7pvl3)Vm2{pug{_h8@))(_zQ>Id`hFv#ckqs~8E0MGaj1>Udz z`0;i9mn>gyUA6r3)z<PWE?-@_{EAhVEnaP%a_XtpWlfi^URinB;;U9KTXmIn*|OEE zRxY`!^6JH_RxVz>@`}r^vKp_rYV}o1R;_GYUAgk|<yUy!!t3(Imo2j{y7bz{6_ra@ zE?I4@UR}B5vc-*8S*I+hu^Lxh(YS2Y>Xpkf_$Yqq;#HR{yL{#47gaVcUIiv1z>1ZZ zucp_s%P(4a`7&$q(ks5c%)0!FN{Dw^Wh#WVYVqYuuehx8s%6WTT8&pR(6Uw5*~>0! zx^(d>YyK6NF16-gx_HSYZtBx*Cd(^-OBGmS>^$%*{iMQfE&$;dn$NWn%Zh%dOQ7}g zUv=j5`1j}11Ewqf)@;|`v|pX}@^xjuI?aCPORxU)2it<yviOn<cbr;e{iNfV=U@4f zWxf67;cqNKCjaqww>%2-pH=nBhHGiWD{kpOmi5cFY#aaeA3igFE;i+f0RQCAwkDy^ zEJnYwAKI1@YpS)sbpS@!2U-VN0gR##whpll#c26M)?wC%F)BXX`iS*W>j>*e>tohY zR?s@y`nYwBHQhSa`h@jKjCyBUpRy{fSyrX>Y3n$Qa*xM}j}xrf)@QAMu|9`U?TOas zt+^Pzo@9N&I@t<Y)z*CL6syJxTc=v5SrKc2b-MLMtJbQs&alq3>aDY^v#l>#=U5Ha zxz>5sLhF3%%hp${3#<#RuUcRGC)2LM7g>v~uUkt{5|&xZt&1=-UTIxyU1D8oU1nVl z5|ni7N{d#(tE|;llXbOq4O-7@t?S_P4g9~}YO%g)t+Aq3t964FgHM~)j=yWI8?CtI z;H&U&9ngss$$G29+F;$3a-*d*-`^5=v-NH37VFj&z8JYzV$Z<;nfU*ylz;l;|Lq(u zoI7sbWarE`a&m=v;^xRY=-btEr}Zt%)#-Pv?^<2f_pI+*Kd?4hw^={5eq?o9KeqnW z`iXVB^;7F-*1uui^K<JL*1ubKSiiJ>W!;H+&Ry2s);-o{>t5?V>we5@9<Uy?9<sJr z4_l8|k7AtBZ*8@HZEdrDV+~k?=vN=J9=D#bwp+iop0u8_hOMWqXRK$f=d9mZ&s#5G z-tr&T@2wZD9oBzZf3RM%My;2vSFBg9ov949tv_0?S+B#mm$d$5{n^@O{g?F@Q(u=@ zZ&>5jo7P*_e_Ok)zgllw?_egv`ueW*p7l3tkM(!!eG6OY(1J{|i|k^1vb~=@#V)a@ z+WXrq?+4h^>;vtC?0{WrA8a3DA8MD`AF>a#KWvxVhua^qKWZOgA8CKgKFSW-N82B_ zkFlrQ$J(E;KWWdfXWE~#E9_ZzrTuC9IJ?R|-u{ezf<4>*to<+c=j=K5iT3C1x%NE! zB>M~Y5253qSSQ;dyV{;_pJLb8Vf$43JJ9pbt<&s?y}&-*{-RxL*V$*-XWI4lS@zlX zm+W)w2K!w5JbR&izWrtUEA|EUh4xqNui1<2#rD_jCH7K#nZ4Y;$X;Quv@f<Vu`jhR zvoE)=up8|w?N#<w_G-JyzS_RVZnm$ruhRw|Z7Oy7kLht=wODGjalE8l)BMk*I8_M# z#~)gHtp9QOu{<S6g_tCIbjuR`v^-&+<tb5^wfrxXssC}ZJpr{`(j#3qbv*0-Who_I zODexCv<124mHz*Klv$1w+}}C+Val@WYo+Y6++2ZQ4n8X0NU_2ke4oK{qdR^%_(jI& zVIMrl&-|UIASZm(;J@sHA2s+3eDEPNUi+IL-b`K(@xd=L_!oTeAsyveZ_-ehC;g$1 zXuxd>a?)4&QG-`Z4t|uImGFB@K`x$q0rC5>f*gG3#}r}6a_~I{|CCSoDECX_$9W)r zIpM9K_**f}ha7z8#}(h;gCC!+_=hxPPWYZrC>}#%{&Mi{IQ-i__#QJ(Kf?zv23X)C zKKS|>itxjC8~l8q@Z)<4ADUU1f2YB(@ZpbPwERBrgAW<}X+HSQy@Ve&c+SJ|%hCU$ zS<3iW1v&UmgCFt1H&!a*EFb>EpH}>HKKPz0#XsxAzw>xST;dZRlMeY^<P*Np;5Yl= zt7a?WP;Cct(qDg~;{D?9GZ`ng-aPsp{i24KNn{>;uvYOu@=0G`o#Oulz&WG3(tmqQ z#duJ?a`263D&k*#_y=Lb;O_}-XLG`jn~vu;CCkBgHYma*GY3Cv@TdBOuR2!|>wV<w zGaZXx{i#~0;a~J=pGv=?_@DU1-)HbqAAHDkOl>~+VT1Q8U!50fK+}xm=%>%%ANJuN z<t9D+zUZT$VKX`QD_^CHBsk{T^2>>Tk-?Ap;6sZQ!Q0yL%L(83b;W<j2Vc5W@mDCw z2_H3hV+zZ`4;%d3KH-O#73LpWuJ{Lh!ov_Czcc;n|D}re({HE2e-#<L7&9%UPXCR5 zN54%ol7sIvc+*Vg;KvQ#3`278rQcQlK?OPZDuXxGBnRJV@W#@RgRkmR#sQ!9A@l>q zn{GNMe51kpmH%#o|DGTJA1Qyo@Qnt4_5MPa6aV<nHT+4y9Bt_wMt$^e)xRrz!zcek zcPZX4e;N%wq+~hq_Za-34?cRgBK-8%WAGI|;YSU=vsegn;%~fP1M&_={BrQoUd8*3 zPot*d{I`<jhBqD00Y3aYAJTxo@d>|Ziz2rA;Hyl-_yr&SjgM%+YkctIk1GCy{RHO7 zKR%#%-jIf04!&nd@lW~aH~L$}Pxrz1JgxXMefYy9B)^z~ocKEp-gNUh_|d)KtDaNF ze(h^?FZf}D5BkVAZt#BfGx$3Vc%4u9Zi7F?2S0A`qi7$VUN|`?{lovE0sZ2KkxhO< z1v%k^2EWG-|Dq!N+Rv!Lf7mB{x54|#H*D~WeZq%!D8h6DIr5Jhe3@c$@GvgQ?+_pU zL4)T@Z20AbZ+uAu9;+Y+-)->6_=F!G)qtjF%n3jGvf}^h!+-P@MJ)3f-_`$7@gMOC z-)Qi!Abh^@^P({gXodkf^64=Q3zl8^<>0%MitxiXa^Q~NFHnB-#UK2O;#(Eu@bB3R zKJ<nLG}EY@@QnuFte719__&6D#wY&aHx0rk{HW<T7Wjm(G95>^4}RF-{p!!S!LLX7 zeEN&-R>r6KwC}_3DgNU=@xxdyza>8SMuWfD2R~}?6+ZeY{ksOd(kFbU!TXgznDOOj zy1AVE>oa)2`aQZAJQoT0Yeo6QFNc4p88W>i=sb8+u^&SJmoI<nOO)m3{lXjkem?r^ zo~nq=KKMmu;BmcA{*NB40sDR8@8L7V_*MJhtwR;R#s?oYc)$5u$TZ9!@(I7l;E(gc zcN+XRea081hpT*-p?%9YzKwoV@zZ_y_Za*~efSR_rQsJ&5eDi|Uh=n!H?-mB$A8gY z@SO(l*M9dH{Kq7g-10ZP7yhz=2Vwp6ALIrf{QTsvH~5bVRc`!^dkNod@F)3%A2s+* zKKM>E@!sF3es<4N`D2*><jeo6&nf;zAO5A>;DeuE{R^I`_|N);Uu5tXE1CXPTKPN7 zdrk3c_36JCabkwwET8msh7|v;$wHRHzv@)=dd3G|$}79@`;3B|@bz`-wNa>Y^LO0f z5BF(bO3%^oMLzi8mlgk6pY$!dQ1Ry}(7!5+{O$XydYNSA;7b>&7msS=mxGUfUA@dO zF$ceBiF*0XFFOr>nXu30Z!OjE=lb9m8GN-5zD)fs`?|9&ySdaZoi?R}wrbYLBk+H0 zB~HBKcaEX6st+n%JL!}IRozNg16=T8r8}$u9ZfamhHg#)x?6y&GITc=pxXl6CPQc1 ze{>|d^6dm&=n|FhyaN2DA>GY}?#l(}W`nNB&|Oe~?gG$_89Fme$tzzQ==v^I`OG*X zFWnuW>os&Q6o~gZ&^2DB{LH#qUVeK(7r8;{wiVzv9c6pmr9&9`<<WC3=(^gJpBa|s zjdwNZ8rzlb#|7f$-oFV$cVq#&ZIsW@Jyn2i7v)>4@irHrD??i`Zs^RqT;6od1KmPL z`I+^(ymU)J*O^c{vrd<nZawH`bST}I3dpw^bc+n#w+qnmlClv)XY3bw<1H=*lMNbg zqyWEJpqsG|bmxGs-q6i2z>ilQH}3<#+d<d84|Ll>H)QBm6o{9XyOiFf={4ixym~nT zecB8|cUl2{HK42C2Y#1=ZiS&U>w$UWy#;i`ohsk41>)TTx)DP+Qh;tJ=sLfp{LDIG z-gu{>Q6IWl>DY$IFHb$64Z7$pO80DmcrO6moLiOdk^=nN$nQH!XXasf<-3FO8M@5{ z;(ZQui@vM;%(`M;etST-aO2+Pn~t$}_iajN)*18i<6CT9zf!un1>{=|x*kJk)*bWm z+X%WDyj>kXW5!6+g=47Q+W&3?-MFE9ut2=KKo`GD`Tc8w{3t6y{kTWz%(`ScUc-Mn z;5^Xv-luf86^M5!=&J5lI<rohm*0BOEi`ne7T~uTbWuaMzCb#5fNrc;<6TjJU-4AP z_khxwb<Di-%>v!nLrV9P0{qSaUE>y|ix!}}9&|&7uB`yw?Ue6f<yWZOZzn%PH=_W* z-JlybbcM!EM_^8~;t`Gaiv{#t1G>&fm99{^zZ7(v44qjI&8z2IKsRjYMhm243+Uo~ z8n2nA<>j}N^7Sj7Strd)H|+qN#rU<-T~Q$3*`TX8bjGfqm)`}TYc_Om7vRTN5$d<? zJ>EM&*JbF;vQXZ5p95XhZ<L=|SItYe2XqS`SGq#^Hhmh(v!UZUtNh%4p*A*oL-9>T zY!7NdH;2y%;%C-d^TxXxboGYr(}rEXar;KlEi`n-K9QH-HV?mG0e-tc7cu<IdO}`) zWe1{tF?6>U;5QF+6Nb*L&*tT~6m+BSs9ru<fZux1jTt&u&H41Q8Fb@@&aB(!jdus= zR{TxlEyS<*Amp#1GwZl{`ON~|&}7Np4~*F$O?O(XcmsMQmV<LZH@ctFnRVSXok>6G zt|vb{8^PbF3+Ux`&<z{9PyxE_pc^xEg9YezgRb*Hjki#K91%c$GjtUN_|<@}+t8VH z;JoR*6m%trXuM`UI4|8Tpc^-Ih2~LPKsUtK_3$%h`n>#hQa(Pjh@Uan=B1lfiuUwF zO81)r>75O_s>76SYXQ0oKsRFO%=&TOc-ufX{$b^3){*nl-2uAD;Yw%Llk?I&2fAQT z>CC!vUb;P?>pfcO%=&U(I-cWQ^a-Ui>&$uSYC*T+Q%YynoAc7G23==`(!~nsZzJd? z4BZ(8=(d3_I7|5zqT2<!h@q=5z^@EOh{k=On+LisLl-Q-Zz<?H4PBvjXuXHubp`ls z2Hm*fcZv_)EcovLU3sPIh3nVybNj9O*p&7Abx7Yuf3`={4n=+9O|JMAl5;lbh7Dbi zf%$X!s!RA?;NiE&_~)bJjj-LvYrKW}r8_`3V(83zUEX+~qkM+0P&)Q__$@9V-}Ew+ zug|D_W*t0lytSa~GIV7H#*3>#*Li~SLl)^TkN!4-E^g?|`gq=Ww}Gx_w(=`9U)}|} zUPE_G0r|?XSkd=c<!6@H^2R$4besM~>Hb<E9ZNwM{hZR7b@aUa)`M>7M5QY<-q{Sg zK10WKb@{pai=^j;J3tqor~ED|AYU<zw!?<**9GWifv))^<yVOA9MA>7pmbb!mtP+F zt_R(wYNcx}5by1vE1kc0y6u$D&{Y-Sw;Oa(Luc0I^XA79sAMCjXuQu9;8z2>&Kjk& z3zVx%LDw8sx&;OJ-2%F9L)Tq^ZVTwjPgQ>S)Ss(o<7B(G6Ub6Sx8C@t+98h}VOlxl zGjwJ>Kd)Y9gRZ+)<NbIxKTo_DfNqnaTT+0o4Rqs%?&1P;cYtnAoyJ>HK+n&CE_8;{ zU0HzN9?*3ex<d71`r#PQ8alHNAg^9(LD$TOv+yg_uB`@L<37-B1l<ZlXZ8o=jdvU9 zhR@b`-zkvZU7*|aC8gtj0r|P*#nWz-q45dvYIpoTUx42{&@D7{X8kg+d`rpieC4;f zK)$U9-N=`f&g>`1%WpI2sun9<e*yV+ke{KeE<jiOQ6Rsr{LDUsyz$Ng-9kfG$Zm2D z=*A5lnqd98dNxj(|A21H&>dHR?sgA9vkxJ!eA_`6xk%H&{Rr}N<MqtXc7v{SrP5K3 z3_9ba{}EUK>@sv_e?s1PYe3g|nesFH6!Owt3c8`ydyn@P&<*bc-4@V|7&>IN{@nB$ zC)2Uh!_Vwv$SdD8EHdqje6vC4%2z0VFW5(ZZ61Ee8vW%-#~u5~?>P^@lM3+L1G+Jz zzfA?`rbB6sO`30JA4FdL)q-wev(j-tg#6reoSwE1tOi}*4NCW7fp|B9t~sW3h1!>G zpj*US+wuEs0e-v4&(N9u5_!{6b`<1mSAJ&SL|(dipqmj_I<tQwFWpkmRV9?p?4!s_ zw;ptxI+f1sr^rjU8FY)jqjY9pMP9lcplklF(rqlDm*ODWD??}YS>)w63v^?*DL=E{ zA}`%Jpd0>)(wTi1dFievzn>|c*?*Cj?sm`xd5b)LW*<ggy6vEg{9NhGevG_yyFu6a z?@G7BGC#MR8mF{>M}yxTN>|YS1G;)cx2yoaOF`FV=*}%bcMIr-4PCVlT@?E|uywBT zI6!RCt9%UmMCiU3aHnNee!;j8Gw{#YheCXxfj<X)9(0S0`%nY_yx7ngc&mYz8F((> zs|Ys_a1`(pfWHSU1$+hY?M1frGT<;E<NFyP=@tVrzOxLhF>tnlYrbZ4t6$}hvEPQ_ z&N1*k?9ZWlvw@#8FaT)5|In}4+(KFT9`^a{5BCrt`K&tM#yu!j<;MX3064MGwhn~< z3xF?K){%q8{WHMF;C=xGumt#f0kO-yGHT#i=c@ZS11B0Z-UdL4_Z-Fl-oSo9%JIaP zO!^J{1|a3A0i+y<0{$oB{p;B(?>a#GpAU#KdE{K<|645B(tjf$+R7up33w>nZ^FPt zIUfh4+_xFnOv4l0^?;KAj{&5d_ne{ORsb^GnShk@4|O(f46rI606YY+8<6GcP(T~- z9_-&D{{?^yR|Uv$Z(%`*`Ti^*!(9wWx+*}*_x$PV?gcym?(YIJ+-yMN*Dp}~l?I+` z;3Poen<EO303_ePpQdmpAo+9yP650akn~3YlFl~%kD;NU`+mS8z}o;RM=K!19}IX4 z<WGie+zVn=-VOLP;2J>UU#_uvyG-RZ22Pw}<0c%d@<G6<!2cBRbhz69Zw8zNNPU$6 zGW;9!ZQQs6x@y($HGtoO`}LDGKbOEDdNAlt1f=|ZC)v1>#Hu_2kop{-r}F+5kbEx# z{37sY8vncJYJPkJkm)=fkou?qECM_fkog+J{=g#vn+!Y&@I!FVn4|uG|D2{{6!1X! z-w8;$+5stlDIn|ZyZ>V2o+7LANx%`nMSw2=-u+qC-)8_x_c6fV0seBf&7(DyzdS+H z_bEW?w+N8>dHypt?qabjuL7k1setr99FXBQS1I2WfW)6<V7Y<ok5m5(44ehX{Qdi< zHU0ku$n<{~kbKJlS$_YkQuWmVxF6hK031fW`Wztj76kk#;0Lob{9`i}9tZdq<oNRp z&|y34vw$oI_k6;}?J`#7{(#>AeDzq{S_jw#_$J`?=?Z^zjEx&?&@KT!3fLJ`cr+lx zk71whlYqT|+X24=_&8vPabIHG+mM;RhW|&8uyM1ERk;$vo($Lk$Z*F15`Wi66kdL~ z%5@<i_3_wYHg3nUD!&cLaF-f)B_QQ02fQ2bT@;ch0C$$D99s=+1tgz)P-q_jeg@!| z00$4zc62u25Znt7RQ`t<_{V9ghvxtp?}G-eGw^Z)XCV`b|06Pu@Odbi@G=9xWZ=gP zEH>~pR05{!NkGy+VBoh=DSiX@xdv`Qrqk^hc&>pDp>WXu8Ut@CwsDUT+BXymmWL`p z;@?N3dJW*yfYj610U2M!z<W?x>HeO9@1ZfKd(^=53_Que+dr^yn-SWx_i-O3;yDHI zS8xyh-4eb20&q3lryF;ralgAq@!Jf%8W34g`Rl*oUPHitHL%XWvG*+Ac2)UnzyR<+ z1uV6#lYR)e4gQA%vfRA$uH3d&`4r$*xYq;r1I_|`81O@Yj{v?hp>P%8LvSwzB)$%C z3*e^=T>Osue*v%${)YfQ3OMn$!d-ym_ke+QfaEjFzykou@7cfN5mCSaK*skVAc}b9 zYQR-+Ujq0bU=1MYW*hh+gHP_pt4HvE8j$(+EkLIKI6#)?Z~wQ&TgWQw03QH63h*Sr zE8enjlN#D-z+S+=qf(Q8J>Y%x2W$r1_J-!izX7g>yB%;c+KIRSqW;SbJPeTff9Jn6 z{yzX-3;KS*>i|Ct*aZ0EE`=8vc-f!Tz2Q$9?zc&m<L_e%Zv|vM`~+YJ;7hMtxGl@7 zJOhw&j=pB$<}CCNfGlrQ0XG9a|3`&K0y5l<7(9~xa6r=E`KsdI$Ka0qo&coYe-23c zuNwbT0jbw_Ubb)_8?L1Tq&z!bQurt!^>RKS(>ouK?csrdOz(gFLE*Onm%<%2?l2(3 z{pmkp;|F{K@J_%V1D*`{T|kCkVBmg$r0?FL@irQGq=EG>YW;fQ_gYVS09kJq0<zz` z;spzLmZ82I_{Q_<{uSUd_<s$M`TzLu6n^emOWOGxp0RMJmUZOmfWHKs2G|YyH=ed| zyBXSPbTX9pJiv{ByPi_$JgM=Y_gk(12Ln=`YtfjK{$xNDvC91nya$6-;?Eh-_-X)& zKf$>F@*DO4hJgnI62E7g`u`^&-9yIRX5gPu`EQ5ZmjM$0z@rMk4M_i(abIZMvkd&( zBZ_|-km=nF_#?n`0q+1j7?A0G<zd(m0PhC85b*C?)IW*JOnkM0`x*GsgX;enDkJeh z17AWVq<bOY-vR3ZZv&ib+$R`!sd1MW_iHHhr2hjT=`RIjJ)957cHmwVdPye=Jz)}s z{U@ON3ko&yPXqoK?%NDp2FUdO=`Kz0_W{}Nu0`Rbd@Fy&yR6VJ05ZN$1Jb_(h2sa{ z|JE;*eh`rPc_tvs)h$2Qe4lS%*Cx5+y7C-A=F4mYM<FELVF-0H;2$6i;R3+#1AYeZ z|6}fL;Nz;w{P9WOOtE&NqIMOQ0gASiKw4gG4Z@^k$`l(2lwcLvB;<v}rb);Pr2IBA zVH(KgHV|AYWtZK}D!axNB`PfeshvP=0*er^vQb$b*oqmgZe&pcvh?@;KIb`i?o1{K z?*H@u{O%{2?|sgB&U2pgocD9@J?C!ViNM{!0^nW1qsW{u0e=hJ1^f<>@y-WQ-oHa> z;@1=hfHR=0m0qZL1c{>iJ|Ow46{G5YoYK!C(e%F$cs{UJ@eCN@PS76({tfV6D2*<$ za2N24psxfT1+E2h{FV>A1N75K4E4<eVn|c?1te-E-0w%CUIBg?cscM_5YGG^12X@< z3mhOH@OI!=6z@`Wfw#fE3dnYABarRX>A)Spm!M=b@Q~u8io=Tk2#mvjtI{7)nkQH@ z+}%L>e@5{{bq^}OiNrC!gTNbre+BFWepGS3ViJj<`##016;D-sm*Qb0l6-p<PX=~? zejkwW`~-<*JpDlOeO~cG#pQ}G^c(+LAj5A4GW<t?4F8jz#{cVzeTsF8Cn^53Yr@|N zWcbek8U7<c#y@kb!5=ApTk&?qCdE^MUEp7!^bZ{qt_Mi{T7lOCF9Kc%e523!PXg(` z4@m#Jfb_ps@nj(NIEv1Te20NZV&S)eP_gifKtx%1qhcMf9`t2EB(d;=K=Mu9Z1{ep z=mOi}9s#xii-45>0U%T?{HI<#qXqT>NiR|QHz;(}@285716x2psCYAwavFh%y6_|* z^?wtEjP5DL{Xj%j_)kEFzg@8dh#-aaK!!VXlL_}IkbGYS(tnp?H<0>lRV-Kc^Ata- z?(bImOFgFEp8{mKV}O+RM$EJWKLXPIF~uPu{ci%o1ce`0I(ehvdrI*U#eY@29msGM zK<d3n-Cy~Fp??TuJR?9PweSw5Z&a)WGW<rxlhplPO267|((wZz<$PCh5Xf*brJEHu ztNWQspQyM<-M{nKCfrUS<y{M;UYnF&t@I23$M`?3_yCZ6S1Vnv_%&1_B)RY|AWVOJ zlhRiKVe;eGD19;zCOv)zm5=->Ad+}|9M}wcD-a?Je~-!qRSWk3p-N#Jkan#E(*Gks zuoeb^_$y4IGO_%OD1HWrs0x=U{d**m{?97jueejOQSoFT%kBGsl>agUQGPFw;aB5_ z{vja!=}7;dz>)r6Q>+A%?_&Hwg~Am;h%EdGDk1sy0_p#MfcPt1hac9<H}OOI5g_R= z;pbZ5B|xVCqrg_+f5P!9;JHA$|0Nu0zh8jZ2D}N_1iTKo6?i`I^T4BEY6Lz9Yyb`c zuK}I|tOuS9tOL$dd;!8pCxD!PZUWYV{w9R8KkEVh0rYxc4e&4`s|NDy`riTT6pMgY zgZ`NM|2vc+-xq=8t5-Zn@!h~Gxc?YRvVXk=SPA+x;9mh31DXCOq5S87yMb2%Yk;2x zo`J;t9(W~`Cq4$Hw*Uu$p9X#&cm;41@H4<lC`bPi#g8if6iSkRH?RV@2*_|FP>ysI zcscN4D7P8-55UWSVc?~}1;BFP7?i#QxDLql-U6jBM!Amx%YfT~n}BUVjw?<Aavb+M z5=Gny#8N=vBS;+A;dTRMJqgNx3i5sq<%y#}x<3yknJ>>kNzRkvz>7d1g0dTdUjase zTY(n>i-8+}MMy*hxB$rfo<L%V?+2E`{a=tM&QDz61<*Hv#FfDPIV5f^@Uy`6z&<37 z?q>nRzz+hMuJ1z0Wx(G+nb+Wc5O_ZDF2(Z|->Y~El>H<8e+p&Ecb{TE@O981fKulH zOQFmsfgb~&3;Z#ZAbtZ_4D17b0(dTP9WV&xW`Hk2IpVVrPW>+i^T&a;V8+r`VI^=r z=Fg`n9a8#62%-NCK>D8#<T&pGK-P<|Kp2+F3R{8X+X^J#yVZRXk<k5zK)Qcg>C2S< zsM04Y9X{L0d-N=Woj`_f1u}dX$aq`V0HOcMitAS6`~mQt3MAjjz?b3wVWk%We~Wzl zZczaHN(YW_1XAv5;K|_o-WewRKLHuOROz#oJ{?GT?^F8T({UaT!pDKs<EMot{F6Y2 z|2~lXUsJk3{qvN5{WRnMGa&gd2D1D<vC7E%w&LF^-lVuyaU+oBv*Ke$|JOch!kq$~ zLA*;8Pdf$W5cJ8wH-XXR#{Ue(3y^sFe**Xh@Oa=!zykan4{SUE=K=xG#Shc797uh? z3s2V9^MMQ>J`U{{@R5%g8~{?kGlBH~^@m{};8Q?`dl>iu(C-IM1Al_Rzd@7_DE_tL z;|NUuDj@T3!H1v^!cRjO^+*Cq^IbI3w*Z;1Hz~bU>3XFv05ZRZ5c&In_W&8LUg`6I z^gj;xeqf%ue+LBJcLCoE{EX6TfI-ka8|!z#7r{gvRs2WAZbiPMP5*Nhzq!=p$4(%Y zWD9G7ufqR>?=gJ8Ut;i(;<ptC6k8N8QM~;aW8c1fv_p{dNg(s#m3Nu;^8Jep{?Eby z_ELvCkm-K`$og|Y>Az9`i<SQ60xhpV^4|#j5cszO5%uv`%ro)+N1m+19bXQ|uS10* z;J*S}q1Tsz<-mWTJMe43fyKss8u1K)o&bIo*a{@y1myoS`G5>Rjd;!hP65vbCV^-Y zmQDiC1Wo|g0LOu=feBy{kmv58>MrH^BBuj+P7tc%Ql2+-8ZZV#m0B7Fo(c>DQB;<$ z1+D}Z0apN508!<ZhJdJIOP2vp0Tuw41E-MwBfumOc3LzE{59warN@E40-aEL1egLn ztn?6Y3iP1TyMez1J)m?S@FmbOrMrN?0Ntu|gJPB97T`(nF9)6oi~>WzwLnzurA0tg z;iW5psKQG_KvdbK%YdkwOACOga!d1p#{vUD6wRf{Kmg}y!0td~<<bctvU2G#km+s( zqUbGc0HWwEtpY9rZUG`Imxh4gTZ(EOfa#VN03muQ!th#}K;)no4JyVIs}#eEA;o}V z672@VB@_o0V~SOZVa1SQKrso0B)sCFVoZ_k5dFi7A;o}V62_A7ii3(V#VW<HVn{Kd z$o5RaD-J5g6sr`&iXp{-ViN6@gjXC?j44(rh807K0mURTS;8w0D#jG66vK)k#eiZG z?V*HM98`=cRw;%RLy7^#BpPK2uQ;d}Q>;=9D~1#UiplqCc*Q}*m|~S;STUp+P)wpA zO8kn0iZR71#js*XF`$@4XCUDf2Nh$ARf=K7kYYeFiAGz(D-J5g6sr`&iXp{-ViJ{8 z!Yd9c#uTd*!-^rrfMOEuwS-q3RE#NBDTWn8iUGwW8U+cjIH(v?tWpdsh7<#eNi-%B zUU5({rdXvIRtzZy6q9I#B)sCFVob40F{~I;3@9ei07-boLB*J2m10;iq!>_4qOp_k zii3(V#VW<HVn{Kdm_#Ef;S~oJV~SOZVa1SQKrxAaQ^G3_D#jG66vK)k#eiZGjkAPT z98`=cRw;%RLy7^#BpP)IuQ;d}Q>;=9D~1#Uib-?^5?*moF{W6h7*-4^1{9MBEa4Rg z6=RB3iebf&Vn8v8&Ih-P5{iS0F~usyuwqCNAmOI(#JYFhf<Wk79QQ5=90R*xKImOf zpq(IHr7qtCl8!0egnQBnr7zI%RdD0=8rmuP+j9nZ<|k>|f!Fi+7kNrM@FSg6x&d}3 zP5blulIjyiJiK<H9i@Mj(!W5tT#B#-^>D=XS=EQ-hu1gI?vvl{%k_2D$L_<mAMFzT z?YRe6AdJu)fZ*aUX}j-MfsKEi@jp%FvA^flsruS|pw2|U!SEck@j6NMv*%P?iF!%@ zBnLRSYM?i1yU*C~RbCQ<A6}nO`y??a;&r+D+jA+N()8MMD0V7s_r?F6rq`ZB@k82= zQHLlk5O@mr68}kt=KHCn?YR<P)A05jh&R<99DMRB(Dd4K9?n3!$MA#de+$}Sk*D<E zDIH#E!v9+3*>f5mQhmZ|zkjy+DSZXnWy-VXDttxLQ+1k=w_o$eo}2IsrR_Nhm?N0* zryKqrm1oaEcpU8(<=b-)9<}*-rs01LK!1C#!5f;t_8fzyYCn5!!B>>uo<k5)e|zr0 zt(w2~oPn=n+(Y^HT!Aw*zwJ2!t2Mo$ON~DJmEWEdFk;I`h4JS%R+MMY0k}uwv-|!( ztL4$|^Z#qqE%Mua{kLlV*nRp}+xqr7Bfk>k1oGQ`_%A@eP1^3e|1-_+#8rmBSo6c~ ztADAMFT0QaGaCP(){i~5{#<FobN)v8;c7!KQo5?j(9dgr7AWm#d9?e?r&L~fli~ld z#&7qLe_hiP`;zg$0sS!JODKI<?Pd4fzd-f1`|RJQ_Kww>@Gok9+kNssr~Ki1<9}4; z*?soURDZkgJjZj4-|jPCt@_w~<yR|h_mRIr<Fot5AJXy>{yP)jQq|Ay3qMcOJE;E0 zsekw%4gVG`FLs~z8C%{C8UG)uf9OYsPAEO7^dFSA`$)g2;qAWBA6EO@eWG8o@_u6E z9jEpP{nXG&O|RYexkl@!-RJpPTOO5vp~?%hBf_;&!`pquuh8&G_2)OXv^QVY<;A^! zNQabux9Vf}WggM;ZuepSjfS5{O7Ot6mdE4^hW@aYSG%wBHCjIHKFZ%$e!Fk-1FEmx zC;9!#Z}&x>QGdG+@+#UBWqi7giI8VaqQBh-c{B4D{%@%NsY>U!8~%S$`dFnuWb@;< zM*lq9-zfbNO~2g-`LC3=`yO-si1xGl9N(+<v-=u9taS2aBfrb$-+vo=o|YH8kMTEc zc~bv2wYS}e_{%o@>n6ObwB2X;6WX5HeTBDMd0#X9muvpma|ycC-r;W<|F7EiSn0d8 z{_>?&UgcU|?7r~>N+;F7M(HB0Ki4a5_kq9L=CAtiVSfZ04PRsO=V{f?o@?;DP5-w| z{2#RWqx3G#54#Wl54614efOW$@OGbkEXPZJB{lqK)c$s#|7Fw{<)>WB54=tJdeFrG zDQ$o3xdwM@eD)lJ=d^!~J#6?FY5B0{6bz_5doICAs-HcF-~yZ8ADHkPC=dD!sy-`K zzTFr4pEdn<AL!@QzINZ|9*v)i(Y)?b`3a@NFgwd{QfclnC+)*g!~d|BFS}3k$27hH zyf4b@LCr6_5A#J@{*qV(<@JQxi!TB3YS!>ErI)Gw>^{a9X!~IIE#9g1$L>?SQOmR4 zm$**LLktg-c)dr<uibaJK<#Ds8NR^Qw~rbAU#Pw8KEkWu%=FuRgWGNVT#&<6tLe4- zLa$MM2l1XRuR^t#-S;_48a54Sd(&&nqsISxTOX8uRqYed@j<@QA*DAfzuh;uPwi*- z3I1;_zoAZ}uJyHD=lt3B+#xPPbiv-{w3KTW3J?t8me^Uv;cTdMZ8``SLD{B|GP zpDAtkt=*#W*?npk==jL)OM4f~8~($pZ==!$*Bkx2m9Fa2^w{y-Um1Ft+P7f4p=(q> zyDu%D4=_D;A6o9kBKccm_`ht+XRV=2RleO<_9p7j_DSbsGfK}W-NgKd|5|OoCYV0Z zRZ5>p`Jfw=zEk<Tl)hi-n9|>6{(*nD(rqZOLD0jh-|b2V>Wsdv(1-rzN?#6V<0Hk9 z&+0SizeN4?`wwN&UC2MbKc83l=|frkr)Tk3gW1o2YF7L&qyG5)xp$AB{yOaMr?1Zn zzdy^r8}|0|muJy+S#%Q2e*P5f=chja`}*ngQQ!PD_YU;accOju)4vDdr~f7^{$HX# z`~6Qs{`={TS@!(5EdC#7(eW&LG%J73&Pq>Vmj5YP{-s&@GnSS9FJy(kKg<96Ec<*o zD}7KmBfZ~1{r0DSaTfpmS^B&;%m0e3^am<&GJR!xM_Wzn_CV#fx^04V!=do)b(K6~ zzVhm;Te<?38!oTBq_d+5$HG@$Sl3Z`!FoDoapF|_wnjL&)op9JuCB7Z^Xhi6wzk#P z(-jg*8?W1-x0khaHrEPKQ@^INwq-+8U53Ex+8di|ty4_{)#<3LX{@d6XsN{E^l2}g zc3)Z7T+>pEgX=5FSefnH+1v>4x>=srsKolVmTi^SG;MEf@CT)DbM>~mwA-3W9(BL1 zx_xUUl)1R>dK$pz*w`*^NaqD*P|6ZzolQu$F;>lNZJX=5I((iP%BKCc)xoqi?UmKF zpYLo}{)Xz>>#Cb;>M|VL8*ivX23*@&M>goPxudPFdK)vXVsk@FTZZFhb=9@jl}Tyu zsIJ*sS%a*RDArU~x3w8JB=~}~Gi<ZD^J<n3qxsdHjZL+6Z4BRr3~zy%GCitmYtzna zjImp*I~v5I<(A*tvK2OOuWRdwsvHDBgmu+57qo0^ZE3Ev+SRw!)y;CQHyMVq+r})c zYpUC(0jy7TO-)^UyWhvAytSouqZMw_-P+mSpiVY;V{@aXuDz+H1F;#>DDNY$ZbBY- zbbV!QTjO=Gk>%Gq=69&AV>$J^Si{;tehc}dl|q?j^0F=MWRjDnrMycPShxDh%+i^5 zmojC^HI*&e4p<irXiIL|xxN~OGfmcYwIWlc8lpIv0%F{>rO;|_d>Y$Zs%u-WHq}=6 z(LQ<Mq>iJUSJzgy)Yq%CzhKp%sC0JJUE=e!dbibiVp`i;sMB^<XcMjHg2H25>TBWK zR9Dl%QfQn|IIn9&+DxNS+gM`*ORL$6jIQpet4zCZtKM3Nb}-wy2`S9sEao;*1}ZPu zu%WUPWxjGlY2{{7!?<l?Sf5))ON7)&ZEZK|)-=?iT1&Nr3)+MW+1OD63fl$rlqx9P z=@Mp|8rDJe@JbcLU);GZVrmvVTU)M&ppLrc%BIF`jfUOU7D=PYA`#=&gPNx5c6G7l z+}7FD(O8MH+)>x2UM8Pekwtyay}q%oskXAAy1BN=b0b$<iv~0u7&{DcN;ib%mcxrx zo7U^9+ZwAo8e5tn!Ap@yWB;_d1Er7V1fkVbqhQ~J#<}?#^@bYjQT4B=X8kuI;IyH7 zTVvC9dSts@($P@Ymg$k{gqETmNp08S#!g9Opy$?dsD-xCy3-QcIb?DwCH*>c=5+Sp z4X8!PKQSp7(xzhfuz`lwU|u(D>K41>EFZSWK4&S(ROXtdmaD6q+AHfjn`;oHzN4~z zdo$843}_WQ8f&VXFaVKG&a)YfQfA$t)@7z!tMt2>I+1o_g0${eUfo!&`q_50rl|$P zni_OmEuC$qa#$~RQ9ch_575~o0cGg)%R6j{rn+YEN~O9E?Lte2yU43dyG!SFaZB5_ z>Lzr}wO4on(CO55MB3U+aNB*fmsdBcJX5};QnWVJX}vJU@v0(ple$}%5e9X(?i%Cd z>%+mjzO%mGy0c;4)B?L-R(B0beYV$yl4aR`^|VIiwr!QDE!joo0@Q>o^=g{xtefe8 zJcs(qtBo1c98xM_lg?JJ1Z=8qzNWMKnz{?yTIkAhqeZ@{vAv_RsikGBx}$U8K(^Kf z*6zDSWpU(I+1P%07ENP|8^^%gzzb}a8xDr)kgg4zw>J8OaUh3(qp6V&dw#aAt%Xif zWoao%Q)6?zx?1f~q0^4!ldd=IWcl90i%pvikkRpVwp~|uxx}}o(iU!x$E{ns=l8o> zPLA+rbNXE^XHDnT!ih{#<74*Ftf^;5*jCxrDRhQ<rtQF(3hg%P0!p3<f{bUOLhIVz zc#XO-`F=O#4hoI2Is872-U01ySqn#ao!fj-S2i1Rjj5)Ww^cW{V?YQN<fom-_*`x8 zi6XMTrK6)oWg%Ftx%Vf5W5V*by6e~hdb(5~_uI?s+9Gg*njI}o#><q$ww5NPSyb#4 zqJ)l>95r*)-LSQ?zPeG^?EDMkn+!3q5!&PoCz!!FRqFhWf+*FDmJH=9#C7-<z?-(9 z0@Vm<BivTqCE9q&D$8(SyVBNr`5M;r&C=(c4i#%RU;?$7iO?k1b;tnY(~Y$q4JwHP z4jFAq3w%jyU2{2x|Hjj6%xGADjYGm}D>k(>Uqe1SpkSGRfsyaCTu~#^K5I}rvb8lK zC}C?|TeFHl88KzDw7P9;opr6R)Zwa~Tc*RpLd~_+ZMELC(|F}{mezkW8riy%=30)W zHZ)a>;=Xp7oghW{oa!5!rMocB=^8tiJ1tj+I&S!{?yQ%g@%rr@aLF$5O&FURK06?m zJkg*Wpj6gWw{~>4DHqIj#b$JJLSp!4M?Y<K=%Ccm4AW{cPNf(OOgJ<0k!G^!bCGs2 z&0t3sX&0R>r5&U<MDyUqVcVg!OXmC~?QXNs7gz=!X^!jKnLwYvh_W-9G@s09EGc;_ zC0$z-f7y+6HFj)h!%!{Lv7@cJCWkvq>MZWdFx;<huT%HT8o)uIF*Qpwx|6hn?K?6Y z$tA_e�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μLT53qhr0T<YaiK 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 OCjWUr6Jm<~Su4 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�({As^7J)SLpl0Z& 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%0De2bzX|X=V%CYR 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 G`1wEc+$A9Z From 9be6b7d73ea37e20a298ca709dbc297a953d13f4 Mon Sep 17 00:00:00 2001 From: longtran2904 <53656110+longtran2904@users.noreply.github.com> Date: Mon, 25 Aug 2025 19:04:42 +0700 Subject: [PATCH 2/2] Add x86 support to `build_freetype.bat` The build script now detects the platform (`x64` vs `x86`) of `cl` and builds into the appropriate folder. This only works when `cl` is set up via `setup_cl_xxx.bat`. If `cl` is added directly to `PATH`, the detection will likely fail because it relies on the `%Platform%` variable. --- .../foreign/freetype2/build_freetype.bat | 13 ++++++++----- non-source/foreign/x64/freetype.lib | Bin 2259796 -> 2259796 bytes non-source/foreign/x64/freetype.pdb | Bin 290816 -> 290816 bytes non-source/foreign/x86/freetype.lib | Bin 831294 -> 2038788 bytes non-source/foreign/x86/freetype.pdb | Bin 0 -> 299008 bytes 5 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 non-source/foreign/x86/freetype.pdb diff --git a/non-source/foreign/freetype2/build_freetype.bat b/non-source/foreign/freetype2/build_freetype.bat index 44e0bb297..77c9b2fbd 100644 --- a/non-source/foreign/freetype2/build_freetype.bat +++ b/non-source/foreign/freetype2/build_freetype.bat @@ -8,8 +8,6 @@ SET FILES=%FILES% %ROOT%\src\base\ftsystem.c SET FILES=%FILES% %ROOT%\src\base\ftinit.c SET FILES=%FILES% %ROOT%\src\base\ftdebug.c SET FILES=%FILES% %ROOT%\src\base\ftbase.c -REM SET FILES=%FILES% %ROOT%\src\base\ftbbox.c -REM SET FILES=%FILES% %ROOT%\src\base\ftglyph.c SET FILES=%FILES% %ROOT%\src\base\ftbitmap.c SET FILES=%FILES% %ROOT%\src\sfnt\sfnt.c SET FILES=%FILES% %ROOT%\src\truetype\truetype.c @@ -20,11 +18,16 @@ SET FILES=%FILES% %ROOT%\src\psnames\psnames.c SET FILES=%FILES% %ROOT%\src\pshinter\pshinter.c SET BUILD_DIR=%ROOT%\..\x64 -if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%" +IF "%Platform%" == "X86" ( + SET BUILD_DIR=%ROOT%\..\x86 +) ELSE IF "%Platform%" == "x86" ( + SET BUILD_DIR=%ROOT%\..\x86 +) +IF NOT EXIST "%BUILD_DIR%" MKDIR "%BUILD_DIR%" cd %BUILD_DIR% -del *.pdb +del *.pdb > NUL 2> NUL cl /c /nologo /Zi /O2 /Fd:freetype.pdb /DFT2_BUILD_LIBRARY /I%ROOT% %FILES% lib /nologo /OUT:freetype.lib *.obj -del *.obj +del *.obj > NUL 2> NUL popd diff --git a/non-source/foreign/x64/freetype.lib b/non-source/foreign/x64/freetype.lib index 114240939b0372feaa0a327a8a2e689621f7c081..e2e72d993e151cf99cb0bef723248a3b68da37ef 100644 GIT binary patch delta 1084 zcmccet&{Nz5KoX{Gc+<VH?UZ!WC>+$*08KFg|N-1CwMc7P2Q6yz})P%rulr{_Vam+ zR^0*<MPk?1R890)`7>KR$ewTc^hO<ChwYKS7(3WGjz5TNPiRtIG<~5JZ^`ypCZ@k0 zNQS9_4BFo5&BXZ#hbfPAnGIObOzAUX-lBnIirDnHXlAgR+6$wZftUq|S%H{sdto&D z=Sw(@-lE5`LITa`8}1yFzCw&PonBzesm9#swx)fiE$8-`wp@#HaG2D+iYtH-&7|-( zT)uoTlR)7%{lG3R0WP3%8F%ZM7$jMzPw-}vYX7o}3y8V5f7!)TTZm!&c3?<K@WD;q z4h%%*78IW!*vBit1q{RtA89rQ6K<%X`*_>G?BfGsejpYAV!`cS_6h0y#jpSpRRw#5 zXUM{B0Y_DP%PryUEw@Ctq#)K=fa8ApsxKk}%q_q;+xtbNN(;Mj)7#}mGf++2o~<Bi z&5Uf4l#zjfiJ1ZjBygp)NihHo%_wwXU`Sv9`(gVxWl=+C92S(Pi|#<PV0DIQD<`rA z(|w9WAx@1i5*60QVbY<wqBGD;x;9VLhXo~!?G^(~0wvVI#iA}7u$#2~X|UJ=CN!fM z!^Og-Q5;oLBqqQG@~Yz|Hiqp2Ag_u|4>%>q(!Qcd42Z>nSOSP8fmjNNrMIsrl5uRq zYNy3^!=Ew@+9-Agv~#M;Zs$~$`@ICk3ks*?AjxF26f?sUaM}}V2ign7@<6PxJ>Zn$ be=Z!>OuwpV!H;Uqbf7gV+r6JEa!vyPF&UIw delta 1084 zcmccet&{Nz5KoX{GcYnVFg0ALWC>+$*08KFg|H2#CwMc7P2Q6yz-)DJRrC40?dS6t zt-1wx6MRzio=UhjUki7%m@4Qpy-|nPVSD5+#twE4mM2eg?1S6SPG4xnTe3ZtiRrHg zl3{8fgSK~iGjTq`Vag+2W&;*9Q~HdUw`d@lA~roPni=e-_QGgpAZ7t#Rv>2EUKq{( z`4SGJx9D-KkU%r~hC9ckuVAB1ET$LOa;h;~99-2t)0T7lOk1u+IXFz}Ud0u_h-Omw z8ZKWxm`R{;n|@#ymjD;gxQx5?Obn8&(<gW{Nwt63#RbIN+rRAMsV&4XemgKECHUYb zZwCe<a|?>k5A5R=-~t9>hL1EGg9$g((0#n^U-t0<F+UIs0I}fqFZ+aa{$f}FiK>D< z!ZT#ywt%Cmz2%nh_Lf^BTv8D048d_febpBc0cLApobCN0Ql*96xasZkq8X^BZO>K^ zwPr>(Ny^B;z{E@e1QNJX+N2nOhGrDHFfb%Afc>!jo3f~(GY$*N(?xfnS+F`ow3QPj zWPFN5!D(W9e37WIHV%^x%@v)2X418JqCPArCfO~9niRNL)MW#9leRw%7F)oCW)x$% zShzHbQ6)uUkmz#U#Ky2)0OVD%=>ezYSlU+<i2<=V5K92DBoIphvGn#8MKX?USnagf zZunECK^w)+fObw*+3lRFa=(|L*sE|#4r1?SDQ1Qz;It>!4zw4D<$+jXd%!8h|6Dk% XnSNE#f*;kI=|F2#wtGKS<eUZoDgcD{ diff --git a/non-source/foreign/x64/freetype.pdb b/non-source/foreign/x64/freetype.pdb index 49f9577c59f3b89e9a47276d44b88c671e10f8fd..7d6e09217d96ee198e7014f56f83fae20e96ebf3 100644 GIT binary patch delta 79 zcmZp8AlLvzEsR^3SSCm`xUI?HWnf^KC=$E2rfQ<c%AeWlLH2yh+hry&ZI_wA{9-*$ MCEH~jSf1zu0GRU~d;kCd delta 79 zcmZp8AlLvzEsR^3SSCoAA6%8e%fP_Eo8Xh8_f*2Q`C7Q6#Z*C;c9{uG+hry&zgUk` L$#xkBmM8iEPD>js diff --git a/non-source/foreign/x86/freetype.lib b/non-source/foreign/x86/freetype.lib index 43f135cce3b32598329e738cfbf895cb89a470a4..63bd4fac16c1770a7339cbf20688eea6b497db69 100644 GIT binary patch literal 2038788 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�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∈szQE$mS?1sVxjmhR?SH8< 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�i8LSVwKacwG+tf<uH|-)Rq}Vof!-Bhl6P>N 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π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 WB*otV0wU&g7cwY&!(@{j{PiDqa7feu literal 831294 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%0D=eCA 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 ~rL-bY{e=tOkgUpa1 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 diff --git a/non-source/foreign/x86/freetype.pdb b/non-source/foreign/x86/freetype.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4c9323f348493f82434bd3339a1b7e05055e63dc GIT binary patch literal 299008 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%0DQzI!L81Nigi=3sldjsEx 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 LU?lK2m%#r3jalav literal 0 HcmV?d00001